/home/lnzliplg/www/plugins.zip
PKlc�\��	��&help/skins/elastic/templates/help.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />

<div id="layout-sidebar" class="listbox" role="navigation" aria-labelledby="aria-label-helpnav">
	<div class="header">
		<a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a>
		<span id="aria-label-helpnav" class="header-title"><roundcube:label name="help.help" /></span>
	</div>
	<div class="scroller">
		<ul class="listing iconized" data-menu="toolbar-small">
			<roundcube:object name="tablink" action="index" type="link-menuitem" label="help.help" class="help active" />
			<roundcube:object name="tablink" action="about" type="link-menuitem" label="help.about" class="about active" />
			<roundcube:object name="tablink" action="license" type="link-menuitem" label="help.license" class="license active" />
			<roundcube:container name="helptabs" id="helptabsbar" />
		</ul>
	</div>
</div>

<h1 class="voice"><roundcube:label name="help.help" /></h1>

<div id="layout-content" class="selected" role="main">
	<div class="header">
		<a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a>
		<span class="header-title"><roundcube:label name="help.help" /></span>
	</div>
	<div class="iframe-wrapper">
		<roundcube:object name="contentframe" id="helpcontentframe" src="env:blankpage" title="help.arialabelhelpcontent" />
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKmc�\p/@)help/skins/elastic/templates/content.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:object name="steptitle" /></h1>

<div id="help-<roundcube:var name="env:action" />" class="frame-content">
	<roundcube:object name="helpcontent" />
</div>

<roundcube:include file="includes/footer.html" />
PKmc�\�Tц77help/composer.jsonnu�[���{
    "name": "roundcube/help",
    "type": "roundcube-plugin",
    "description": "Plugin adds a new item (Help) in taskbar.",
    "license": "GPL-3.0-or-later",
    "version": "1.4",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKnc�\+�Q��help/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = '帮助';
$labels['about'] = '关于';
$labels['license'] = '许可协议';
$labels['csrfinfo'] = '了解 CSRF 如何保护您';
PKnc�\'����help/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Дапамога';
$labels['about'] = 'Апісанне';
$labels['license'] = 'Ліцэнзія';
PKnc�\�~��$$help/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Помощ';
$labels['about'] = 'Относно';
$labels['license'] = 'Лиценз';
$labels['csrfinfo'] = 'Прочети повече за CSRF и как си защитен';
$labels['arialabelhelpcontent'] = 'Помощно съдържание';
PKnc�\JF�e��help/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels = [];
$labels['help'] = 'Help';
$labels['about'] = 'About';
$labels['license'] = 'License';
$labels['csrfinfo'] = 'Read more about CSRF and how we protect you';
$labels['arialabelhelpcontent'] = 'Help content';
PKnc�\Θ���help/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ohje';
$labels['about'] = 'Tietoja';
$labels['license'] = 'Lisenssi';
$labels['csrfinfo'] = 'Lue lisää CSRF:stä ja kuinka suojaamme sinua';
$labels['arialabelhelpcontent'] = 'Ohjeen sisältö';
PKnc�\`�8��help/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hjelp';
$labels['about'] = 'Om';
$labels['license'] = 'Lisensvilkår';
$labels['csrfinfo'] = 'Les mer om CSRF og hvordan vi beskytter deg';
$labels['arialabelhelpcontent'] = 'Hjelp innhold';
PKnc�\�m����help/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ndihmë';
$labels['about'] = 'Rreth';
$labels['license'] = 'Licencë';
$labels['csrfinfo'] = 'Lexoni më tepër rreth CSRF-së dhe se si ju mbrojmë';
$labels['arialabelhelpcontent'] = 'Lëndë ndihme';
PKnc�\�����help/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Abi';
$labels['about'] = 'Roundcube info';
$labels['license'] = 'Litsents';
$labels['csrfinfo'] = 'Loe lisa CSRF kohta ja kuidas me sind kaitseme';
$labels['arialabelhelpcontent'] = 'Abiinfo sisu';
PKnc�\�Ӑ�11help/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'یارمەتی';
$labels['about'] = 'دەربارە';
$labels['license'] = 'مۆڵەت';
$labels['csrfinfo'] = 'لێرە زیاتر بخوێنەرەوە و بزانە چۆن دەتپارێزین';
$labels['arialabelhelpcontent'] = 'ناوەڕۆکی یارمەتی';
PKnc�\
����help/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Laguntza';
$labels['about'] = 'Honi buruz';
$labels['license'] = 'Lizentzia';
$labels['csrfinfo'] = 'Irakurri gehiago CSRF-ez eta nola babesten zaitugun';
$labels['arialabelhelpcontent'] = 'Laguntzaren edukia';
PKnc�\����help/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Yardım';
$labels['about'] = 'Hakkında';
$labels['license'] = 'Lisans';
$labels['csrfinfo'] = 'Korunmanız ve CSRF hakkında ayrıntılı bilgi.';
$labels['arialabelhelpcontent'] = 'Yardım içeriği';
PKnc�\��*$��help/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ayuda';
$labels['about'] = 'Acerca de';
$labels['license'] = 'Licencia';
$labels['csrfinfo'] = 'Lea más sobre CSRF y cómo le protegemos';
$labels['arialabelhelpcontent'] = 'Contenido de la ayuda';
PKoc�\���pphelp/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Alîkarî';
$labels['about'] = 'Dervar';
$labels['license'] = 'Lîsans';
PKoc�\"�S��help/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ajuda';
$labels['about'] = 'Sobre';
$labels['license'] = 'Licença';
$labels['csrfinfo'] = 'Leia mais sobre CSRF e como nós protegemos você';
$labels['arialabelhelpcontent'] = 'Conteúdo da ajuda';
PKoc�\ܲ�''help/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Palīdzība';
$labels['about'] = 'Par';
$labels['license'] = 'Licence';
$labels['csrfinfo'] = 'Lasīt papildus par "vairāku vietņu pieprasījuma viltošanu" (CSRF) un kā no tā sevi aizsargāt.';
$labels['arialabelhelpcontent'] = 'Palīdzības saturs';
PKoc�\�^h  help/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Pomocník';
$labels['about'] = 'O aplikácii';
$labels['license'] = 'Licencia';
$labels['csrfinfo'] = 'Prečítajte si viac o útokoch typu CSRF a o tom, ako vás môžeme pred nimi ochrániť';
$labels['arialabelhelpcontent'] = 'Obsah pomocníka';
PKoc�\u)��help/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Nápověda';
$labels['about'] = 'O aplikaci';
$labels['license'] = 'Licence';
$labels['csrfinfo'] = 'Přečtěte si více o útoku typu CSRF a jak vás chráníme';
$labels['arialabelhelpcontent'] = 'Obsah nápovědy';
PKoc�\r�{{help/localization/ti.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'መምሃሪ';
$labels['about'] = 'ብዛዕባ';
$labels['license'] = 'ፍቓድ';
PKoc�\X�ql��help/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Help';
$labels['about'] = 'Over';
$labels['license'] = 'Licentie';
$labels['csrfinfo'] = 'Lees meer over CSRF en hoe we u beschermen';
$labels['arialabelhelpcontent'] = 'Help inhoud';
PKoc�\e�k��help/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Допомога';
$labels['about'] = 'Про програму';
$labels['license'] = 'Ліцензія';
$labels['csrfinfo'] = 'Дізнатися більше про CSRF і як ми Вас захищаємо';
PKoc�\r�g��help/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Help';
$labels['about'] = 'Oer';
$labels['license'] = 'Lisinsje';
$labels['csrfinfo'] = 'Lês mear oer CSRF en hoe\'t wy jo beskermje';
PKoc�\��'��help/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hilfe';
$labels['about'] = 'Über';
$labels['license'] = 'Lizenz';
$labels['csrfinfo'] = 'Erfahren Sie mehr über CSRF und wie wir Sie davor schützen';
$labels['arialabelhelpcontent'] = 'Hilfeinhalt';
PKoc�\+�@�llhelp/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ayuda';
$labels['about'] = 'Sobre';
$labels['license'] = 'Licencia';
PKoc�\��)��help/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Yordam';
$labels['about'] = 'Biz haqimizda';
$labels['license'] = 'Litsenziya';
$labels['csrfinfo'] = 'CSRF haqida  va qanday himoya qilishimiz haqida ko‘proq o‘qing';
PKoc�\:��9��help/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Օգնություն';
$labels['about'] = 'Նկարագիր';
$labels['license'] = 'Արտոնագիր';
PKoc�\����jjhelp/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Help';
$labels['about'] = 'About';
$labels['license'] = 'License';
PKoc�\�ay!!help/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = '說明';
$labels['about'] = '關於';
$labels['license'] = '授權';
$labels['csrfinfo'] = '閱讀更多有關「跨站偽造要求(CSRF)」的資訊,並了解我們的軟體如何防止您受騙';
$labels['arialabelhelpcontent'] = '說明內容';
PKoc�\
�_���help/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ajuda';
$labels['about'] = 'Quant a';
$labels['license'] = 'Llicència';
$labels['csrfinfo'] = 'Llegeix més sobre CSRF i com et protegim';
$labels['arialabelhelpcontent'] = 'Contingut d’ajuda';
PKoc�\��j��help/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Adjuta';
$labels['about'] = 'A proposito';
$labels['license'] = 'Licentia';
$labels['csrfinfo'] = 'Lege plus sur CSRF e como nos te protege';
PKoc�\���
��help/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Pomoć';
$labels['about'] = 'O programu';
$labels['license'] = 'Licenca';
$labels['csrfinfo'] = 'Saznajte više o CSRF i načinu na koji vas štitimo';
PKoc�\R$BBhelp/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Помощь';
$labels['about'] = 'О программе';
$labels['license'] = 'Лицензия';
$labels['csrfinfo'] = 'Узнайте больше о CSRF и о том как мы защищаем вас';
$labels['arialabelhelpcontent'] = 'Содержание справки';
PKoc�\w;τ�help/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'راهنما';
$labels['about'] = 'درباره';
$labels['license'] = 'گواهینامه';
PKoc�\-h��help/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hjálp';
$labels['about'] = 'Um hugbúnaðinn';
$labels['license'] = 'Notkunarleyfi';
$labels['csrfinfo'] = 'Lestumeira um CSRF og hvernig við verjum þig';
$labels['arialabelhelpcontent'] = 'Efni hjálpar';
PKoc�\�����help/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Trợ giúp';
$labels['about'] = 'Giới thiệu';
$labels['license'] = 'Bản quyền';
PKoc�\��uOOhelp/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'ช่วยเหลือ';
$labels['about'] = 'เกี่ยวกับ';
$labels['license'] = 'ลิขสิทธิ์';
$labels['csrfinfo'] = 'อ่านเพิ่มเติมเกี่ยวกับ CSRF และวิธีที่เราปกป้องคุณ';
PKoc�\� �help/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'المساعدة';
$labels['about'] = 'حول';
$labels['license'] = 'الرخصة';
$labels['csrfinfo'] = 'اقرأ المزيد عن CSRF وكيف نقوم بحمايتك';
$labels['arialabelhelpcontent'] = 'محتوى المساعدة';
PKoc�\�!��sshelp/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Kömək';
$labels['about'] = 'Haqqında';
$labels['license'] = 'Lisenziya';
PKoc�\!dH���help/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Bantuan';
$labels['about'] = 'Tentang';
$labels['license'] = 'Lisensi';
$labels['csrfinfo'] = 'Baca lebih jauh tentang CSRF dan bagaimana kami melindungi Anda';
PKoc�\ܰi3SShelp/localization/tzl.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Aßistançéu';
$labels['about'] = 'Över';
PKoc�\�]��help/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Súgó';
$labels['about'] = 'Névjegy';
$labels['license'] = 'Licensz';
$labels['csrfinfo'] = 'Olvass többet a CSRF-ről és arról hogy védünk meg ettöl';
$labels['arialabelhelpcontent'] = 'Súgó tartalom';
PKoc�\}K ���help/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ajutor';
$labels['about'] = 'Despre';
$labels['license'] = 'Licența';
$labels['csrfinfo'] = 'Citiți mai multe despre CSRF și cum vă protejăm';
PKoc�\p}�Kkkhelp/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Helpo';
$labels['about'] = 'Pri';
$labels['license'] = 'Permesilo';
PKoc�\>�yhelp/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Help';
$labels['about'] = 'About';
$labels['license'] = 'License';
$labels['csrfinfo'] = 'Apprenez-en davantage sur les attaques CSRF et comment nous vous protégeons';
$labels['arialabelhelpcontent'] = 'Contenu d’aide';
PKoc�\�}�qqhelp/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Pomoć';
$labels['about'] = 'O programu';
$labels['license'] = 'Licenca';
PKoc�\��F�help/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Pomoc';
$labels['about'] = 'O programie';
$labels['license'] = 'Licencja';
$labels['csrfinfo'] = 'Przeczytaj więcej o CSRF i w jaki sposób zabezpieczamy ciebie.';
$labels['arialabelhelpcontent'] = 'Treść pomocy';
PKoc�\�dxGGhelp/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['about'] = 'च्या विषयी';
PKoc�\u��help/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'ヘルプ';
$labels['about'] = 'このプログラムについて';
$labels['license'] = 'ライセンス';
$labels['csrfinfo'] = 'CSRFと安全を保つ方法についてさらに読む';
$labels['arialabelhelpcontent'] = 'ヘルプの内容';
PKoc�\F��gghelp/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hjelp';
$labels['about'] = 'Om';
$labels['license'] = 'Lisens';
PKoc�\M�qqhelp/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ayuda';
$labels['about'] = 'Tocante a';
$labels['license'] = 'Llicencia';
PKoc�\]u���help/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Помоћ';
$labels['about'] = 'О програму';
$labels['license'] = 'Лиценца';
$labels['csrfinfo'] = 'Прочитајте о ЦСРФ-у и како вас штитимо';
PKoc�\�$mmhelp/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hëllef';
$labels['about'] = 'Iwwert';
$labels['license'] = 'Lizenz';
PKoc�\�M����help/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'راهنما';
$labels['about'] = 'درباره نرم افزار';
$labels['license'] = 'حق نشر';
PKoc�\]Bj���help/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Skoazell';
$labels['about'] = 'Diwar-benn';
$labels['license'] = 'Lañvaz';
$labels['csrfinfo'] = 'Gouzout hiroc\'h a-zivout an CSRF ha penaos e warezomp ac\'hanoc\'h';
PKoc�\������help/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Помош';
$labels['about'] = 'За';
$labels['license'] = 'Лиценца';
$labels['csrfinfo'] = 'Прочитај повеќе за CSRF и како ние те штитиме ';
PKoc�\9_9Gddhelp/localization/kn_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'ಸಹಾಯ';
$labels['license'] = 'ಪರವಾನಗಿ';
PKoc�\Νo{��help/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'ជំនួយ';
$labels['about'] = 'អំពី';
$labels['license'] = 'អាជ្ញាប័ណ្ណ';
PKoc�\��help/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Тусламж';
$labels['about'] = 'Танилцуулга';
$labels['license'] = 'Лиценз';
$labels['csrfinfo'] = 'Бид таныг яаж хамгаалж байгаа буюу CSRF-ын тухай дэлгэрэнгүй унших';
PKoc�\M�2khelp/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'עזרה';
$labels['about'] = 'אודות';
$labels['license'] = 'רשיון';
$labels['csrfinfo'] = 'נא לקרוא כעת אודות CSRF וכיצד אנו מגינים עליך.';
$labels['arialabelhelpcontent'] = 'תוכן עזרה';
PKoc�\�p{��help/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Cabhair';
$labels['about'] = 'Maidir leis';
$labels['license'] = 'Ceadúnas';
$labels['csrfinfo'] = 'Léigh tuilleadh faoi CSRF agus conas mar a chosnaítear thú';
PKoc�\����help/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hjælp';
$labels['about'] = 'Om';
$labels['license'] = 'Licens';
$labels['csrfinfo'] = 'Læs mere om CSRF og om hvordan vi beskytter dig';
$labels['arialabelhelpcontent'] = 'Hjælp indhold';
PKoc�\f���help/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Pomoč';
$labels['about'] = 'Vizitka';
$labels['license'] = 'Licenca';
$labels['csrfinfo'] = 'Preberite več o CSRF in kako ste zaščiteni';
PKpc�\��S��help/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'المساعدة';
$labels['about'] = 'نبذة عن البرنامج';
$labels['license'] = 'الترخيص';
$labels['csrfinfo'] = 'إطّلع على المزيد حول CSRF و كيف  نقوم بحمايتكم';
PKpc�\�unnhelp/localization/si_LK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['about'] = 'පිළිබඳ';
$labels['license'] = 'බලපත්‍රය';
PKpc�\"]z���help/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hilfe';
$labels['about'] = 'Über';
$labels['license'] = 'Lizenz';
$labels['csrfinfo'] = 'Erfahren Sie mehr über CSRF und wie wir Sie schützen';
$labels['arialabelhelpcontent'] = 'Hilfe-Inhalt';
PKpc�\�i9
��help/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hjälp';
$labels['about'] = 'Om';
$labels['license'] = 'Licens';
$labels['csrfinfo'] = 'Läs mer om CSRF och skyddet mot detta';
$labels['arialabelhelpcontent'] = 'Hjälpinnehåll';
PKpc�\�mmhelp/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'ياردەم';
$labels['about'] = 'ھەققىدە';
$labels['license'] = 'كىنىشكا';
$labels['csrfinfo'] = 'CSRF ھەققىدە كۆپرەك ئۇقۇڭ ھەمدە بىزنىڭ سىزنى قانداق قوغدايدىغانلىقىمىزنى بىلىڭ.';
$labels['arialabelhelpcontent'] = 'ياردەم مەزمۇنى';
PKpc�\�9b�help/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = '도움말';
$labels['about'] = '정보';
$labels['license'] = '라이선스';
$labels['csrfinfo'] = 'CSRF 및 사용자 보호에 대해 더 많은 정보 확인';
$labels['arialabelhelpcontent'] = '도움말 컨텐츠';
PKpc�\�9�oohelp/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Axuda';
$labels['about'] = 'Acerca de';
$labels['license'] = 'Licenza';
PKpc�\��8���help/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Aiuto';
$labels['about'] = 'Informazioni';
$labels['license'] = 'Licenza';
$labels['csrfinfo'] = 'Maggiori informazioni su CSRF e su come ti proteggiamo';
$labels['arialabelhelpcontent'] = 'Contenuto di aiuto';
PKpc�\��*$��help/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ayuda';
$labels['about'] = 'Acerca de';
$labels['license'] = 'Licencia';
$labels['csrfinfo'] = 'Lea más sobre CSRF y cómo le protegemos';
$labels['arialabelhelpcontent'] = 'Contenido de la ayuda';
PKpc�\�Ԋ�help/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'സഹായം';
$labels['about'] = 'വിവരം';
$labels['license'] = 'അനുമതി';
PKpc�\��k��help/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Help';
$labels['about'] = 'Over';
$labels['license'] = 'Licentie';
$labels['csrfinfo'] = 'Lees meer over CSRF en hoe we u beschermen';
PKpc�\|�7���help/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Cymorth';
$labels['about'] = 'Amdan';
$labels['license'] = 'Trwydded';
$labels['csrfinfo'] = 'Darllenwch fwy am CSRF a sut rydyn ni\'n amddiffyn chi.';
$labels['arialabelhelpcontent'] = 'Cynnwys cymorth';
PKpc�\_�p&��help/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Help';
$labels['about'] = 'About';
$labels['license'] = 'Licence';
$labels['csrfinfo'] = 'Read more about CSRF and how we protect you';
$labels['arialabelhelpcontent'] = 'Help content';
PKpc�\ɫ�^��help/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Hjálp';
$labels['about'] = 'Um';
$labels['license'] = 'Heimildarskjal';
$labels['csrfinfo'] = 'Les meira um CSRF, og um hvussu tað kann verja teg';
PKpc�\|��u��help/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Žinynas';
$labels['about'] = 'Apie';
$labels['license'] = 'Licencija';
$labels['csrfinfo'] = 'Išsamiau apie CSRF ir apie tai, kaip jie jus apsaugo.';
$labels['arialabelhelpcontent'] = 'Žinyno turinys';
PKqc�\vo���help/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Ajuda';
$labels['about'] = 'Sobre...';
$labels['license'] = 'Licença';
$labels['csrfinfo'] = 'Leia mais sobre CSRF e como nós o protegemos';
$labels['arialabelhelpcontent'] = 'Conteúdo de ajuda';
PKqc�\o��__help/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Help plugin                |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-help/
*/

$labels['help'] = 'Βοήθεια';
$labels['about'] = 'Σχετικά';
$labels['license'] = 'Άδεια χρήσης';
$labels['csrfinfo'] = 'Διαβάστε περισσότερα για το CSRF και το πως σε προστατεύουμε';
$labels['arialabelhelpcontent'] = 'Περιεχόμενο Βοήθειας';
PKqc�\ڐ//help/help.jsnu�[���/**
 * Help plugin client script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

// hook into switch-task event to open the help window
if (window.rcmail) {
    rcmail.addEventListener('beforeswitch-task', function(prop) {
        // catch clicks to help task button
        if (prop == 'help') {
            if (rcmail.task == 'help')  // we're already there
                return false;

            var url = rcmail.url('help/index', { _rel: rcmail.task + (rcmail.env.action ? '/'+rcmail.env.action : '') });
            if (rcmail.env.help_open_extwin) {
                rcmail.open_window(url, 1020, false);
            }
            else {
                rcmail.redirect(url, false);
            }

            return false;
        }
    });

    rcmail.addEventListener('init', function(prop) {
        if (rcmail.env.contentframe && rcmail.task == 'help') {
            $('#' + rcmail.env.contentframe).on('load error', function(e) {
                // Unlock UI
                rcmail.set_busy(false, null, rcmail.env.frame_lock);
                rcmail.env.frame_lock = null;

                // Select menu item
                if (e.type == 'load') {
                    $(rcmail.env.help_action_item).parents('ul').children().removeClass('selected');
                    $(rcmail.env.help_action_item).parent().addClass('selected');
                }
            });

            try {
                var win = rcmail.get_frame_window(rcmail.env.contentframe);
                if (win && win.location.href.indexOf(rcmail.env.blankpage) >= 0) {
                    show_help_content(rcmail.env.action);
                }
            }
            catch (e) { /* ignore */ }
        }
    });
}

function show_help_content(action, event)
{
    var win, target = window,
        url = rcmail.env.help_links[action];

    if (win = rcmail.get_frame_window(rcmail.env.contentframe)) {
        target = win;
        url += (url.indexOf('?') > -1 ? '&' : '?') + '_framed=1';
    }

    if (rcmail.env.extwin) {
        url += (url.indexOf('?') > -1 ? '&' : '?') + '_extwin=1';
    }

    if (/^self/.test(url)) {
        url = url.substr(4) + '&_content=1&_task=help&_action=' + action;
    }

    rcmail.env.help_action_item = event ? event.target : $('[rel="' + action + '"]');
    rcmail.show_contentframe(true);
    rcmail.location_href(url, target, true);

    return false;
}
PKqc�\Ia�U�U�help/content/license.htmlnu�[���<h2 style="text-align: center;">GNU GENERAL PUBLIC LICENSE</h2>
<p style="text-align: center;">Version 3, 29 June 2007</p>

<p>Copyright &copy; 2007 Free Software Foundation, Inc.
 &lt;<a href="http://fsf.org/">http://fsf.org/</a>&gt;</p><p>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.</p>

<h3>Preamble</h3>

<p>The GNU General Public License is a free, copyleft license for
software and other kinds of works.</p>

<p>The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.</p>

<p>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
them 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.</p>

<p>To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.</p>

<p>For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  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.</p>

<p>Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.</p>

<p>For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.</p>

<p>Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.</p>

<p>Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.</p>

<p>The precise terms and conditions for copying, distribution and
modification follow.</p>

<h3><a name="terms"></a>TERMS AND CONDITIONS</h3>

<h4><a name="section0"></a>0. Definitions.</h4>

<p>&ldquo;This License&rdquo; refers to version 3 of the GNU General Public License.</p>

<p>&ldquo;Copyright&rdquo; also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.</p>
 
<p>&ldquo;The Program&rdquo; refers to any copyrightable work licensed under this
License.  Each licensee is addressed as &ldquo;you&rdquo;.  &ldquo;Licensees&rdquo; and
&ldquo;recipients&rdquo; may be individuals or organizations.</p>

<p>To &ldquo;modify&rdquo; a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a &ldquo;modified version&rdquo; of the
earlier work or a work &ldquo;based on&rdquo; the earlier work.</p>

<p>A &ldquo;covered work&rdquo; means either the unmodified Program or a work based
on the Program.</p>

<p>To &ldquo;propagate&rdquo; a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.</p>

<p>To &ldquo;convey&rdquo; a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.</p>

<p>An interactive user interface displays &ldquo;Appropriate Legal Notices&rdquo;
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.</p>

<h4><a name="section1"></a>1. Source Code.</h4>

<p>The &ldquo;source code&rdquo; for a work means the preferred form of the work
for making modifications to it.  &ldquo;Object code&rdquo; means any non-source
form of a work.</p>

<p>A &ldquo;Standard Interface&rdquo; means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.</p>

<p>The &ldquo;System Libraries&rdquo; of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
&ldquo;Major Component&rdquo;, in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.</p>

<p>The &ldquo;Corresponding Source&rdquo; for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.</p>

<p>The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.</p>

<p>The Corresponding Source for a work in source code form is that
same work.</p>

<h4><a name="section2"></a>2. Basic Permissions.</h4>

<p>All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.</p>

<p>You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.</p>

<p>Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.</p>

<h4><a name="section3"></a>3. Protecting Users' Legal Rights From Anti-Circumvention Law.</h4>

<p>No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.</p>

<p>When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.</p>

<h4><a name="section4"></a>4. Conveying Verbatim Copies.</h4>

<p>You may convey 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;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.</p>

<p>You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.</p>

<h4><a name="section5"></a>5. Conveying Modified Source Versions.</h4>

<p>You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:</p>

<ul>
<li>a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.</li>

<li>b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    &ldquo;keep intact all notices&rdquo;.</li>

<li>c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.</li>

<li>d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.</li>

</ul>

<p>A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
&ldquo;aggregate&rdquo; if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.</p>

<h4><a name="section6"></a>6. Conveying Non-Source Forms.</h4>

<p>You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:</p>

<ul>
<li>a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.</li>

<li>b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.</li>

<li>c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.</li>

<li>d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.</li>

<li>e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.</li>
</ul>

<p>A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.</p>

<p>A &ldquo;User Product&rdquo; is either (1) a &ldquo;consumer product&rdquo;, which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, &ldquo;normally used&rdquo; refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.</p>

<p>&ldquo;Installation Information&rdquo; for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.</p>

<p>If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).</p>

<p>The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.</p>

<p>Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.</p>

<h4><a name="section7"></a>7. Additional Terms.</h4>

<p>&ldquo;Additional permissions&rdquo; are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.</p>

<p>When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.</p>

<p>Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:</p>

<ul>
<li>a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or</li>

<li>b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or</li>

<li>c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or</li>

<li>d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or</li>

<li>e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or</li>

<li>f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.</li>
</ul>

<p>All other non-permissive additional terms are considered &ldquo;further
restrictions&rdquo; within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.</p>

<p>If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.</p>

<p>Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.</p>

<h4><a name="section8"></a>8. Termination.</h4>

<p>You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).</p>

<p>However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.</p>

<p>Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.</p>

<p>Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.</p>

<h4><a name="section9"></a>9. Acceptance Not Required for Having Copies.</h4>

<p>You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.</p>

<h4><a name="section10"></a>10. Automatic Licensing of Downstream Recipients.</h4>

<p>Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.</p>

<p>An &ldquo;entity transaction&rdquo; is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.</p>

<p>You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.</p>

<h4><a name="section11"></a>11. Patents.</h4>

<p>A &ldquo;contributor&rdquo; is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's &ldquo;contributor version&rdquo;.</p>

<p>A contributor's &ldquo;essential patent claims&rdquo; are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, &ldquo;control&rdquo; includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.</p>

<p>Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.</p>

<p>In the following three paragraphs, a &ldquo;patent license&rdquo; is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To &ldquo;grant&rdquo; such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.</p>

<p>If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  &ldquo;Knowingly relying&rdquo; means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.</p>

  
<p>If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.</p>

<p>A patent license is &ldquo;discriminatory&rdquo; if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.</p>

<p>Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.</p>

<h4><a name="section12"></a>12. No Surrender of Others' Freedom.</h4>

<p>If 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 convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.</p>

<h4><a name="section13"></a>13. Use with the GNU Affero General Public License.</h4>

<p>Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.</p>

<h4><a name="section14"></a>14. Revised Versions of this License.</h4>

<p>The Free Software Foundation may publish revised and/or new versions of
the GNU 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.</p>

<p>Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License &ldquo;or any later version&rdquo; applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.</p>

<p>If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.</p>

<p>Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.</p>

<h4><a name="section15"></a>15. Disclaimer of Warranty.</h4>

<p>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 &ldquo;AS IS&rdquo; 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.</p>

<h4><a name="section16"></a>16. Limitation of Liability.</h4>

<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
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.</p>

<h4><a name="section17"></a>17. Interpretation of Sections 15 and 16.</h4>

<p>If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.</p>

<p>END OF TERMS AND CONDITIONS</p>

<h3><a name="howto"></a>How to Apply These Terms to Your New Programs</h3>

<p>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.</p>

<p>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
state the exclusion of warranty; and each file should have at least
the &ldquo;copyright&rdquo; line and a pointer to where the full notice is found.</p>

<pre>    &lt;one line to give the program's name and a brief idea of what it does.&gt;
    Copyright (C) &lt;year&gt;  &lt;name of author&gt;

    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 3 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, see &lt;http://www.gnu.org/licenses/&gt;.
</pre>

<p>Also add information on how to contact you by electronic and paper mail.</p>

<p>If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:</p>

<pre>    &lt;program&gt;  Copyright (C) &lt;year&gt;  &lt;name of author&gt;

    This program 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.
</pre>

<p>The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an &ldquo;about box&rdquo;.</p>

<p>You should also get your employer (if you work as a programmer) or school,
if any, to sign a &ldquo;copyright disclaimer&rdquo; for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
&lt;<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>&gt;.</p>

<p>The GNU 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.  But first, please read
&lt;<a href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</a>&gt;.</p>
PKqc�\bX�``help/config.inc.php.distnu�[���<?php

// Help content iframe source
// %l will be replaced by the language code resolved using the 'help_language_map' option
// If you are serving roundcube via https, then change this URL to https also.
$config['help_source'] = 'https://docs.roundcube.net/doc/help/1.1/%l/';

// Map task/action combinations to deep-links
// Use '<task>/<action>' or only '<task>' strings as keys
// The values will be appended to the 'help_source' URL
$config['help_index_map'] = [
    'login'                => 'login.html',
    'mail'                 => 'mail/index.html',
    'mail/compose'         => 'mail/compose.html',
    'addressbook'          => 'addressbook/index.html',
    'settings'             => 'settings/index.html',
    'settings/preferences' => 'settings/preferences.html',
    'settings/folders'     => 'settings/folders.html',
    'settings/identities'  => 'settings/identities.html',
];

// Map to translate Roundcube language codes into help document languages
// The '*' entry will be used as default
$config['help_language_map'] = ['*' => 'en_US'];

// Enter an absolute URL to a page displaying information about this webmail
// Alternatively, create a HTML file under <this-plugin-dir>/content/about.html
$config['help_about_url'] = null;

// Enter an absolute URL to a page displaying information about this webmail
// Alternatively, put your license text to <this-plugin-dir>/content/license.html
$config['help_license_url'] = null;

// Determine whether to open the help in a new window
$config['help_open_extwin'] = false;

// URL to additional information about CSRF protection
$config['help_csrf_info'] = null;
PKqc�\:��kk
help/help.phpnu�[���<?php

/**
 * Roundcube Help Plugin
 *
 * @author Aleksander 'A.L.E.C' Machniak
 * @author Thomas Bruederli <thomas@roundcube.net>
 * @license GNU GPLv3+
 *
 * Configuration (see config.inc.php.dist)
 */

class help extends rcube_plugin
{
    // all task excluding 'login' and 'logout'
    public $task = '?(?!login|logout).*';

    // we've got no ajax handlers
    public $noajax = true;

    function init()
    {
        $this->load_config();
        $this->add_texts('localization/', false);

        // register task
        $this->register_task('help');

        // register actions
        $this->register_action('index', [$this, 'action']);
        $this->register_action('about', [$this, 'action']);
        $this->register_action('license', [$this, 'action']);

        $this->add_hook('startup', [$this, 'startup']);
        $this->add_hook('error_page', [$this, 'error_page']);
    }

    function startup($args)
    {
        $rcmail = rcmail::get_instance();

        if (!$rcmail->output->framed) {
            // add taskbar button
            $this->add_button([
                    'command'    => 'help',
                    'class'      => 'button-help',
                    'classsel'   => 'button-help button-selected',
                    'innerclass' => 'button-inner',
                    'label'      => 'help.help',
                    'type'       => 'link',
                ], 'taskbar'
            );

            $this->include_script('help.js');
            $rcmail->output->set_env('help_open_extwin', $rcmail->config->get('help_open_extwin', false), true);
        }

        // add style for taskbar button (must be here) and Help UI
        $this->include_stylesheet($this->local_skin_path() . '/help.css');
    }

    function action()
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->action == 'about') {
            $rcmail->output->set_pagetitle($this->gettext('about'));
        }
        else if ($rcmail->action == 'license') {
            $rcmail->output->set_pagetitle($this->gettext('license'));
        }
        else {
            $rcmail->output->set_pagetitle($this->gettext('help'));
        }

        // register UI objects
        $rcmail->output->add_handlers([
                'helpcontent'  => [$this, 'help_content'],
                'tablink'      => [$this, 'tablink'],
        ]);

        $rcmail->output->set_env('help_links', $this->help_metadata());
        $rcmail->output->send(!empty($_GET['_content']) ? 'help.content' : 'help.help');
    }

    function help_content($attrib)
    {
        $rcmail = rcmail::get_instance();
//        $rcmail->output->set_env('content', $content);

        if (!empty($_GET['_content'])) {
            if ($rcmail->action == 'about') {
                return file_get_contents($this->home . '/content/about.html');
            }
            else if ($rcmail->action == 'license') {
                return file_get_contents($this->home . '/content/license.html');
            }
        }
    }

    function tablink($attrib)
    {
        $rcmail = rcmail::get_instance();

        $attrib['name'] = 'helplink' . $attrib['action'];
        $attrib['href'] = $rcmail->url(['_action' => $attrib['action'], '_extwin' => !empty($_REQUEST['_extwin']) ? 1 : null]);
        $attrib['rel']  = $attrib['action'];

        // title might be already translated here, so revert to it's initial value
        // so button() will translate it correctly
        $attrib['title'] = $attrib['label'];

        $attrib['onclick'] = sprintf("return show_help_content('%s', event)", $attrib['action']);

        return $rcmail->output->button($attrib);
    }

    function help_metadata()
    {
        $rcmail  = rcmail::get_instance();
        $content = [];

        // About
        if (is_readable($this->home . '/content/about.html')) {
            $content['about'] = 'self';
        }
        else {
            $default = $rcmail->url(['_task' => 'settings', '_action' => 'about', '_framed' => 1]);
            $content['about'] = $rcmail->config->get('help_about_url', $default);
            $content['about'] = $this->resolve_language($content['about']);
        }

        // License
        if (is_readable($this->home . '/content/license.html')) {
            $content['license'] = 'self';
        }
        else {
            $content['license'] = $rcmail->config->get('help_license_url', 'http://www.gnu.org/licenses/gpl-3.0-standalone.html');
            $content['license'] = $this->resolve_language($content['license']);
        }

        // Help Index
        $src       = $rcmail->config->get('help_source', 'http://docs.roundcube.net/doc/help/1.1/%l/');
        $index_map = $rcmail->config->get('help_index_map', []);

        // resolve task/action for deep linking
        $rel = !empty($_REQUEST['_rel']) ? $_REQUEST['_rel'] : '';
        list($task, ) = explode('/', $rel);
        if (!empty($index_map[$rel])) {
            $src .= $index_map[$rel];
        }
        else if (!empty($index_map[$task])) {
            $src .= $index_map[$task];
        }

        $content['index'] = $this->resolve_language($src);

        return $content;
    }

    function error_page($args)
    {
        $rcmail = rcmail::get_instance();

        if (
            $args['code'] == 403
            && $rcmail->request_status == rcube::REQUEST_ERROR_URL
            && ($url = $rcmail->config->get('help_csrf_info'))
        ) {
            $args['text'] .= '<p>' . html::a(['href' => $url, 'target' => '_blank'], $this->gettext('csrfinfo')) . '</p>';
        }

        return $args;
    }

    private function resolve_language($path)
    {
        // resolve language placeholder
        $rcmail  = rcmail::get_instance();
        $langmap = $rcmail->config->get('help_language_map', ['*' => 'en_US']);
        $lang    = !empty($langmap[$_SESSION['language']]) ? $langmap[$_SESSION['language']] : $langmap['*'];

        return str_replace('%l', $lang, $path);
    }
}
PKqc�\�Yv##help/help.min.jsnu�[���/**
 * Help plugin client script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function show_help_content(e,n){var a,i=window,r=rcmail.env.help_links[e];return(a=rcmail.get_frame_window(rcmail.env.contentframe))&&(i=a,r+=(-1<r.indexOf("?")?"&":"?")+"_framed=1"),rcmail.env.extwin&&(r+=(-1<r.indexOf("?")?"&":"?")+"_extwin=1"),/^self/.test(r)&&(r=r.substr(4)+"&_content=1&_task=help&_action="+e),rcmail.env.help_action_item=n?n.target:$('[rel="'+e+'"]'),rcmail.show_contentframe(!0),rcmail.location_href(r,i,!0),!1}window.rcmail&&(rcmail.addEventListener("beforeswitch-task",function(e){if("help"==e)return"help"!=rcmail.task&&(e=rcmail.url("help/index",{_rel:rcmail.task+(rcmail.env.action?"/"+rcmail.env.action:"")}),rcmail.env.help_open_extwin?rcmail.open_window(e,1020,!1):rcmail.redirect(e,!1)),!1}),rcmail.addEventListener("init",function(e){if(rcmail.env.contentframe&&"help"==rcmail.task){$("#"+rcmail.env.contentframe).on("load error",function(e){rcmail.set_busy(!1,null,rcmail.env.frame_lock),rcmail.env.frame_lock=null,"load"==e.type&&($(rcmail.env.help_action_item).parents("ul").children().removeClass("selected"),$(rcmail.env.help_action_item).parent().addClass("selected"))});try{var n=rcmail.get_frame_window(rcmail.env.contentframe);n&&0<=n.location.href.indexOf(rcmail.env.blankpage)&&show_help_content(rcmail.env.action)}catch(e){}}}));
PKrc�\���U��+example_addressbook/example_addressbook.phpnu�[���<?php

require_once(__DIR__ . '/example_addressbook_backend.php');

/**
 * Sample plugin to add a new address book
 * with just a static list of contacts
 *
 * @license GNU GPLv3+
 * @author Thomas Bruederli
 */
class example_addressbook extends rcube_plugin
{
    private $abook_id = 'static';
    private $abook_name = 'Static List';

    public function init()
    {
        $this->add_hook('addressbooks_list', [$this, 'address_sources']);
        $this->add_hook('addressbook_get', [$this, 'get_address_book']);

        // use this address book for autocompletion queries
        // (maybe this should be configurable by the user?)
        $config  = rcmail::get_instance()->config;
        $sources = (array) $config->get('autocomplete_addressbooks', ['sql']);
        if (!in_array($this->abook_id, $sources)) {
            $sources[] = $this->abook_id;
            $config->set('autocomplete_addressbooks', $sources);
        }
    }

    public function address_sources($p)
    {
        $abook = new example_addressbook_backend($this->abook_name);

        $p['sources'][$this->abook_id] = [
            'id'       => $this->abook_id,
            'name'     => $this->abook_name,
            'readonly' => $abook->readonly,
            'groups'   => $abook->groups,
        ];

        return $p;
    }

    public function get_address_book($p)
    {
        if ($p['id'] === $this->abook_id) {
            $p['instance'] = new example_addressbook_backend($this->abook_name);
        }

        return $p;
    }
}
PKrc�\?V*|��3example_addressbook/example_addressbook_backend.phpnu�[���<?php

/**
 * Example backend class for a custom address book
 *
 * This one just holds a static list of address records
 *
 * @author Thomas Bruederli
 */
class example_addressbook_backend extends rcube_addressbook
{
    public $primary_key = 'ID';
    public $readonly    = true;
    public $groups      = true;

    private $filter;
    private $result;
    private $name;

    private $db_groups = [
        [
            'ID'   => 'testgroup1',
            'name' => "Testgroup"
        ],
        [
            'ID'   => 'testgroup2',
            'name' => "Sample Group"
        ],
    ];

    private $db_users = [
        [
            'ID'        => '111',
            'name'      => "John Doe",
            'firstname' => "John",
            'surname'   => "Doe",
            'email'     => "example1@roundcube.net",
            'groups'    => ['testgroup1']
        ],
        [
            'ID'        => '112',
            'name'      => "Jane Example",
            'firstname' => "Jane",
            'surname'   => "Example",
            'email'     => "example2@roundcube.net",
            'groups'    => ['testgroup2']
        ]
    ];

    public function __construct($name)
    {
        $this->ready = true;
        $this->name = $name;
    }

    /**
     * Get group properties such as name and email address(es)
     *
     * @param string $group_id Group identifier
     *
     * @return ?array Group properties as hash array, null in case of error.
     */
    function get_group($group_id)
    {
        foreach ($this->db_groups as $group) {
            if ($group['ID'] == $group_id) {
                return $group;
            }
        }
    }

    public function get_name()
    {
        return $this->name;
    }

    public function set_search_set($filter)
    {
        $this->filter = $filter;
    }

    public function get_search_set()
    {
        return $this->filter;
    }

    public function reset()
    {
        $this->result = null;
        $this->filter = null;
    }

    function list_groups($search = null, $mode = 0)
    {
        if (is_string($search) && strlen($search)) {
            $result = [];

            foreach ($this->db_groups as $group) {
                if (stripos($group['name'], $search) !== false) {
                    $result[] = $group;
                }
            }

            return $result;
        }

        return $this->db_groups;
    }

    public function list_records($cols = null, $subset = 0, $nocount = false)
    {
        // Note: Paging is not implemented

        return $this->result = $this->count();
    }

    public function search($fields, $value, $strict = false, $select = true, $nocount = false, $required = [])
    {
        // Note: we do not implement all possible search request modes and variants.
        //       We implement only the simplest searching case in "select" mode

        $result = new rcube_result_set();
        foreach ($this->list_records() as $record) {
            if (is_string($value)) {
                $found = false;

                foreach ($record as $key => $data) {
                    $data = is_array($data) ? implode(' ', $data) : (string) $data;
                    if (strpos(mb_strtolower($data), mb_strtolower($value)) !== false) {
                        $found = true;
                        break;
                    }
                }

                if ($found) {
                    $result->add($record);
                }
            }
        }

        return $result;
    }

    public function count()
    {
        // Note: Paging is not implemented

        $result = new rcube_result_set(0, ($this->list_page-1) * $this->page_size);
        $count  = 0;

        foreach ($this->db_users as $user) {
            if ($this->group_id && (empty($user['groups']) || !in_array($this->group_id, $user['groups']))) {
                continue;
            }

            // TODO: This should consider current search filter

            $result->add($user);
            $count++;
        }

        $result->count = $count;

        return $result;
    }

    public function get_result()
    {
        return $this->result;
    }

    public function get_record($id, $assoc = false)
    {
        $result = new rcube_result_set(0);

        foreach ($this->db_users as $user) {
            if ($user['ID'] == $id) {
                if ($assoc) {
                    return $user;
                }

                $result->add($user);
                $result->count = 1;
            }
        }

        return $result;
    }

    /**
     * Get group assignments of a specific contact record
     *
     * @param mixed $id Record identifier
     *
     * @return array List of assigned groups, indexed by group ID
     */
    function get_record_groups($id)
    {
        $result = [];

        foreach ($this->db_users as $user) {
            if ($user['ID'] == $id) {
                foreach ($this->db_groups as $group) {
                    if (!empty($user['groups']) && in_array($group['ID'], $user['groups'])) {
                        $result[$group['ID']] = $group['name'];
                    }
                }
            }
        }

        return $result;
    }

    /**
     * Setter for the current group
     */
    function set_group($gid)
    {
        $this->group_id = $gid;
    }

    function create_group($name)
    {
        $result = false;

        return $result;
    }

    function delete_group($gid)
    {
        return false;
    }

    function rename_group($gid, $newname, &$newid)
    {
        return $newname;
    }

    function add_to_group($group_id, $ids)
    {
        return false;
    }

    function remove_from_group($group_id, $ids)
    {
        return false;
    }
}
PKrc�\&���ll!example_addressbook/composer.jsonnu�[���{
    "name": "roundcube/example_addressbook",
    "type": "roundcube-plugin",
    "description": "Sample plugin to add a new address book with just a static list of contacts",
    "license": "GPL-3.0-or-later",
    "version": "1.0",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKrc�\�o��#redundant_attachments/composer.jsonnu�[���{
    "name": "roundcube/redundant_attachments",
    "type": "roundcube-plugin",
    "description": "This plugin provides a redundant storage for temporary uploaded attachment files. They are stored in both the database backend as well as on the local file system. It provides also memcache store as a fallback.",
    "license": "GPL-3.0-or-later",
    "version": "1.2",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        },
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3",
        "roundcube/filesystem_attachments": ">=1.0.0"
    }
}
PKrc�\�0���)redundant_attachments/config.inc.php.distnu�[���<?php

// By default this plugin stores attachments in filesystem and copies them into sql database.
// In environments with replicated database it is possible to use memcache or redis
// as a fallback when write-master is unavailable.
// -------------------------------------------------------------------------------------
// WARNING: Remember to also set memcache_max_allowed_packet or redis_max_allowed_packet
//          in config to match with expected maximum attachment size.
// -------------------------------------------------------------------------------------
// This option can be set to 'memcache', 'memcached' or 'redis'.
// Don't forget to set redis_*/memcache_* options in Roundcube config file.
$config['redundant_attachments_fallback'] = false;

// Attachment data expires after specified TTL time in seconds (max.2592000).
// Default is 12 hours.
$config['redundant_attachments_cache_ttl'] = 12 * 60 * 60;
PKrc�\
��(��/redundant_attachments/redundant_attachments.phpnu�[���<?php

/**
 * Redundant attachments
 *
 * This plugin provides a redundant storage for temporary uploaded
 * attachment files. They are stored in both the database backend
 * as well as on the local file system.
 *
 * It provides also memcache/redis store as a fallback (see config file).
 *
 * This plugin relies on the core filesystem_attachments plugin
 * and combines it with the functionality of the database_attachments plugin.
 *
 * @author Thomas Bruederli <roundcube@gmail.com>
 * @author Aleksander Machniak <machniak@kolabsys.com>
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2
 * as published by the Free Software Foundation.
 *
 * 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.
 */

require_once(RCUBE_PLUGINS_DIR . 'filesystem_attachments/filesystem_attachments.php');

class redundant_attachments extends filesystem_attachments
{
    // A prefix for the cache key used in the session and in the key field of the cache table
    const PREFIX = "ATTACH";

    // rcube_cache instance for SQL DB
    private $cache;

    // rcube_cache instance for memcache/redis
    private $mem_cache;

    private $loaded;


    /**
     * Loads plugin configuration and initializes cache object(s)
     */
    private function _load_drivers()
    {
        if ($this->loaded) {
            return;
        }

        $rcmail = rcube::get_instance();

        // load configuration
        $this->load_config();

        $ttl      = 12 * 60 * 60; // 12 hours
        $ttl      = $rcmail->config->get('redundant_attachments_cache_ttl', $ttl);
        $fallback = $rcmail->config->get('redundant_attachments_fallback');
        $prefix   = self::PREFIX;

        if ($id = session_id()) {
            $prefix .= $id;
        }

        if ($fallback === null) {
            $fallback = $rcmail->config->get('redundant_attachments_memcache') ? 'memcache' : null; // BC
        }

        // Init SQL cache (disable cache data serialization)
        $this->cache = $rcmail->get_cache($prefix, 'db', $ttl, false, true);

        // Init memcache/redis (fallback) cache
        if ($fallback) {
            $this->mem_cache = $rcmail->get_cache($prefix, $fallback, $ttl, false, true);
        }

        $this->loaded = true;
    }

    /**
     * Helper method to generate a unique key for the given attachment file
     */
    private function _key($args)
    {
        $uname = !empty($args['path']) ? $args['path'] : $args['name'];

        return $args['group'] . md5(microtime() . $uname . $_SESSION['user_id']);
    }

    /**
     * Save a newly uploaded attachment
     */
    function upload($args)
    {
        $args = parent::upload($args);

        $this->_load_drivers();

        $key  = $this->_key($args);
        $data = base64_encode(file_get_contents($args['path']));

        $status = $this->cache->set($key, $data);

        if (!$status && $this->mem_cache) {
            $status = $this->mem_cache->set($key, $data);
        }

        if ($status) {
            $args['id'] = $key;
            $args['status'] = true;
        }

        return $args;
    }

    /**
     * Save an attachment from a non-upload source (draft or forward)
     */
    function save($args)
    {
        $args = parent::save($args);

        $this->_load_drivers();

        $data = !empty($args['path']) ? file_get_contents($args['path']) : $args['data'];

        $args['data'] = null;

        $key  = $this->_key($args);
        $data = base64_encode($data);

        $status = $this->cache->set($key, $data);

        if (!$status && $this->mem_cache) {
            $status = $this->mem_cache->set($key, $data);
        }

        if ($status) {
            $args['id'] = $key;
            $args['status'] = true;
        }

        return $args;
    }

    /**
     * Remove an attachment from storage
     * This is triggered by the remove attachment button on the compose screen
     */
    function remove($args)
    {
        parent::remove($args);

        $this->_load_drivers();

        $status = $this->cache->remove($args['id']);

        if (!$status && $this->mem_cache) {
            $status = $this->cache->remove($args['id']);
        }

        // we cannot trust the result of any of the methods above
        // assume true, attachments will be removed on cleanup
        $args['status'] = true;

        return $args;
    }

    /**
     * When composing an html message, image attachments may be shown
     * For this plugin, $this->get() will check the file and
     * return it's contents
     */
    function display($args)
    {
        return $this->get($args);
    }

    /**
     * When displaying or sending the attachment the file contents are fetched
     * using this method. This is also called by the attachment_display hook.
     */
    function get($args)
    {
        // attempt to get file from local file system
        $args = parent::get($args);

        if (!empty($args['path']) && ($args['status'] = file_exists($args['path']))) {
            return $args;
        }

        $this->_load_drivers();

        // fetch from database if not found on FS
        $data = $this->cache->get($args['id']);

        // fetch from memcache if not found on FS and DB
        if (($data === false || $data === null) && $this->mem_cache) {
            $data = $this->mem_cache->get($args['id']);
        }

        if ($data) {
            $args['data'] = base64_decode($data);
            $args['status'] = true;
        }

        return $args;
    }

    /**
     * Delete all temp files associated with this user
     */
    function cleanup($args)
    {
        $this->_load_drivers();

        $group = $args['group'] ?? null;

        if ($this->cache) {
            $this->cache->remove($group, true);
        }

        if ($this->mem_cache) {
            $this->mem_cache->remove($group, true);
        }

        parent::cleanup($args);

        $args['status'] = true;

        return $args;
    }
}
PKrc�\n�V�== krb_authentication/composer.jsonnu�[���{
    "name": "roundcube/krb_authentication",
    "type": "roundcube-plugin",
    "description": "Kerberos Authentication",
    "license": "GPL-3.0-or-later",
    "version": "1.2",
    "authors": [
        {
            "name": "Jeroen van Meeuwen",
            "email": "vanmeeuwen@kolabsys.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKrc�\��F�00)krb_authentication/krb_authentication.phpnu�[���<?php

/**
 * Kerberos Authentication
 *
 * Make use of an existing Kerberos authentication and perform login
 * with the existing user credentials
 *
 * For other configuration options, see config.inc.php.dist!
 *
 * @license GNU GPLv3+
 * @author Jeroen van Meeuwen
 */
class krb_authentication extends rcube_plugin
{
    private $redirect_query;

    /**
     * Plugin initialization
     */
    function init()
    {
        $this->add_hook('startup', [$this, 'startup']);
        $this->add_hook('authenticate', [$this, 'authenticate']);
        $this->add_hook('login_after', [$this, 'login']);
        $this->add_hook('storage_connect', [$this, 'storage_connect']);
        $this->add_hook('managesieve_connect', [$this, 'managesieve_connect']);
        $this->add_hook('smtp_connect', [$this, 'smtp_connect']);
    }

    /**
     * Startup hook handler
     */
    function startup($args)
    {
        if (!empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])) {
            // handle login action
            if (empty($_SESSION['user_id'])) {
                $args['action']       = 'login';
                $this->redirect_query = $_SERVER['QUERY_STRING'];
            }
            else {
                $_SESSION['password'] = null;
            }
        }

        return $args;
    }

    /**
     * Authenticate hook handler
     */
    function authenticate($args)
    {
        if (!empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])) {
            // Load plugin's config file
            $this->load_config();

            $rcmail = rcmail::get_instance();
            $host   = $rcmail->config->get('krb_authentication_host');

            if (is_string($host) && trim($host) !== '' && empty($args['host'])) {
                $args['host'] = rcube_utils::idn_to_ascii(rcube_utils::parse_host($host));
            }

            if (!empty($_SERVER['REMOTE_USER'])) {
                $args['user'] = $_SERVER['REMOTE_USER'];
                $args['pass'] = null;
            }

            $args['cookiecheck'] = false;
            $args['valid']       = true;
        }

        return $args;
    }

    /**
     * login_after hook handler
     */
    function login($args)
    {
        // Redirect to the previous QUERY_STRING
        if ($this->redirect_query) {
            header('Location: ./?' . $this->redirect_query);
            exit;
        }

        return $args;
    }

    /**
     * Storage_connect hook handler
     */
    function storage_connect($args)
    {
        if (!empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])) {
            $args['gssapi_context'] = $this->gssapi_context('imap');
            $args['gssapi_cn']      = $_SERVER['KRB5CCNAME'];
            $args['auth_type']      = 'GSSAPI';
        }

        return $args;
    }

    /**
     * managesieve_connect hook handler
     */
    function managesieve_connect($args)
    {
        if (
            (!isset($args['auth_type']) || $args['auth_type'] == 'GSSAPI')
            && !empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])
        ) {
            $args['gssapi_context'] = $this->gssapi_context('sieve');
            $args['gssapi_cn']      = $_SERVER['KRB5CCNAME'];
            $args['auth_type']      = 'GSSAPI';
        }

        return $args;
    }

    /**
     * smtp_connect hook handler
     */
    function smtp_connect($args)
    {
        if (
            (!isset($args['smtp_auth_type']) || $args['smtp_auth_type'] == 'GSSAPI')
            && !empty($_SERVER['REMOTE_USER']) && !empty($_SERVER['KRB5CCNAME'])
        ) {
            $args['gssapi_context'] = $this->gssapi_context('smtp');
            $args['gssapi_cn']      = $_SERVER['KRB5CCNAME'];
            $args['smtp_auth_type'] = 'GSSAPI';
        }

        return $args;
    }

    /**
     * Returns configured GSSAPI context string
     */
    private function gssapi_context($protocol)
    {
        // Load plugin's config file
        $this->load_config();

        $rcmail  = rcmail::get_instance();
        $context = $rcmail->config->get('krb_authentication_context');

        if (is_array($context) && isset($context[$protocol])) {
             $context = $context[$protocol];
        }

        if (empty($context)) {
            rcube::raise_error("Empty GSSAPI context ($protocol).", true);
        }

        return $context;
    }
}
PKrc�\SZ'�

&krb_authentication/config.inc.php.distnu�[���<?php

// Kerberos/GSSAPI Authentication Plugin options
// ---------------------------------------------

// Default mail host to log-in using user/password from HTTP Authentication.
// This is useful if the users are free to choose arbitrary mail hosts (or
// from a list), but have one host they usually want to log into.
// Unlike $config['imap_host'] this must be a string!
$config['krb_authentication_host'] = '';

// GSSAPI security context.
// Single value or an array with per-protocol values. Example:
//
//   $config['krb_authentication_context'] = [
//       'imap'  => 'imap/host.fqdn@REALM.NAME',
//       'smtp'  => 'smtp/host.fqdn@REALM.NAME',
//       'sieve' => 'sieve/host.fqdn@REALM.NAME',
//   ];
$config['krb_authentication_context'] = 'principal@REALM.NAME';
PKrc�\���W��$filesystem_attachments/composer.jsonnu�[���{
    "name": "roundcube/filesystem_attachments",
    "type": "roundcube-plugin",
    "description": "This is a core plugin which provides basic, filesystem based attachment temporary file handling. This includes storing attachments of messages currently being composed, writing attachments to disk when drafts with attachments are re-opened and writing attachments to disk for inline display in current html compositions.",
    "license": "GPL-3.0-or-later",
    "version": "1.0",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Ziba Scott",
            "email": "ziba@umich.edu",
            "role": "Developer"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKsc�\p��1"1"1filesystem_attachments/filesystem_attachments.phpnu�[���<?php
/**
 * Filesystem Attachments
 *
 * This is a core plugin which provides basic, filesystem based
 * attachment temporary file handling.  This includes storing
 * attachments of messages currently being composed, writing attachments
 * to disk when drafts with attachments are re-opened and writing
 * attachments to disk for inline display in current html compositions.
 * It also handles uploaded files for other uses, so not only attachments.
 *
 * Developers may wish to extend this class when creating attachment
 * handler plugins:
 *   require_once('plugins/filesystem_attachments/filesystem_attachments.php');
 *   class myCustom_attachments extends filesystem_attachments
 *
 * Note for developers: It is plugin's responsibility to care about security.
 * So, e.g. if the plugin is asked about some file path it should check
 * if it's really the storage path of the plugin and not e.g. /etc/passwd.
 * It is done by setting 'status' flag on every plugin hook it uses.
 * Roundcube core will trust the returned path if status=true.
 *
 * @license GNU GPLv3+
 * @author Ziba Scott <ziba@umich.edu>
 * @author Thomas Bruederli <roundcube@gmail.com>
 */
class filesystem_attachments extends rcube_plugin
{
    public $task = '?(?!login).*';
    public $initialized = false;

    function init()
    {
        // Find filesystem_attachments-based plugins, we can use only one
        foreach ($this->api->loaded_plugins() as $plugin_name) {
            $plugin = $this->api->get_plugin($plugin_name);
            if (($plugin instanceof filesystem_attachments) && $plugin->initialized) {
                rcube::raise_error([
                        'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Can use only one plugin for attachments/file uploads! Using '$plugin_name', ignoring others.",
                    ], true, false
                );
                return;
            }
        }

        $this->initialized = true;

        // Save a newly uploaded attachment
        $this->add_hook('attachment_upload', [$this, 'upload']);

        // Save an attachment from a non-upload source (draft or forward)
        $this->add_hook('attachment_save', [$this, 'save']);

        // Remove an attachment from storage
        $this->add_hook('attachment_delete', [$this, 'remove']);

        // When composing an html message, image attachments may be shown
        $this->add_hook('attachment_display', [$this, 'display']);

        // Get the attachment from storage and place it on disk to be sent
        $this->add_hook('attachment_get', [$this, 'get']);

        // Delete all temp files associated with this user
        $this->add_hook('attachments_cleanup', [$this, 'cleanup']);
        $this->add_hook('session_destroy', [$this, 'cleanup']);
    }

    /**
     * Save a newly uploaded attachment
     */
    function upload($args)
    {
        $args['status'] = false;
        $group = $args['group'];

        // use common temp dir for file uploads
        $tmpfname = rcube_utils::temp_filename('attmnt');

        if (move_uploaded_file($args['path'], $tmpfname) && file_exists($tmpfname)) {
            $args['id']     = $this->file_id();
            $args['path']   = $tmpfname;
            $args['status'] = true;
            @chmod($tmpfname, 0600);  // set correct permissions (#1488996)

            // Note the file for later cleanup
            $_SESSION['plugins']['filesystem_attachments'][$group][$args['id']] = $tmpfname;
        }

        return $args;
    }

    /**
     * Save an attachment from a non-upload source (draft or forward)
     */
    function save($args)
    {
        $group = $args['group'];
        $args['status'] = false;

        if (empty($args['path'])) {
            $tmp_path = rcube_utils::temp_filename('attmnt');

            if ($fp = fopen($tmp_path, 'w')) {
                fwrite($fp, $args['data']);
                fclose($fp);
                $args['path'] = $tmp_path;
            }
            else {
                return $args;
            }
        }

        $args['id']     = $this->file_id();
        $args['status'] = true;

        // Note the file for later cleanup
        $_SESSION['plugins']['filesystem_attachments'][$group][$args['id']] = $args['path'];

        return $args;
    }

    /**
     * Remove an attachment from storage
     * This is triggered by the remove attachment button on the compose screen
     */
    function remove($args)
    {
        $args['status'] = $this->verify_path($args['path']) && @unlink($args['path']);
        return $args;
    }

    /**
     * When composing an html message, image attachments may be shown
     * For this plugin, the file is already in place, just check for
     * the existence of the proper metadata
     */
    function display($args)
    {
        $args['status'] = $this->verify_path($args['path']) && file_exists($args['path']);
        return $args;
    }

    /**
     * This attachment plugin doesn't require any steps to put the file
     * on disk for use.  This stub function is kept here to make this 
     * class handy as a parent class for other plugins which may need it.
     */
    function get($args)
    {
        if (!$this->verify_path($args['path'])) {
            $args['path'] = null;
        }

        return $args;
    }

    /**
     * Delete all temp files associated with this user
     */
    function cleanup($args)
    {
        // $_SESSION['compose']['attachments'] is not a complete record of
        // temporary files because loading a draft or starting a forward copies
        // the file to disk, but does not make an entry in that array
        if (!empty($_SESSION['plugins']['filesystem_attachments'])) {
            foreach ($_SESSION['plugins']['filesystem_attachments'] as $group => $files) {
                if (!empty($args['group']) && $args['group'] != $group) {
                    continue;
                }

                foreach ((array) $files as $filename) {
                    if (file_exists($filename)) {
                        unlink($filename);
                    }
                }

                unset($_SESSION['plugins']['filesystem_attachments'][$group]);
            }
        }

        return $args;
    }

    protected static function file_id()
    {
        $userid = rcube::get_instance()->user->ID;
        list($usec, $sec) = explode(' ', microtime());
        $id = preg_replace('/[^0-9]/', '', $userid . $sec . $usec);

        // make sure the ID is really unique (#1489546)
        while (self::find_file_by_id($id)) {
            // increment last four characters
            $x  = substr($id, -4) + 1;
            $id = substr($id, 0, -4) . sprintf('%04d', ($x > 9999 ? $x - 9999 : $x));
        }

        return $id;
    }

    private static function find_file_by_id($id)
    {
        if (!empty($_SESSION['plugins']['filesystem_attachments'])) {
            foreach ((array) $_SESSION['plugins']['filesystem_attachments'] as $files) {
                if (isset($files[$id])) {
                    return true;
                }
            }
        }
    }

    /**
     * For security we'll always verify the file path stored in session,
     * as session entries can be faked in various ways e.g. #6026.
     * We allow only files in Roundcube temp dir
     */
    protected static function verify_path($path)
    {
        if (empty($path)) {
            return false;
        }

        $rcmail    = rcube::get_instance();
        $temp_dir  = $rcmail->config->get('temp_dir');
        $file_path = pathinfo($path, PATHINFO_DIRNAME);

        if ($temp_dir !== $file_path) {
            // When the configured directory is not writable, or out of open_basedir path
            // tempnam() fallbacks to system temp without a warning.
            // We allow that, but we'll let to know the user about the misconfiguration.
            if ($file_path == sys_get_temp_dir()) {
                rcube::raise_error([
                        'file'    => __FILE__,
                        'line'    => __LINE__,
                        'message' => "Detected 'temp_dir' change. "
                            . "Access to '$temp_dir' restricted by filesystem permissions or open_basedir",
                    ], true, false
                );

                return true;
            }

            rcube::raise_error([
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                    'message' => sprintf("%s can't read %s (not in temp_dir)",
                        $rcmail->get_user_name(), substr($path, 0, 512))
                ], true, false
            );

            return false;
        }

        return true;
    }
}
PKsc�\��t��newmail_notifier/mail.pngnu�[����PNG


IHDR  szz�sRGB���bKGD�������	pHYs
�
�B(�xtIME�	k�pIDATX��[oE��ٓw֧�i�8��=�n�))�$�@��o����*�
%m�R�9�Q��nl�����N�n
\�'};�3���;�����_7�7e�?����$p���o5_z�\��|xn�/8��k��.� ��2Z��}Ͽ�X˃[������_~yg������a飏��ۗ��16+�� ��!��Π��/��ZLo
X��ۿ��d�u9[*:�nw��v:�O��?�1V�iŬ=^D�=0��Z��k4�h��[�m֪$Ψ�I}�-�W��V!ӒO���n��s���˓���ЎT�h��Z5�
�>�UIjPO��L��c��\nz�HR��AʅDG�F㺂Wޘ�<�5��
�,��Z
��H�j�ã>p_�s���e���HR�}�w�F `5X��9�:5�xX���<)?��^H_	=2�o��<??�=J1=�.~�;�ހ�p��'x��I���ZMs���2���A�ξ�}_�7���2M�\��J�r�fsH���o
��ת�.��z(�`:���Fw1�����XYxH������=��{X���؟/��I�`-��0yv��e��6խM��]Μ;$Sf�9���ﱶ���٤)Δg0�Q�S���6X�E��7r���<��:q}��W/#�8�;�Y{�d<���U��{,���@�6F�0����4��3y�u��i7[l��!���r�Ћ�}0����sg�����q\�X�����K�u�Q�g��ZE��6��u)�^!L�X����[�s���,�)�^A������푌Q���0�}�Y��G�V�Z?I:��M3w������*�1TW�Ӓ�i��al<�f%�^�!�	R��
7��oola�"ʄ���E�g��Q
����Beq�FF)���A�Ʉ�'ʄ�x���\��}`��.�V!�S�C}Aʥ8s�Pɷ��(Eq����Ne��n5���N�3��&n���U,�9<�=���(�N��QFR���G�<�%"Xv~�3��X���R
����Ǯ�0
)��<� ����4�5QJQ��26>vt
�M)�n5�/p������#8�R�g�:J��	T�jc�$�M���W:�&�kխ��	��q#F��Ӆ~<y�����iu���$�2�,~*x��T@&�M�~:T���~�~�(-	��0���N…�<��Di��o 3R��.�1��k���X.���:��#��¿�S���u��ǜ���z�IEND�B`�PKsc�\&����newmail_notifier/composer.jsonnu�[���{
    "name": "roundcube/newmail_notifier",
    "type": "roundcube-plugin",
    "description": "Supports three methods of notification: 1. Basic - focus browser window and change favicon 2. Sound - play wav file 3. Desktop - display desktop notification (using HTML5 Notification API feature).",
    "license": "GPL-3.0-or-later",
    "version": "0.8",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKsc�\x!�Y��(newmail_notifier/newmail_notifier.min.jsnu�[���/**
 * New Mail Notifier plugin script
 *
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function newmail_notifier_run(i){i.basic&&newmail_notifier_basic(),i.sound&&newmail_notifier_sound(),i.desktop&&newmail_notifier_desktop(rcmail.get_label("body","newmail_notifier"))}function newmail_notifier_stop(i){!rcmail.env.favicon_href||!rcmail.env.favicon_changed||i&&"check-recent"==i.action||($('<link rel="shortcut icon" href="'+rcmail.env.favicon_href+'"/>').replaceAll('link[rel="shortcut icon"]'),rcmail.env.favicon_changed=0);try{window.external.msIsSiteMode()&&window.external.msSiteModeClearIconOverlay()}catch(i){}}function newmail_notifier_basic(){var i=rcmail.is_framed()?window.parent:window,e=rcmail.assets_path("plugins/newmail_notifier"),n=(i.focus(),$('<link rel="shortcut icon">').attr("href",e+"/favicon.ico")),i=$('link[rel="shortcut icon"]',i.document);rcmail.env.favicon_href||(rcmail.env.favicon_href=i.attr("href")),rcmail.env.favicon_changed=1,n.replaceAll(i);try{window.external.msIsSiteMode()&&window.external.msSiteModeSetIconOverlay(e+"/overlay.ico",rcmail.get_label("title","newmail_notifier"))}catch(i){}}function newmail_notifier_sound(){var i=rcmail.assets_path("plugins/newmail_notifier/sound");new Audio(i+".mp3").play().catch(function(){new Audio(i+".wav").play()})}function newmail_notifier_desktop(n,t){var a=rcmail.env.newmail_notifier_timeout||10,o=rcmail.assets_path("plugins/newmail_notifier/mail.png");try{return window.Notification.requestPermission(function(i){var e;"granted"==i?((e=new window.Notification(rcmail.get_label("title","newmail_notifier"),{dir:"auto",lang:"",body:n,tag:"newmail_notifier",icon:o})).onclick=function(){this.close()},setTimeout(function(){e.close()},1e3*a)):"denied"==i&&t&&t()}),!0}catch(i){return!1}}function newmail_notifier_test_desktop(){newmail_notifier_desktop(rcmail.get_label("testbody","newmail_notifier"),function(){rcmail.display_message(rcmail.get_label("desktopdisabled","newmail_notifier"),"error")})||rcmail.display_message(rcmail.get_label("desktopunsupported","newmail_notifier"),"error")}function newmail_notifier_test_basic(){newmail_notifier_basic()}function newmail_notifier_test_sound(){newmail_notifier_sound()}window.rcmail&&"mail"==rcmail.env.task&&rcmail.addEventListener("plugin.newmail_notifier",newmail_notifier_run).addEventListener("actionbefore",newmail_notifier_stop).addEventListener("init",function(){rcmail.message_list&&rcmail.message_list.addEventListener("select",newmail_notifier_stop)});
PKsc�\�L��JJ'newmail_notifier/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = '在浏览器中显示新邮件提醒';
$labels['desktop'] = '在桌面显示新邮件提醒';
$labels['sound'] = '收到新邮件时播放声音';
$labels['test'] = '测试';
$labels['title'] = '您收到一封新邮件!';
$labels['body'] = '您收到一封新邮件。';
$labels['testbody'] = '这是一个提醒测试。';
$labels['desktopdisabled'] = '您的浏览器已禁止桌面提醒功能。';
$labels['desktopunsupported'] = '您的浏览器不支持桌面提醒功能。';
$labels['desktoptimeout'] = '关闭桌面通知';
PKsc�\=qI�!!'newmail_notifier/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Паказваць апавяшчэнні аб атрыманні новых паведамленняў у браўзеры';
$labels['desktop'] = 'Паказваць апавяшчэнні аб атрыманні новых паведамленняў на працоўным стале';
$labels['sound'] = 'Агучваць атрыманне новых паведамленняў';
$labels['test'] = 'Праверыць';
$labels['title'] = 'Новы ліст!';
$labels['body'] = 'Вы атрымалі новае паведамленне.';
$labels['testbody'] = 'Гэта тэставае апавяшчэнне.';
$labels['desktopdisabled'] = 'Апавяшчэнні на працоўным стале адключаныя ў браўзеры.';
$labels['desktopunsupported'] = 'Ваш браўзер не падтрымлівае апавяшчэнні на працоўным стале.';
$labels['desktoptimeout'] = 'Зачыніць апавяшчэнне на працоўным стале';
PKsc�\y��'newmail_notifier/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Показва известия в браузъра при ново писмо';
$labels['desktop'] = 'Показва известия на работния плот при ново писмо';
$labels['sound'] = 'Възпроизведи звук при ново писмо';
$labels['test'] = 'Тест';
$labels['title'] = 'Ново писмо!';
$labels['body'] = 'Получихте ново писмо.';
$labels['testbody'] = 'Това е тестово известие.';
$labels['desktopdisabled'] = 'Известията на работния плот са изключени за Вашия браузър.';
$labels['desktopunsupported'] = 'Вашият браузър не поддържа известия на работния плот.';
$labels['desktoptimeout'] = 'Затваряне на известие на работния плот';
PKsc�\�H��hh'newmail_notifier/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Display browser notifications on new message';
$labels['desktop'] = 'Display desktop notifications on new message';
$labels['sound'] = 'Play the sound on new message';
$labels['test'] = 'Test';
$labels['title'] = 'New Email!';
$labels['body'] = 'You\'ve received a new message.';
$labels['testbody'] = 'This is a test notification.';
$labels['desktopdisabled'] = 'Desktop notifications are disabled in your browser.';
$labels['desktopunsupported'] = 'Your browser does not support desktop notifications.';
$labels['desktoptimeout'] = 'Close desktop notification';
PKsc�\�0cc'newmail_notifier/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Näytä selainilmoitus uuden viestin saapuessa';
$labels['desktop'] = 'Näytä työpöytäilmoitus uuden viestin saapuessa';
$labels['sound'] = 'Toista ääni uuden viestin saapuessa';
$labels['test'] = 'Testaa';
$labels['title'] = 'Uutta sähköpostia!';
$labels['body'] = 'Sait uuden viestin.';
$labels['testbody'] = 'Tämä on testi-ilmoitus.';
$labels['desktopdisabled'] = 'Työpöytäilmoitukset on estetty selaimessa.';
$labels['desktopunsupported'] = 'Selaimesi ei tue työpöytäilmoituksia.';
$labels['desktoptimeout'] = 'Sulje työpöytäilmoitus';
PKsc�\����\\'newmail_notifier/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Vis varsel i nettleseren ved ny melding';
$labels['desktop'] = 'Vis varsel på skrivebordet ved ny melding';
$labels['sound'] = 'Spill av lyd ved ny melding';
$labels['test'] = 'Test';
$labels['title'] = 'Ny e-post!';
$labels['body'] = 'Du har mottatt en ny melding';
$labels['testbody'] = 'Dette er et testvarsel.';
$labels['desktopdisabled'] = 'Skrivebordsvarsel er slått av i din nettleser.';
$labels['desktopunsupported'] = 'Din nettleser støtter ikke visning av varsel på skrivebordet.';
$labels['desktoptimeout'] = 'Lukk skrivebordsvarsling';
PKsc�\���؎�'newmail_notifier/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Shfaqni njoftime shfletuesi kur ka mesazhe të rinj';
$labels['desktop'] = 'Shfaqni njoftime për desktop kur ka mesazhe të rinj';
$labels['sound'] = 'Kur ka mesazhe të rinj, luaj tingullin';
$labels['test'] = 'Test';
$labels['title'] = 'Email i ri!';
$labels['body'] = 'Morët një mesazh të ri.';
$labels['testbody'] = 'Ky është një njoftim test.';
$labels['desktopdisabled'] = 'Njoftimet për desktop janë të çaktivizuara te shfletuesi juaj.';
$labels['desktopunsupported'] = 'Shfletuesi juaj nuk mbulon njoftime për desktop.';
$labels['desktoptimeout'] = 'Mbylle njoftimin për desktop';
PKsc�\�!��__'newmail_notifier/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Uue kirja saabumisel näita lehitsejas teavitust';
$labels['desktop'] = 'Uue kirja saabumisel näita töölaua teavitust';
$labels['sound'] = 'Uue kirja saabumisel mängi heli';
$labels['test'] = 'Proovi';
$labels['title'] = 'Uus kiri!';
$labels['body'] = 'Saabus uus kiri.';
$labels['testbody'] = 'See on teavituse proov.';
$labels['desktopdisabled'] = 'Töölaua märguanded on su veebilehitsejas keelatud.';
$labels['desktopunsupported'] = 'Sinu veebilehitseja ei toeta töölaua märguandeid.';
$labels['desktoptimeout'] = 'Sulge töölaua teavitus';
PKsc�\|]@�LL'newmail_notifier/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['test'] = 'تاقیکردنەوە';
PKsc�\(�܌�'newmail_notifier/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Bistaratu nabigatzailearen jakinarazpenak mezu berrian';
$labels['desktop'] = 'Bistaratu sistemaren jakinarazpenak mezu berrian';
$labels['sound'] = 'Jo soinu bat mezu berriarekin';
$labels['test'] = 'Testa';
$labels['title'] = 'E-posta berria';
$labels['body'] = 'Mezu berria jaso duzu';
$labels['testbody'] = 'Hau jakinarazpen proba bat da';
$labels['desktopdisabled'] = 'Sistemaren jakinarazpenak ezgaituak daude zure nabigatzailean';
$labels['desktopunsupported'] = 'Zure nabigatzaileak ez ditu sistemaren jakinarazpenak onartzen.';
$labels['desktoptimeout'] = 'Itxi mahaigaineko jakinarazpena';
PKsc�\���L}}'newmail_notifier/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Yeni iletiler web tarayıcıdan bildirilsin';
$labels['desktop'] = 'Yeni iletiler masaüstünden bildirilsin';
$labels['sound'] = 'Yeni ileti geldiğinde ses çalınsın';
$labels['test'] = 'Deneme';
$labels['title'] = 'Yeni ileti!';
$labels['body'] = 'Yeni bir iletiniz var.';
$labels['testbody'] = 'Bu bir test bildirimidir.';
$labels['desktopdisabled'] = 'Web tarayıcınızda masaüstü bildirimi devre dışı bırakıldı.';
$labels['desktopunsupported'] = 'Web tarayıcınız masaüstü bildirimlerini desteklemiyor';
$labels['desktoptimeout'] = 'Masaüstü bildirimini kapat';
PKsc�\Y�~_��'newmail_notifier/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Mostrar notificación cuando haya nuevos mensajes';
$labels['desktop'] = 'Mostrar notificación en escritorio cuando haya nuevos mensajes';
$labels['sound'] = 'Reproducir sonido cuando haya nuevos mensajes';
$labels['test'] = 'Prueba';
$labels['title'] = 'Correo nuevo!';
$labels['body'] = 'Has recibido correo nuevo';
$labels['testbody'] = 'Esta es una notificación de prueba';
$labels['desktopdisabled'] = 'Las notificaciones en escritorio están deshabilitadas en tu navegador';
$labels['desktopunsupported'] = 'Tu navegador no soporta notificaciones en escritorio';
$labels['desktoptimeout'] = 'Cerrar notificación de escritorio';
PKsc�\��nn$newmail_notifier/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Agahdariyên gerokê li ser peyama nû bide nîşan';
$labels['desktop'] = 'Agahdariyên sermasê li ser peyama nû bide nîşan';
$labels['sound'] = 'Deng li ser peyameke nû veke';
$labels['test'] = 'Test';
$labels['title'] = 'Emaila Nû!';
$labels['body'] = 'Peyameke te ya nû heye.';
$labels['testbody'] = 'Ev agahdariyeke testê ye.';
$labels['desktopdisabled'] = 'Agahdariyên sermasê di geroka te de girtî ne. ';
$labels['desktopunsupported'] = 'Geroka te bi agahdariyên sermasê re ne ahengdar e.';
$labels['desktoptimeout'] = 'Ahahadariya sermasê bigire';
PKsc�\5�%��'newmail_notifier/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Exibir notificação quando uma nova mensagem chegar';
$labels['desktop'] = 'Exibir notificação no desktop quando uma nova mensagem chegar';
$labels['sound'] = 'Alerta sonoro quando uma nova mensagem chegar';
$labels['test'] = 'Testar';
$labels['title'] = 'Novo Email!';
$labels['body'] = 'Você recebeu uma nova mensagem.';
$labels['testbody'] = 'Essa é uma notificação de teste.';
$labels['desktopdisabled'] = 'As notificações no desktop estão desabilitadas no seu navegador.';
$labels['desktopunsupported'] = 'Seu navegador não suporta notificações no desktop';
$labels['desktoptimeout'] = 'Fechar notificação';
PKsc�\�	Ӹ�'newmail_notifier/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Saņemot jaunu vēstuli, parādīt paziņojumu';
$labels['desktop'] = 'Saņemot jaunu vēstuli, parādīt darbavirsmas paziņojumu';
$labels['sound'] = 'Saņemot jaunu vēstuli, atskaņot skaņas signālu';
$labels['test'] = 'Pārbaudīt';
$labels['title'] = 'Jauns e-pasts!';
$labels['body'] = 'Jūs esat saņēmis jaunu vēstuli.';
$labels['testbody'] = 'Šis ir testa paziņojums.';
$labels['desktopdisabled'] = 'Darbavirsmas paziņojumi Jūsu pārlūkprogrammā ir atslēgti.';
$labels['desktopunsupported'] = 'Jūsu pārlūkprogramma neatbalsta darbavirsmas paziņojumus.';
$labels['desktoptimeout'] = 'Aizvērt darbavirsmas paziņojumu';
PKsc�\zR褉�'newmail_notifier/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Zobraziť upozornenie v prehliadači pri novej správe';
$labels['desktop'] = 'Zobraziť upozornenie na ploche pri novej správe';
$labels['sound'] = 'Prehrať zvuk pri novej správe';
$labels['test'] = 'Otestovať';
$labels['title'] = 'Nová správa!';
$labels['body'] = 'Máte novú správu.';
$labels['testbody'] = 'Toto je skúšobné upozornenie.';
$labels['desktopdisabled'] = 'Upozornenia na ploche sú vo vašom prehliadači vypnuté.';
$labels['desktopunsupported'] = 'Váš prehliadač nepodporuje upozornenia na ploche.';
$labels['desktoptimeout'] = 'Zatvoriť notifikáciu na ploche';
PKsc�\�栬�'newmail_notifier/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Zobrazit upozornění v prohlížeči při příchozí zprávě';
$labels['desktop'] = 'Zobrazit upozornění na ploše při příchozí zprávě';
$labels['sound'] = 'Přehrát zvuk při příchozí zprávě';
$labels['test'] = 'Vyzkoušet';
$labels['title'] = 'Nová zpráva!';
$labels['body'] = 'Dostali jste novou zprávu.';
$labels['testbody'] = 'Toto je zkouška upozornění.';
$labels['desktopdisabled'] = 'Upozornění na ploše jsou ve vašem prohlížeči vypnuté.';
$labels['desktopunsupported'] = 'Váš prohlížeč nepodporuje upozornění na ploše.';
$labels['desktoptimeout'] = 'Zavřít upozornění na ploše';
PKsc�\��4��$newmail_notifier/localization/ti.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'ሓዱሽ መል እኽቲ ጠቆምቲ አብ ጎስጓሲ ይርአ';
$labels['desktop'] = 'ሓዱሽ መል እኽቲ ጠቆምቲ ኣብ ደስክቶፕ ይርአ';
$labels['sound'] = 'ሓዱሽ መል እኽቲ ምስዝመጽእ ድምጺ ይሰማዕ';
$labels['test'] = 'ፈተነ';
$labels['title'] = 'ሓድሽ ኢደብዳበ!';
$labels['body'] = 'ሓድሽ ኢደብዳበ በጺሑ አሎ::';
$labels['testbody'] = 'እዚ ጥቆማ ንፈተን ዝተገብረ እዩ::';
$labels['desktopdisabled'] = 'ናይ ደስክቶፕ ጠቆምቲ ተኸልኪሎማ አለዉ::';
$labels['desktopunsupported'] = 'እዚ ጎስጓሲ ናይ ደስክቶፕ ጠቆምቲ ኣይተገጠመሉን::';
PKsc�\ZX�vv'newmail_notifier/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Geef browser melding weer bij een nieuw bericht';
$labels['desktop'] = 'Geef desktop meldingen weer bij een nieuw bericht';
$labels['sound'] = 'Speel het geluid af bij een nieuw bericht';
$labels['test'] = 'Test';
$labels['title'] = 'Nieuwe e-mail!';
$labels['body'] = 'Je hebt een nieuw bericht ontvangen.';
$labels['testbody'] = 'Dit is een test melding.';
$labels['desktopdisabled'] = 'Desktop meldingen zijn uitgeschakeld in uw browser.';
$labels['desktopunsupported'] = 'Uw browser ondersteund geen desktop meldingen.';
$labels['desktoptimeout'] = 'Sluit desktop melding';
PKsc�\A�����'newmail_notifier/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Показувати у браузері сповіщення про нові повідомлення';
$labels['desktop'] = 'Показувати на робочому столі сповіщення про нові повідомлення';
$labels['sound'] = 'Програвати звук при появленні нового повідомлення';
$labels['test'] = 'Тест';
$labels['title'] = 'Нова пошта!';
$labels['body'] = 'Ви отримали нове повідомлення.';
$labels['testbody'] = 'Це тестове сповіщення';
$labels['desktopdisabled'] = 'Повідомлення на робочому столі відключені у вашому браузері.';
$labels['desktopunsupported'] = 'Ваш браузер не підтримує повідомлення на робочому столі.';
$labels['desktoptimeout'] = 'Закрити сповіщення робочого столу';
PKsc�\���]]'newmail_notifier/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Toan browser notifikaasjes op nij berjocht';
$labels['desktop'] = 'Toan desktop notifikaasjes op nij berjocht';
$labels['sound'] = 'Spylje it lûd op nij berjocht';
$labels['test'] = 'Test';
$labels['title'] = 'Nije e-post!';
$labels['body'] = 'Jo hawwe in nij berjocht.';
$labels['testbody'] = 'Dit is in test notifikaasje.';
$labels['desktopdisabled'] = 'Desktop notifikaasjes binne útskeakele yn jo browser.';
$labels['desktopunsupported'] = 'Jo browser stipet gjin desktop notifikaasjes.';
$labels['desktoptimeout'] = 'Slút desktop notifikaasje';
PKsc�\�\97ss'newmail_notifier/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Anzeige im Browser bei neuer Nachricht';
$labels['desktop'] = 'Desktop-Benachrichtigung bei neuer Nachricht';
$labels['sound'] = 'Akustische Meldung bei neuer Nachricht';
$labels['test'] = 'Test';
$labels['title'] = 'Neue E-Mail!';
$labels['body'] = 'Sie haben eine neue Nachricht';
$labels['testbody'] = 'Dies ist eine Testbenachrichtigung';
$labels['desktopdisabled'] = 'Desktop-Benachrichtigungen sind deaktiviert.';
$labels['desktopunsupported'] = 'Ihr Browser unterstützt keine Desktop-Benachrichtigungen.';
$labels['desktoptimeout'] = 'Anzeige im Browser schliessen';
PKsc�\Y]���(newmail_notifier/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Mostrar notificaciones del navegador en nuevos mensajes';
$labels['desktop'] = 'Mostrar notificaciones de escritorio en nuevos mensajes';
$labels['sound'] = 'Ejecutar sonido en nuevos mensajes';
$labels['test'] = 'Probar';
$labels['title'] = '¡Nuevo correo electrónico!';
$labels['body'] = 'Has recibido un nuevo correo electrónico.';
$labels['testbody'] = 'Esta es una notificación de prueba.';
$labels['desktopdisabled'] = 'Notificaciones de escritorio está deshabilitado en tu navegador.';
$labels['desktopunsupported'] = 'Tu navegador no soporta notificaciones de escritorio.';
$labels['desktoptimeout'] = 'Cerrar notificaciones de escritorio';
PKsc�\|y<^��$newmail_notifier/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Yangi xat kelganda brauzer eslatmalarini tasvirlash';
$labels['desktop'] = 'Yangi xat kelganda ish stoli eslatmalarini tasvirlash';
$labels['sound'] = 'Yangi xat kelganda ovoz xabari berish';
$labels['test'] = 'Test';
$labels['title'] = 'Yangi xat!';
$labels['body'] = 'Siz yangi xat qabul qildingiz.';
$labels['testbody'] = 'Bu tekshirish maqsadida yuborilgan eslatma.';
$labels['desktopdisabled'] = 'Sizning brauzeringizda eslatmalar o‘chirilgan.';
$labels['desktopunsupported'] = 'Sizning brauzeringiz ish stoli eslatmalarini qo‘llab-quvvatla olmaydi.';
$labels['desktoptimeout'] = 'Ish stoli eslatmalarini yopish';
PKsc�\Nr����'newmail_notifier/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Ցուցադրել զննարկչի ծանուցում նոր հաղորդագրություն ստանալիս';
$labels['desktop'] = 'Ցուցադրել սեղանադրի ծանուցում նոր հաղորդագրություն ստանալիս';
$labels['sound'] = 'Ձայն հանել նոր հաղորդագրություն ստանալիս';
$labels['test'] = 'փորձարկում';
$labels['title'] = 'Նոր էլփոստ';
$labels['body'] = 'Դուք ստացաք նոր հաղորդագրություն';
$labels['testbody'] = 'Սա փորձնական ծանուցում է';
$labels['desktopdisabled'] = 'Սեղանադրի ծանուցումները Ձեր զննարկչում անջատված են';
$labels['desktopunsupported'] = 'Ձեր զննարկիչը չունի սեղանադրի ծանուցումների հնարավորություն։';
$labels['desktoptimeout'] = 'Փակել սեղանադրի ծանուցումը';
PKsc�\�H��hh'newmail_notifier/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Display browser notifications on new message';
$labels['desktop'] = 'Display desktop notifications on new message';
$labels['sound'] = 'Play the sound on new message';
$labels['test'] = 'Test';
$labels['title'] = 'New Email!';
$labels['body'] = 'You\'ve received a new message.';
$labels['testbody'] = 'This is a test notification.';
$labels['desktopdisabled'] = 'Desktop notifications are disabled in your browser.';
$labels['desktopunsupported'] = 'Your browser does not support desktop notifications.';
$labels['desktoptimeout'] = 'Close desktop notification';
PKsc�\]�F44'newmail_notifier/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = '當有新郵件,顯示瀏覽器通知';
$labels['desktop'] = '當有新郵件,顯示桌面通知';
$labels['sound'] = '當有新郵件,播放音效';
$labels['test'] = '測試';
$labels['title'] = '有新郵件!';
$labels['body'] = '收到一封新郵件';
$labels['testbody'] = '這是測試通知';
$labels['desktopdisabled'] = '您的瀏覽器已停用桌面通知功能';
$labels['desktopunsupported'] = '您的瀏覽器不支援桌面通知功能';
$labels['desktoptimeout'] = '關閉桌面通知';
PKsc�\����'newmail_notifier/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Mostra notificacions del navegador quan hi hagi un missatge nou';
$labels['desktop'] = 'Mostra notificacions de l\'escriptori quan hi hagi un missatge nou';
$labels['sound'] = 'Reprodueix el so quan hi hagi un missatge nou';
$labels['test'] = 'Prova';
$labels['title'] = 'Missatge nou!';
$labels['body'] = 'Heu rebut un missatge nou.';
$labels['testbody'] = 'Això és una notificació de prova.';
$labels['desktopdisabled'] = 'Les notificacions d\'escriptori estan deshabilitades al vostre navegador.';
$labels['desktopunsupported'] = 'El vostre navegador no permet les notificacions d\'escriptori.';
$labels['desktoptimeout'] = 'Tanca la notificació de l\'escriptori';
PKsc�\S^� ��$newmail_notifier/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Presentar notificationes de navigator quando un nove message arriva';
$labels['desktop'] = 'Presentar notificationes de scriptorio quando un nove message arriva';
$labels['sound'] = 'Facer sonar un sono quando un nove message arriva';
$labels['test'] = 'Test';
$labels['title'] = 'Nove e-mail!';
$labels['body'] = 'Vos ha recipite un nove message.';
$labels['testbody'] = 'Iste es un notification de test.';
$labels['desktopdisabled'] = 'Le notificationes de scriptorio ha essite disactivate in vostre navigator.';
$labels['desktopunsupported'] = 'Vostre navigator non supporta le notificationes de scriptorio.';
$labels['desktoptimeout'] = 'Clauder notification de scriptorio';
PKsc�\)![hh'newmail_notifier/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Prikaži obavijesti za nove poruke u pregledniku';
$labels['desktop'] = 'Prikaži obavijesti za nove poruke na desktopu';
$labels['sound'] = 'Zvučni signal za novu poruku';
$labels['test'] = 'Testiraj';
$labels['title'] = 'Novi email!';
$labels['body'] = 'Dobili ste novu poruku.';
$labels['testbody'] = 'Ovo je testna obavijest.';
$labels['desktopdisabled'] = 'Desktop obavijesti su onemogućene u vašem pregledniku.';
$labels['desktopunsupported'] = 'Vaš preglednik ne podržava desktop obavijesti.';
$labels['desktoptimeout'] = 'Zatvori desktop obavijesti';
PKsc�\�T��'newmail_notifier/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Показывать в браузере уведомление о приходе нового сообщения';
$labels['desktop'] = 'Показывать на рабочем столе уведомление о приходе нового сообщения';
$labels['sound'] = 'Подавать звуковой сигнал о приходе нового сообщения';
$labels['test'] = 'Проверить';
$labels['title'] = 'Свежая почта!';
$labels['body'] = 'Вы получили новое сообщение.';
$labels['testbody'] = 'Это тестовое уведомление.';
$labels['desktopdisabled'] = 'В Вашем браузере отключены уведомления на рабочем столе.';
$labels['desktopunsupported'] = 'Ваш браузер не поддерживает уведомления на рабочем столе.';
$labels['desktoptimeout'] = 'Закрыть уведомление на рабочем столе';
PKsc�\/(w>..'newmail_notifier/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'نمایش تذکرهای مرورگر برای پیام جدید';
$labels['desktop'] = 'نمایش تذکرهای رومیزی برای پیام جدید';
$labels['sound'] = 'پخش صدا برای پیام جدید';
$labels['test'] = 'آزمایش';
$labels['title'] = 'رایانامه‌ی جدید!';
$labels['body'] = 'شما یک پیام جدید دریافت کرده‌اید.';
$labels['testbody'] = 'این یک تذکر آزمایشی است.';
$labels['desktopdisabled'] = 'تذکرهای رومیزی در مرورگر شما غیرفعال شده‌اند.';
$labels['desktopunsupported'] = 'مرورگر شما تذکرهای رومیزی را پشتیبانی نمی‌کند.';
$labels['desktoptimeout'] = 'بستن تذکر دسکتاپ';
PKsc�\&�ZD��'newmail_notifier/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Birta tilkynningu í vafra þegar ný skilaboð berast';
$labels['desktop'] = 'Birta tilkynningu á skjáborði þegar ný skilaboð berast';
$labels['sound'] = 'Spila hljóðið þegar ný skilaboð berast';
$labels['test'] = 'Prófa';
$labels['title'] = 'Nýr tölvupóstur!';
$labels['body'] = 'Þú hefur fengið ný skilaboð.';
$labels['testbody'] = 'Þetta er prufutilkynning.';
$labels['desktopdisabled'] = 'Tilkynningar á skjáborði eru ekki virkar í vafranum þínum.';
$labels['desktopunsupported'] = 'Vafrinn þinn styður ekki tilkynningar á skjáborði.';
$labels['desktoptimeout'] = 'Loka tilkynningu á skjáborði';
PKsc�\/���'newmail_notifier/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Hiển thị thông báo trên trình duyệt khi có thư mới';
$labels['desktop'] = 'Hiển thị thông báo trên màn hình khi có thư mới';
$labels['sound'] = 'Thông báo bằng âm thanh khi có thư mới';
$labels['test'] = 'Kiểm tra';
$labels['title'] = 'Có thư mới!';
$labels['body'] = 'Bạn vừa nhận một thư mới';
$labels['testbody'] = 'Đây là thông báo kiểm tra';
$labels['desktopdisabled'] = 'Thông báo trên màn hình bị tắt ở trình duyệt của bạn';
$labels['desktopunsupported'] = 'Trình duyệt của bạn không hỗ trợ thông báo trên màn hình.';
$labels['desktoptimeout'] = 'Đóng hiển thị màn hình';
PKsc�\ϣ%��'newmail_notifier/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'แสดงการแจ้งเตือนของเบราเซอร์ในข้อความใหม่';
$labels['desktop'] = 'แสดงการแจ้งเตือนบนเดสก์ท็อปในข้อความใหม่';
$labels['sound'] = 'เล่นเสียงในข้อความใหม่';
$labels['test'] = 'ทดสอบ';
$labels['title'] = 'เมล์ใหม่!';
$labels['body'] = 'คุณได้รับข้อความใหม่แล้ว';
$labels['testbody'] = 'นี่คือการทดสอบแจ้งเตือน';
$labels['desktopdisabled'] = 'ปิดการแจ้งเตือนบนเดสก์ท็อปในเบราว์เซอร์ของคุณ';
$labels['desktopunsupported'] = 'เบราว์เซอร์ของคุณไม่สนับสนุนการแจ้งเตือนบนเดสก์ท็อป';
$labels['desktoptimeout'] = 'ปิดการแจ้งเตือนจากเดสก์ท็อป';
PKsc�\�`�|qq'newmail_notifier/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'إظهار رسالة تنبيه فى المتصفح عند وصول رسالة جديدة';
$labels['desktop'] = 'إظهار رسالة تنبيه على سطح المكتب عند وصول رسالة جديدة';
$labels['sound'] = 'التنبيه الصوتى عند وصول رسالة جديدة';
$labels['test'] = 'إختبار';
$labels['title'] = 'رسالة جديدة';
$labels['body'] = 'لديك رسالة جديدة';
$labels['testbody'] = 'هذه رسالة تجربية';
$labels['desktopdisabled'] = 'رسائل التنبيه على سطح المكتب غير مفعلة فى متصفح الانترنت الخاص بك';
$labels['desktopunsupported'] = 'المتصفح الخاص بك لا يدعم رسائل سطح المكتب';
$labels['desktoptimeout'] = 'اغلاق تنبيهات سطح المكتب';
PKsc�\ܿtȝ�'newmail_notifier/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Yeni məktubun gəlməsi haqda brauzerdə xəbər ver';
$labels['desktop'] = 'Yeni məktubun gəlməsi haqda iş masasında xəbər ver';
$labels['sound'] = 'Yeni məktubun gəlməsi haqda səs siqnalı ver';
$labels['test'] = 'Sınaq';
$labels['title'] = 'Yeni məktub!';
$labels['body'] = 'Sizə məktub gəldi';
$labels['testbody'] = 'Bu sınaq bildirişidir';
$labels['desktopdisabled'] = 'Sizin brauzerdə iş masasında bildiriş söndürülüb';
$labels['desktopunsupported'] = 'Sizin brauzer iş masasında bildiriş funksiyasını dəstəkləmir';
$labels['desktoptimeout'] = 'Masaüstü bildirişi bağla';
PKsc�\����'newmail_notifier/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Tampilkan pemberitahuan pada peramban saat ada pesan baru';
$labels['desktop'] = 'Tampilkan pemberitahuan pada desktop saat ada pesan baru';
$labels['sound'] = 'Mainkan suara saat ada pesan baru';
$labels['test'] = 'Uji';
$labels['title'] = 'Email Baru!';
$labels['body'] = 'Anda telah menerima sebuah pesan baru.';
$labels['testbody'] = 'Ini adalah percobaan pemberitahuan.';
$labels['desktopdisabled'] = 'Pemberitahuan di desktop dimatikan pada peramban Anda.';
$labels['desktopunsupported'] = 'Peramban Anda tidak mendukung pemberitahuan pada desktop';
$labels['desktoptimeout'] = 'Tutup pemberitahuan pada desktop';
PKsc�\s�rw��'newmail_notifier/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Értesítés megjelenítése böngészőben, amikor új üzenet érkezik';
$labels['desktop'] = 'Értesítés megjelenítése az asztalon, amikor új üzenet érkezik';
$labels['sound'] = 'Hang lejátszása új üzenet érkezésekor';
$labels['test'] = 'Próba';
$labels['title'] = 'Új üzenet!';
$labels['body'] = 'Új üzenet érkezett.';
$labels['testbody'] = 'Ez egy értesítési próba.';
$labels['desktopdisabled'] = 'A böngészőben tiltva van az asztali értesítések megjelenítése.';
$labels['desktopunsupported'] = 'A böngésző nem támogatja az asztali értesítések megjelenítését.';
$labels['desktoptimeout'] = 'Az értesítés bezárása';
PKsc�\��xx'newmail_notifier/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Afişează notificări în browser la mesaj nou.';
$labels['desktop'] = 'Afişează notificări desktop la mesaj nou.';
$labels['sound'] = 'Redă un sunet la mesaj nou.';
$labels['test'] = 'Testează';
$labels['title'] = 'E-mail nou!';
$labels['body'] = 'Ai primit un mesaj nou.';
$labels['testbody'] = 'Aceasta este o notificare de test.';
$labels['desktopdisabled'] = 'Notificările desktop sunt dezactivate în browser.';
$labels['desktopunsupported'] = 'Browser-ul dumneavoastră nu suportă notificări desktop.';
$labels['desktoptimeout'] = 'Închide notificarea de birou';
PKsc�\�0�88$newmail_notifier/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Montri atentigojn de retumilo pri nova mesaĝo';
$labels['desktop'] = 'Montri atentigojn de komputilo pri nova mesaĝo';
$labels['sound'] = 'Ludi sonon por nova mesaĝo';
$labels['test'] = 'Testi';
$labels['title'] = 'Nova retmesaĝo!';
$labels['body'] = 'Vi ricevis novan mesaĝon.';
$labels['testbody'] = 'Tio estas testo pri atentigo.';
$labels['desktopdisabled'] = 'Atentigoj de komputilo estas malŝaltitaj en via retumilo.';
$labels['desktopunsupported'] = 'Via retumilo ne subtenas atentigojn de komputilo.';
PKsc�\$*@��'newmail_notifier/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Afficher les notifications du navigateur pour les nouveaux courriels';
$labels['desktop'] = 'Afficher les notifications de bureau pour les nouveaux courriels ';
$labels['sound'] = 'Jouer le son pour les nouveaux courriels';
$labels['test'] = 'Test';
$labels['title'] = 'Nouveau courriel';
$labels['body'] = 'Vous avez reçu un nouveau courriel.';
$labels['testbody'] = 'Ceci est une notification de test.';
$labels['desktopdisabled'] = 'Les notifications du bureau sont désactivées dans votre navigateur.';
$labels['desktopunsupported'] = 'Votre navigateur ne prend pas en charge les notifications du bureau.';
$labels['desktoptimeout'] = 'Fermer la notification du bureau';
PKsc�\mEjfkk'newmail_notifier/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Prikaži dojave preglednika kada dođe nova poruka';
$labels['desktop'] = 'Prikaži dojave na desktopu kada dođe nova poruka';
$labels['sound'] = 'Pusti zvuk kada dođe nova poruka';
$labels['test'] = 'Test';
$labels['title'] = 'Novi Email!';
$labels['body'] = 'Primili ste novu poruku';
$labels['testbody'] = 'Ovo je probna dojava.';
$labels['desktopdisabled'] = 'Dojave na desktopu su onemogućene u vašem pregledniku.';
$labels['desktopunsupported'] = 'Vaš preglednik ne podržava dojave na desktopu.';
$labels['desktoptimeout'] = 'Zatvori dojavu na desktopu';
PKsc�\J����'newmail_notifier/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Wyświetlaj powiadomienia o nadejściu nowej wiadomości w przeglądarce';
$labels['desktop'] = 'Wyświetlaj powiadomienia o nadejściu nowej wiadomości na pulpicie';
$labels['sound'] = 'Odtwarzaj dźwięk o nadejściu nowej wiadomości';
$labels['test'] = 'Testuj powiadomienie';
$labels['title'] = 'Nowa wiadomość!';
$labels['body'] = 'Nadeszła nowa wiadomość.';
$labels['testbody'] = 'To jest testowe powiadomienie.';
$labels['desktopdisabled'] = 'Powiadomienia na pulpicie zostały zablokowane w twojej przeglądarce.';
$labels['desktopunsupported'] = 'Twoja przeglądarka nie obsługuje powiadomień na pulpicie.';
$labels['desktoptimeout'] = 'Zamknij powiadomienie pulpitu';
PKsc�\�'6Ŏ�'newmail_notifier/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['sound'] = 'नवीन संदेश आल्यास नाद करा';
$labels['test'] = 'चाचणी';
$labels['title'] = 'नवीन ईमेल';
$labels['body'] = 'तुमच्यासाठी नवीन संदेश आला आहे';
$labels['testbody'] = 'हा एक चाचणी निर्देश आहे';
PKsc�\��)�

'newmail_notifier/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = '新しいメッセージの通知をブラウザーに表示';
$labels['desktop'] = '新しいメッセージの通知をデスクトップに表示';
$labels['sound'] = '新しいメッセージが届くと音を再生';
$labels['test'] = 'テスト';
$labels['title'] = '新しい電子メールです!';
$labels['body'] = '新しいメッセージを受信しました。';
$labels['testbody'] = 'これはテストの通知です。';
$labels['desktopdisabled'] = 'ブラウザーでデスクトップ通知が無効になっています。';
$labels['desktopunsupported'] = 'ブラウザーがデスクトップ通知をサポートしていません。';
$labels['desktoptimeout'] = 'デスクトップ通知を閉じる';
PKsc�\�on�&&'newmail_notifier/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Vis varsel i nettlesaren ved ny melding';
$labels['desktop'] = 'Vis varsel på skrivebordet ved ny melding';
$labels['sound'] = 'Spill av lyd ved ny melding';
$labels['test'] = 'Test';
$labels['title'] = 'Ny e-post!';
$labels['body'] = 'Du har mottatt ei ny melding.';
$labels['testbody'] = 'Dette er eit testvarsel.';
$labels['desktopdisabled'] = 'Skrivebordsvarsel er slått av i din nettlesar.';
$labels['desktopunsupported'] = 'Din nettlesar støttar ikkje vising av varsel på skrivebordet.';
PKsc�\��壮�%newmail_notifier/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Amosar notificaciones del restolador nun mensaxe nuevu';
$labels['desktop'] = 'Amosar notificaciones d\'escritoriu nun mensaxe nuevu';
$labels['sound'] = 'Reproducir el soníu nun mensaxe nuevu';
$labels['test'] = 'Prueba';
$labels['title'] = '¡Mensaxe nuevu!';
$labels['body'] = 'Recibisti un mensaxe nuevu';
$labels['testbody'] = 'Esta ye una notificación de prueba';
$labels['desktopdisabled'] = 'Les notificaciones d\'escritoriu tán deshabilitaes nel to restolador.';
$labels['desktopunsupported'] = 'El to restolador nun sofita notificaciones d\'escritoriu.';
$labels['desktoptimeout'] = 'Zarrar notificación d\'escritoriu';
PKsc�\z���ww'newmail_notifier/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Прикажи обавештења о новим порукама у прегледачу';
$labels['desktop'] = 'Прикажи обавештења о новим порукама у систему';
$labels['sound'] = 'Пусти звук при новој поруци';
$labels['test'] = 'Испробај';
$labels['title'] = 'Нова порука!';
$labels['body'] = 'Примили сте нову поруку.';
$labels['testbody'] = 'Ово је пробно обавештење.';
$labels['desktopdisabled'] = 'Обавештења у систему су искључена у вашем прегледачу.';
$labels['desktopunsupported'] = 'Ваш прегледач не подржава обавештења у систему.';
$labels['desktoptimeout'] = 'Затвори обавештења у систему';
PKsc�\L�	̎�'newmail_notifier/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Browser-Notifikatioun bei neiem Message uweisen';
$labels['desktop'] = 'Desktop-Notifikatioun bei neiem Message uweisen';
$labels['sound'] = 'Dësen Toun bei neiem Message spillen';
$labels['test'] = 'Test';
$labels['title'] = 'Nei E-Mail!';
$labels['body'] = 'Du hues en neie Message kritt.';
$labels['testbody'] = 'Dëst ass eng Test-Benoorichtegung.';
$labels['desktopdisabled'] = 'Desktop-Notifikatioune sinn an dengem Browser ausgeschalt.';
$labels['desktopunsupported'] = 'Däi Browser ënnerstëtzt keng Desktop-Notifikatiounen.';
$labels['desktoptimeout'] = 'Browser-Notifikatioun zoumaachen';
PKsc�\�	4_��$newmail_notifier/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Diskouez kemennoù ar merdeer evit kemennadennoù nevez';
$labels['desktop'] = 'Diskouez kemennoù ar burev evit kemennadennoù nevez';
$labels['sound'] = 'Seniñ ar son pa kemennadenn nevez';
$labels['test'] = 'Taol-arnod';
$labels['title'] = 'Kemennadenn nevez !';
$labels['body'] = 'Resevet ho p\'eus ur postel nevez';
$labels['testbody'] = 'An dra se a zo un taol arnod kemenn';
$labels['desktopdisabled'] = 'Diweredekaet eo kemennoù ar burev en ho merdeer.';
$labels['desktopunsupported'] = 'N\'eo ket skoret kemennoù ar burev gant ho merdeer.';
$labels['desktoptimeout'] = 'Serr burev kemen';
PKsc�\�R���'newmail_notifier/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Прикажи известувања на прелистувачот за нова порака ';
$labels['desktop'] = 'Прикажи известувања на работната површина за нова порака';
$labels['sound'] = 'Пушти го звукот за нова порака ';
$labels['test'] = 'Тест';
$labels['title'] = 'Нова електронска пошта';
$labels['body'] = 'Имаш нова порака ';
$labels['testbody'] = 'Ова е тест известување ';
$labels['desktopdisabled'] = 'Известувањата на работната површина се исклучени во твојот прелистувач ';
$labels['desktopunsupported'] = 'Твојот прелистувач не подржува известувања на работната површина ';
$labels['desktoptimeout'] = 'Исклучи известувања на работната површина';
PKsc�\�,
DD'newmail_notifier/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'បង្ហាញ​ការ​ជូនដំណឹង​កម្មវិធី​អ៊ីនធឺណិត​ពេល​មាន​សារ​ថ្មី';
$labels['desktop'] = 'បង្ហាញ​ការ​ជូនដំណឹង​ផ្ទៃតុ​ពេល​មាន​សារ​ថ្មី';
$labels['sound'] = 'បន្លឺ​សំឡេង​ពេល​មាន​សារ​ថ្មី';
$labels['test'] = 'សាកល្បង';
$labels['title'] = 'មាន​សារ​ថ្មី!';
$labels['body'] = 'អ្នក​បាន​ទទួល​សារ​ថ្មី';
$labels['testbody'] = 'នេះ​ជា​ការ​ជូនដំណឹង​សាកល្បង។';
$labels['desktopdisabled'] = 'ការ​ជូនដំណឹង​ផ្ទៃតុ​ត្រូវ​បាន​បិទ​នៅ​ក្នុង​កម្មវិធី​អ៊ីនធឺណិត​របស់​អ្នក។';
$labels['desktopunsupported'] = 'កម្មវិធី​អ៊ីនធឺណិត​របស់​អ្នក​មិន​គាំទ្រ​ការ​ជូនដំណឹង​ផ្ទៃតុ។';
$labels['desktoptimeout'] = 'បិទ​ការ​ជូនដំណឹង​ផ្ទៃតុ';
PKsc�\��F(oo'newmail_notifier/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Шинэ мессеж ирэхэд мэдэгдэл харуулах';
$labels['desktop'] = 'Шинэ мэйл ирэх үед Дэлгэц дээр мэдэгдэл харуулах';
$labels['sound'] = 'Шинэ мэйл ирэхэд дуугарч мэдэгдэх';
$labels['test'] = 'Туршилт';
$labels['title'] = 'Шинэ Захиа!';
$labels['body'] = 'Та шинэ захиа хүлээн авлаа';
$labels['testbody'] = 'Энэ бол туршилтын мэдэгдэл.';
$labels['desktopdisabled'] = 'Таны хөтчийн Дэлгэцийн мэдэгдэл идэвхгүй байна.';
$labels['desktopunsupported'] = 'Таны вэб хөтөч дэлгэцийн мэдэгдэл зөвшөөрөхгүй байна.';
$labels['desktoptimeout'] = 'Дэлгэцийн мэдэгдэл хаах';
PKsc�\��_KK'newmail_notifier/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'איתות מהדפדפן על הגעת הודעות חדשות';
$labels['desktop'] = 'איתות משולחן העבודה על הגעת הודעות חדשות';
$labels['sound'] = 'השמעת איתות קולי בעת הגעה של הודעה חדשה';
$labels['test'] = 'בדיקה';
$labels['title'] = 'הודעה חדשה !';
$labels['body'] = 'התקבלה הודעה חדשה';
$labels['testbody'] = 'זה איתות לנסיון';
$labels['desktopdisabled'] = 'איתותים משולחן העבודה אינם פעילים בדפדפן שלך';
$labels['desktopunsupported'] = 'הדפדפן שלך אינו תומך באיתותים משולחן העבודה';
$labels['desktoptimeout'] = 'ביטול איתות משולחן העבודה על הגעת הודעות חדשות';
PKsc�\�(.e��'newmail_notifier/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Taispeáin fógraí sa líonléitheoir nuair a fhaightear teachtaireacht nua';
$labels['desktop'] = 'Taispeáin fógraí ar an deasc nuair a fhaightear teachtaireacht nua';
$labels['sound'] = 'Seinn an fhuaim nuair a bhíonn teachtaireacht nua ann';
$labels['test'] = 'Tástáil';
$labels['title'] = 'Ríomhphost Nua!';
$labels['body'] = 'Tá teachtaireacht nua agat.';
$labels['testbody'] = 'Níl sa rud seo ach fógra dearbhála.';
$labels['desktopdisabled'] = 'Tá fógraí deasca díchumasaithe i do líonléitheoir.';
$labels['desktopunsupported'] = 'Ní thacaíonn do líonléitheoir le fógraí deasca.';
$labels['desktoptimeout'] = 'Dún an fógra ar an ndeasc';
PKsc�\)dr�FF'newmail_notifier/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Vis browserbesked ved ny besked';
$labels['desktop'] = 'Vis skrivebordsbesked ved ny besked';
$labels['sound'] = 'Afspil en lyd ved ny besked';
$labels['test'] = 'Test';
$labels['title'] = 'Ny besked!';
$labels['body'] = 'Du har modtaget en ny besked.';
$labels['testbody'] = 'Dette er en test meddelelse.';
$labels['desktopdisabled'] = 'Skrivebordsbeskeder er deaktiveret i din browser.';
$labels['desktopunsupported'] = 'Din browser understøtter ikke skrivebordsbeskeder.';
$labels['desktoptimeout'] = 'Luk skrivebordsbesked';
PKsc�\<�r�qq'newmail_notifier/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Prikaži obvestilo za nova sporočila';
$labels['desktop'] = 'Prikaži obvestila na namizju za vsa nova sporočila';
$labels['sound'] = 'Ob novem sporočilu predvajaj zvok';
$labels['test'] = 'Test';
$labels['title'] = 'Novo sporočilo';
$labels['body'] = 'Prejeli ste novo sporočilo.';
$labels['testbody'] = 'To je testno obvestilo.';
$labels['desktopdisabled'] = 'Obvestila na namizju so v vašem brskalniku onemogočena.';
$labels['desktopunsupported'] = 'Vaš brskalnik ne podpira izpis obvestil na namizju.';
$labels['desktoptimeout'] = 'Zapri obvestila na namizju';
PKsc�\ķ;iTT$newmail_notifier/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['desktop'] = 'إظهار إخطارات عند تلقي رسائل جديدة';
$labels['sound'] = 'إصدار نغمة عند وصول رسالة جديدة';
$labels['test'] = 'تجريب';
$labels['title'] = 'رسالة إلكترونية جديدة !';
$labels['body'] = 'لقد تلقيتَ رسالة جديدة.';
$labels['testbody'] = 'هذا إخطار تجريبي.';
$labels['desktopunsupported'] = 'إنَّ متصفحك لا يدعم الإخطارات المكتبية.';
$labels['desktoptimeout'] = 'إغلاق إخطارات المكتب';
PKsc�\�XS�TT'newmail_notifier/localization/si_LK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['test'] = 'පිරික්සන්න';
PKsc�\�"��'newmail_notifier/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Benachrichtigung im Browser bei neuer Nachricht';
$labels['desktop'] = 'Desktop-Benachrichtigung bei neuer Nachricht';
$labels['sound'] = 'Akustische Meldung bei neuer Nachricht';
$labels['test'] = 'Test';
$labels['title'] = 'Neue E-Mail!';
$labels['body'] = 'Sie haben eine neue Nachricht';
$labels['testbody'] = 'Dies ist eine Testbenachrichtigung';
$labels['desktopdisabled'] = 'Desktop-Benachrichtigungen sind deaktiviert.';
$labels['desktopunsupported'] = 'Ihr Browser unterstützt keine Desktop-Benachrichtigungen.';
$labels['desktoptimeout'] = 'Desktop-Benachrichtigung geschlossen.';
PKsc�\ʾ��'newmail_notifier/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Avisera nytt meddelande i webbläsaren';
$labels['desktop'] = 'Avisera nytt meddelande på skrivbordet';
$labels['sound'] = 'Avisera nytt meddelande med ljudsignal';
$labels['test'] = 'Prova';
$labels['title'] = 'Nytt meddelande!';
$labels['body'] = 'Du har mottagit ett nytt meddelande.';
$labels['testbody'] = 'Denna avisering är ett prov.';
$labels['desktopdisabled'] = 'Avisering på skrivbordet är avstängt i webbläsaren.';
$labels['desktopunsupported'] = 'Avisering på skrivbordet stöds inte av webbläsaren.';
$labels['desktoptimeout'] = 'Stäng avisering på skrivbordet';
PKsc�\�W����$newmail_notifier/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'يېڭى ئۇچۇر كەلگەندە تور كۆرگۈچ ئۇقتۇرۇشىنى كۆرسىتىش';
$labels['desktop'] = 'يېڭى خەت كەلگەندە ئۈستەل يۈزى ئۇقتۇرۇشىنى كۆرسىتىش';
$labels['sound'] = 'يېڭى ئۇچۇر كەلگەندە ئاۋاز چىقىرىش';
$labels['test'] = 'سىناق';
$labels['title'] = 'يېڭى خەت!';
$labels['body'] = 'سىزگە بىر يېڭى خەت كەلدى.';
$labels['testbody'] = 'بۇ بولسا سىناق ئۇقتۇرۇش.';
$labels['desktopdisabled'] = 'ئۈستەل يۈزى ئۇقتۇرۇشى سىزنىڭ تور كۆگۈچىڭىزدە ئىتىك.';
$labels['desktopunsupported'] = 'سىزنىڭ تور كۆرگۈچىڭىز ئۈستەل يۈزى ئۇقتۇرۇشىنى قوللىمايدۇ.';
$labels['desktoptimeout'] = 'ئۈستەل يۈزى ئۇقتۇرۇشىنى تاقاش';
PKsc�\A���'newmail_notifier/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = '새로운 메시지가 도착하면 브라우저 알림 표시';
$labels['desktop'] = '새로운 메시지가 도착하면 바탕화면 알림 표시';
$labels['sound'] = '새로운 메시지가 도착하면 소리 재생';
$labels['test'] = '테스트';
$labels['title'] = '새 이메일 도착!';
$labels['body'] = '새 메시지가 수신되었습니다.';
$labels['testbody'] = '이것은 테스트 알림입니다.';
$labels['desktopdisabled'] = ' 브라우저에서 바탕화면 알림이 비활성화되었습니다.';
$labels['desktopunsupported'] = '브라우저가 바탕화면 알림을 지원하지 않습니다.';
$labels['desktoptimeout'] = '바탕화면 알림 닫기';
PKsc�\�bX��'newmail_notifier/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Amosar notificacións no navegador cando entre unha mensaxe nova';
$labels['desktop'] = 'Amosar notificacións no escritorio cando chegue unha mensaxe nova';
$labels['sound'] = 'Reproducir un son cando chegue unha nova mensaxe';
$labels['test'] = 'Proba';
$labels['title'] = 'Novo Correo!';
$labels['body'] = 'Recibiches unha nova mensaxe';
$labels['testbody'] = 'Esta é unha notificación de proba';
$labels['desktopdisabled'] = 'As notificacións de escritorio están desactivadas no teu navegador';
$labels['desktopunsupported'] = 'O teu navegador non soporta notificacións de escritorio.';
$labels['desktoptimeout'] = 'Pechar notificación de escritorio';
PKsc�\[X����'newmail_notifier/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'visualizza notifica nel browser per nuovi messaggi';
$labels['desktop'] = 'visualizza notifiche sul desktop per nuovi messaggi';
$labels['sound'] = 'riproduci il suono per nuovi messaggi';
$labels['test'] = 'Prova';
$labels['title'] = 'Nuovo Messaggio';
$labels['body'] = 'Hai ricevuto un nuovo messaggio';
$labels['testbody'] = 'Notifica di prova';
$labels['desktopdisabled'] = 'Le notifiche sul desktop sono disabilitate nel tuo browser';
$labels['desktopunsupported'] = 'il tuo browser non supporta le notifiche sul desktop';
$labels['desktoptimeout'] = 'Chiudi la notifica visualizzata sul desktop';
PKsc�\�����'newmail_notifier/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Mostrar notificaciones del navegador al recibir un nuevo mensaje';
$labels['desktop'] = 'Mostrar notificaciones de escritorio al recibir un nuevo mensaje';
$labels['sound'] = 'Reproducir sonido al recibir un nuevo mensaje';
$labels['test'] = 'Prueba';
$labels['title'] = '¡Mensaje nuevo!';
$labels['body'] = 'Ha recibido un mensaje nuevo.';
$labels['testbody'] = 'Esta es una notificación de prueba.';
$labels['desktopdisabled'] = 'Las notificaciones de escritorio están deshabilitadas en su navegador.';
$labels['desktopunsupported'] = 'Su navegador no soporta notificaciones de escritorio.';
$labels['desktoptimeout'] = 'Cerrar notificación de escritorio';
PKsc�\�Hj��'newmail_notifier/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'ബ്രൌസര്‍ അറിയിപ്പുകള്‍ പുതിയ സന്ദേശത്തില്‍ കാണിക്കുക';
$labels['desktop'] = 'ഡെസ്ക്ക്ടോപ്പ് അറിയിപ്പുകള്‍ പുതിയ സന്ദേശത്തില്‍ കാണിക്കുക';
$labels['sound'] = 'പുതിയ സന്ദേശത്തില്‍ സബ്ദം കേള്‍പ്പിക്കുക';
$labels['test'] = 'പരീക്ഷിക്കുക';
$labels['title'] = 'പുതിയ സന്ദേശം !';
$labels['body'] = 'താങ്കള്‍ക്ക് ഒരു പുതിയ സന്ദേശം ലഭിച്ചു';
$labels['testbody'] = 'ഇത് ഒരു പരീക്ഷണ അറിയിപ്പാണ്.';
$labels['desktopdisabled'] = 'താങ്കളുടെ ബ്രൌസറില്‍ ഡെസ്ക്ക്ടോപ്പ് നോട്ടിഫിക്കേഷന്‍ പ്രവര്‍ത്തനരഹിതമാണ്.';
$labels['desktopunsupported'] = 'താങ്കളുടെ ബ്രൌസ്സര്‍ ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകള്‍ പിന്‍തുണയ്ക്കുന്നില്ല.';
$labels['desktoptimeout'] = 'ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ അടയ്ക്കുക';
PKsc�\��@hh'newmail_notifier/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Toon melding in browser bij nieuw bericht';
$labels['desktop'] = 'Toon melding op bureaublad bij nieuw bericht';
$labels['sound'] = 'Geluid afspelen bij nieuw bericht';
$labels['test'] = 'Test';
$labels['title'] = 'Nieuwe e-mail!';
$labels['body'] = 'U heeft een nieuw bericht ontvangen.';
$labels['testbody'] = 'Dit is een testmelding.';
$labels['desktopdisabled'] = 'Bureaubladmeldingen zijn uitgeschakeld in uw browser.';
$labels['desktopunsupported'] = 'Uw browser ondersteunt geen bureaubladmeldingen.';
$labels['desktoptimeout'] = 'Sluit bureaubladmelding';
PKsc�\n�\�aa'newmail_notifier/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Dangos hysbysiadau porwr ar neges newydd';
$labels['desktop'] = 'Dangos hysbysiadau penbwrdd ar neges newydd';
$labels['sound'] = 'Chwarae sŵn ar neges newydd';
$labels['test'] = 'Prawf';
$labels['title'] = 'Ebost Newydd!';
$labels['body'] = 'Rydych wedi derbyn neges newydd.';
$labels['testbody'] = 'Hysbysiad prawf yw hwn.';
$labels['desktopdisabled'] = 'Mae hysbysiadau penbwrdd wedi ei analluogi yn eich porwr';
$labels['desktopunsupported'] = 'Nid yw eich porwr yn cefnogi hysbysiadau penbwrdd.';
$labels['desktoptimeout'] = 'Cau hysbysiad penbwrdd';
PKsc�\����dd'newmail_notifier/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Display browser notifications on new message';
$labels['desktop'] = 'Display desktop notifications on new message';
$labels['sound'] = 'Play sound on new message';
$labels['test'] = 'Test';
$labels['title'] = 'New Email!';
$labels['body'] = 'You\'ve received a new message.';
$labels['testbody'] = 'This is a test notification.';
$labels['desktopdisabled'] = 'Desktop notifications are disabled in your browser.';
$labels['desktopunsupported'] = 'Your browser does not support desktop notifications.';
$labels['desktoptimeout'] = 'Close desktop notification';
PKsc�\�ǯ���'newmail_notifier/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Vís kaga kunngerðir tá ið nýtt boð verður stovna';
$labels['desktop'] = 'Vís skrivaraborð kunngerðir tá ið nýtt boð er stovna';
$labels['sound'] = 'Spæl ljóð tá ið nýtt boð verður móttikið';
$labels['test'] = 'Roynd';
$labels['title'] = 'Nýggjur teldupostur!';
$labels['body'] = 'Tú hevur móttikið eini boð.';
$labels['testbody'] = 'Hettar eru eini royndar boð.';
$labels['desktopdisabled'] = 'Skrivaraborð kunngerðir eru sløktar í tínum kaga.';
$labels['desktopunsupported'] = 'Tín kagi studlar ikki skriviborða kunngerðir.';
$labels['desktoptimeout'] = 'Sløkk skriviborða kunngerðir';
PKsc�\ow���'newmail_notifier/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Pranešti apie naujus laiškus naršyklėje';
$labels['desktop'] = 'Pranešti apie naujus laiškus sistemos pranešimu';
$labels['sound'] = 'Pranešti apie naujus laiškus garsu';
$labels['test'] = 'Bandymas';
$labels['title'] = 'Naujas laiškas!';
$labels['body'] = 'Jūs gavote naują laišką.';
$labels['testbody'] = 'Tai – bandomasis pranešimas.';
$labels['desktopdisabled'] = 'Jūsų naršyklėje sistemos pranešimai išjungti.';
$labels['desktopunsupported'] = 'Jūsų naršyklėje sistemos pranešimai nepalaikomi.';
$labels['desktoptimeout'] = 'Užverti sistemos pranešimą';
PKsc�\i����'newmail_notifier/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Mostrar notificação quando uma nova mensagem chegar';
$labels['desktop'] = 'Mostrar alerta no ambiente de trabalho de nova mensagem';
$labels['sound'] = 'Alerta sonoro para nova mensagem';
$labels['test'] = 'Testar';
$labels['title'] = 'Novo email!';
$labels['body'] = 'Você recebeu uma nova mensagem.';
$labels['testbody'] = 'Isto é uma notificação de teste.';
$labels['desktopdisabled'] = 'As notificações no ambiente de trabalho estão desactivadas no seu navegador.';
$labels['desktopunsupported'] = 'O seu navegador não suporta notificações no ambiente de trabalho';
$labels['desktoptimeout'] = 'Fechar notificação no ambiente de trabalho';
PKsc�\Q�z�YY'newmail_notifier/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New Mail Notifier plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-newmail_notifier/
*/

$labels['basic'] = 'Εμφανίση ειδοποιήσεων πρόγραμματος περιήγησης στο νέο μήνυμα';
$labels['desktop'] = 'Εμφάνιση ειδοποιήσεων στην επιφάνεια εργασίας για νέο μήνυμα ';
$labels['sound'] = 'Ηχητική ειδοποίηση κατά την λήψη νέων μηνυμάτων';
$labels['test'] = 'Δοκιμή';
$labels['title'] = 'Nεο Email!';
$labels['body'] = 'Έχετε λάβει ένα νέο μήνυμα.';
$labels['testbody'] = 'Αυτή είναι μια δοκιμή ειδοποίησης.';
$labels['desktopdisabled'] = 'Οι ειδοποιήσεις στην επιφάνεια εργασίας ειναι απενεργοποιημένες στον περιηγητή σας.';
$labels['desktopunsupported'] = 'Ο περιηγητής σας δεν υποστηρίζει ειδοποιήσεις στην επιφάνεια εργασίας.';
$labels['desktoptimeout'] = 'Κλείσιμο ειδοποίησης επιφάνειας εργασίας';
PKsc�\KG�&��%newmail_notifier/newmail_notifier.phpnu�[���<?php

/**
 * New Mail Notifier plugin
 *
 * Supports three methods of notification:
 * 1. Basic   - focus browser window and change favicon
 * 2. Sound   - play wav file
 * 3. Desktop - display desktop notification (using window.Notification API)
 *
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * Copyright (C) Kolab Systems AG
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class newmail_notifier extends rcube_plugin
{
    public $task = 'mail|settings';

    private $rc;
    private $notified;
    private $opt = [];
    private $exceptions = [];


    /**
     * Plugin initialization
     */
    function init()
    {
        $this->rc = rcmail::get_instance();

        // Preferences hooks
        if ($this->rc->task == 'settings') {
            $this->add_hook('preferences_list', [$this, 'prefs_list']);
            $this->add_hook('preferences_save', [$this, 'prefs_save']);
        }
        else { // if ($this->rc->task == 'mail') {
            // add script when not in ajax and not in frame and only in main window
            if ($this->rc->output->type == 'html' && empty($_REQUEST['_framed']) && $this->rc->action == '') {
                $this->add_texts('localization/');
                $this->rc->output->add_label('newmail_notifier.title', 'newmail_notifier.body');
                $this->include_script('newmail_notifier.js');
            }

            if ($this->rc->action == 'refresh') {
                // Load configuration
                $this->load_config();

                $this->opt['basic']   = $this->rc->config->get('newmail_notifier_basic');
                $this->opt['sound']   = $this->rc->config->get('newmail_notifier_sound');
                $this->opt['desktop'] = $this->rc->config->get('newmail_notifier_desktop');

                if (!empty($this->opt)) {
                    // Get folders to skip checking for
                    $exceptions = ['drafts_mbox', 'sent_mbox', 'trash_mbox', 'junk_mbox'];
                    foreach ($exceptions as $folder) {
                        $folder = $this->rc->config->get($folder);
                        if (strlen($folder) && $folder != 'INBOX') {
                            $this->exceptions[] = $folder;
                        }
                    }

                    $this->add_hook('new_messages', [$this, 'notify']);
                }
             }
        }
    }

    /**
     * Handler for user preferences form (preferences_list hook)
     */
    function prefs_list($args)
    {
        if ($args['section'] != 'mailbox') {
            return $args;
        }

        // Load configuration
        $this->load_config();

        // Load localization and configuration
        $this->add_texts('localization/');

        if (!empty($_REQUEST['_framed'])) {
            $this->rc->output->add_label('newmail_notifier.title', 'newmail_notifier.testbody',
                'newmail_notifier.desktopunsupported', 'newmail_notifier.desktopenabled',
                'newmail_notifier.desktopdisabled'
            );
            $this->include_script('newmail_notifier.js');
        }

        // Check that configuration is not disabled
        $dont_override = (array) $this->rc->config->get('dont_override', []);

        foreach (['basic', 'desktop', 'sound'] as $type) {
            $key = 'newmail_notifier_' . $type;
            if (!in_array($key, $dont_override)) {
                $field_id = '_' . $key;
                $input    = new html_checkbox(['name' => $field_id, 'id' => $field_id, 'value' => 1]);
                $content  = $input->show($this->rc->config->get($key))
                    . ' ' . html::a(['href' => '#', 'onclick' => 'newmail_notifier_test_'.$type.'(); return false'],
                        $this->gettext('test'));

                $args['blocks']['new_message']['options'][$key] = [
                    'title' => html::label($field_id, rcube::Q($this->gettext($type))),
                    'content' => $content
                ];
            }
        }

        $type = 'desktop_timeout';
        $key  = 'newmail_notifier_' . $type;

        if (!in_array($key, $dont_override)) {
            $field_id = '_' . $key;
            $select   = new html_select(['name' => $field_id, 'id' => $field_id, 'class' => 'custom-select']);

            foreach ([5, 10, 15, 30, 45, 60] as $sec) {
                $label = $this->rc->gettext(['name' => 'afternseconds', 'vars' => ['n' => $sec]]);
                $select->add($label, $sec);
            }

            $args['blocks']['new_message']['options'][$key] = [
                'title'   => html::label($field_id, rcube::Q($this->gettext('desktoptimeout'))),
                'content' => $select->show((int) $this->rc->config->get($key))
            ];
        }

        return $args;
    }

    /**
     * Handler for user preferences save (preferences_save hook)
     */
    function prefs_save($args)
    {
        if ($args['section'] != 'mailbox') {
            return $args;
        }

        // Load configuration
        $this->load_config();

        // Check that configuration is not disabled
        $dont_override = (array) $this->rc->config->get('dont_override', []);

        foreach (['basic', 'desktop', 'sound'] as $type) {
            $key = 'newmail_notifier_' . $type;
            if (!in_array($key, $dont_override)) {
                $args['prefs'][$key] = !empty(rcube_utils::get_input_value('_' . $key, rcube_utils::INPUT_POST));
            }
        }

        $option = 'newmail_notifier_desktop_timeout';
        if (!in_array($option, $dont_override)) {
            if ($value = (int) rcube_utils::get_input_value('_' . $option, rcube_utils::INPUT_POST)) {
                $args['prefs'][$option] = $value;
            }
        }

        return $args;
    }

    /**
     * Handler for new message action (new_messages hook)
     */
    function notify($args)
    {
        // Already notified or unexpected input
        if ($this->notified || empty($args['diff']['new'])) {
            return $args;
        }

        $mbox      = $args['mailbox'];
        $storage   = $this->rc->get_storage();
        $delimiter = $storage->get_hierarchy_delimiter();

        // Skip exception (sent/drafts) folders (and their subfolders)
        foreach ($this->exceptions as $folder) {
            if (strpos($mbox.$delimiter, $folder.$delimiter) === 0) {
                return $args;
            }
        }

        // Check if any of new messages is UNSEEN
        $deleted = $this->rc->config->get('skip_deleted') ? 'UNDELETED ' : '';
        $search  = $deleted . 'UNSEEN UID ' . $args['diff']['new'];
        $unseen  = $storage->search_once($mbox, $search);

        if ($unseen->count()) {
            $this->notified = true;

            $this->rc->output->set_env('newmail_notifier_timeout', $this->rc->config->get('newmail_notifier_desktop_timeout'));
            $this->rc->output->command('plugin.newmail_notifier',
                [
                    'basic'   => $this->opt['basic'],
                    'sound'   => $this->opt['sound'],
                    'desktop' => $this->opt['desktop'],
                ]
            );
        }

        return $args;
    }
}
PKsc�\|�>B>Bnewmail_notifier/favicon.iconu�[���@@ (B(@� ���v��)�	�	��)��v�UNA'UO?���7���4'����������������������UU@TP@�TO@�TO@���7���7���7���0������������������������������TOA^TO@�TO@�TO@�TO@���7���7���7���7�7o��U������������������2����2����������������SOA7TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7��9?��l������������������������������������(���TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���8���6!������������������������������������TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���;
������������������������������������TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7�7f��������������������������������������TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���8��69���C��������������������������������>rm�SO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���8���5��L��������������������������������;wt�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�8���@��J��������������������������������<vs�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�6^��p������������������������������������0���TO@�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7.��M����������������������������������������;xu�TO@�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���=��N��������������������������������������������;xu�TO@�TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�8w��+��x������������������������������������������������-���TO@�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7��7J��W����������������������������������������������������8}{�TO@�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���8)��S��������������������������������������������������������9zx�TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7������������������������������������������������������������TO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�7o��UIaW���������������������������������������������������������J^T�SO@�TO@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���8�TO@�TO@�TO@�TO@�TO@�������������������������������������������TO@�TO@�TO@�TO@�TO@�TO@�WRC�<���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�SPB���������������������SPB�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�UPA��~u��������ς���9���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�$�������������������$���TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�rnc����������������������h���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�����������������TO@�TO@�TO@�TO@�TO@�TO@�TO@�a\O������������������������������ٱ���O���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�����������������TO@�TO@�TO@�TO@�TO@�YTE������������������������������������������ԙ���@���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�������������TO@�TO@�TO@�TO@�UPA�|yo����������������������������������������������������}���9���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�SO@�?rm���������?rm�SO@�TO@�TO@�lh\����������������������������������������������������������������^���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�SPA���������SPA�TO@�`[N������������������������������������������������������������������������ث���L���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�+�������+���WRC���|��������������������������������������������������������������������������������ю���<���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�$���$���xtj����������������������������������������������������������������������������������������������w���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�gcV������������������������������������������������������������������������������������������������������۹���V���7���7���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@������������������������������������������������������������������������������������������������������������������բ���8���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@������������������������������������������������������������������������������������������������������������������������ֲ���7���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�]XJ��������������������������������������������������������������������������������������������������������������������������P���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@������������������������������������������������������������������������������������������������������������������������������԰���7���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@����������������������������������������������������������������������������������������������������������������������������������8���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�lh[���������������������������������������������������������������������������������������������������������������������������������n���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@������������������������������������������������������������������������������������������������������������������������������������Ӫ���7���7���7���7���7���7���7���7���7���7�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@����������������������������������������������������������������������������������������������������������������������������������������7���7���7���7���7���7���7���7���7���7�SMB�TO?�TO@�TO@�TO@�TO@�TO@�TO@�TO@�TO@����������������������������������������������������������������������������������������������������������������������������������������7���7���7���7���7���7���7���7���7���6�ULBSOA�TO@�TO@�TO@�TO@�TO@�TO@�VQB��������������������������������������������������������������������������������������������������������������������������������������;���7���7���7���7���7���7���8���8 UPB6UO@�TO@�TO@�TO@�TO@�\WI��������������������������������������������������������������������������������������������������������������������������������������L���7���7���7���7���6��6=TOA^TO@�TO@�TO@�b^P��������������������������������������������������������������������������������������������������������������������������������������]���7���7���7�7o��U]FFTP@�TO@�a]O��������������������������������������������������������������������������������������������������������������������������������������W���7���7���3UN@$_ZL��������������������������������������������������������������������������������������������������������������������������������������L��7*��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������̤�������������������������������������������������������������������������������������������������������������������������������������e��������������������������������������������������������������������������������������������������������������������������������ݞ������������������������������������������������������������������������������������������������������������������������������������7�����������������������������������������������������������������������������������������������������������������������������������a��������������������������������������������������������������������������������������������������������������������������ۜ����������������������������������������������������������������������������������������������������������������������������������j��������������������������������������������������������������������������������������������������������������������ݤ����������������������������������������������������������������������������������������������������������������������������2���������������������������������������������������������������������������������������������������������������W���m��������������������������������������������������������������������������������������������������������ܨ��̑���������������������������������������������������������������������������������������������������������̤�����������������������������������������������������������������������������������������������������͓���������������������������������������������������������������������������������������������^���������������������������������������������������������������������������������ܦ���*�����������������������������������������������������������������������������K������[���������������������������������������������������������������ܒ���������M��˭������������������������������������������������ہ������
���J��̈��̳�������������������������������}�����|?����?�p�����@�����������������������?���������?�����?�������������������������������������?�����������������������������?���������PKsc�\{���)�)newmail_notifier/sound.mp3nu�[���ID3
oTDRC2021TBPM0TIT2Caedrium Notification.mp3TPE1Renan Andrade TorrenteCOMM)XXXLicense: can be used for commercial and personal applications, as long as you credit my work.
The same applies to .wav version.

Contact: renan.torrente@hotmail.comTXXXTRACKTOTALTCOPRenan Andrade TorrenteTENCLAMETLANTPUB��T�����5�1� �7�
��ao�������!���'�s�B����I	��'���Bg���,�!G?��s�8v]�@���U��7Z��o:���)+�/�@#[���,�FA����=�{�p�FX=-%�R��ywiU}ES�q]MΑv�@(/w�lO]�>���dž]�U�QĖ��T�C��
]Eo���9U(�=��:J���}�S�/�ݫ-��F��C�f���9=I)��fu7F��|�b����p<	�s#Q��F�B&�
�7���1�*6+��ш���I}������H��
�Q����a|�ϼ�,^�.�����~�(O��۔�]�'&9�q�w�����*�w	����T�,��
A	O���O�)����$P��K*="2��ADF~W&�weܚ�Ӌ�'��3���(;!W5��ד��������G-B?�Kʖ��
��6���V2�I�׎Bݑ+�q֐�M"([yW���l�R#"1���X�+~\�q�&�`-�W�����?��?+=���v��"(.���T��
�G�q��F��u�4�i(�aL�2c�@�bt�[ߒM���vj�pp�LJx���&��S��_�ɭ��S�W�]BxR���gW��ؖ�$�D	'\�y��A*8	���Zñ�l�mК�~�/�G	Z���[T�A�����GF�ȃ��G���8�w5g��v��_���
i�$F��+���T�Gs
\�W��K�`�-4�˥��Bhi۩\�>$��l/rjK4�a��{]D��L0wIс)�;(��j�ep��ڸ�5BDz3$�H�a��ʝ��!+kQ�>4N���.d�W(zb�B"V�
�P��b���I��H�R-���{.�290�wӾN��/�-af������,�mva�H��T�J�
mE]� �N��}��6�M���`c��WYd���i��Z�+lJ�j�$Ӆ��a*����v�\�x��C�����ʚ�O��������(/
�$�BN���@X4���R3��o`]�~n�u��xcV���A�#�ެ~��;��+�T�p�䏸�E��B����t%/��F00F���T��
�EU��G�U(����&Xd �Yށ�& �G�ʅ*gI[_z�k0}��#yX��
j[qg���5�F��_��o�ظ�G����n`�
�;�)0�g��Ե�L��]�d&��E2���ן��X�	��J�j�%D�)��:��ʗ�?O�T;���	�+����ݴ<l@1h�}��$��T�`�
8�_콧�@*������ƺ�Lm��2��#��*)����{��K%/��R�ʻAB��H����Y�|Ď��W�~Vzs��C�v�h�������W�I�?;-c��Q5�IR_HLOzȄ{�@K���,C+u&a���)m����g�_�o����O���4"	���m�~ҚU���T����
�[���i�j��$S̪6ɂT�?��P� v�ZtذO��|�7zRfc�p���ߓF�a�D����]�ɉ���P�yiy��H*2���*T��쒬S9��f�,Yև����POT�m���#��u�h���E���8@���8�A�r���PC�
̄A+�T�v:�
MEU-ઁ,������)���)�
�X;ͫ�̥����̔t)ur��cb����F_��3�*�	��`��,�_�����"��7�c��*�Dȴ�!�������L����xٝ�!k�[�&�����厯�\[�cѿ�oƟ�`�~��ajn�h�
�n��OmU��Z@œ�B��T�a�
	mS���&�*5��:CW���I���o?[�Ŭ\w�Ɂ��ʫ*����O�ߦ6����%����~���]"�� �͝{�����X��Ɓ y���N��o�W��.�<�ѥ@,��=z�bw�������g��	��ld��ij��C��K)!q��ym�z�A�	��3:׼�?
i�mD)[��T���	Q_�1��)�j��6��bV߬C%�'��Ͽ��'��&g�o�y�� +������;�(�!�Ba���~r������^_�1P�3�f�����҅Զ�Ԑs�G�;��������G��k��!�@;��aO��:C��T5�V1c1#�O��5;��,g$���l��@f���%��]���T̟j!	EQ��M�&��5�5�����R��FЏV��7�[a�l�@|I�=�Oz�Ta,Y�6����+�!���o�S+���������_�F����%�����ͽ��X�
�Z$�5����}����z�!��wv�Q�2����\��Q����M=�R�����/]�� *���~��T��i+�	-E���)��5�5��jF���K<&Q�5��#B��N쟂,oi�^��c.��D�_� ���7(����o�����r�$eʃ-�ԗ��M%c_D7L�E�]�}P�/�b�0kc�i�����e���"߫�}����o,-���,��~��W/���#⫆Ez��m˱J���T�D%6	?�1L���u��"�$\����r�g0ݑп���U�?)��\��Yu�9$�B�=r��a��hC�6 �y��DA0����[�2�{\�X��jc)�@�����v�������86R�%�������i�9���<�6�)�T?���8��M��,ܼĝ�@�p_��6�T�seB	5M$�����	�.��;J�w�ò�� �<%O(��81HLyx�&v��y%r�2��[��S~ؒPH�}���5*�Sm:�ry1]���)��[��Vw���T�C��C��J����8Q�O-6�)B㰳�/��2 ��LjJ'�G�im@�g��tUP0�gm��c�� 9��R��Ṯ�N�'Ll��5���A3h%��l�HF�ۋ�|����ڕ����;�E�iO��O�������=Ό�;�y�Pȶ7�HD1v�\���i��ʙ�q���L
x0T�"
e���_��:�}n<Q%��dD�����rC�d��b*���q45i\p
h��{���d��T̈]�c7�la��%�
�	<H�����1e��kD9�(�����(�= �QvO�"G5|w���`(uK�2�j�rߩG�C�O_�b�[��]��d�[iǺq>t(��j�&��Y�8�r�O�,�82U��4\D�'�K����ѪJ?ҿ��� @�%�B\Q9���
�����ͣ7�� ��7>��T�f n�kC�<eq(4��f�C�ˋ��n��ԭ��In��.��V�;���V�ejjYdd'|�.��@�iH+�:�=yM1���p3\�=��S�ݰh�����OO��e��9��0o��Ё� N(%vipn�()
�����dfHq1��{��?�����)$nId�H�(ޫ�@T���T�La��O5@�a�e4�hW���%�R��k��9�V��:���A4)�s	�A����������7{����F��O43d�
���K��l�|
��N`�L��$�P0�Ar�oٶޟ�w����M���۫d���,���M�wtX�N���Ü"k�T�ȝ�dMO���I�nMg:�OM��	z[�g�؀��T�Z�Ty'��A��$i���Բ0׿u]u�6|����3���3��;ۜ��Is���	YsO!j��b������U	#m�d�@��6�b�c	���@����f�˫�M4�krh��g�%V���؏�����Il	��Et&��ߐQ�X�p,��69�,�ߦ�A�"�8E��NsȮ��T����5��CP��#�}�h�Iy���=��E��R�v�]��J���%0i�?	�.j�t:� �#I^(?�s�4E�r!_����HצV�[KQ&D�1��C�p �����m\��
#���A�\~���.9֌�nw5S(&X��$�F�u�4�g�dN�&�Y�1h�Vub�l���T��T�6��iA�ΰ芤������ڈ�rkWzvܳ�Ο��LAME3.99.5�Y"�G��6�Y�����@���!��o�F��٣�)�a�����^#�j���gM�����$6�,T�(==J�J�m.ߋض����)������ycΥt��jm�6�~�������J��
�-���T�8���m3�`�
�頍��#d��x�h��qK]"a�ԏ��jڃ�R�^���Qm������[�Y����V�q�T�aI//A���p���t2�Nb�.��F�tˉ	�=��\�*�nj?��.�+���c�OH˴�b�8�2*��BB�����DxEj�k���<l�P\���A+���T��U��eE��a����������uF9�)KE��LAME3.99.5UUUUUUUUUUUUUUUUUUUUUU���E�/����
>Lx��ei"-5�D4�J��N�v����
���_�됍��w��Z=m������A��km�)WO����p� '��7�t��^�~ԫ����--����o��H	��q��Ṯ��
gLlh��	�4|l�d'{���d���e5B@�X/G�'�5S7��\��"�t�^�i?Z�ޯ�?��g�M2��7������_�=v�U�H���$v5j��a�f����pIr���01S-Ha��w��䂤!��+u�W��t�2�v��c���GS���!��4φ!�����;%��T̵���\U;��A�,�)ĕ���q$\b1Ȉ�ee�>mLdv�#d(��)����c�$5V��f���+��n�ag#���4aޟ��������J��j�$�ۭ�\�tRJ�ư����{V�JJ��=�2�q���e�)�����쌏��D��	�$Xzq
��Nй��*,�a̸8�T>>'b��T�7��Lk)L�o„��<aLr�]�F�0��C����$	"��Yuy�������l5�f�ϖZA��Oe�8lLJ�wUj�##���E��w
�_�ʠ�
7��T��k��
Osc��Y�=�!�Ɛ�ha �G*.
�a!,C�M12��3��%Z'25���Io�:�������WELA��T�>��	�G1�0Jq�*�
�M4�L�gC��"8��ђ�3sI?"ѡ
�;|bջ��H�����2e��v F���5��g���l�G(ԣ�C7f�IO�w[ͫ�Q���G�D�NO���7�@BͲY"2�c���|<(Z���(��z�ɭ�Wz���}M��'���¾�–٩Df�	.��T���@E7��a�^����\�Y���H����?�8�h��,��*��bl��i����[Ss9wm.�K�!���W���7�*[j��MӠK�od���}��I�V�D�#���Ѝ!h�*� ���߀(��R��j{���aF��o�y�Ҥ�y�*v�&��_gϥ�A�q�Z*ԩ��2��T��3���q
Lq̄�4�6k�0ˏ�]*
�v�#h����0�$�tc	"<[�ׯ�|RW�o1�׻��S��G�� ��Jը�C�&��Bg��8������E9����B��?FN��]jgw��
}Ym���[[L/+~��dM'oJ���}�+�E�����[k���.>o��Lr8�{a�_��=��T��2�
iS͠N����\$\�՗�����C�<w�]�'��'�0%lTa@�NI
���* |�0�zMX�SH�}o��]�E�Uތ>�Ց���ꊌ��i�11K�
[ ZJZ/{	H�cM��Fy}k]z�4t�՜H(p*(f7���iO��eݍ�'��]��-����t]�S�N�gU�9���E��T̿s���C��E)c����a��9���=;��x�as�Q��z�k��U
&���#h���'��T��pg1B����?��g��jV��b�
f��h��*y&H�3n(`#��j����[)��Ŭ39��0S�C/}K+(#%r��(!l�Zb�ԡ6��Rr?�R]L�!H1��gJF��T���%7��"��a��I�Z�֌:c0��ׂ	-�L�0�LAME3.99.5�������#{M���6�o�l��a�/.�Jz�,��~�z�[:�_��_QDC	��V�-lY��N�SkyG]�?�����<�ɟ-�RK�Ͳ�K�Ȃ����ǜ�>����ub�:dbD����T��g�
�-$J�h�!ٱ�iN\j�[	�+?lC%G�
s�Y�-ԗ���dT%&&�* �Z���׌Ơ�aT�at��r�T���ʓ���M�c�e(�L�橚�,��=� �.��+B]��B屈|&U�<#f�s]e�V��P�"��9�ʇ
$��6�_f���.�k_P�Z,�Q?Z��,��T��'��#7��B��!%�iR�-Q��H6e�j!*���c[��T�g�\=y�g�V�
�M�=�3<i!��
�-��\�˕�O6���Te������s�V��gb[lYM�V�4J:5�5�LS�R�5��ۂH�	s��6��!t}҃"IT�
���Ts�P���`��+���gl����T�P��%+�=�2��50�|���7u|��c�v��U3����LAME3.99.5UUUUUUU���i�['C�XI����Z�_0t��A~Z2�]p�	{���0*�Y%6ҩ�
��`pvU���:�в�]cXM�FfKv�E(�l����H�:��7c}��C��_r���vl�f�B2��T̔)���k�leI��ܘXU�P��hv�y���1���dg����
zJ�V�~R3��Υ�w*��ϕ���)|�#��\������#�z��K_�������Y�kiY,w�Z!r T��.k��w��<�,�
[$�
�;��K#�z�~�s��z��a����y{:��Rg?Qbn�~���T̊���a,�O	h �$Y��.�=z�&�=����LAME%"QB�ɸ։�52�`@
�-���-���UA��}��a\�2��Y�:��3<���r8E�t"+�L�I�8���<^1���]IL�AK<�|4J���G(�9}Fc�����ض؝Wn��*�+h�gg��l��ou5H���T��-�	LF�"@�e<7��Ici&�ԢC�C�d�;���	O��n�Q���	��]��'m�˟޵��s������㼏�QC���{C��6�5�j�
4�@��������]���5TI�c�%4!�0�>A��v[H3�9!�l�`g�Ҟ��2�����1x�F2g/6gx�E�
dD����rR��T��e��!]��c)z a%����0�CfU:$�-mò�8�3! �A�gu�LAME��8�i���ծ�K�8h
%^�ilgh������me�=�X�+��6��3̟M]���}�3������Yh6hZ���}��?o��4�r�$����2��4a��S�{;-��j���j6}�}Z��LAME��T��k�(dc@��d�&\3.99.T�x����d`BX�(`!��^��J,�r�9���̖ ��6b��%�u�V����m��:�bM��`8�]�`Dy��$����m���Y��;($@�@QaR��Z�,�a�$����C����x=1A���*1<娋�4��LAME��T���
D%��B��.`�
�13.99.5UUUUUUUUUUUUUUUUUUrmH0�����@q� �*z.�LfWDTT=F"���J��m��lG(8BT��$$����闓k��s�g�7*E�����M��}��
��g�ڊ�e�_b%#wY$�$�q@�L�$%�k�{z4��aO����O��jLAME��T�X�8�Lm��&t@�3.99.5�������������������4���#i&��b��V��MԽ�6��n�gu˰ͭf��^��u;I������II
$��o���M	g�!�e�-ddh�5h*d5!!��-�2z^�ّKU�2�����R�̬��[z�n�y�_�?Qy�㸲�.?��R_��LAME��T̚o�d-
�����ft��3.99.5UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUI
�8�i8#��$M��I�EEO�����&���$��Ѝ3�����ɦP�h�ԙd2������Rj��n�&�C0�LAME��T����o
��c(�&t<�3.99.5���������������������������������������������������������������������������������������������������������������������������������������������������������������������T�3��t/���1_"#�-���������������������������������������������������������������������������������������������������������������������������������������������������������������������������T�[���5E
��s�4��������������������������������������������������������������������������������������������������������������������������������������������������������������������������TAGCaedrium Notification.mp3Renan Andrade Torrente2021License: can be used for com�PKsc�\!��B��newmail_notifier/sound.wavnu�[���RIFF�WAVEfmt ��wdataB������������������!����&���������������W�4�O�r�Y����G�Q����k�����O�_���������YPF�*�>0�V�@�r���_�����������������d�r���������'�����z�p������3�u�������)����������I��y�R�1��?�������?�z��E�e��n�(�z�����i�������l�k�2�a�e��;����{�*-��
�u������T��������+�x���
���@���6����`������I�R��+��}����5������~�i�	�
8������T��]a
Pl���
����x���,�	��3������4�-�އ�Q�A�6ޥޭ�t�Q���e�j�B�r�`��3���$�	�
u��� Z$�'j*F,�-�/�1�3�5�79�9o98�6/4�0�+�$��F	?/�H�6��D�/�	�7�	����ѮΚ�ɨ�Ũ�����IØĭƛ�C�8�����+���#�N���B
�w($)�.5:�=!AE�I-MO1P�QS'T_T�S1R�O�L�I�FCT>a9a4"/X)#~��_	�������O���&�����<�q�V�v�z�ZÃ�=�	ìŸ�<�*�ϵ��٪ݑ��9�f���9 n�
$I*�1>9�>C�FK�P�T%V�V>X�ZV[Z�V�S�Q�O;KKDM>m944�-Q'L z*�	L.����������C�B���X��1������躚����ż����"�t���v�1��eJ��![*3;�A]I�P�V�\b`fi�ktn,p�q�sst(sGq�mufj\�Q$J�DT?�6\+	!d.��H������o�
�D���=����4�ȕC�$�,�v�W��7�’
�;��H�C�4�R�l�+�J��~�a����B�)�1�68=�D5M�S0WdXRYh]_aa:^�[{[tZW�Q�J�E�Bk>K5+#��&i�����u�I�X�=ư�E�𲌫d����<�z������꛻���A���ԯ�
�r���^ԓ�����p����t%7+�2�9X?#ChEH�K�N�M�K�I"HFC�=7�1-O&E"J����߈�~ѩǺ���J���~��V�|���ٍ����o�.�q����@�x���� �U��Û���{���:�e��qQJ�$/-5B;?�A�E?K�O0P1O�O�P�P_NJBEPB@�:�2�*�$$�8������T�&һ˓�5�ᵕ����L���T�J�����,�����M�-��e�����w�����Ӌܔ���}��Y!j(�/�6�=kC�F3J�N�RTT�S�R�QPMH$C�?�:%3L+�#��g��,�d���ۚ�b�^Ŏ����S�.�
�1�������|��^�P�A�0��o�<�%ϳ�J���������8�~#Y*a/D5�=FnL]O�R6X�]Ma�a�azbRdze�b^�Z�YW(Q�I�B]=�8e2%(���%
��3�/�X�8�1ҽ���o���B�z�ɵf���0���}�N�	�m�)�ϩ�p������w���
^%,=3�:�B_J�P�TcX�]�be�eFf�f�f�f�c�_&\�Y&V�O^HuA;5�-�$t��
c����z�����t׷�?ʓƑ�f�
�O��@�<�p�M�Ѷ����F���f�$�ֱ�����n���Y�"C+�1�6=E�L�QU�Y_~c5f�f*g7h|j�j�g�cbn`�\�VP�IEG@�8�.�&| _����������r��Ӿ���P������Ѹ�^��������X���n̈́����܋���Y��x�,�!(�/8�?{DH�L�R�V�X�X=Y�Z}\{[TW�S�QhO+K�DE=�6&2�,�#�M^
�#���b�h�TͿ�,�`�x���ޭ�P�,�q�q���T��8�4����A��_�B�}���/��E��
�Y�%�,�2 8�<EA�E�I�L�MxNP�QQ,OM�J^H�D�?�9�40�)�"��Q��C�>�z���Iׅ�t�"����ܭy�ʨئ��񢌢����ǧ������綤�G�!�3�Չܝ�����2���
q�$�)�-	3�8==?�?�@C�DlC#@p=�;�9�5�/#)D$= ��*	A����2�s�����Q��m�r�q��N�n�1���r�'���\���T��b�ڥȫ���-��������Շ�����m�9��	<B�"U(�-3r7�:�=@�BZD�D�D/D2CA�>;�6!38/�)_#I"��	L������S�+��Ї�n��͹��L�����ƨ
�I�Y�"�>�Ʃb�f���e�ϼL•�-����-�m���ie����%+�/_5�:-?�A0C4E�G%IdHBF�D1C?Aj=\8�3^/�*%�b��	+0��_�J���١�-�_Ƅ�Žb�����"�b���(���ܮ�H��ɷ��$Ƭ�"��{���5���0���%�+�0*6)<�AF�H�K�O�R~T�T�T�T�T�S�P�L�I"GXC�=�72�,*'Z �o1����g�!��F�'�-�����{�2�%���F�g�#�e���-�Eʇ�~ѿ�2ݜ�F�	��^6
|v�S'/f5�:@pERJSN%QUS�U�W�XQXWV�TWR�N�J�F*B=�7!16*$���n������v�e���֜���1�f�?�3������H�-�]�~ģ�N�dώӿ��v��j�K���Vd	��&-2�6<B`G K�M�PyTXiYY�X}Y�YgXWU�QDO�L*I�CX=�73�-�&�
��%�|��������"�ӎ�I�a�J�������5��ē�4ʨ̭���6۷�:���&�+�A���%c+I1�6�;@�C�F�I	LmM�M�M[M�L�J�G�D�A�=d954l.z(�"T���$n�����"ߐ���P�&����������"�𴫴
�������ǽ�x��a�q�t����K�x��8
W
�!'�,�1z5	85;_?�B�CuC�CxD�D�C�@�=�;O9�5@0�*�%!���
Q������[�2�,ղ���|����5�A����^��l�%�5�����®Nj��;֦����{���t9	�]�� �%Y)�,�0]4�6�7,8�8U9�87g4�1�/�,%(�"����
�H�G�
����a�/��κ��:�j��y�������Q�o�����t����1���x������Ƌ�!�?טݡ���%�IS
�����$=(�+�/r3-6�7�8�9v:�:�986-4�1u.�)G%!�y\(��D�C�7�
��������&�W�S�Y���������2��޵�޹.���:�
���hҋ�������7�<���	��-"�&C*.�2�6N9n:P;�<�=�=<�98�64�/�*D&V"~�w8%�������݌���f�Q����;{�λF�3�����"�'����0�,̺Ъ���B���+�]�/�.�S]	��d!�&�+0P4�8�<�?=B3D�E�GrH`H�G�F�E�CKA>Z:�6�2L.)�#`�O9
����J��W����9�E���c�Ŏ��	�ȶȶ���̘��ҥ֡���`����P� �D
>(��"�)�/�3�7�;&@D�F�G�HJ�K�KJRH�F�EC?N:@6�2�.�(Z"���L.�����m���V��C������ŝ���j�Wȶ�s����!��:�@�z�<���.����F�	K�UV!n'_,R0x49�=A�C�E�GIJLAL�K�K;K9JBHfEB�><8�2�-)8$��Lc7��w���F�������غ�T�������2�H�G��˔�5�<����v�M��j�
�^�g����R��! '�+�/�3�7I;f=�>B@�A�B�B|A@�>=�:�6�2/k+�&7!n���V������p���W����Ш���g����-�ӿ��S�_�K�J�B�x�(�Y�h�Z�K�}�T��������}�	tC�WM"�&s+/#1�2�5b8�9�9�9�9�9	9�6�3�0�.,�'�"��mD�	P��n�����O����Ԡ�v˿�s�t�I�1�����R�����o�-� �[������I�Y�t���I�����U	}p �� �$�'
*U,p.�/�0�060\/X.�,*'$� ����	�C�Z����=��5��0��ύ�dǟÉ��ʻ��
�%���J�ڷ����>�����L�u�ј�#�����f������
A��� �#6&�(�+�..0�0�0�0�1N1B/�,�*�(z&�"*�%}
j�C�������)�?����_���z�|�{ƒ�����8����ŵ���͜�5���9�u��3�m�-
����A"�%�(�+�.�0n223�3�3�3341/-�*�'�#���R�w�������O�2��� ����[κ�ɷ�E��ĺĉĆ�^�8�~ɥ��ͺЁ���������p��"��-	9�8&w!A&�*�-�0u3�6>9�:�;�;�<�= =�;�98x6(4�0~,�(�%�!����	���?�8����~���(݁�qח���ҝ���JП��(��Ո�٣�����L�N�U�k�.�"�j��$d)�-�0�3�6�9�<�=,>�>�?.@?==;�9�7�4�0�,F)�%�!��
.	����������������`�~�;ו�O��c�l���џӂ���d������(�R�J�H�u���$f	�k�"a&�*0.[1W4W72:h<�=�>�?i@�@@�>p=<9:�7'4�0n-�)�%!V�"S	�����D��{����T�ە���z�6�8Ӳ������+ֿ�C�aݐ��/�+��w�!���n���e���"�&z),,f/�25�5X6Q7u8�8�7�5�3�21�-�)(&#�T�NN���x��M�g�l�I�Qڵ�h���@��N�7���:��Ʌ��̫���f���M��ݳ�n�G�E����S�g
�z�d��!�$>(�*\,�-]/�001
1g0�//�-�+�(�%W#/ Z&�����L���?�f�����Iڅ�������
�$�y�i�"�v���F�8�-��=бҎ��5�l�s��%�M�b��i��
=	��"�$�%�&+(^)�)�(N'1&?%�#� <=	�ZYb���L�M�����'�vٷ���Ϗ�c�,����Ğ�P���������Ɓɝ̣�R�/�؋���c����>
^���L�!$#�$!'�(w)2)�(�(�(�'a%�"!H�t��
�	6&�����T�t���^�G߶۬�!Է��%��'�C�u��ɽ����1ͫ����Ӕ�_ڱލ��������6�
u	)v7�O� �#�%�')�*�+,�++p*p)�'Y%�"- yN|i��
��k�������[�W���ݧڃ�����a�аΦ�u�ͪ�W�a��c�נ�A�]�%�0������>��+I��
��� �$�'*�+�-`0;2�2�2�263J3#20.,�*T(�$� ��F��
�	U��.���������N�ߖ�#�-�حب�9�,�9�L�~�,���x�>�:���c��6���U����`#'L*�,�.1�2i45F5]5\5�4�3�1�/�-�+�(B%�!V��v�	�����	����}�����ߠݪ�"�h�1���uى�6��������)�f��g�u����<	m
I���� k$(�*�,�.�0@3�4W5Y5�56�5�4�251�/".v+�'�$�!��� �
�l�m���������E�5��"�E�p�%ۯ���٢�L���ߒ��R���x���I���F"ea���g!)$.&Q(�*�,.Z.�.�.H/�.4-O+�)E(&�"l,;��K
	S�t���J��T������"����U�Ղ��ӂ���T�}ҧ�BՓֳ�l��2�����A�2�{���p��Be
�
S��w��!$�%S'
(r(�(@)�(�'�&?%�#�!ert�����G���9��;���6�^�����\���B���A�=ҋ����������*���'����݌�w�����{�(�0�_� 2>��9B�k�� !�!X"�"k"� cU3*-����L{C������������s���֯�Ҵ�k�́ͤ���'�u������Џ�@�N��>��ߠ���t�y�����e����.�b�h�� �!�"�"{"�!S!u +��f��
�	�#d�r�����)�q���a��ړط�V�+��*���2���l�@ԟՎ���)ܕ�J��*������qm������k� �!�"i#�$5%�$�#�""
!>��H^��
��0+��@�H�H������u�l�
�r�S�3ش�������(���ٲ�S��{��r����=�.�e�@�c+�*����e!�#�$,&�'*)
**�)|)_)�(O'^%|#�! i3b�e�
���r������
�:�l�7������ߨ��F�m��_�Y�E����x����������B?

I�QG�<�!F$&U'O(X)F*�*X*�))e(U'�%s#J!C�,����
�
�h;Q�7�������X������������d��*��N�3�������:�1�/������LO:�@t��<�!A#R$|%'u()�(�(�(�(((�&�$_#"d ��3�Z�Z	���C��0���u�������+�{�������������&���&�C�����~���x���!���{�c�*v�� �!�"�"�"D"�!*!�[�0�8��Se	/>�G�)��b���'�����Y������n�m�~ߡ���L��
�����D����_�5����'���8�

�)��HV�O�����X�}g�����
���F������t�^���;������m���J�~�Z�G��ޜ���G�L�5����)��"������-���5��x��c�
�q�.��*H|\�n?5N��	�x��F��u�����*�����9�8��{��ߔ�
����݋݋� �(�9�*�8��������:���K�r���[�G�$����
��?��Pe�'o��W|���j��
�=
*�4�����M�������{��
���h����>���`�H���x�J�8��j�[�$����z��������:R1X�
B
m�O��=m�SW���Ql��+��v&�R��������������`�����M������~�X����H�-��y���j�������=�8UX
hqB�8�C�5��������<�o��
��	���}]�p�����������F������B��C���`���i���N��(��I�?�W�b�Y�h�#��
���p��s��N�ID��b���O��
��	�,�u����<�$�.����q�	����{�7��B�2��f���Q��E���1�Y���h�{�m����y���{	md
!�����F��0��jvj;'�H�V	Z8=����v��������N��������	�7��������g�%��M�������F	.�0Z���}�H.�8�Or8���
Z
x�/��w����]���������L����
������Z���\���-�6�1�c���!���������;�\8
}�	�
�b
x �I��L"�EGO�
�}�	S��/Pe��S�����~�>�
������q����3��&�9�%�4���t�)�����g���?�s�����3�����w�E��	�
�l��
�
/�
�
k
� 2E
W	B�x�7���<���?������3�����x����k���N��
�E�������������R�*������/���=�f���	�	�
�C����v�%x
�	I	9����q�������%�P��#�|�=�m���g��Q�G�
��9�����$������"�����i�I�r�����q�����Sc�O����	�	�	5	��<	7	VG'`�]�9u����?�&�0�O�����������J����h�<�F�4�����������v�P�/��}����5�����T�����|�|��@���mf��XRB
W�
C		W
�� 
�	w
�
	Z+0����d�q����"������"�8��[�Q�H���&���1�]���H������D�n������/������e������r����]������
���o�j����	��w�������� � P!�!z":#�#<$�#�"� 4]������q
	f
~���=�����u��i���H�/�ޫڭ�oת�|����ѧ���ų�Bˮ�����@���h������������9Y#
����#T)i-�04�8>BOD�E�H�K�NcP[Q�Q�Q�QIQ%PPN/L�INGRD�@u<�7e3�.t)�#-b���s��n�B���8�
��6�"Н���1�9��K����a���Z� ��������˛�w��A�`�����^�:�2 �(A0A5�:�@"H�N�R�UsXE]jbCe�e�dieif�f+e-a�\�Y�W�SME>�8�3A/|'����o�����h�ݼ�o�S�PŨ��q��6�m�r�����?�>����'¡ƈ����ݮ���	�?��S
2-<�(@2�:�@oFM�T�\rb$f[i�m.rpu�w�xsy&z{�{azXx5tm#c�YASOO*K�B8�-3'!�b�#�w���v�r��� ���������3�9�E��5�퉯�
�=�񊼐<�����*�8�αN�q�~��������Y�9$�)-0|9/C,JDN�Q�V<\�aod�egGi&k	j=gOd�ai_<\�V�O�I�E5A&:41K(F l	
�����5��؎��K’�ٶ�������D���ӗ�?�J�4�e������e�m�B��ƹ}�9�l�P҆ڷ����X�Y}!)'�.�7�>�B�EzH�KO~RLT�T�T�T�T�R�O�K�G�CU?:�2�+L%��!��t��4��ګ�,��‘�d�U�����`�(�אٌ�j�4����܅ч��y������G�D����s�n�6ǁ��������w���wpL!P&a+=1y6;�?�D4HyI�I�IVJ|JRJ�H�EPCkA�>_:�4�/�*&!�*k�!��!�]��Y�����.��9�����I���ߧ�e���w�M�9��h�n�����0��#�б+�����1ȸ�����7����%�X��
���"�)�/3529�;z=v@WD>G�H�H*I�H�H�G�DA>~;`7�1�,�&!��]��5�X�R�]�o�/���"�<ý�����.�C�%�\��{�N�o�œ.���u��@�I���<���f�(đʢј��"�#�2�Z��+4��#T)�-�28M='BpG"K�LjNzP�QWR�RgR	QP�O�M`JGsC�?�;8�2�,(L#8�U�	�h�������ֿ۬Ѭ���_ƒ��A�5�����k�\������ſ¨�1�[�4щ֯ۻ�F���b�D�T�h
�
E"�'6.b5�;�@�E�IsL�OyT[X{Z\�\]^�^x]dZ�W�U�R�NiJCE�?�:�5�.�'� �D��d�F�Y�~��U���9������2���V�i����ȱ������ߵS�����O”ƨ�΃�R�W�~��l��
� �%O-\3r8�=GC�HeNBTFX�Zz]�_a�b�c�c�bYb�a`t]�Z�VS}OJKjEx?s:[5Y/�(�!��
LBM�E�J�;�\�w��g���>�W���?�Ծ��w�����Ҽ�6���-Ūș����������F�W�n�
��#"c(G/R6g<�A�F�JDN�Q�U)Y=\$^o^�^D_�_A^�[aY5VSQO`J�D�>Y9�3F-G&����D*�@�F���@�7���ȝ��\�h�A�n�x���˨��Ǧn�6�*���x�����9�����P֯܃��0�{�����p�� �& ,N1�5�:�@�E$J�L�N(P�Q�S3TxS3R!Q�O1N�K�G�C�?6<�7�1�+�%t �j��c�]�����7ު؏�����8½���N�iji�'�߬+�����1�t��R�"��������ʣβ�O۶������"����<�!�&r,�0G4|7�:�=AD�EF+FXF�E�DoB�?�<�966Y1�+c&� (/|z�������^ݺ֎Е�4��\�]�殃��:�����!����G���r�u���Щi�޲%��K�ZΟ�������U��d��m-K"' ,�0	5+8:=;�<Q>�>�>�=�<�;d:|8q5�1�-�*�&H"�``�
Y7����#���wއ�EӖ�+�P��ֻ���S�k���"��������e�ʯ��ش8���?���ȡ̈�ו��_�d��V���1
�q
�$�(t,�/g2U5�8<<,>	?�?$@:@�?%>�;v927�4�0,|'�"����u�!����*��|ў���E�鹺�m����ܬ��F�ɩ��«ʬR�Z�貪���ҾG«�=����Pݶ��y���yh�
��w#7(-�1a6�:�>�@�B�DOF�G2HHIG�F�E�D�B�?�<�9�693�.�)�$� A��j<����D���u�B�Sݦ،ԺБ�˃�|Ņ��n‡�+���A��Z�h�xʎ͖�_�O������u���J��	.%�' �%�+j1L6W:�=�@wCG�JQM�N[O*P�PQP
N�KJ=HLE0A�<98�33/*$�_%`
�k���u����O�����Ѷͤ�<����<�i�g�P�׾�n��+�F�;���(��iڢ�i������T���N
�?9t$�)\.�2N7P<�@�E;I�KwMfOyQ�RcS�SCS�R�Q�P�N3L�I�F�C�?�;�6.2�-`)�#�r�
���q����/�u���y�v�E�,��������-���o���b��ͼρ���q�7��������(�?�_���	iEW�$�*0�4�8r<??�A�D�G�JmLtM�MHN�NN7L�I�G�E�B ?;Q6�1H-W(W"/y�5c��5�@�=����U�P���������X����N��W�x�\�p�e����?���Iʏ�e� �F�z�P�"����"]�K�K K$m(�,Z1�5�9<�=D?(A�ByClC�B$B�A�@�>'<Q9�6�3�0w,|'�"�J�
��������&�x����M�H�C�`����T�ʽ�%�1�h�����o���2�n�m�Ɋ���e��|ܧ�����{�Q���d
5�?��"F&B)�+�.�1=4%6]78�8�8�8%7F5]3<1�.~+�'�#}7o3�9���2�*���<�����}�7�r¦���P���R����ڭ���������Բy����<���$����q�D�v���	�'�)�r���	|�
-y�#(�*-�.,0�1k3�3�323�2J2'1C/�,�)�'
%!=����6"���1�"���z�߇ۄ��x�{�aǡ���@�o���(�T�������������F��Ă��h�=������������a-
f���!�$�'�*�-�0�2(45'6$7
76�43V1�/�,J)�%A"�P��PZ����X�M�o���S؇ә�.�~ȥ�O�����
�|��A�W����������2�3�S�s���"�ԛ���y��������C��F��#z'�+�/43�5�7D9;�<�=�=�=m=�<0<�:�8A6)4�1�.(+K'F#m�?9o
	��!�:�u�6�V�K�
�&����v���n�M��v���,�ə���C��ΥжҔ�ك��ߐ��:���R���	��D�!�&v+/625�7�:>�@�A�B�C�D�D�DfC�A$@�>g<9�52�.+�&�!����v	�������������Q��Mغ��ѯ�Θ��ʎ�0��ɮ�H��c�s�U�r���ڃ�
�����@�����o����a [$(�+L0�4V8�;
>�?~A@C�DzE�E�E�E*ErDCA�>�<a:�7/4w0�,�(%� h�
Ex����\�t��!�?ކ����R�g�r�{�&�{�*�1�i�֛�=�(�����J���h������	^�O�^ %)�,�/k2�4\7>:�<q>R?�?�@	A�@�?7>�<;
9B6�2?/�+H(i$���
 �����8���#�)���݈�י�h�����n���I�M�-Ɠ�E�	���>ʂ�7���I�E�����'�������:���Q
�b�K"�%�)P-�/f1�2�46�6O7/7�6�6R65631/-w*E'�#��R��~:�����!��C�8���ܠٴ��� �;���C�U�E��O�:������ȡ��H����c��V�?�l�X���g�*���	�
FO���"�$V'�)�+�,�-k.	//j.,-�+^*�(Y&q#- ��	��
#	�d�
�
�B����3��mח���̊�UƬô��a�������/�м�����o�����ѻՂ�M�w���p���&�c��f��i�C��!�#[%�&�(*�*�*�*�*�**�(�&�$#!�O����	�R|����%����v�ݬ��&���_Ε��T�.�lű���F������������I�C�#ҶԜ�M�m�v�C������Y	�
GU�i!U$�&)�*�+�,�-�-�-�,�+�*@)C'�$�!@?
	"�i���M�I�=�������ר�d�K����e��f�m��Iı�Ž���D˜�ϖ��Պ�S�����,���<�M��i��N��\"�%�(#+-�.T0�1�2[3]3l3b332�0�.->+)6&
#���?S)>
���������2�����A��ڨؽ�UՃ���0Ӵ���������(ׯ���r�C����+������k�5�a�Y	p
Qb���!�$�'**�,r/&2h4�5�6�7�8p9I9u8h7\6/5�3L1b.�+)-&�"���2jf@�x�|�J�!�s�w��}�Cޤ۶�*ؼ�A���I�r���<Ԝ���)�jۍݺ�r����
�C����%�sY�� p=��6"�%6)�,}/�1�3)5�689~9�9�9�99 8�6:5�3�1�/�,�)'$� ���8��
��)������������-��
ߚ݉ܖ۫��
�~�0���R�"�R����r�o��-��u�;@5	�{L4��"K%�'�)*,�.�0�2z34�4_5j5�4�3�2h10.m+�(�%.#' ���7�
�	k�u����)��+�U�[ދ�Bٕ�4���S�F����w���9�2��վ״َۧ�V�}������5�����E	�
����%�!$�%'r(�)�*Q+`+g+h+6+�*?)�'M&�$#� �;���n��fh����������7��'��{�ݽ���X�X�f�^Ԋ�AӍ�ԗ�&�֑׃�{�P�Bߩ����v�]��K���!\�k�s�,?jw I!-"�"q#�#t#�"�!!�`h,�t���	j8�S���
���w�'��{�z��-ܚ�"��C��ь�X�c��ͮ���΁�>�f��ђ�H�+�d��ۯ�q�3��D������X�����}	A	��
�h��0>YDsI����M�}�	�����������H�t�������ݻ���N�^׫���ՠԴ�B���y��;����۳�|�q�����@�����S���c�0A��
�
�
�;<���* # �(���Pq�o�8{�(D0����G�M�E�p����A�����^������׈�oׂש�׫���0ۖ������'���q���(����������
E�X��K��� �!_"�"�"�"�"."W!L 4�����`�T�*T���)��~�����!�{���q�p��0��>�$�~���e�N��.����h�j���M��-���U�1�S	��vN?��gE� �!�"k#$$�$�$i$�#I#�"�!w �}��M�`�	!Z�v��9���;�6�I�F�9�k�������y�d�����%��5�{������������W����O�Rl
����9���� �!�"�""#;#A##�"�!	! 
�N��4'��m;
��(���|�X�2�!�@���{������
�a���h�@�`����H�G�v����3������N���$K~
�	�8��j�����,�r�C��-������
�v	@�Q�����x������9������}�����
��������f�2�6�>�<�Z����Q���w������������	a,

�������b��	(#�2q����6�C�

(So[-��+�Z�{������l�	��-����M���o�)�5�k����F�����,�{����n���������M�,2?"�L
��>����>�)ns6�Z���d
x
��Kqr�\�Q�`����������I���:��f�I�]�����o�e�m����b� �������c���d����A�����f�K�0���@�.	�
Oe
?��f���(&�;�a~R
�
�	D��;�o������[��,�p���x�L�!�������
�� ��C������o�u�u�j�|���[��z���Z�H���s�8��`	�
�'
ah4�~b}d2��	;MWW
6�
f	�d�E����^����F�����P����y�����-��B���� �k����Q����Q����O���d����Y�����i!�=�>�	=�
,��Z�\�����O�;����
��[
�l��%�s����L��x�2���$�)�I��&���d�����R���d����������y��8������X�\�f	�
���
�.#�V�H���h(�v��"6�n
�}�e�h�����9�
�����~���^��"���������;���� �������B�������v�n�,	b
��-�{�]����k� ��4<@
;�	�f*��B���|�I��������D�����|���|�Z�`�����N���m������~���������T��>}���	�
��V
.��Z��	�7�c��


Dib
5	���L��y�T����������������,�� ��'������������x�����O�3�%������&�I�T�W�n���������	X
�
o�u�
5
K
b
i
H
��?�`�
�	2	p��������v�W�P�X�Y�M�F�Y�����<�����:����Z�T�g�}����!��%��6������d�8����/�.�!�,AC*��q!��	�	�	9
{
�
�
�
{
G

�	9	�c��0CNG4�#�������=�j������q���q���R�)����3�l���-����K�����a�A�4�.���������pP7�~�v�q��	<	]	g	H			�~4�;��a��4c�������E�i�����D�����O���b����q�1��*�D�X�r�����v�����c�0��|�i�e�V�2��������D��L��h�	R	p	t	i	V	4	��5�H�i��0b������.�I�j����$�h���������2����v�_�O�L�b����,����i����D���m�C������u�V+���R��=�-�	m	�	�	�	
(
$
�	�	�	M		��v�(g��A|���d����2����`��L��h����n�N�L�b������q��T��J���J�����a�2�	��T ��x��N�5	�	�	
G
c
d
V
E
4

�	y	
	�D�<��I���J{�����'�J����@�����J�����N�S�Y�8�*�c���8����}��)���[�������f�������]�&%����y��]	J		4	�	�	T	��������2��@�N�%�����g�<���%�0��o�����z�}���$��r��o�g�R�E����������)��S�~�=��%����2�����p���@���}�a��l���	[�
�
�ad�s��D2	�
�*�O�F�k�r�,����d�e����/�X�8�B���6�����!������O	��Ti���S�y�+��w
	
������E���"�����&���2�e���K��+�������'	j
��j��"�&f)�+I.n0}2�3c4�3p1�-�(".J��h�-�,�n�Z�����تԓі�K�f�7�#��j��ϰԧ�q����@���^Z����%--
2�5�:�@XD�F�H�I�J�J4JyH=E;@9�1D+&���	�t����ާ�.���S�Ɠ��������hʒΏ�c��z������
:'1#A*�.�27<�?AA(A�@�>7;7�3p/L)C"\(������3���ݳ�:�F�L˔�cɱ�Ț�x�?ч�D��G���������$�*r-�/�3,77�4�2}10/)�!5IP����MԸ���ɼ����M�;�l�����t�m���r���9���͈�b��*
S� �+i9�D�LT�[Eb!e�e�e_dab^�VM�E�<�0�#E��P���V�u��O����3���@�*�?��Y���p��Ē?�:�.����N���?�?�!�
dR �(�2�;�@�B�E�IvJG�BF@,<�3
)" \U�C���"�%�X��>�����ؤX����7��U�D�����J����3ߗ����".h5|;�B�K�P�QwS�V�X;X�V�RQK�@<71B)$������\����+�ɹ(���T���Ǘ��ݓ��,�Y��˧����r�O��o��V�ST_#M-�9�E�NgTbZ�`fNg�efh�e�]�V;RL�AU5h+�#��
�U�"��ٯ����8�����ϺN�j�\����<�Rκ�D����e
[R l(a34@�I`O�U^�e�i�lml�j�fc^�W�O�F�=�3~(Ht[���+��"��m���ʳұ��(�;�<���d���ԋ�j�0�����O*�4?GHPOW�]�ad�f�itj-hdB_�Z�TNL�BV:�2�(F��	��b����N��)�L¸�������r��ð��ؕ�����n�Y�
�m"/-c63=�D�MuU�Y�\�`tb/b�`�]�X�S�N5G�=v4+�0Hk����Dٲ���,���竪�����ßk��ڪرʹz�P�2Ս�����0!>*�2;;�A�FJ�L�N{P�P�M:IE�?9�0�(��
r������;Ѻ��Ϻ*��p��C�z�j��u���/�g�����y�p�k�)�*���L�d%�,4�9�=�@�CEvD]B�>;�5�/(���`�A���t��� �Ŧ��{�$�0������S��>�L���3�C���d��8�w�N�X#�*�2�8�<9@�B_D^EE�A�<�7�2�+�#�f@
�q�~��گ������6���T���5�����=�ٯb�����,������W�	T%�,�4�;)A�E�H�J�K�J�G�D�A>=6�. '	Xm
E�����֪����'�F�S�֨c�L�ॸ���a�C�K�����p�U�O���5���@' 0k8z@>GNL2PS%U�U�U&UzR�M�G�A�;�3�*�"�e�L�����~��Ր�@�d�d���d���.�0�����&�&ߗ�K�4���
�&�/9�@UG�M�S�X�[�]L_�_^�Z�V�R[MF�=�5�-�#�@�2������w���+�l�Ժ	�������� �1���U������#�-\6�=�E�L�R%W(Zg\�]�]-\�ZhWRwK:E
?�6Y->$��	���Y���=���}��|�����M�����˝�p������$�/H�5�$,5�<B�F�K�OnR�S�S�R'P�LMH�C�="6b-�$o9Z����֝�E�X�u�5�4�2����Ĭӯ"��|�z�p˟Ӿ��_�>�,s�3(';.95�;T@kC\EG�GpF�DxB�>�8�1�*�#u��X�������j���ٿ!������+��������ظ|���8ɨ��ة����I��"4").q2077;Y=&>�=�<:9�4�0�+�%��
k������ݶ��´�V�武�F�!���U�C���E��w�.�͹��ɍ�]���w�~��b��#{*!1�5�7�9G;r;�9%8�5�13,�%��E31�����������f�]��������
��°V�B����S���I�i����<��4�.]r�"�)o0U5[9i=�@�BtB(B�@x=�8�460�)+"?
���i�\����Y���U���洯��`�򮔯6�ʶ|�=���F϶׌�F�'�Q����!�*!287> D H�I�KMM9K�H=F�A�;�4L.�'��	p��N�=���D�wБ�"�z��^�/ɛ�G����c݃�G��k	r� #�*j1)8�>�D%IeLPST4S&RmPlL�G	C>�7�/�'V)�
,�9�=�|��ک�S�
�uŢ�t�F�p�{�{�ɭ�t�����T�=�e���
�M'08�>DD|IXN�QS)SmS�R-P�L�I?EC>�680�(w �|}����U�	�F��kִ�2�6���ɹ�_�}�N����"�a�y����
$��"^)t/�5�;�@
D�FI#K}KXJ�H�EjA<�619*�!���	)v����Q�*�����^����ݶ����
�u�ѿ����.����p�3�#��<
���!�(�.�3/8<�>u?=?�>o=O:�6�2�-�&8m��:�s��٥��ǔ�m�!����#�S����o��ŀ�u�T����,��0�4�
�)�h$;*�.W1�3�5&7�6d53�/e+�%� =r��
������U���A�z�L�6�#���ݩ	���\�r�B�0�:����Ǭ��������Q�	��� �%m*�.�2�4�4�4/4}2�/.,4(�"N��
4u��.�������Y�hȯ�l�J����\��кD����Ĥ�ύֹ�>������		���:$�)/+3�5�7�9�:�:�8n6X3�.)�#��%W�n�'�~��$ژӳ��Ƙ�5�ܻ-�5�¸$�˻X���S��͇Ӗ���%���
���`��#J+�1�6�:?�BD$D�CqBZ@<=�9<5�/L)"9�
�@�������M��Aј�z�D�;����r�#��گ���
�!I	����%�,�2�7�<nAE.GlH�IhJQIG�D�@�;P6�0+3$v�<
���h�-��#��*�C��R�BɈ�Rɼ�f�#϶�/ِ�V�Z�L���@
q�x"=)�/�6|<�@
D?G�I�J�I�HG^D|@e<�7�1�*�#���
�y��k��;�ߓێ�����ѩЦЙ���[�������u�����W�1�%,11o5�9�=Z@zA6B�B�B�@>�:�6�0�*=%2*/:�o� ����ۍ�I�@ʶ��� �#�ɾ�����Ö�+˞���g�1�����1#-)J.�1�4N7Z9�9/8g6�4U1�,�($��45 �����U�V�����f��9���2�� ����„�7�"���X�������0
6��F!%�(d,�.�/�/�/�/�-c*�&�" �-d}��Z�W�,��
�c���e��A�r���j����7�?���P�*����Π�V�?���0�>	��~>!�%s)�+.�/�/s.c,K*2'�"=�����r�?���j����/��(�BƔ����h�Z�?�
�zǹ�С��z�!�����S8	 q!c%)�,�/2�23�2a2Z0-p)N%��|�G��G���������hʒ�E��‚���0��Ʃɭ���ح�����X��	��y$*�/4�6-9;'<�;[:,8�5L2.�)�$����
sp�~���E�������Z�6�s��џ���B�|�:���:���*����=!�5"�'�-�2�6�9=�?*ATAA�@T?�<B9q5�0+%`����7�������5��֛Ӎ�G�N��2�҆�Y�X����P�S�L����@WR$C*0/)49�<�>�@�A�B�Ap?�<�96g1�,'W!IG���������s�B����۞�]ל�<��m���7���N���\���	
�S_!i&�+073�5$8f:0;�:�9�8�6�3�/�+�&� ��j*�
���+����4��ҿ����=ɛȘ��ɇ�d�O�E֯ی����M�r�<g�
(p�%$p(�,�/.1�1�2�2X1�.�+K($��.9]�����G�p����%��˥������Ǩɞ�K�.���m�
��������Y
���P�"�%�'�)~+�+&+
*�(�&u#e
2&
b}������Z�}������s�	��X����[�+�a���:ΩӘ�A�����s����/3M��v#b&�'�(o)P)�'�$"���r����$�����׍�n�5�@��ȿ�'��Ǧ���1�Kц�^�����7�s�(��.V�E��!b%(*�+--`-s,1+�)�'L$T =FZ�7���-�3��L��s�h�A���i���D�l���%��Ӵ�Z��1����1>�] %�(�,_0�24�4�4x4�2�/�,I)% J]n�	��h�y���+�;�t�����M�~׵�h�|׵�!ܓ���b�[�H�E��%P�[ldS#�'�+!0y3�5D7�8�9�9I8�65�2�.�*V&a!z�j������j� �A�q�yݠ��x�Pְ��T���o���X���R��@�
.���$�)�-W1�4�7x9::�9�8�643�/�+~'J"*S���:���(�C��0߄�
�\�������	�w��J���O�"���t1	j�l#�&{*).�0�2�3�4�4S4�2�0c.�+�')#sLo�
���H����p�F���4�J֩�f����h�	�K���`����	�f���C�����s��W�"�%�(�*-,G,�+0+�)'�#��D#	
��k�W����3����c�������c�*Β��l�)��y����l���4�@W	���R��!H$�%;&�&�&�%�#�!��r�x	����@�a�W��u��������j�!�TƘ����ǿɱ�h�0���ܕ�N�� �.�W���	��l��W!�#�$�$$�##"m�g���
!n�|�������� �i؈ճ��b�����
��Κ�R�Q�c�%��������XE)R8@���"%'&�&G'D'"&$�!���O��<[�{�8���!�����W���.ӏ�M�%�
�]����Z�R�f��j���
�cKB�M���#�&D)p+G-.�-�,,N*b'�#����
�{��R����Z����M����ۑ�s���~۝�����8���f��i�Z����jZ�#�'�*�-502�273=3�2U1�.z,�)�&�"�m��	�����Y������q�9ߛ�����x��F��p�s��[��/;[
�p^�	#T'�*�-�/^1�2#3|2]10�-�*'&#[X��7�H���%���~�����ߴ޺�,ߵ���(�"�<�v�K���P���0
	K��"&�(�*-F.�.@.�-�,+f(�%�"$�+�a��������n���^�b�i�����8�s�ؘ��\�D�"��������	zJ��!�#�%�&�'�'�&�$9#� sV>	6a��^�O���~���٥ײ��+�v�D�$Ռ��=�o߻��[�.��N�>�j/D8j9JuS!E"="�!3! T^g��
�Xg����y��5�~�|�
۸ׄ��[�dϛ�-δ�4�
�ԗ�2�B�8�O��/�O����� 
�g���N ���1�kpl
^	�t�������@�p�+���!եӌ�D����l�9��q�����y������p
��~&�� �"�#e#�"H"!�>]^��k

XO���e�G����
��<�|�s�S״�E�V�M��>ۍ�n�(�O�a��G�������
q�w� e#%<&7'�'A'�%8$j"�����d��#�c���U���_���
�-��������x�	����8������#�	Y1G��"�%"(�)l+�,-�,�+�*U)�&�#� ��k
Yf�������@����o�����I������G�?���&�0����	�
>�H�"%�'*f+,�,�,�+6*;( &X#���q�8
�w������D������������&�� �$��q���e�\��\��

�r��:!�#�%&'I(');)m(='�%($�!M�!�oz��6�D�k�s�����n���8�
��Zݥޯ���@����s�P���>���v�D�'� �!�!�!�!T M����}
N�(���.����{�d�o�ܑڬ��ؘ��l�����3��S�����u���S�Kq|v�}�i��W��
��/a����T��`������܍�u؋�Q����=����� ܝޭ�s�u�S�9�#�~�kGN
'�,p�����co;�o����M�}��e�T���
�h�������W���ػ�X�4�+߫����.�����>�������=)���O4�k
�u��>��B<8T�)���#�������d��޲��ܭ�a�v�_����P����t���=}A��<U|r �!
""�!>!��X��>Bq
��q�����N�%��=�
�m��o�j�����������<�W��!���@� '#/%b&'�'�'.'�%D$�"Z ~=�) (�7���������=��q�����T�u�U���j��A�
��Vm���e��x!D#�$�%�%�%J%j$�"p mS���	v��
�f�k�����@��v�o�������������Q��.�&
�
�.U��!!#�# $<$$#Z!u���M�
:
/9b�Z�X��������\�{�����W��m�:�y�q���:�O��2���vi�
"<�
��5���%��u��

R���������������ߥ�<�Qދ��q�r�������y���`� �*�t�	1
v2-
U���T7g\G��
.
�����i����|���^�
�l�M�Pۉ�o���݊޻�k�+��)����+���y�]������p��#\)>�:������'���V�!�����S�i��1�H�"�n��ݴ�@�c�����:���J��r�.��	
5���u�$
�������
�
~v��(��k��;����n��n��������
�V�
�p�6�����D����@
v
;��������5Xa�e�+������J�k�������e���{���q�C�q�Q��L�����s�,���,��
����I� :"#C##�"�!� �rB��(�
�
Z�,�S������u�����J���?�:�y�������]�"�H��n��e�����M\J � � X ha��S����[����5�������.�[�����J�x������R�o�>o5����,[g��7�����N��D)#�e�������S�M�k��)�V������B��%��W�
��o�u��-
<
�,4��s���<�����
	�3��-��z�V����'���������������C���I�$�q���3��1�
�
@�Z���#�D�w��X
W
?	���L�!��	�"������U��Y������|����_��l�
����������Q	p{
t���.���[�
r�^����_�h�x�z��l�%�����|����\�l�)�+�D����?���P�%�c������J9	�"��#3#����6�
�		,e�g�U�����6����J�����~����2�0��k�(�:����l�)�(�o��|>'dW.�Po�� ��4v&�
�
\u?�2�^��������������6�x�_����|��8��t�W������D��pc0��Kr}?v@��#	F�����U���Z��
����������V�S���l��%���N���YfP�
�
+���*��Gv�S�Y�_�,�
p
�yq���6��������:�4�� ���=�$�K���-��e����	Y%���p���H�'�hf�P
�
���@�j������'��\�(���s�o������V����4��J���rUc�

Tx�������q�
�
�/���x�x����w�.�G�n��*�N�������b��_���~������`��r	��
�U��!{�<P'�ld
�K���'������Z����{���/�@�������A���r��x���O��By��	��)J9�t}
��	"�[�����+�|�������r����L���F���$������o���Q������5�>�	��
F�
�
75���@�
�y	8���.���l���������U��>�0��K����b�M�<�k�����4�s�	��
�r����n��%��
��	�=���U�������f�����i�b�{������!��O��S��w`.�'�
(:���!�0"��^��W)
�
��X��c���=�h�����"����^�����g�)�-����+\�<	{f
@*�����@��@��
�
N	�N��[�?�7�B���h�7��K�
�+�`���������p���p��
�'?�L��a��d*�b�)�I	��K����}�H�[��������X�j���������~�G�J�����(F����
o ��n��D���
E|	v�]��� �������W�!���I��>�����F���U��@������Y��:Y\i	X�-'����
*�
i�
/	��p���5������F��B��i��������s�_������g�m������"�S�x!�H
��)
�
�
�FS�	R����r�Q�6�������J���(�^����X���v����M�-�h���5���t�z{	Z�	����B���
E�
9	8

���`�y�����
��M����z�h�r��������s�J�����Q�VJ\rF	�
3�
��|��f��
K�
	]�a:?�N�:��5�������R������d�
���$���|�8�$�a����.~�"
�
�|���f��i�c]�z�>
5	���oF�a�������}�U�������f�g�m���4������s����vf	T
g���Fi3������G�	���������t�������v����
��%��#���+�������������
V�
u���)��x�S�Y�M
��	������^�Z����H�����������������	���k�(�������@�	;g�
�X����i��
�]�	>|�b?�F�Y�T�U�����h����]�����$��a�7�o���&��������� 	�
���
*��j�
H
�]�	]�(,)�I�K�=�[���3��P�:�I�j�������K��������B���}�%����h�@��r����	�
�
�
�
�
=
n	zX�=�	H�Y�w��!�g���@����|�&��������K�(�6��@���v�������pd_(�	
f�i
�
S��%�
���
3	�dsu�����F��n�����B��I�V����R�m����C���l�����i�.	x
lJ
�
3?7�
���
�	:���
B����{���y�|��0��������K�#�,���(��\����uH	�
F�
��}�?pL�*u�T
�m
�Tz��A����1��������)���s���j�����"�Q���=����9�
{��
�[m{Q�$
�
G	���M���=���1������O��������|�O�0�9������/����9��/
���
��V�����HI
�z
�l��Z����H��}�P�-�6�����x�J�v���C�������B���T��J�u�M���	�
~���+��
�	��y�V�<���*���B��i�B�Y�����z�k�����`�F�U���3���<����s�3�#A	A
3�h���M��
�	��1�2����V����z���������5��L�0�j���F���������C���@������1��Lh?�k�'		��*z���i�6��g��j�"���{����4�������S������W��O���N���� ��f��d	3
�
/,
�
�		88��$�=������$���Q�$�6�c����h�H�n����6���L����6��e��T�m�9\	f
+�%��z%�9o
j	WB��<��'���c�*����!������!�\��������������w�
�i�^�J	�
�oI
�
Ns�u$�
�%
�e�5�V	���_�?�U��������t�C�S���0���U�/�7�H�U�~��#e��*SO8	"
�
{�XZ�7�
�	����b��6���������������(���;�����d�a�f����V��"�,��1	q
��K
�
y���"�
���
w	��a�Q��-�	��N������n�S�z����!������C����[���I������	4
�
�
�
f
�	_	���sH��?����;���������t��������*���c�6��
�;������J���(?Ye=�k�<	G	"	��Lp��\���?����S�6���&����n������S���?���%�D�Z�����Ie���|7�}���b�6��|dO �w�9�	����n�{������m�������L��*��������R����n��H��(8�F	�	

�	�	_	�0LI��^���i�B�.���A������U�:�6�M���/����Q�J�a�u������+K^{��U�N�����k�h�����������m�w����8���8�����$����s�/����4�v��I��!798	
�
U�I5��@�
�	�����Q"���^�H�E�C�W������4���� �~���{�D�8�H�T�Z�u��������!	�	5
v
�
�
�
U
�	]	�&OXcqhC"���)�l������)�����'����e�������>Pn���a2	�	n
�
47�
�
/
�	�
��_7����������Q���?�"�5�]������|�@���,�@�K�d������a��	a	�		k	E	�c�L]N>2�����h�V�e����2���?�����v��R���������������	&IU=��'��	��M�=s�����������f�b������*���C�������������(����I�*� �������u<��
g�����e�a�=UYb�s�w�i�b�x������9���7��}�`�k����N��u�'�����2�l�����-1
��4��	'		�V�?x����['������������A���b����
�C�������^�;�=�P�Z�\�n�����vT� ������V������(�S�|�����o��x������v��[���e�?�������Z��r����i�W������	&�=�S����5���'����������k��r�3���������tbYC�y��;	r	�	s	;	��w�>SWbvz������>���$���_����<����w����n�T�@�(�*:7$���	d	�	�	�	Z		�l���� �-�N����K��f�0����D����b����o�1�
����zZ+��5�<����D�7��2_}�����W����<���C���`�W�k����?���C����W�*�������d4�C�8������6�>��0^�������D�n���������T�4�"��;�x��!���B���G����a�#��<�P�)a����Y�K�"��T�����V���
�{��h�	����s�c�~�����_��p����g�8������p6��]�d�\reJ�_�E��<m�������(�a�����u����L�&�#�1�Q����T��q�.����c�M�*���p �O�?������l� ��P��I������S���$���!����G�"��-�S�����b��P���G��n/��/�Z�1������)�[�A�v�.��
�~�����4���x�n�|�������J������'���V��A�g���\��;Y\UD�h�a�i��9����;������:����t�Z�M�_����/���-��_�����_$���O��J�9��.#
��1�3��8x��J����`��=��T���������������M���4���8��b����,�Y�]�2��2PV>��a��'�0�"��)���%���b����i�@� �����5�c�����U������������a� g������r:�����\��5���������&����c�:�$�/�T������b��=��]�����*��p��!��%f����r9��:�?�'��J�������]��{����e�5������Q����W���3���L��e�����1�7�5��6x�����x7��?�X�t��n��z����;���q�?��� �5�T����
�\��5��������e�<�� [������\��*�M�m�n��������?���Z��������F����8����������*�?�)��O������O��E�T�`�b�q����3����_�,������F������N����{��O�$��F��Q������sA��3��'�Z����G���]�&���������������G����:����Z�4�m�#l��+EVbaH��h
�I�g�k�z��������[������h�D�2�:�S�s�����f�������v��h�Q�%��,l������M�X��)�=�e�����+����<��������t�o�}�������b����D�����W���o�X��"=MMA0��A�`�v�!����J�������q�^�U�\�m�������9�s����X����:��A{����������V��E��D���1����N�����}�[�C�=�E�S�f�������7����7����X��*��V�K���-<<+���E��R��(�g����O����n�2�������������5�g����8����,����0}�X���5CMQI3���j0��w2�x�:�������m�[�R�L�L�V�l������	�<�o����,k��#]���)174%���l4��{6����v�3������s�K�0�!����+�G�g������(�e�����>��b��Lw���������yJ��b��J���F�������b�H�:�6�6�:�J�e�������H������C���3l���)9EH@.����L��^"��u�<������y�g�[�S�V�d�y��������)�Z����	A|��Gs�����������|L��o/�q�1������\�2�������������*�T������+�f����,h��Lx���������W*���J���m�;�
������x�b�L�?�?�D�J�T�g�~�������+�S�}������Cf�����������~cE!�������`�9�������������}�v�y������������B�q������+[���%@Wm���zkT8���e3�����Z�,������w�V�7��������3�N�n�����%�]����A{��Lx����	����vL���M��z�H��������y�k�_�X�Z�c�p����������C�m������;_�����!! �����u[> ����������{�q�k�i�l�q�y������������.Jbw����������������z^A$������x�^�F�3�%��������'�9�N�g��������$Hh����->KT[^]VM@.����lH&����{�]�B�,������������/�F�b���������� @^x���������������}^?�������z�]�B�)���������������*�B�]�|������%Jl�����!+12.(������lO2����������o�^�O�E�?�<�:�:�?�I�T�_�m�����������"1?IPW]`_ZSJA6(�������������|�p�f�a�`�`�a�c�j�v������������1H_q�������������r^G.���������g�N�8�#��������������%�=�V�u������(Pv����2H\n{����ylY@&����^<������e�E�'�
��������������� �3�J�d�~�������.CWgt������������zodYNC:2)!	#+28>ABCGJJHEDE@5'
����������������{�u�o�j�g�i�m�m�n�t�������������+E\p���������������������o[F/������������u�h�\�Q�H�B�?�?�B�G�M�V�a�l�x�������������*9ENW`hlkjjjgaZQIA9/#�����������������������#'*.0110/.+'#
�����������������������������	%)+.3652/,*'"���������������������������������������������
 ""#%$!  
�������������������"(.039@DDCEIIC=;82)!�������������������������������!%)++,/0/---)$ !�������������������������	��		 %*,.26:;>@A@@@@>951-(#
���������������������������������������� )2:BKSZafikkjihe`[XSLD=6-"����������������������������������������������������������������������������!(/7@GLR[fnsw{�����������{voe[OB6(���������������{�p�f�_�Y�R�L�H�G�H�K�L�N�U�_�i�r�|���������������'5CMV_gotxz}~}||ytokgb[UOJD<5.'������������������������������������������������������������������������(7GVes��������������������xgUC.�����������|�o�d�]�X�U�S�S�S�T�Y�c�l�s�|���������������*5?GOW]adffgge`\XSMF@;5.'!	������������������������������������������������������������������������
/?LYgw������������������q_N=,�����������w�i�`�Y�S�M�H�I�J�K�M�U�`�j�s�������������)4?HQVXY[\YSMHA7-%��������������������	$,4;BGKPSTSQNH@7-%���������������~�u�l�e�a�^�^�_�a�f�n�y������������*AVk������������������lWC.����������~�m�^�P�C�9�2�.�-�-�.�1�7�@�J�V�b�o�~������������%4AKS[bhmpplhgc\RJD=3'
��������")3>DIQ[acdffb\VQJ=0$���������~�p�^�J�;�2�)�������!�.�>�O�c�y��������9Ut�����*2:@@;3+
�����~aB!������x�d�P�=�,����
�
����$�3�E�V�h�|���������)8HYfov}��}ytmdXK?3$
������������������*7FUbkt~��������ym_RC2	���������z�i�Y�L�A�8�1�.�.�1�5�<�D�R�b�s����������(B[q����������������lYD-�����������w�r�o�j�h�j�n�t�{��������������%4AO^ktz|~}yri_TH9)�����������}�t�k�c�_�]�^�`�e�n�y������������%:Ne}���������������|gR9��������k�V�B�1�"��
����
���&�8�I�[�q����������3Ni����������������lS8	�����������}�t�o�l�k�l�q�x���������������#0<FLQTTQLH@4'�������������|�q�f�_�Y�V�V�X�]�e�q������������,D\v���������������iM/
������p�S�9�!�
�������������1�H�c�������+Nm������
 %'%������jN2����������|�l�^�W�T�S�R�R�U�]�g�r�~����������#3BPZafihfc^VK=/ �����������|�m�_�U�P�N�N�N�S�\�f�p�|����������2Nh�������������������gK,
������x�]�D�/������������+�A�Z�u��������9[}����#.5774-"�����|^?���������n�V�A�/�"������� �+�8�G�[�q����������)=Pany�����|uk]M<+�����������y�n�e�]�X�X�[�a�i�s�~����������
"9Nd|����������������rZA'
��������w�d�U�G�:�2�0�2�5�8�?�J�Z�k�~���������0Iay�����������������pX>#��������o�[�I�;�/�&�����"�*�6�E�V�h�}��������0H]r���������������mW?(����������v�f�X�L�D�@�=�<�;�?�F�O�X�e�v����������	2I_q��������������p]I6$����������������������������������������%6GWfs���������zpfXF4#����������������y�v�t�r�q�v�}��������������� ,7BLV]acca_ZQF:-!�������������x�p�g�`�\�\�^�a�e�n�|�����������5Md{������������������waH-����������q�_�Q�E�=�7�5�5�6�9�>�H�W�f�v����������+=O`p}������������scSC3#������������������������������������������'.48<>><:72,&!��������������������	%-6>FMUZ_cffd`]YRG<2'	�����������������{�t�l�f�e�g�i�l�r�|������������-BVk�����������������q\D,����������x�d�V�K�A�7�0�-�,�,�/�6�?�I�T�c�t������������-:FTbmsx}����}yrkd]TH<2'������������������!!
���������������������������������������#3CR_lw������������vgXJ;*�����������x�l�c�Z�R�L�I�H�I�K�Q�Z�d�o�}����������/E[m���������������~mYD0������������u�m�i�g�f�f�h�o�w����������������%.7>DGHHGEA<5.(!�������������������&1=KV]emuz}}}}ztlcYM@1 �������������x�l�d�^�Y�T�S�U�Y�^�g�r������������,@Sfx�������������p^L9&��������������u�i�a�]�Y�V�U�X�^�g�p�{�������������
0?N^my����������vj_RC3#������������������������������������
 )2;BHKLKHD?90%�����������������������������������������
/?Qdu����������������nXB-����������o�`�S�G�?�9�6�4�4�7�>�G�Q�]�l�~����������%4BOZbjosttsoibYOD:."	��������������������������'2=FOTX\chhedc_VMD<0#	������������������������������������������'5AN\jt{������wpgZJ:+
���������������|�u�n�i�h�j�n�s�x�~���������������
+7ALV_floponlf^VMC9- ��������������������������������,9FR]flsx}~|zundXMA3%���������������������������������������������
$/8AJRW[_cd`]YUNF@8.#�������������������������������������&.8>@CFHHEB=7/(!
��������������������������������������'5AJS^hoty~����xqle[M@6+������������������z�s�o�n�p�p�r�x�����������������!0>IT`ksvy|~zvrmeZPE9,��������������������������������������������������������
#+27<BGKNQTVWWVUUTRQPMIHGFECABCCA@@@?>:863.(#	�������������������y�r�k�e�b�`�^�\�]�_�d�i�o�v�����������������
*:L]kw�����������������}m^K6!
������������o�a�U�I�=�6�2�/�,�,�0�7�@�J�W�f�u����������*8I\n{���������������|pcVI</ ��������������������������������������������������	
	������	
!%)-38;<<>@@>;82-("�������������������������������������������������������$0=M]iu��������������viYJ;+
�����������������{�v�s�s�v�z�~�����������������
(4AOY`fnsuwxvphb]SF9/#������������������{�t�p�n�p�q�r�u�|������������������",4=ISZ_dhkkiihfa]YTMGC?:51.+'"   ������������������������������~�~������������������������)9HVcp~���������������ueTD1	����������z�i�Z�N�B�7�0�.�-�+�,�1�:�C�L�Y�h�x�����������*;K^o}�����������������ugYM@1!������������������������������������������������������������	!',05;ADGKQVWVWZZUPMIB92*�������������������v�p�k�h�f�e�f�j�n�r�z���������������(8HYiw����������������rbRC2!�����������������}�w�r�p�q�s�v�{������������������� *3<DINQSSRPMHD?80'�����������������������������������%.6<BHLORRQPOLGB<4,#
�������������������������

������������������������!&,28=@CFGFDCA>92*"������������������z�s�n�j�h�h�i�l�q�y���������������!5I[k|�������������������t_J6"
����������y�f�U�F�8�.�%��������&�/�:�G�V�f�v�����������);L[kz������������������}rh]RH>5+"������������������������������������������~�|�{�}��������������������������!0@Qap~������������������|kXC,����������l�\�N�A�6�.�'�!��� �%�,�4�?�M�\�k�|����������	2EVgw�����������������wi\N>/�����������������������������������������������������������������������������������	 %,27:<AFIKKKMNNKHFC>93+#�������������������������������������������������)4@JT]cfjnpokhd^ULC8."����������������������������������� )17<@EHJIGFD@92+#����������������������������������������������
!+7CLT[bfkmnnmjfb^YSME;1(!	�������������������������������������������������������'08AJRY^dksvwy~�~yurmdXMC8*���������������t�g�\�T�L�E�@�>�?�A�D�J�R�[�e�q������������%9L_s��������������������ubP=)���������}�m�`�V�L�A�9�5�3�1�/�2�7�>�D�L�V�b�m�x�������������
&3>JU_fox������������������~xqkc[QH?4(�������������~�q�e�Y�N�D�:�2�+�#��������%�-�7�C�Q�a�r�����������)C]u������"),..,%�����}bF*��������i�S�@�,��
�����������	��%�5�H�^�t����������,BVi{������������������}paSD4%
������������������������������������������������������������������������������������(2>GOYdmv~������������xpeWI<-�������������x�l�b�Y�Q�L�I�I�I�J�P�Y�a�i�t��������������
.>KZiv����������xodWK?1#�����������������������������������"&*-//,+*& 
�����������������������������������������������,8DOZdjou|}}}zskf_TI?6+ ��������������������������������������������������������������������������������	&,28=CHLNQSSSRNID>7-#
����������������v�m�g�a�[�W�V�W�Z�^�d�n�z�������������%9Oew��������������������}jU>(����������w�d�T�E�6�*�"��������$�/�<�H�T�c�u������������
-;IXeow������������������{vpg^XSKA8/&�������������������x�p�h�_�V�O�I�C�=�:�8�7�7�8�=�B�F�L�T�`�l�x������������%:Pi�������%+/0.)"������tY>!������y�`�I�3� ����������������/�B�T�g�}��������3GZl|�������������������~p`QD6)���������������������������������������������������������������������������"+4@MXbjt~���������������xpeXLA3#�������������x�l�`�V�M�E�?�:�6�6�8�:�<�A�J�U�`�m�z������������
/?Paq~����������������xncVI=0$�����������������������������������������������������������������		
"$&).1358=AA@@BCDBA?=:751,'"
�����������������������������������������������������#*06<AFIKNPPPNLHD@;5.& �����������������������������������������������������������������������������"'-27;@EKPSUW[^`^\[ZWQJC;2'������������~�r�f�[�R�K�E�A�@�@�B�E�J�R�[�f�r��������������
1CTdt�������������������|o`P@1!������������������}�x�t�r�p�p�q�r�u�y�~���������������������������������!)1:BKVajry����������������~qeWF2
������������q�_�N�>�1�&��������
���(�3�A�T�h�|���������%?Xp��������
�������jS:"����������}�l�_�T�J�@�9�4�1�.�-�.�2�6�<�C�K�U�^�h�t����������������)4?JT^fmt|������������������xpg^UJ>3'
�������������~�n�`�T�H�=�2�*�"�������!�)�3�>�K�[�k�}���������0F]s��������������������vaK6 
������������q�b�U�J�C�=�6�1�.�/�1�3�6�;�C�L�W�c�o�|�������������$0:CJR[bfhjmnmkhggfb_][YVTQMJGC=83/,& 
����������������������������������������������������������������"/;FP[enu{���������xof]SI>2'���������������������������������������������������������������!#%)-0479<>AFIJKMPRQRSTVVUTRPLGA;50)
�������������������}�t�m�f�b�_�\�Z�Y�\�_�c�g�n�x����������������� 1BR`n}��������������������rcUD2!�������������{�o�c�X�P�J�D�?�=�<�=�>�@�E�L�S�Z�c�l�x�����������������*6ALV`is{�������������������xph^TI=2&����������������w�l�b�X�O�F�?�:�5�1�0�0�2�5�:�@�I�R�]�i�x������������&<Qfz����������������������t^G0��������|�g�V�G�9�+�������
����$�0�=�J�Y�j�|�����������#4DUeq|������������������}vof\TLC9/'����������������������������}�y�u�r�p�p�o�o�p�u�y�{�~��������������������'6ER`n{������������������rbRB0
��������������s�g�\�S�L�F�A�?�=�?�B�F�L�S�]�i�u���������������	%2@MYenv}���������ztnf^VNF>4,$
������������������������������������������������������������������������$/9CLU^gmrv{~~|{xtnf]SJ?3&����������������������|�z�z�{�|���������������������#,6?IPV\adddcb_\ZWRMFA<60)$	������������������������������������������������������������������������������������������(4@JU_iry����������}vl`UI<. �������������������~�z�y�x�w�y�}����������������������	'3;BHNQSUXYWTRQMGA=92+&"
��������������������������������������������������������������������������������������������������	'6ESamy���������������xl^N<+	���������������v�m�g�b�^�Z�Z�]�`�c�h�p�z�����������������
'1;DNUZ_dffeeeb^ZVQJC>93,&"

�����������������������������������������������������������������������������������'7GT`n{����������������vgUB0��������������t�h�_�X�S�O�L�L�O�S�X�^�g�q�}���������������!.7@HQX[^`aa_]ZWTPKE>71,'!


���������������������������}�{�{�}���������������������%4BRany�������������}rfXI9+	�����������������~�y�v�s�q�q�s�v�z�������������������$09?GPX]`bddc`\XRMGA;4-&
���������������������������������������������������������������������������)6BLVaku}�����������ypeZNB4%������������������y�u�s�p�o�p�t�x�}���������������������"*28>CHLOPPQQQOMKHD@<83.*&"
	�����������������������������������������������������������������������
!,6?IT]dkqvy|~}zwsmf^VLB8-!�����������������������������������������������������
%.49>CEFGHIGDB@<73/+'"	����������������������������������������������������������������*:IYhw�����������������saO=+�����������{�n�c�Z�R�K�E�C�C�D�F�J�R�[�d�n�z�������������$1=IU_gouy}~|zwqib\UMC92+"��������������������������������������������������������������������������������$2DUco|���������������veUD0������������x�i�^�V�N�G�C�D�E�F�K�S�^�h�t������������,AUer�������������zocTD4%���������������������������������������������������������������������
(2<FOW]dknpponjd]TJ>1#���������������~�u�o�k�j�i�j�m�s�{���������������+;IVdq|����������xm`SE6&����������������z�v�v�v�x�|����������������� />JSZahlnnlhc[SI=0$
�������������������������������������������)5>FOX^bcdeea[VOG=4)���������������������������������������� -9CMV\`cfgea\WPF:/$	������������������������������������������*8EPYbinqtutpke]RE8+
���������������|�s�l�g�e�e�f�i�n�w��������������-@Sdt��������������o^L:&�������������y�o�g�a�\�\�^�`�c�i�s�}�������������#1@NYdlruwxwupke]SH<1$	����������������������������������
!,7BJPUY\[XUQKB7+��������������~�w�r�n�l�m�p�u�{��������������*<N_p�������������{jYF2���������z�j�\�Q�I�B�=�<�=�A�G�O�Y�g�w����������5J^r��������������raN;&��������������z�q�k�h�g�h�j�o�v����������������"1=IU`ioruwvrmg_UJ>0"�����������������������������������������+:IWcnx�����|ti[M?/
������������}�p�f�]�W�R�O�P�U�[�b�m�{������������(=Qey���������������yeQ;$����������p�^�N�B�9�2�,�*�+�/�5�=�I�X�i�{���������8Odx���������������p\H2�����������x�n�g�a�^�]�^�b�h�p�y��������������%4BOYbhnqqnkg`WLA5'	�����������������������������������������!2FYix������������ueTA,����������p�_�R�H�?�9�7�7�9�=�D�O�]�m�}����������0F\q����������������t`J2��������z�g�U�G�=�4�.�*�+�.�4�<�F�S�b�s����������)?Sfy������������}mZG3	�������������x�q�l�i�i�l�q�x���������������#4DTcp{��������~sgYJ9'�����������~�s�k�d�b�a�c�f�m�w������������0E[o�������������}kWB+����������o�\�L�=�0�&� ����$�-�:�I�Y�l����������0H`v����������������{eN6���������m�^�R�H�A�=�;�=�A�H�R�]�l�|����������*@Tfv�����������o^K9%��������������y�q�k�h�f�h�l�s�{�������������!3EVes�����������teUD1�����������s�e�Z�Q�K�G�F�H�L�S�\�i�x�����������0EXk|������������xgT@+������������v�j�`�V�O�L�M�P�T�\�g�t������������"7L`t��������������zgS?*������������q�b�V�M�H�D�B�C�H�O�Y�d�r�����������.DXi{�������������o]H3	���������{�l�a�X�P�K�H�H�K�P�V�`�k�x������������
.@P_ju~�������{sh[M@2"������������������������������������!/=KXckrx|}{wrkbVJ;+������������}�p�g�_�Y�T�R�T�X�]�e�o�|������������*?Sfy���������������{gR>(����������y�f�V�I�>�5�.�*�+�.�2�8�B�O�^�m�~����������*?Rdu�������������teUE4"������������������������������������������!+39>CFFEB?;5.%������������������������������������#3CRbp}������������ufTA-��������|�h�V�F�9�-�#������"�,�8�F�V�g�z���������2H^r����������������n\I5!
���������������|�x�u�t�u�x�~�����������������%1<FMSWYZXVQJB9/$������������������������������������"1@MYdmv~�����}tj`UF6&�����������w�j�^�T�M�I�F�D�F�K�S�\�g�t������������&=Sfx���������������p]I5!�����������{�p�f�_�\�[�\�^�c�j�t�}�������������+;IU_hpvy{zxtng^SG:,������������������������������������.<JVbltz���|vndYL=-
�������������s�h�^�V�P�M�M�O�S�Y�`�j�v������������(;L\kx������������vi[L<,�����������������������������������������(2<FNSWYZYUPIA8-"������������������������������������������'7HWer~����������{pcTC1 ������������}�p�d�[�S�N�L�K�K�M�S�Z�c�o�|������������ 4GWfv������������|qcTE6&�������������������������������������������""""!
�����������������������
)6CP^kw�������������sdTB.���������n�[�I�9�,�!�����
��� �+�8�I�[�m�����������
%<Rg|������������������|kYG6$�������������������������������������������������������������������������������$/9EP[fpz������������{ocTD3"�����������x�g�X�K�?�5�,�'�#�"�#�%�*�3�>�J�X�h�z����������'=Sgz�����������������saN;(���������������y�t�q�o�n�o�s�x�}������������������$).011121-)%!����������������'09BJRY`eilnpomhaYPF:,�������������y�k�^�S�I�A�:�6�5�6�8�<�B�K�V�c�p�����������	3GYl|����������������qbR@/����������������������������������������������� "$# ���������������������� ,8ER_it~����������sgZK:(���������}�m�_�Q�F�=�7�2�/�.�0�4�:�A�K�X�f�t������������"5GXgu��������������vk^PC6(���������������������������������������������������������������������&3@MYer}��������������yiYG5!����������t�a�P�@�2�%���
���	����&�3�B�S�e�y���������.DZn�������������������~o_M;*
����������������������������������������������������������������������������
(1:EOXbku}�������������~rfYK:(�����������t�f�X�K�A�9�2�,�(�'�*�-�2�8�B�O�\�j�z����������+>P^l{��������������}qeWI;. �������������������������������������������������������������������������'/7?GPX`fmswz}~~}zvqkdZPE9,��������������y�q�j�d�_�\�Z�Z�[�^�b�h�o�w�����������������(4?JRZaglopqqpmid`[TLD<5-%����������������������������������������������������������������������(4@LV`is{������������{rg[OB3#�������������}�s�j�b�[�V�S�Q�P�Q�T�Y�^�e�n�x����������������*4>GNUZ_cfgggfeb_[WSOJD?:5/*% 
������������������������������������������������������������������".:EQ\fq{��������������ui\M>-
�������������w�l�b�Y�P�I�E�B�A�@�B�E�I�N�V�_�g�q�}���������������
+7ER^gq{��������������xof_VLA7.#�������������������������������������������������������������������������*6BOZdnx���������������}tj^RE9,��������������{�q�h�b�]�X�T�R�R�T�V�Y�^�e�n�w����������������%1<FNV^ejmpsvwvutrolhe`[VQKE>81+$��������������������������������������������������������������������(3<ENW_gntz��������~wqjbYNC9. ������������������������~�{�z�z�{�{�}�������������������������������%,5<BINSX]adgijklkjigda]XSOIC<5.&
��������������������������|�w�t�r�q�p�q�s�w�|��������������������"0=IU`kv~�������������~wnd[QG<0$
��������������������������������������������������������������������
 (-28?DHLQUY\_bcefggfdb`\VQKE=5-%��������������������������}�{�{�|�~������������������������
&1<HS\dltz��������|uoh`VLC8,
��������������������������������������������������������������������!',16;?DHLPSUXZ\]]]]\ZXTQLGB<6/( ����������������������������~�|�{�{�}������������������������!,7BMV_fmrvy{}|zxvsnhb\TKB:1(������������������������������������������������������������������	$*.26;@CFIMOPQRQPNLHC=70(��������������������������������������������������������
",7@JS[agmqtvvvtrnje_YRKC:2*!��������������������������������������������������������������	#)06=CINRVY\^___^\YUPKE=5-%��������������������������������������������������������'0:DMT[`eikllljhfb]WQLE=5.' 
�����������������������������������������������������
$)/5;@DGKNPQRSRPMIE@92*!����������������������������������������������������%-5;AGKORTUWWVUSQNJFB=95/("���������������������������������������������������
!',17<@CFIKLMNMKIGD@;50*#������������������������������������������������������$+17<AEHJKLLLKIFDA=951,'#	����������������������������������������������������������!%)-024799988741-*&!
������������������������������������������������!)05;@EIKNPPPONMJFB?:4/*%����������������������������������������������������������
#(.39>BEIKMNONKHFB=6/(!���������������������������������������������������
 *2:BINSWY[\]][XURMHA;4.'
�������������������������������������������������������������	!'-39=ADGJKLMLKHE@;4,%
��������������������������������������������������(3<DKSY^aceffd`\WRJC;4+#�����������������������������������������������������������������%,39>CGJMOPPOLHC=6.&
����������������������������������������������������'1;ENV\afikkkjhc_ZUME=4+"������������������������������	
�����������������������������%.6>EKQW[]___]YUOIA8.$
����������������������~�|�|�~���������������������
)7DP[dlsy}��{vpjcZOD:/$���������������������������������������
������������������������
$+2:BIPUZ]_`a_\XSME:0&
�����������������y�t�q�o�o�q�t�y������������������
&3ALWajrw{���|wpi`WMB8-"�����������������������������������������������������������������������)3=FNV]cgjllkie`[TKA7-!������������������������������������������������)4>FMTZ^`aa_\XSME=5,"
��������������������������
 #&&%$"�������������������������������������	(1:CLTZ`dhjjifb\UMC9."�����������������������~�~����������������������'2<FNU[_cfggfd`[UOH@7/&
�������������������������	  �����������������������������������'1;CKRX^bdeec`\WPH@7,!
������������������������������������������������$/9CLTY_cfgfda]WQJB:0'	��������������������������
!!! �����������������������������
%,4:@EJNPRRRPMHC<5-$�����������������������������������������������&/5;AFILMMLKHEA<60*$����������������������	 $&())(&#�����������������������������������������&/9BJPV\`bcdec`[VPH?6-#
�����������������������������������������������
$*05:=?AAA?=:72-("
���������������������!#$$$#!���������������������������������������������#-8BKT\djoqssrokf`XOD9-!�������������������������������������������������&.6<AEHKLKJHEB<71+%���������������������!$&'))'%"�����������������������������������������
)3;DLRW\`bcb`^ZTMF=3)	���������������������������������������������!*17;?CEEDB@=93.' 
���������������������	%+16:=>@A@>;73-&��������������������������������������������!+5>FMSY]_`a`^ZUOIA8/%���������������������������������������������#'*-....,*'$ 	������������������"',269;>@@?><84.(!���������������������������������������������������#.9DNV^ejnqrsrokf`XPF=2'����������������������������������������������
"&),..-,+*'$!
������������������

!#%&&&%$# �����������������������������������������������'2<ELTZ`dfhhheb]XRJB9/%���������������������������������������������	 #%'''&$"
�������������������!'+048:<>=<:840*$���������������������������������������������������
 )19?FKORTUTRPMHC=70( ����������������������������
���������������������������
$,4;AGLQTVXXVTQMHA91)���������������������������������������������������'09AHNSVY[[ZYVRNIC<5-%
������������������������������������������������������������!)06<BGLORTUUTROJE>7/'
������������������������������������������������������'1:CLSY^befggeb^YTNG?8/&����������������������������������������������������������������������������������
!%).1368:;;;;9630,&������������������������������������������������
%-4;AFJNQRSTSQNKHC=71*"
�������������������������������������	����������������	"&(+.0223220/,)%!��������������������������������������������������%+28=ADGIIJJIGDA>94.)#	���������������������������������������������������������������

!#%')+,-....-,*'$!
������������������������������������������������%*/49<?BDEEEEDA>;73-("
��������������������������������������	


�������������������������������������������%+059=ADEGHHGECA=95/)#	�����������������������������������������������	

 !"##$$$#"! �����������������������������������������"&*-0346676431/,(% 
��������������������������������������	

 !!"!! ������������������������������������
#(,0368:;;:9863/+'#	����������������������������������������������		

   ������������������������������������
 $'*,-./..-+)'%"�������������������������������������������		
!"""#""!�������������������������������������"',047:<=>>>=;9630+&"������������������������������������������������	

  
������������������������������������
#'*,-/00//-+)'$!���������������������������������������������	

���������������������������������������� "#$$%%$"!

������������������������������������������������������������������������������	 !"""!  
�������������������������������������"%'(*+---,+*(&$!������������������������������������������������

 !!""""!! 

�������������������������������������
"%(*,,---,*)'%"
�������������������������������������������	
	�����������������������������������������������



�����������������������������������������������	


�������������������������������������������������	
	��������������������������������������������

 "#$$%&%%$#"!
����������������������������������������������������� !""#"! ��������������������������������������  !!!! 	����������������������������������������������������������

!#%&'((((('&%#!
	�������������������������������������!#$&'))))((&%$#!

�������������������������������������������������������
  !"""!! ���������������������������������������� ""##$##"!!	��������������������������������������������������	
	��������������������������������������������	 !!"""""! 
������������������������������������������������������	   !! �������������������������������������������!$&'(((('&%#!	���������������������������������������������������������	

	��������������������������������������
!#%'*+,,,,,*)'%#!�����������������������������������������������������������������	
	�������������������������������������

�����������������������������������������������������������������������������������������������������������
�����������������������������������



�������������������������������������������������������������������"%&()***))(&#!������������������������������������	  
������������������������������������������������������������������������	!#%'())))('%# 
�������������������������������������

����������������������������������������������!"####"! 
�����������������������������������


	������������������������������
���������������������������������� "%&''''&$" ����������������������������������	


	����������������������������	

�����������������������������������
"%)+-.00/.-,*&# 
���������������������������������

	����������������������������	

���������������������������������
 #&)+-....-+)'$!
��������������������������������������


	����������������������


������������������������������������	 #%')****)(&$!��������������������������������������	


	����������������������������������������� !""""!!�������������������������������������
	�����������������������������������������������������������������������������������������������������������		�������������������������������������	


		������������������������������������������

�������������������������������������

��������������������������������������������������������������������������	

������������������������������������
!"$%%%%$#!������������������������������������




	������������������������������	
	�������������������������������������

	����������������������������������

���������������������������������



	����������������������������������

	�����������������������������������	

	����������������������������

���������������������������������	

��������������������������������



��������������������������������������	
	��������������������������������	
!"$%&'&&%#!������������������������������������	


��������������������������	




	�������������������������������������!$')*+,++*)'$!	���������������������������������	
	���������������������������������������������������������������������
 !"####"!����������������������������������	
��������������������������������������		�����������������������������������!"$$%%$$"!������������������������������������


	����������������		


		�������������������������������������� #&)+,-./..-+)&# 
�����������������������������������			����������������������������������������"&),.12344321/,)%!
�������������������������������������	
��������������������������������������������������������������������!#&')+,,,,+)'%#����������������������������������
�����������������������������������������������������������������������������	
 !#$$%$$#! �������������������������������������


������������������������������������������������������������������������������!"###"" �������������������������������������	
	����������������������������������������������������������������������������	!$&()+,,,+*)'%" 
	������������������������������������		��������������������������������������������������������������������������������� "%&(()))('&$!������������������������������������ "#$$$##" ���������������������������������������������������������������������������������������	

������������������������������������


	����������������������������������������������������������������������������������������

����������������������������������������


	�����������������������������������������������������������������������������

	����������������������������������������	

���������������������������������������������������


	�����������������������������������������

����������������������������������������������������������������������������������������������������������������							����������������������������������������������		





	��������������������������������������������		



	������������������������������������������������������������������������������������������������			






	�����������������������������������������������

�������������������������������������������������	



	�������������������������������������������������������	




	�������������������������������������������������	



	��������������������������������������������������������������������������������������������������������������������������������������������������	�������������������������������������������������������������������������������������


��������������������������������������	




	�������������������������������������������������������������������������������������
	�������������������������������������	

�����������������������������������	




������������������������������������



�������������������������������������	




	�����������������������������������	

	�����������������������������������	
�������������������������������������	





	��������������������������������������������	

	�������������������������������������	

	���������������������������������������	


			�����������������������������������������������������������������������

	���������������������������������������



	���������������������������������������������������������������������������

�������������������������������������


����������������������������������������������������������������������������������	


���������������������������������������	



	����������������������������������������������������������������������


��������������������������������������	




	������������������������������������������������������������	

��������������������������������������	




	����������������������������������������������������������������


����������������������������������������




		����������������������������������������������������������������

������������������������������������������	





	����������������������������������������������������������������	

	��������������������������������������������		



				�����������������������������������������������	

�������������������������������������������	



		�����������������������������������������������������	

	�������������������������������������������	








	������������������������������������������������������������������������


������������������������������������������	




	���������������������������������������������������������������������������������������������������������	



	�����������������������������������������������������������������������������������������������������������������	



	����������������������������������������������������������			








				��������������������������������������������������������������		


	�����������������������������������������������������������							����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������					����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������	


		���������������������������������������������������������������������������������������������������������������������������������������				



		������������������������������������������������������������������������������������������������������������������������������������������������������	







	�����������������������������������������������		���������������������������������������������������������������������������


	�����������������������������������������	



	����������������������������������������������������������������������������������

	�����������������������������������������	������������������������������������					�����������������������������������������	


���������������������������������������������������������������������������������					���������������������������������������



����������������������������������������		






	������������������������������������������������������������������������������������	
	�����������������������������������������		



		����������������������������������������������������������������������������������	
��������������������������������������







	������������������������������������������������������������������������������������



����������������������������������������	


		����������������������������������������������������������������������������������������


	������������������������������������������				����������������������������������������������������������������������������������������������������	



	����������������������������������������������������������������������������������������������������������������������������������������������������	����������������������������������������������������		






		������������������������������������������������������������������������������������������������������������������������������������������������������������������������								������������������������������������������������������������������������������������������������������������������������							��������������������������������������������������			

			��������������������������������������������������������������������������������������������������������		







	�������������������������������������������������					����������������������������������������������������������������������������������������������������		



		���������������������������������������������	


	������������������������������������������������������������������������������������������������			���������������������������������������������	


	��������������������������������������������������������������������������������������������������������������������������������������������������		



	��������������������������������������������������������������������������������������������������������	






	�����������������������������������������������������������������������������������������������������������������������������	


	���������������������������������������������		




		��������������������������������������������������������������������������������������������������	



	��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������		



		����������������������������������������������������������������������������������������������������������������������������������������	






	���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������				��������������������������������������������������������			



			������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������smpl$aQ<inst<acid<�LISTadtlLISTINFOISFTEdisonPKsc�\0���LL$newmail_notifier/config.inc.php.distnu�[���<?php

// Enables basic notification
$config['newmail_notifier_basic'] = false;

// Enables sound notification
$config['newmail_notifier_sound'] = false;

// Enables desktop notification
$config['newmail_notifier_desktop'] = false;

// Desktop notification close timeout in seconds
$config['newmail_notifier_desktop_timeout'] = 10;
PKsc�\�:~~~newmail_notifier/overlay.iconu�[��� h(  @

$Em$Em@'t������t��'@����������[��[�������������� ����B����������B������� ��U��������������U����u����)��������������)����u����V���;�������;�������V��]�����O�-�$�$�$�$�-�O��������]�Ѕ��J�N���;�;�;�;�N���J����Ѕ������g���^���U���U���^���g��������������������W���������W�������������Җ�����������������������Җ���̓
��
���̓����H��H����?������������/�PKsc�\��uEww$newmail_notifier/newmail_notifier.jsnu�[���/**
 * New Mail Notifier plugin script
 *
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

if (window.rcmail && rcmail.env.task == 'mail') {
    rcmail.addEventListener('plugin.newmail_notifier', newmail_notifier_run)
        .addEventListener('actionbefore', newmail_notifier_stop)
        .addEventListener('init', function() {
            // bind to messages list select event, so favicon will be reverted on message preview too
            if (rcmail.message_list)
                rcmail.message_list.addEventListener('select', newmail_notifier_stop);
        });
}

// Executes notification methods
function newmail_notifier_run(prop)
{
    if (prop.basic)
        newmail_notifier_basic();
    if (prop.sound)
        newmail_notifier_sound();
    if (prop.desktop)
        newmail_notifier_desktop(rcmail.get_label('body', 'newmail_notifier'));
}

// Stops notification
function newmail_notifier_stop(prop)
{
    // revert original favicon
    if (rcmail.env.favicon_href && rcmail.env.favicon_changed && (!prop || prop.action != 'check-recent')) {
        $('<link rel="shortcut icon" href="'+rcmail.env.favicon_href+'"/>').replaceAll('link[rel="shortcut icon"]');
        rcmail.env.favicon_changed = 0;
    }

    // Remove IE icon overlay if we're pinned to Taskbar
    try {
        if(window.external.msIsSiteMode()) {
            window.external.msSiteModeClearIconOverlay();
        }
    } catch(e) {}
}

// Basic notification: window.focus and favicon change
function newmail_notifier_basic()
{
    var w = rcmail.is_framed() ? window.parent : window,
        path = rcmail.assets_path('plugins/newmail_notifier');

    w.focus();

    // we cannot simply change a href attribute, we must to replace the link element (at least in FF)
    var link = $('<link rel="shortcut icon">').attr('href', path + '/favicon.ico'),
        oldlink = $('link[rel="shortcut icon"]', w.document);

    if (!rcmail.env.favicon_href)
        rcmail.env.favicon_href = oldlink.attr('href');

    rcmail.env.favicon_changed = 1;
    link.replaceAll(oldlink);

    // Add IE icon overlay if we're pinned to Taskbar
    try {
        if (window.external.msIsSiteMode()) {
            window.external.msSiteModeSetIconOverlay(path + '/overlay.ico', rcmail.get_label('title', 'newmail_notifier'));
        }
    } catch(e) {}
}

// Sound notification
function newmail_notifier_sound()
{
    var src = rcmail.assets_path('plugins/newmail_notifier/sound');

    (new Audio(src + '.mp3')).play()
        .catch(function() {
            // fallback to the wav format
            (new Audio(src + '.wav')).play();
        });
}

// Desktop notification
// - Require window.Notification API support (Chrome 22+ or Firefox 22+)
function newmail_notifier_desktop(body, disabled_callback)
{
    var timeout = rcmail.env.newmail_notifier_timeout || 10,
        icon = rcmail.assets_path('plugins/newmail_notifier/mail.png'),
        success_callback = function() {
            var popup = new window.Notification(rcmail.get_label('title', 'newmail_notifier'), {
                dir: "auto",
                lang: "",
                body: body,
                tag: "newmail_notifier",
                icon: icon
            });
            popup.onclick = function() { this.close(); };
            setTimeout(function() { popup.close(); }, timeout * 1000);
        };

    try {
        window.Notification.requestPermission(function(perm) {
            if (perm == 'granted')
                success_callback();
            else if (perm == 'denied' && disabled_callback)
                disabled_callback();
        });

        return true;
    }
    catch (e) {
        return false;
    }
}

function newmail_notifier_test_desktop()
{
    var status = newmail_notifier_desktop(rcmail.get_label('testbody', 'newmail_notifier'), function() {
        rcmail.display_message(rcmail.get_label('desktopdisabled', 'newmail_notifier'), 'error');
    });

    if (!status) {
        rcmail.display_message(rcmail.get_label('desktopunsupported', 'newmail_notifier'), 'error');
    }
}

function newmail_notifier_test_basic()
{
    newmail_notifier_basic();
}

function newmail_notifier_test_sound()
{
    newmail_notifier_sound();
}
PKsc�\c�!ffjqueryui/js/jquery-ui.min.jsnu�[���/*! jQuery UI - v1.13.2 - 2022-07-14
* http://jqueryui.com
* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
* Copyright jQuery Foundation and other contributors; Licensed MIT */

!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(V){"use strict";V.ui=V.ui||{};V.ui.version="1.13.2";var n,i=0,a=Array.prototype.hasOwnProperty,r=Array.prototype.slice;V.cleanData=(n=V.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=V._data(i,"events"))&&e.remove&&V(i).triggerHandler("remove");n(t)}),V.widget=function(t,i,e){var s,n,o,a={},r=t.split(".")[0],l=r+"-"+(t=t.split(".")[1]);return e||(e=i,i=V.Widget),Array.isArray(e)&&(e=V.extend.apply(null,[{}].concat(e))),V.expr.pseudos[l.toLowerCase()]=function(t){return!!V.data(t,l)},V[r]=V[r]||{},s=V[r][t],n=V[r][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},V.extend(n,s,{version:e.version,_proto:V.extend({},e),_childConstructors:[]}),(o=new i).options=V.widget.extend({},o.options),V.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}a[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=V.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},a,{constructor:n,namespace:r,widgetName:t,widgetFullName:l}),s?(V.each(s._childConstructors,function(t,e){var i=e.prototype;V.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),V.widget.bridge(t,n),n},V.widget.extend=function(t){for(var e,i,s=r.call(arguments,1),n=0,o=s.length;n<o;n++)for(e in s[n])i=s[n][e],a.call(s[n],e)&&void 0!==i&&(V.isPlainObject(i)?t[e]=V.isPlainObject(t[e])?V.widget.extend({},t[e],i):V.widget.extend({},i):t[e]=i);return t},V.widget.bridge=function(o,e){var a=e.prototype.widgetFullName||o;V.fn[o]=function(i){var t="string"==typeof i,s=r.call(arguments,1),n=this;return t?this.length||"instance"!==i?this.each(function(){var t,e=V.data(this,a);return"instance"===i?(n=e,!1):e?"function"!=typeof e[i]||"_"===i.charAt(0)?V.error("no such method '"+i+"' for "+o+" widget instance"):(t=e[i].apply(e,s))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:V.error("cannot call methods on "+o+" prior to initialization; attempted to call method '"+i+"'")}):n=void 0:(s.length&&(i=V.widget.extend.apply(null,[i].concat(s))),this.each(function(){var t=V.data(this,a);t?(t.option(i||{}),t._init&&t._init()):V.data(this,a,new e(i,this))})),n}},V.Widget=function(){},V.Widget._childConstructors=[],V.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=V(e||this.defaultElement||this)[0],this.element=V(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=V(),this.hoverable=V(),this.focusable=V(),this.classesElementLookup={},e!==this&&(V.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=V(e.style?e.ownerDocument:e.document||e),this.window=V(this.document[0].defaultView||this.document[0].parentWindow)),this.options=V.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:V.noop,_create:V.noop,_init:V.noop,destroy:function(){var i=this;this._destroy(),V.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:V.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return V.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=V.widget.extend({},this.options[t]),n=0;n<i.length-1;n++)s[i[n]]=s[i[n]]||{},s=s[i[n]];if(t=i.pop(),1===arguments.length)return void 0===s[t]?null:s[t];s[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(t){var e,i,s;for(e in t)s=this.classesElementLookup[e],t[e]!==this.options.classes[e]&&s&&s.length&&(i=V(s.get()),this._removeClass(s,e),i.addClass(this._classes({element:i,keys:e,classes:t,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(n){var o=[],a=this;function t(t,e){for(var i,s=0;s<t.length;s++)i=a.classesElementLookup[t[s]]||V(),i=n.add?(function(){var i=[];n.element.each(function(t,e){V.map(a.classesElementLookup,function(t){return t}).some(function(t){return t.is(e)})||i.push(e)}),a._on(V(i),{remove:"_untrackClassesElement"})}(),V(V.uniqueSort(i.get().concat(n.element.get())))):V(i.not(n.element).get()),a.classesElementLookup[t[s]]=i,o.push(t[s]),e&&n.classes[t[s]]&&o.push(n.classes[t[s]])}return(n=V.extend({element:this.element,classes:this.options.classes||{}},n)).keys&&t(n.keys.match(/\S+/g)||[],!0),n.extra&&t(n.extra.match(/\S+/g)||[]),o.join(" ")},_untrackClassesElement:function(i){var s=this;V.each(s.classesElementLookup,function(t,e){-1!==V.inArray(i.target,e)&&(s.classesElementLookup[t]=V(e.not(i.target).get()))}),this._off(V(i.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){var n="string"==typeof t||null===t,i={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s="boolean"==typeof s?s:i};return i.element.toggleClass(this._classes(i),s),this},_on:function(n,o,t){var a,r=this;"boolean"!=typeof n&&(t=o,o=n,n=!1),t?(o=a=V(o),this.bindings=this.bindings.add(o)):(t=o,o=this.element,a=this.widget()),V.each(t,function(t,e){function i(){if(n||!0!==r.options.disabled&&!V(this).hasClass("ui-state-disabled"))return("string"==typeof e?r[e]:e).apply(r,arguments)}"string"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||V.guid++);var s=t.match(/^([\w:-]*)\s*(.*)$/),t=s[1]+r.eventNamespace,s=s[2];s?a.on(t,s,i):o.on(t,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.off(e),this.bindings=V(this.bindings.not(t).get()),this.focusable=V(this.focusable.not(t).get()),this.hoverable=V(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){this._addClass(V(t.currentTarget),null,"ui-state-hover")},mouseleave:function(t){this._removeClass(V(t.currentTarget),null,"ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){this._addClass(V(t.currentTarget),null,"ui-state-focus")},focusout:function(t){this._removeClass(V(t.currentTarget),null,"ui-state-focus")}})},_trigger:function(t,e,i){var s,n,o=this.options[t];if(i=i||{},(e=V.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],n=e.originalEvent)for(s in n)s in e||(e[s]=n[s]);return this.element.trigger(e,i),!("function"==typeof o&&!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},V.each({show:"fadeIn",hide:"fadeOut"},function(o,a){V.Widget.prototype["_"+o]=function(e,t,i){var s,n=(t="string"==typeof t?{effect:t}:t)?!0!==t&&"number"!=typeof t&&t.effect||a:o;"number"==typeof(t=t||{})?t={duration:t}:!0===t&&(t={}),s=!V.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),s&&V.effects&&V.effects.effect[n]?e[o](t):n!==o&&e[n]?e[n](t.duration,t.easing,i):e.queue(function(t){V(this)[o](),i&&i.call(e[0]),t()})}});var s,x,k,o,l,h,c,u,C;V.widget;function D(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function I(t,e){return parseInt(V.css(t,e),10)||0}function T(t){return null!=t&&t===t.window}x=Math.max,k=Math.abs,o=/left|center|right/,l=/top|center|bottom/,h=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,C=V.fn.position,V.position={scrollbarWidth:function(){if(void 0!==s)return s;var t,e=V("<div style='display:block;position:absolute;width:200px;height:200px;overflow:hidden;'><div style='height:300px;width:auto;'></div></div>"),i=e.children()[0];return V("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.width<t.element[0].scrollWidth;return{width:"scroll"===i||"auto"===i&&t.height<t.element[0].scrollHeight?V.position.scrollbarWidth():0,height:e?V.position.scrollbarWidth():0}},getWithinInfo:function(t){var e=V(t||window),i=T(e[0]),s=!!e[0]&&9===e[0].nodeType;return{element:e,isWindow:i,isDocument:s,offset:!i&&!s?V(t).offset():{left:0,top:0},scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop(),width:e.outerWidth(),height:e.outerHeight()}}},V.fn.position=function(u){if(!u||!u.of)return C.apply(this,arguments);var d,p,f,g,m,t,_="string"==typeof(u=V.extend({},u)).of?V(document).find(u.of):V(u.of),v=V.position.getWithinInfo(u.within),b=V.position.getScrollInfo(v),y=(u.collision||"flip").split(" "),w={},e=9===(t=(e=_)[0]).nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:T(t)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:t.preventDefault?{width:0,height:0,offset:{top:t.pageY,left:t.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()};return _[0].preventDefault&&(u.at="left top"),p=e.width,f=e.height,m=V.extend({},g=e.offset),V.each(["my","at"],function(){var t,e,i=(u[this]||"").split(" ");(i=1===i.length?o.test(i[0])?i.concat(["center"]):l.test(i[0])?["center"].concat(i):["center","center"]:i)[0]=o.test(i[0])?i[0]:"center",i[1]=l.test(i[1])?i[1]:"center",t=h.exec(i[0]),e=h.exec(i[1]),w[this]=[t?t[0]:0,e?e[0]:0],u[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===y.length&&(y[1]=y[0]),"right"===u.at[0]?m.left+=p:"center"===u.at[0]&&(m.left+=p/2),"bottom"===u.at[1]?m.top+=f:"center"===u.at[1]&&(m.top+=f/2),d=D(w.at,p,f),m.left+=d[0],m.top+=d[1],this.each(function(){var i,t,a=V(this),r=a.outerWidth(),l=a.outerHeight(),e=I(this,"marginLeft"),s=I(this,"marginTop"),n=r+e+I(this,"marginRight")+b.width,o=l+s+I(this,"marginBottom")+b.height,h=V.extend({},m),c=D(w.my,a.outerWidth(),a.outerHeight());"right"===u.my[0]?h.left-=r:"center"===u.my[0]&&(h.left-=r/2),"bottom"===u.my[1]?h.top-=l:"center"===u.my[1]&&(h.top-=l/2),h.left+=c[0],h.top+=c[1],i={marginLeft:e,marginTop:s},V.each(["left","top"],function(t,e){V.ui.position[y[t]]&&V.ui.position[y[t]][e](h,{targetWidth:p,targetHeight:f,elemWidth:r,elemHeight:l,collisionPosition:i,collisionWidth:n,collisionHeight:o,offset:[d[0]+c[0],d[1]+c[1]],my:u.my,at:u.at,within:v,elem:a})}),u.using&&(t=function(t){var e=g.left-h.left,i=e+p-r,s=g.top-h.top,n=s+f-l,o={target:{element:_,left:g.left,top:g.top,width:p,height:f},element:{element:a,left:h.left,top:h.top,width:r,height:l},horizontal:i<0?"left":0<e?"right":"center",vertical:n<0?"top":0<s?"bottom":"middle"};p<r&&k(e+i)<p&&(o.horizontal="center"),f<l&&k(s+n)<f&&(o.vertical="middle"),x(k(e),k(i))>x(k(s),k(n))?o.important="horizontal":o.important="vertical",u.using.call(this,t,o)}),a.offset(V.extend(h,{using:t}))})},V.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,a=s-o,r=o+e.collisionWidth-n-s;e.collisionWidth>n?0<a&&r<=0?(i=t.left+a+e.collisionWidth-n-s,t.left+=a-i):t.left=!(0<r&&a<=0)&&r<a?s+n-e.collisionWidth:s:0<a?t.left+=a:0<r?t.left-=r:t.left=x(t.left-o,t.left)},top:function(t,e){var i=e.within,s=i.isWindow?i.scrollTop:i.offset.top,n=e.within.height,o=t.top-e.collisionPosition.marginTop,a=s-o,r=o+e.collisionHeight-n-s;e.collisionHeight>n?0<a&&r<=0?(i=t.top+a+e.collisionHeight-n-s,t.top+=a-i):t.top=!(0<r&&a<=0)&&r<a?s+n-e.collisionHeight:s:0<a?t.top+=a:0<r?t.top-=r:t.top=x(t.top-o,t.top)}},flip:{left:function(t,e){var i=e.within,s=i.offset.left+i.scrollLeft,n=i.width,o=i.isWindow?i.scrollLeft:i.offset.left,a=t.left-e.collisionPosition.marginLeft,r=a-o,l=a+e.collisionWidth-n-o,h="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,i="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,a=-2*e.offset[0];r<0?((s=t.left+h+i+a+e.collisionWidth-n-s)<0||s<k(r))&&(t.left+=h+i+a):0<l&&(0<(o=t.left-e.collisionPosition.marginLeft+h+i+a-o)||k(o)<l)&&(t.left+=h+i+a)},top:function(t,e){var i=e.within,s=i.offset.top+i.scrollTop,n=i.height,o=i.isWindow?i.scrollTop:i.offset.top,a=t.top-e.collisionPosition.marginTop,r=a-o,l=a+e.collisionHeight-n-o,h="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,i="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,a=-2*e.offset[1];r<0?((s=t.top+h+i+a+e.collisionHeight-n-s)<0||s<k(r))&&(t.top+=h+i+a):0<l&&(0<(o=t.top-e.collisionPosition.marginTop+h+i+a-o)||k(o)<l)&&(t.top+=h+i+a)}},flipfit:{left:function(){V.ui.position.flip.left.apply(this,arguments),V.ui.position.fit.left.apply(this,arguments)},top:function(){V.ui.position.flip.top.apply(this,arguments),V.ui.position.fit.top.apply(this,arguments)}}};V.ui.position,V.extend(V.expr.pseudos,{data:V.expr.createPseudo?V.expr.createPseudo(function(e){return function(t){return!!V.data(t,e)}}):function(t,e,i){return!!V.data(t,i[3])}}),V.fn.extend({disableSelection:(t="onselectstart"in document.createElement("div")?"selectstart":"mousedown",function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}),enableSelection:function(){return this.off(".ui-disableSelection")}});var t,d=V,p={},e=p.toString,f=/^([\-+])=\s*(\d+\.?\d*)/,g=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16),t[4]?(parseInt(t[4],16)/255).toFixed(2):1]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16),t[4]?(parseInt(t[4]+t[4],16)/255).toFixed(2):1]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],m=d.Color=function(t,e,i,s){return new d.Color.fn.parse(t,e,i,s)},_={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},v={byte:{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},b=m.support={},y=d("<p>")[0],w=d.each;function P(t){return null==t?t+"":"object"==typeof t?p[e.call(t)]||"object":typeof t}function M(t,e,i){var s=v[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:Math.min(s.max,Math.max(0,t)))}function S(s){var n=m(),o=n._rgba=[];return s=s.toLowerCase(),w(g,function(t,e){var i=e.re.exec(s),i=i&&e.parse(i),e=e.space||"rgba";if(i)return i=n[e](i),n[_[e].cache]=i[_[e].cache],o=n._rgba=i._rgba,!1}),o.length?("0,0,0,0"===o.join()&&d.extend(o,B.transparent),n):B[s]}function H(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}y.style.cssText="background-color:rgba(1,1,1,.5)",b.rgba=-1<y.style.backgroundColor.indexOf("rgba"),w(_,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),d.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(t,e){p["[object "+e+"]"]=e.toLowerCase()}),(m.fn=d.extend(m.prototype,{parse:function(n,t,e,i){if(void 0===n)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=d(n).css(t),t=void 0);var o=this,s=P(n),a=this._rgba=[];return void 0!==t&&(n=[n,t,e,i],s="array"),"string"===s?this.parse(S(n)||B._default):"array"===s?(w(_.rgba.props,function(t,e){a[e.idx]=M(n[e.idx],e)}),this):"object"===s?(w(_,n instanceof m?function(t,e){n[e.cache]&&(o[e.cache]=n[e.cache].slice())}:function(t,i){var s=i.cache;w(i.props,function(t,e){if(!o[s]&&i.to){if("alpha"===t||null==n[t])return;o[s]=i.to(o._rgba)}o[s][e.idx]=M(n[t],e,!0)}),o[s]&&d.inArray(null,o[s].slice(0,3))<0&&(null==o[s][3]&&(o[s][3]=1),i.from&&(o._rgba=i.from(o[s])))}),this):void 0},is:function(t){var n=m(t),o=!0,a=this;return w(_,function(t,e){var i,s=n[e.cache];return s&&(i=a[e.cache]||e.to&&e.to(a._rgba)||[],w(e.props,function(t,e){if(null!=s[e.idx])return o=s[e.idx]===i[e.idx]})),o}),o},_space:function(){var i=[],s=this;return w(_,function(t,e){s[e.cache]&&i.push(t)}),i.pop()},transition:function(t,a){var e=(h=m(t))._space(),i=_[e],t=0===this.alpha()?m("transparent"):this,r=t[i.cache]||i.to(t._rgba),l=r.slice(),h=h[i.cache];return w(i.props,function(t,e){var i=e.idx,s=r[i],n=h[i],o=v[e.type]||{};null!==n&&(null===s?l[i]=n:(o.mod&&(n-s>o.mod/2?s+=o.mod:s-n>o.mod/2&&(s-=o.mod)),l[i]=M((n-s)*a+s,e)))}),this[e](l)},blend:function(t){if(1===this._rgba[3])return this;var e=this._rgba.slice(),i=e.pop(),s=m(t)._rgba;return m(d.map(e,function(t,e){return(1-i)*s[e]+i*t}))},toRgbaString:function(){var t="rgba(",e=d.map(this._rgba,function(t,e){return null!=t?t:2<e?1:0});return 1===e[3]&&(e.pop(),t="rgb("),t+e.join()+")"},toHslaString:function(){var t="hsla(",e=d.map(this.hsla(),function(t,e){return null==t&&(t=2<e?1:0),t=e&&e<3?Math.round(100*t)+"%":t});return 1===e[3]&&(e.pop(),t="hsl("),t+e.join()+")"},toHexString:function(t){var e=this._rgba.slice(),i=e.pop();return t&&e.push(~~(255*i)),"#"+d.map(e,function(t){return 1===(t=(t||0).toString(16)).length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}})).parse.prototype=m.fn,_.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/255,i=t[1]/255,s=t[2]/255,n=t[3],o=Math.max(e,i,s),a=Math.min(e,i,s),r=o-a,l=o+a,t=.5*l,i=a===o?0:e===o?60*(i-s)/r+360:i===o?60*(s-e)/r+120:60*(e-i)/r+240,l=0==r?0:t<=.5?r/l:r/(2-l);return[Math.round(i)%360,l,t,null==n?1:n]},_.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],t=t[3],i=s<=.5?s*(1+i):s+i-s*i,s=2*s-i;return[Math.round(255*H(s,i,e+1/3)),Math.round(255*H(s,i,e)),Math.round(255*H(s,i,e-1/3)),t]},w(_,function(l,t){var e=t.props,o=t.cache,a=t.to,r=t.from;m.fn[l]=function(t){if(a&&!this[o]&&(this[o]=a(this._rgba)),void 0===t)return this[o].slice();var i=P(t),s="array"===i||"object"===i?t:arguments,n=this[o].slice();return w(e,function(t,e){t=s["object"===i?t:e.idx];null==t&&(t=n[e.idx]),n[e.idx]=M(t,e)}),r?((t=m(r(n)))[o]=n,t):m(n)},w(e,function(a,r){m.fn[a]||(m.fn[a]=function(t){var e,i=P(t),s="alpha"===a?this._hsla?"hsla":"rgba":l,n=this[s](),o=n[r.idx];return"undefined"===i?o:("function"===i&&(i=P(t=t.call(this,o))),null==t&&r.empty?this:("string"===i&&(e=f.exec(t))&&(t=o+parseFloat(e[2])*("+"===e[1]?1:-1)),n[r.idx]=t,this[s](n)))})})}),(m.hook=function(t){t=t.split(" ");w(t,function(t,o){d.cssHooks[o]={set:function(t,e){var i,s,n="";if("transparent"!==e&&("string"!==P(e)||(i=S(e)))){if(e=m(i||e),!b.rgba&&1!==e._rgba[3]){for(s="backgroundColor"===o?t.parentNode:t;(""===n||"transparent"===n)&&s&&s.style;)try{n=d.css(s,"backgroundColor"),s=s.parentNode}catch(t){}e=e.blend(n&&"transparent"!==n?n:"_default")}e=e.toRgbaString()}try{t.style[o]=e}catch(t){}}},d.fx.step[o]=function(t){t.colorInit||(t.start=m(t.elem,o),t.end=m(t.end),t.colorInit=!0),d.cssHooks[o].set(t.elem,t.start.transition(t.end,t.pos))}})})("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor"),d.cssHooks.borderColor={expand:function(i){var s={};return w(["Top","Right","Bottom","Left"],function(t,e){s["border"+e+"Color"]=i}),s}};var z,A,O,N,E,W,F,L,R,Y,B=d.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"},j="ui-effects-",q="ui-effects-style",K="ui-effects-animated";function U(t){var e,i,s=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,n={};if(s&&s.length&&s[0]&&s[s[0]])for(i=s.length;i--;)"string"==typeof s[e=s[i]]&&(n[e.replace(/-([\da-z])/gi,function(t,e){return e.toUpperCase()})]=s[e]);else for(e in s)"string"==typeof s[e]&&(n[e]=s[e]);return n}function X(t,e,i,s){return t={effect:t=V.isPlainObject(t)?(e=t).effect:t},"function"==typeof(e=null==e?{}:e)&&(s=e,i=null,e={}),"number"!=typeof e&&!V.fx.speeds[e]||(s=i,i=e,e={}),"function"==typeof i&&(s=i,i=null),e&&V.extend(t,e),i=i||e.duration,t.duration=V.fx.off?0:"number"==typeof i?i:i in V.fx.speeds?V.fx.speeds[i]:V.fx.speeds._default,t.complete=s||e.complete,t}function $(t){return!t||"number"==typeof t||V.fx.speeds[t]||("string"==typeof t&&!V.effects.effect[t]||("function"==typeof t||"object"==typeof t&&!t.effect))}function G(t,e){var i=e.outerWidth(),e=e.outerHeight(),t=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/.exec(t)||["",0,i,e,0];return{top:parseFloat(t[1])||0,right:"auto"===t[2]?i:parseFloat(t[2]),bottom:"auto"===t[3]?e:parseFloat(t[3]),left:parseFloat(t[4])||0}}V.effects={effect:{}},N=["add","remove","toggle"],E={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1},V.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,e){V.fx.step[e]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(d.style(t.elem,e,t.end),t.setAttr=!0)}}),V.fn.addBack||(V.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),V.effects.animateClass=function(n,t,e,i){var o=V.speed(t,e,i);return this.queue(function(){var i=V(this),t=i.attr("class")||"",e=(e=o.children?i.find("*").addBack():i).map(function(){return{el:V(this),start:U(this)}}),s=function(){V.each(N,function(t,e){n[e]&&i[e+"Class"](n[e])})};s(),e=e.map(function(){return this.end=U(this.el[0]),this.diff=function(t,e){var i,s,n={};for(i in e)s=e[i],t[i]!==s&&(E[i]||!V.fx.step[i]&&isNaN(parseFloat(s))||(n[i]=s));return n}(this.start,this.end),this}),i.attr("class",t),e=e.map(function(){var t=this,e=V.Deferred(),i=V.extend({},o,{queue:!1,complete:function(){e.resolve(t)}});return this.el.animate(this.diff,i),e.promise()}),V.when.apply(V,e.get()).done(function(){s(),V.each(arguments,function(){var e=this.el;V.each(this.diff,function(t){e.css(t,"")})}),o.complete.call(i[0])})})},V.fn.extend({addClass:(O=V.fn.addClass,function(t,e,i,s){return e?V.effects.animateClass.call(this,{add:t},e,i,s):O.apply(this,arguments)}),removeClass:(A=V.fn.removeClass,function(t,e,i,s){return 1<arguments.length?V.effects.animateClass.call(this,{remove:t},e,i,s):A.apply(this,arguments)}),toggleClass:(z=V.fn.toggleClass,function(t,e,i,s,n){return"boolean"==typeof e||void 0===e?i?V.effects.animateClass.call(this,e?{add:t}:{remove:t},i,s,n):z.apply(this,arguments):V.effects.animateClass.call(this,{toggle:t},e,i,s)}),switchClass:function(t,e,i,s,n){return V.effects.animateClass.call(this,{add:e,remove:t},i,s,n)}}),V.expr&&V.expr.pseudos&&V.expr.pseudos.animated&&(V.expr.pseudos.animated=(W=V.expr.pseudos.animated,function(t){return!!V(t).data(K)||W(t)})),!1!==V.uiBackCompat&&V.extend(V.effects,{save:function(t,e){for(var i=0,s=e.length;i<s;i++)null!==e[i]&&t.data(j+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;s<n;s++)null!==e[s]&&(i=t.data(j+e[s]),t.css(e[s],i))},setMode:function(t,e){return e="toggle"===e?t.is(":hidden")?"show":"hide":e},createWrapper:function(i){if(i.parent().is(".ui-effects-wrapper"))return i.parent();var s={width:i.outerWidth(!0),height:i.outerHeight(!0),float:i.css("float")},t=V("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e={width:i.width(),height:i.height()},n=document.activeElement;try{n.id}catch(t){n=document.body}return i.wrap(t),i[0]!==n&&!V.contains(i[0],n)||V(n).trigger("focus"),t=i.parent(),"static"===i.css("position")?(t.css({position:"relative"}),i.css({position:"relative"})):(V.extend(s,{position:i.css("position"),zIndex:i.css("z-index")}),V.each(["top","left","bottom","right"],function(t,e){s[e]=i.css(e),isNaN(parseInt(s[e],10))&&(s[e]="auto")}),i.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),i.css(e),t.css(s).show()},removeWrapper:function(t){var e=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),t[0]!==e&&!V.contains(t[0],e)||V(e).trigger("focus")),t}}),V.extend(V.effects,{version:"1.13.2",define:function(t,e,i){return i||(i=e,e="effect"),V.effects.effect[t]=i,V.effects.effect[t].mode=e,i},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,e="vertical"!==i?(e||100)/100:1;return{height:t.height()*e,width:t.width()*s,outerHeight:t.outerHeight()*e,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();1<e&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(q,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(q)||"",t.removeData(q)},mode:function(t,e){t=t.is(":hidden");return"toggle"===e&&(e=t?"show":"hide"),e=(t?"hide"===e:"show"===e)?"none":e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(t){var e,i=t.css("position"),s=t.position();return t.css({marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()),/^(static|relative)/.test(i)&&(i="absolute",e=V("<"+t[0].nodeName+">").insertAfter(t).css({display:/^(inline|ruby)/.test(t.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight"),float:t.css("float")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass("ui-effects-placeholder"),t.data(j+"placeholder",e)),t.css({position:i,left:s.left,top:s.top}),e},removePlaceholder:function(t){var e=j+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(t){V.effects.restoreStyle(t),V.effects.removePlaceholder(t)},setTransition:function(s,t,n,o){return o=o||{},V.each(t,function(t,e){var i=s.cssUnit(e);0<i[0]&&(o[e]=i[0]*n+i[1])}),o}}),V.fn.extend({effect:function(){function t(t){var e=V(this),i=V.effects.mode(e,r)||o;e.data(K,!0),l.push(i),o&&("show"===i||i===o&&"hide"===i)&&e.show(),o&&"none"===i||V.effects.saveStyle(e),"function"==typeof t&&t()}var s=X.apply(this,arguments),n=V.effects.effect[s.effect],o=n.mode,e=s.queue,i=e||"fx",a=s.complete,r=s.mode,l=[];return V.fx.off||!n?r?this[r](s.duration,a):this.each(function(){a&&a.call(this)}):!1===e?this.each(t).each(h):this.queue(i,t).queue(i,h);function h(t){var e=V(this);function i(){"function"==typeof a&&a.call(e[0]),"function"==typeof t&&t()}s.mode=l.shift(),!1===V.uiBackCompat||o?"none"===s.mode?(e[r](),i()):n.call(e[0],s,function(){e.removeData(K),V.effects.cleanUp(e),"hide"===s.mode&&e.hide(),i()}):(e.is(":hidden")?"hide"===r:"show"===r)?(e[r](),i()):n.call(e[0],s,i)}},show:(R=V.fn.show,function(t){if($(t))return R.apply(this,arguments);t=X.apply(this,arguments);return t.mode="show",this.effect.call(this,t)}),hide:(L=V.fn.hide,function(t){if($(t))return L.apply(this,arguments);t=X.apply(this,arguments);return t.mode="hide",this.effect.call(this,t)}),toggle:(F=V.fn.toggle,function(t){if($(t)||"boolean"==typeof t)return F.apply(this,arguments);t=X.apply(this,arguments);return t.mode="toggle",this.effect.call(this,t)}),cssUnit:function(t){var i=this.css(t),s=[];return V.each(["em","px","%","pt"],function(t,e){0<i.indexOf(e)&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):G(this.css("clip"),this)},transfer:function(t,e){var i=V(this),s=V(t.to),n="fixed"===s.css("position"),o=V("body"),a=n?o.scrollTop():0,r=n?o.scrollLeft():0,o=s.offset(),o={top:o.top-a,left:o.left-r,height:s.innerHeight(),width:s.innerWidth()},s=i.offset(),l=V("<div class='ui-effects-transfer'></div>");l.appendTo("body").addClass(t.className).css({top:s.top-a,left:s.left-r,height:i.innerHeight(),width:i.innerWidth(),position:n?"fixed":"absolute"}).animate(o,t.duration,t.easing,function(){l.remove(),"function"==typeof e&&e()})}}),V.fx.step.clip=function(t){t.clipInit||(t.start=V(t.elem).cssClip(),"string"==typeof t.end&&(t.end=G(t.end,t.elem)),t.clipInit=!0),V(t.elem).cssClip({top:t.pos*(t.end.top-t.start.top)+t.start.top,right:t.pos*(t.end.right-t.start.right)+t.start.right,bottom:t.pos*(t.end.bottom-t.start.bottom)+t.start.bottom,left:t.pos*(t.end.left-t.start.left)+t.start.left})},Y={},V.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,t){Y[t]=function(t){return Math.pow(t,e+2)}}),V.extend(Y,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),V.each(Y,function(t,e){V.easing["easeIn"+t]=e,V.easing["easeOut"+t]=function(t){return 1-e(1-t)},V.easing["easeInOut"+t]=function(t){return t<.5?e(2*t)/2:1-e(-2*t+2)/2}});y=V.effects,V.effects.define("blind","hide",function(t,e){var i={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},s=V(this),n=t.direction||"up",o=s.cssClip(),a={clip:V.extend({},o)},r=V.effects.createPlaceholder(s);a.clip[i[n][0]]=a.clip[i[n][1]],"show"===t.mode&&(s.cssClip(a.clip),r&&r.css(V.effects.clipToBox(a)),a.clip=o),r&&r.animate(V.effects.clipToBox(a),t.duration,t.easing),s.animate(a,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("bounce",function(t,e){var i,s,n=V(this),o=t.mode,a="hide"===o,r="show"===o,l=t.direction||"up",h=t.distance,c=t.times||5,o=2*c+(r||a?1:0),u=t.duration/o,d=t.easing,p="up"===l||"down"===l?"top":"left",f="up"===l||"left"===l,g=0,t=n.queue().length;for(V.effects.createPlaceholder(n),l=n.css(p),h=h||n["top"==p?"outerHeight":"outerWidth"]()/3,r&&((s={opacity:1})[p]=l,n.css("opacity",0).css(p,f?2*-h:2*h).animate(s,u,d)),a&&(h/=Math.pow(2,c-1)),(s={})[p]=l;g<c;g++)(i={})[p]=(f?"-=":"+=")+h,n.animate(i,u,d).animate(s,u,d),h=a?2*h:h/2;a&&((i={opacity:0})[p]=(f?"-=":"+=")+h,n.animate(i,u,d)),n.queue(e),V.effects.unshift(n,t,1+o)}),V.effects.define("clip","hide",function(t,e){var i={},s=V(this),n=t.direction||"vertical",o="both"===n,a=o||"horizontal"===n,o=o||"vertical"===n,n=s.cssClip();i.clip={top:o?(n.bottom-n.top)/2:n.top,right:a?(n.right-n.left)/2:n.right,bottom:o?(n.bottom-n.top)/2:n.bottom,left:a?(n.right-n.left)/2:n.left},V.effects.createPlaceholder(s),"show"===t.mode&&(s.cssClip(i.clip),i.clip=n),s.animate(i,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("drop","hide",function(t,e){var i=V(this),s="show"===t.mode,n=t.direction||"left",o="up"===n||"down"===n?"top":"left",a="up"===n||"left"===n?"-=":"+=",r="+="==a?"-=":"+=",l={opacity:0};V.effects.createPlaceholder(i),n=t.distance||i["top"==o?"outerHeight":"outerWidth"](!0)/2,l[o]=a+n,s&&(i.css(l),l[o]=r+n,l.opacity=1),i.animate(l,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("explode","hide",function(t,e){var i,s,n,o,a,r,l=t.pieces?Math.round(Math.sqrt(t.pieces)):3,h=l,c=V(this),u="show"===t.mode,d=c.show().css("visibility","hidden").offset(),p=Math.ceil(c.outerWidth()/h),f=Math.ceil(c.outerHeight()/l),g=[];function m(){g.push(this),g.length===l*h&&(c.css({visibility:"visible"}),V(g).remove(),e())}for(i=0;i<l;i++)for(o=d.top+i*f,r=i-(l-1)/2,s=0;s<h;s++)n=d.left+s*p,a=s-(h-1)/2,c.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-s*p,top:-i*f}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:p,height:f,left:n+(u?a*p:0),top:o+(u?r*f:0),opacity:u?0:1}).animate({left:n+(u?0:a*p),top:o+(u?0:r*f),opacity:u?1:0},t.duration||500,t.easing,m)}),V.effects.define("fade","toggle",function(t,e){var i="show"===t.mode;V(this).css("opacity",i?0:1).animate({opacity:i?1:0},{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("fold","hide",function(e,t){var i=V(this),s=e.mode,n="show"===s,o="hide"===s,a=e.size||15,r=/([0-9]+)%/.exec(a),l=!!e.horizFirst?["right","bottom"]:["bottom","right"],h=e.duration/2,c=V.effects.createPlaceholder(i),u=i.cssClip(),d={clip:V.extend({},u)},p={clip:V.extend({},u)},f=[u[l[0]],u[l[1]]],s=i.queue().length;r&&(a=parseInt(r[1],10)/100*f[o?0:1]),d.clip[l[0]]=a,p.clip[l[0]]=a,p.clip[l[1]]=0,n&&(i.cssClip(p.clip),c&&c.css(V.effects.clipToBox(p)),p.clip=u),i.queue(function(t){c&&c.animate(V.effects.clipToBox(d),h,e.easing).animate(V.effects.clipToBox(p),h,e.easing),t()}).animate(d,h,e.easing).animate(p,h,e.easing).queue(t),V.effects.unshift(i,s,4)}),V.effects.define("highlight","show",function(t,e){var i=V(this),s={backgroundColor:i.css("backgroundColor")};"hide"===t.mode&&(s.opacity=0),V.effects.saveStyle(i),i.css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(s,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("size",function(s,e){var n,i=V(this),t=["fontSize"],o=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],a=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],r=s.mode,l="effect"!==r,h=s.scale||"both",c=s.origin||["middle","center"],u=i.css("position"),d=i.position(),p=V.effects.scaledDimensions(i),f=s.from||p,g=s.to||V.effects.scaledDimensions(i,0);V.effects.createPlaceholder(i),"show"===r&&(r=f,f=g,g=r),n={from:{y:f.height/p.height,x:f.width/p.width},to:{y:g.height/p.height,x:g.width/p.width}},"box"!==h&&"both"!==h||(n.from.y!==n.to.y&&(f=V.effects.setTransition(i,o,n.from.y,f),g=V.effects.setTransition(i,o,n.to.y,g)),n.from.x!==n.to.x&&(f=V.effects.setTransition(i,a,n.from.x,f),g=V.effects.setTransition(i,a,n.to.x,g))),"content"!==h&&"both"!==h||n.from.y!==n.to.y&&(f=V.effects.setTransition(i,t,n.from.y,f),g=V.effects.setTransition(i,t,n.to.y,g)),c&&(c=V.effects.getBaseline(c,p),f.top=(p.outerHeight-f.outerHeight)*c.y+d.top,f.left=(p.outerWidth-f.outerWidth)*c.x+d.left,g.top=(p.outerHeight-g.outerHeight)*c.y+d.top,g.left=(p.outerWidth-g.outerWidth)*c.x+d.left),delete f.outerHeight,delete f.outerWidth,i.css(f),"content"!==h&&"both"!==h||(o=o.concat(["marginTop","marginBottom"]).concat(t),a=a.concat(["marginLeft","marginRight"]),i.find("*[width]").each(function(){var t=V(this),e=V.effects.scaledDimensions(t),i={height:e.height*n.from.y,width:e.width*n.from.x,outerHeight:e.outerHeight*n.from.y,outerWidth:e.outerWidth*n.from.x},e={height:e.height*n.to.y,width:e.width*n.to.x,outerHeight:e.height*n.to.y,outerWidth:e.width*n.to.x};n.from.y!==n.to.y&&(i=V.effects.setTransition(t,o,n.from.y,i),e=V.effects.setTransition(t,o,n.to.y,e)),n.from.x!==n.to.x&&(i=V.effects.setTransition(t,a,n.from.x,i),e=V.effects.setTransition(t,a,n.to.x,e)),l&&V.effects.saveStyle(t),t.css(i),t.animate(e,s.duration,s.easing,function(){l&&V.effects.restoreStyle(t)})})),i.animate(g,{queue:!1,duration:s.duration,easing:s.easing,complete:function(){var t=i.offset();0===g.opacity&&i.css("opacity",f.opacity),l||(i.css("position","static"===u?"relative":u).offset(t),V.effects.saveStyle(i)),e()}})}),V.effects.define("scale",function(t,e){var i=V(this),s=t.mode,s=parseInt(t.percent,10)||(0===parseInt(t.percent,10)||"effect"!==s?0:100),s=V.extend(!0,{from:V.effects.scaledDimensions(i),to:V.effects.scaledDimensions(i,s,t.direction||"both"),origin:t.origin||["middle","center"]},t);t.fade&&(s.from.opacity=1,s.to.opacity=0),V.effects.effect.size.call(this,s,e)}),V.effects.define("puff","hide",function(t,e){t=V.extend(!0,{},t,{fade:!0,percent:parseInt(t.percent,10)||150});V.effects.effect.scale.call(this,t,e)}),V.effects.define("pulsate","show",function(t,e){var i=V(this),s=t.mode,n="show"===s,o=2*(t.times||5)+(n||"hide"===s?1:0),a=t.duration/o,r=0,l=1,s=i.queue().length;for(!n&&i.is(":visible")||(i.css("opacity",0).show(),r=1);l<o;l++)i.animate({opacity:r},a,t.easing),r=1-r;i.animate({opacity:r},a,t.easing),i.queue(e),V.effects.unshift(i,s,1+o)}),V.effects.define("shake",function(t,e){var i=1,s=V(this),n=t.direction||"left",o=t.distance||20,a=t.times||3,r=2*a+1,l=Math.round(t.duration/r),h="up"===n||"down"===n?"top":"left",c="up"===n||"left"===n,u={},d={},p={},n=s.queue().length;for(V.effects.createPlaceholder(s),u[h]=(c?"-=":"+=")+o,d[h]=(c?"+=":"-=")+2*o,p[h]=(c?"-=":"+=")+2*o,s.animate(u,l,t.easing);i<a;i++)s.animate(d,l,t.easing).animate(p,l,t.easing);s.animate(d,l,t.easing).animate(u,l/2,t.easing).queue(e),V.effects.unshift(s,n,1+r)}),V.effects.define("slide","show",function(t,e){var i,s,n=V(this),o={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},a=t.mode,r=t.direction||"left",l="up"===r||"down"===r?"top":"left",h="up"===r||"left"===r,c=t.distance||n["top"==l?"outerHeight":"outerWidth"](!0),u={};V.effects.createPlaceholder(n),i=n.cssClip(),s=n.position()[l],u[l]=(h?-1:1)*c+s,u.clip=n.cssClip(),u.clip[o[r][1]]=u.clip[o[r][0]],"show"===a&&(n.cssClip(u.clip),n.css(l,u[l]),u.clip=i,u[l]=s),n.animate(u,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),y=!1!==V.uiBackCompat?V.effects.define("transfer",function(t,e){V(this).transfer(t,e)}):y;V.ui.focusable=function(t,e){var i,s,n,o,a=t.nodeName.toLowerCase();return"area"===a?(s=(i=t.parentNode).name,!(!t.href||!s||"map"!==i.nodeName.toLowerCase())&&(0<(s=V("img[usemap='#"+s+"']")).length&&s.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(a)?(n=!t.disabled)&&(o=V(t).closest("fieldset")[0])&&(n=!o.disabled):n="a"===a&&t.href||e,n&&V(t).is(":visible")&&function(t){var e=t.css("visibility");for(;"inherit"===e;)t=t.parent(),e=t.css("visibility");return"visible"===e}(V(t)))},V.extend(V.expr.pseudos,{focusable:function(t){return V.ui.focusable(t,null!=V.attr(t,"tabindex"))}});var Q,J;V.ui.focusable,V.fn._form=function(){return"string"==typeof this[0].form?this.closest("form"):V(this[0].form)},V.ui.formResetMixin={_formResetHandler:function(){var e=V(this);setTimeout(function(){var t=e.data("ui-form-reset-instances");V.each(t,function(){this.refresh()})})},_bindFormResetHandler:function(){var t;this.form=this.element._form(),this.form.length&&((t=this.form.data("ui-form-reset-instances")||[]).length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t))},_unbindFormResetHandler:function(){var t;this.form.length&&((t=this.form.data("ui-form-reset-instances")).splice(V.inArray(this,t),1),t.length?this.form.data("ui-form-reset-instances",t):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset"))}};V.expr.pseudos||(V.expr.pseudos=V.expr[":"]),V.uniqueSort||(V.uniqueSort=V.unique),V.escapeSelector||(Q=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,J=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},V.escapeSelector=function(t){return(t+"").replace(Q,J)}),V.fn.even&&V.fn.odd||V.fn.extend({even:function(){return this.filter(function(t){return t%2==0})},odd:function(){return this.filter(function(t){return t%2==1})}});var Z;V.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},V.fn.labels=function(){var t,e,i;return this.length?this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(e=this.eq(0).parents("label"),(t=this.attr("id"))&&(i=(i=this.eq(0).parents().last()).add((i.length?i:this).siblings()),t="label[for='"+V.escapeSelector(t)+"']",e=e.add(i.find(t).addBack(t))),this.pushStack(e)):this.pushStack([])},V.fn.scrollParent=function(t){var e=this.css("position"),i="absolute"===e,s=t?/(auto|scroll|hidden)/:/(auto|scroll)/,t=this.parents().filter(function(){var t=V(this);return(!i||"static"!==t.css("position"))&&s.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==e&&t.length?t:V(this[0].ownerDocument||document)},V.extend(V.expr.pseudos,{tabbable:function(t){var e=V.attr(t,"tabindex"),i=null!=e;return(!i||0<=e)&&V.ui.focusable(t,i)}}),V.fn.extend({uniqueId:(Z=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++Z)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&V(this).removeAttr("id")})}}),V.widget("ui.accordion",{version:"1.13.2",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:function(t){return t.find("> li > :first-child").add(t.find("> :not(li)").even())},heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=V(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),t.collapsible||!1!==t.active&&null!=t.active||(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():V()}},_createIcons:function(){var t,e=this.options.icons;e&&(t=V("<span>"),this._addClass(t,"ui-accordion-header-icon","ui-icon "+e.header),t.prependTo(this.headers),t=this.active.children(".ui-accordion-header-icon"),this._removeClass(t,e.header)._addClass(t,null,e.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"!==t?("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons())):this._activate(e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var e=V.ui.keyCode,i=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case e.RIGHT:case e.DOWN:n=this.headers[(s+1)%i];break;case e.LEFT:case e.UP:n=this.headers[(s-1+i)%i];break;case e.SPACE:case e.ENTER:this._eventHandler(t);break;case e.HOME:n=this.headers[0];break;case e.END:n=this.headers[i-1]}n&&(V(t.target).attr("tabIndex",-1),V(n).attr("tabIndex",0),V(n).trigger("focus"),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===V.ui.keyCode.UP&&t.ctrlKey&&V(t.currentTarget).prev().trigger("focus")},refresh:function(){var t=this.options;this._processPanels(),!1===t.active&&!0===t.collapsible||!this.headers.length?(t.active=!1,this.active=V()):!1===t.active?this._activate(0):this.active.length&&!V.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=V()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;"function"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var i,t=this.options,e=t.heightStyle,s=this.element.parent();this.active=this._findActive(t.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var t=V(this),e=t.uniqueId().attr("id"),i=t.next(),s=i.uniqueId().attr("id");t.attr("aria-controls",s),i.attr("aria-labelledby",e)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(t.event),"fill"===e?(i=s.height(),this.element.siblings(":visible").each(function(){var t=V(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=V(this).outerHeight(!0)}),this.headers.next().each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.headers.next().each(function(){var t=V(this).is(":visible");t||V(this).show(),i=Math.max(i,V(this).css("height","").height()),t||V(this).hide()}).height(i))},_activate:function(t){t=this._findActive(t)[0];t!==this.active[0]&&(t=t||this.active[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):V()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&V.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():s.next(),r=i.next(),a={oldHeader:i,oldPanel:r,newHeader:o?V():s,newPanel:a};t.preventDefault(),n&&!e.collapsible||!1===this._trigger("beforeActivate",t,a)||(e.active=!o&&this.headers.index(s),this.active=n?V():s,this._toggle(a),this._removeClass(i,"ui-accordion-header-active","ui-state-active"),e.icons&&(i=i.children(".ui-accordion-header-icon"),this._removeClass(i,null,e.icons.activeHeader)._addClass(i,null,e.icons.header)),n||(this._removeClass(s,"ui-accordion-header-collapsed")._addClass(s,"ui-accordion-header-active","ui-state-active"),e.icons&&(n=s.children(".ui-accordion-header-icon"),this._removeClass(n,null,e.icons.header)._addClass(n,null,e.icons.activeHeader)),this._addClass(s.next(),"ui-accordion-content-active")))},_toggle:function(t){var e=t.newPanel,i=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=e,this.prevHide=i,this.options.animate?this._animate(e,i,t):(i.hide(),e.show(),this._toggleComplete(t)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),e.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):e.length&&this.headers.filter(function(){return 0===parseInt(V(this).attr("tabIndex"),10)}).attr("tabIndex",-1),e.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,i,e){var s,n,o,a=this,r=0,l=t.css("box-sizing"),h=t.length&&(!i.length||t.index()<i.index()),c=this.options.animate||{},u=h&&c.down||c,h=function(){a._toggleComplete(e)};return n=(n="string"==typeof u?u:n)||u.easing||c.easing,o=(o="number"==typeof u?u:o)||u.duration||c.duration,i.length?t.length?(s=t.show().outerHeight(),i.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),void t.hide().animate(this.showProps,{duration:o,easing:n,complete:h,step:function(t,e){e.now=Math.round(t),"height"!==e.prop?"content-box"===l&&(r+=e.now):"content"!==a.options.heightStyle&&(e.now=Math.round(s-i.outerHeight()-r),r=0)}})):i.animate(this.hideProps,o,n,h):t.animate(this.showProps,o,n,h)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),V.ui.safeActiveElement=function(e){var i;try{i=e.activeElement}catch(t){i=e.body}return i=!(i=i||e.body).nodeName?e.body:i},V.widget("ui.menu",{version:"1.13.2",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=V(t.target),i=V(V.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){V.contains(this.element[0],V.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=V(t.target).closest(".ui-menu-item"),i=V(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=V(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case V.ui.keyCode.PAGE_UP:this.previousPage(t);break;case V.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case V.ui.keyCode.HOME:this._move("first","first",t);break;case V.ui.keyCode.END:this._move("last","last",t);break;case V.ui.keyCode.UP:this.previous(t);break;case V.ui.keyCode.DOWN:this.next(t);break;case V.ui.keyCode.LEFT:this.collapse(t);break;case V.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case V.ui.keyCode.ENTER:case V.ui.keyCode.SPACE:this._activate(t);break;case V.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=V(this),e=t.prev(),i=V("<span>").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=V(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!V.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(V.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(V.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s<e+t&&this.activeMenu.scrollTop(i+e-s+t))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(t){var e=V.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(e)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var t=i?this.element:V(e&&e.target).closest(this.element.find(".ui-menu"));t.length||(t=this.element),this._close(t),this.blur(e),this._removeClass(t.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=t},i?0:this.delay)},_close:function(t){(t=t||(this.active?this.active.parent():this.element)).find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(t){return!V(t.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this._menuItems(this.active.children(".ui-menu")).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_menuItems:function(t){return(t||this.element).find(this.options.items).filter(".ui-menu-item")},_move:function(t,e,i){var s;(s=this.active?"first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").last():this.active[t+"All"](".ui-menu-item").first():s)&&s.length&&this.active||(s=this._menuItems(this.activeMenu)[e]()),this.focus(i,s)},nextPage:function(t){var e,i,s;this.active?this.isLastItem()||(this._hasScroll()?(i=this.active.offset().top,s=this.element.innerHeight(),0===V.fn.jquery.indexOf("3.2.")&&(s+=this.element[0].offsetHeight-this.element.outerHeight()),this.active.nextAll(".ui-menu-item").each(function(){return(e=V(this)).offset().top-i-s<0}),this.focus(t,e)):this.focus(t,this._menuItems(this.activeMenu)[this.active?"last":"first"]())):this.next(t)},previousPage:function(t){var e,i,s;this.active?this.isFirstItem()||(this._hasScroll()?(i=this.active.offset().top,s=this.element.innerHeight(),0===V.fn.jquery.indexOf("3.2.")&&(s+=this.element[0].offsetHeight-this.element.outerHeight()),this.active.prevAll(".ui-menu-item").each(function(){return 0<(e=V(this)).offset().top-i+s}),this.focus(t,e)):this.focus(t,this._menuItems(this.activeMenu).first())):this.next(t)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||V(t.target).closest(".ui-menu-item");var e={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,e)},_filterMenuItems:function(t){var t=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),e=new RegExp("^"+t,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return e.test(String.prototype.trim.call(V(this).children(".ui-menu-item-wrapper").text()))})}});V.widget("ui.autocomplete",{version:"1.13.2",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=V("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().attr({unselectable:"on"}).menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(t,e){var i,s;if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){V(t.target).trigger(t.originalEvent)});s=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:s})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(s.value),(i=e.item.attr("aria-label")||s.value)&&String.prototype.trim.call(i).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(V("<div>").text(i))},100))},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==V.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=V("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||V.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?V(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(".ui-front, dialog"):t).length?this.document[0].body:t},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(V.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(t,e){n.xhr&&n.xhr.abort(),n.xhr=V.ajax({url:s,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;t&&(e||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):!1!==this._trigger("search",e)?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")}.bind(this)},__response:function(t){t=t&&this._normalize(t),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:V.map(t,function(t){return"string"==typeof t?{label:t,value:t}:V.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var e=this.menu.element.empty();this._renderMenu(e,t),this.isNewMenu=!0,this.menu.refresh(),e.show(),this._resizeMenu(),e.position(V.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(i,t){var s=this;V.each(t,function(t,e){s._renderItemData(i,e)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(t,e){return V("<li>").append(V("<div>").text(e.label)).appendTo(t)},_move:function(t,e){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),V.extend(V.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,e){var i=new RegExp(V.ui.autocomplete.escapeRegex(e),"i");return V.grep(t,function(t){return i.test(t.label||t.value||t)})}}),V.widget("ui.autocomplete",V.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1<t?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(V("<div>").text(e))},100))}});V.ui.autocomplete;var tt=/ui-corner-([a-z]){2,6}/g;V.widget("ui.controlgroup",{version:"1.13.2",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var o=this,a=[];V.each(this.options.items,function(s,t){var e,n={};if(t)return"controlgroupLabel"===s?((e=o.element.find(t)).each(function(){var t=V(this);t.children(".ui-controlgroup-label-contents").length||t.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),o._addClass(e,null,"ui-widget ui-widget-content ui-state-default"),void(a=a.concat(e.get()))):void(V.fn[s]&&(n=o["_"+s+"Options"]?o["_"+s+"Options"]("middle"):{classes:{}},o.element.find(t).each(function(){var t=V(this),e=t[s]("instance"),i=V.widget.extend({},n);"button"===s&&t.parent(".ui-spinner").length||((e=e||t[s]()[s]("instance"))&&(i.classes=o._resolveClassesValues(i.classes,e)),t[s](i),i=t[s]("widget"),V.data(i[0],"ui-controlgroup-data",e||t[s]("instance")),a.push(i[0]))})))}),this.childWidgets=V(V.uniqueSort(a)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var t=V(this).data("ui-controlgroup-data");t&&t[e]&&t[e]()})},_updateCornerClass:function(t,e){e=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"),this._addClass(t,null,e)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){t=this._buildSimpleOptions(t,"ui-spinner");return t.classes["ui-spinner-up"]="",t.classes["ui-spinner-down"]="",t},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e&&"auto",classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(i,s){var n={};return V.each(i,function(t){var e=s.options.classes[t]||"",e=String.prototype.trim.call(e.replace(tt,""));n[t]=(e+" "+i[t]).replace(/\s+/g," ")}),n},_setOption:function(t,e){"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"!==t?this.refresh():this._callChildMethod(e?"disable":"enable")},refresh:function(){var n,o=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),n=this.childWidgets,(n=this.options.onlyVisible?n.filter(":visible"):n).length&&(V.each(["first","last"],function(t,e){var i,s=n[e]().data("ui-controlgroup-data");s&&o["_"+s.widgetName+"Options"]?((i=o["_"+s.widgetName+"Options"](1===n.length?"only":e)).classes=o._resolveClassesValues(i.classes,s),s.element[s.widgetName](i)):o._updateCornerClass(n[e](),e)}),this._callChildMethod("refresh"))}});V.widget("ui.checkboxradio",[V.ui.formResetMixin,{version:"1.13.2",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var t,e=this._super()||{};return this._readType(),t=this.element.labels(),this.label=V(t[t.length-1]),this.label.length||V.error("No label found for checkboxradio widget"),this.originalLabel="",(t=this.label.contents().not(this.element[0])).length&&(this.originalLabel+=t.clone().wrapAll("<div></div>").parent().html()),this.originalLabel&&(e.label=this.originalLabel),null!=(t=this.element[0].disabled)&&(e.disabled=t),e},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var t=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===t&&/radio|checkbox/.test(this.type)||V.error("Can't create checkboxradio on element.nodeName="+t+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var t=this.element[0].name,e="input[name='"+V.escapeSelector(t)+"']";return t?(this.form.length?V(this.form[0].elements).filter(e):V(e).filter(function(){return 0===V(this)._form().length})).not(this.element):V([])},_toggleClasses:function(){var t=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",t)._toggleClass(this.icon,null,"ui-icon-blank",!t),"radio"===this.type&&this._getRadioGroup().each(function(){var t=V(this).checkboxradio("instance");t&&t._removeClass(t.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){if("label"!==t||e){if(this._super(t,e),"disabled"===t)return this._toggleClass(this.label,null,"ui-state-disabled",e),void(this.element[0].disabled=e);this.refresh()}},_updateIcon:function(t){var e="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=V("<span>"),this.iconSpace=V("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(e+=t?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,t?"ui-icon-blank":"ui-icon-check")):e+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",e),t||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),(t=this.iconSpace?t.not(this.iconSpace[0]):t).remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]);var et;V.ui.checkboxradio;V.widget("ui.button",{version:"1.13.2",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),null!=(t=this.element[0].disabled)&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(t){t.keyCode===V.ui.keyCode.SPACE&&(t.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(t,e){var i="iconPosition"!==t,s=i?this.options.iconPosition:e,t="top"===s||"bottom"===s;this.icon?i&&this._removeClass(this.icon,null,this.options.icon):(this.icon=V("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),i&&this._addClass(this.icon,null,e),this._attachIcon(s),t?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=V("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(s))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=(void 0===t.showLabel?this.options:t).showLabel,i=(void 0===t.icon?this.options:t).icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),(this.element[0].disabled=e)&&this.element.trigger("blur"))},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),!1!==V.uiBackCompat&&(V.widget("ui.button",V.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){"text"!==t?("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments)):this._super("showLabel",e)}}),V.fn.button=(et=V.fn.button,function(i){var t="string"==typeof i,s=Array.prototype.slice.call(arguments,1),n=this;return t?this.length||"instance"!==i?this.each(function(){var t=V(this).attr("type"),e=V.data(this,"ui-"+("checkbox"!==t&&"radio"!==t?"button":"checkboxradio"));return"instance"===i?(n=e,!1):e?"function"!=typeof e[i]||"_"===i.charAt(0)?V.error("no such method '"+i+"' for button widget instance"):(t=e[i].apply(e,s))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:V.error("cannot call methods on button prior to initialization; attempted to call method '"+i+"'")}):n=void 0:(s.length&&(i=V.widget.extend.apply(null,[i].concat(s))),this.each(function(){var t=V(this).attr("type"),e="checkbox"!==t&&"radio"!==t?"button":"checkboxradio",t=V.data(this,"ui-"+e);t?(t.option(i||{}),t._init&&t._init()):"button"!=e?V(this).checkboxradio(V.extend({icon:!1},i)):et.call(V(this),i)})),n}),V.fn.buttonset=function(){return V.ui.controlgroup||V.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))});var it;V.ui.button;function st(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:"",selectMonthLabel:"Select month",selectYearLabel:"Select year"},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,onUpdateDatepicker:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},V.extend(this._defaults,this.regional[""]),this.regional.en=V.extend(!0,{},this.regional[""]),this.regional["en-US"]=V.extend(!0,{},this.regional.en),this.dpDiv=nt(V("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function nt(t){var e="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.on("mouseout",e,function(){V(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&V(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&V(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",e,ot)}function ot(){V.datepicker._isDisabledDatepicker((it.inline?it.dpDiv.parent():it.input)[0])||(V(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),V(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&V(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&V(this).addClass("ui-datepicker-next-hover"))}function at(t,e){for(var i in V.extend(t,e),e)null==e[i]&&(t[i]=e[i]);return t}V.extend(V.ui,{datepicker:{version:"1.13.2"}}),V.extend(st.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return at(this._defaults,t||{}),this},_attachDatepicker:function(t,e){var i,s=t.nodeName.toLowerCase(),n="div"===s||"span"===s;t.id||(this.uuid+=1,t.id="dp"+this.uuid),(i=this._newInst(V(t),n)).settings=V.extend({},e||{}),"input"===s?this._connectDatepicker(t,i):n&&this._inlineDatepicker(t,i)},_newInst:function(t,e){return{id:t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1"),input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:e,dpDiv:e?nt(V("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,e){var i=V(t);e.append=V([]),e.trigger=V([]),i.hasClass(this.markerClassName)||(this._attachments(i,e),i.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(e),V.data(t,"datepicker",e),e.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,e){var i,s=this._get(e,"appendText"),n=this._get(e,"isRTL");e.append&&e.append.remove(),s&&(e.append=V("<span>").addClass(this._appendClass).text(s),t[n?"before":"after"](e.append)),t.off("focus",this._showDatepicker),e.trigger&&e.trigger.remove(),"focus"!==(i=this._get(e,"showOn"))&&"both"!==i||t.on("focus",this._showDatepicker),"button"!==i&&"both"!==i||(s=this._get(e,"buttonText"),i=this._get(e,"buttonImage"),this._get(e,"buttonImageOnly")?e.trigger=V("<img>").addClass(this._triggerClass).attr({src:i,alt:s,title:s}):(e.trigger=V("<button type='button'>").addClass(this._triggerClass),i?e.trigger.html(V("<img>").attr({src:i,alt:s,title:s})):e.trigger.text(s)),t[n?"before":"after"](e.trigger),e.trigger.on("click",function(){return V.datepicker._datepickerShowing&&V.datepicker._lastInput===t[0]?V.datepicker._hideDatepicker():(V.datepicker._datepickerShowing&&V.datepicker._lastInput!==t[0]&&V.datepicker._hideDatepicker(),V.datepicker._showDatepicker(t[0])),!1}))},_autoSize:function(t){var e,i,s,n,o,a;this._get(t,"autoSize")&&!t.inline&&(o=new Date(2009,11,20),(a=this._get(t,"dateFormat")).match(/[DM]/)&&(e=function(t){for(n=s=i=0;n<t.length;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length))},_inlineDatepicker:function(t,e){var i=V(t);i.hasClass(this.markerClassName)||(i.addClass(this.markerClassName).append(e.dpDiv),V.data(t,"datepicker",e),this._setDate(e,this._getDefaultDate(e),!0),this._updateDatepicker(e),this._updateAlternate(e),e.settings.disabled&&this._disableDatepicker(t),e.dpDiv.css("display","block"))},_dialogDatepicker:function(t,e,i,s,n){var o,a=this._dialogInst;return a||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=V("<input type='text' id='"+o+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),V("body").append(this._dialogInput),(a=this._dialogInst=this._newInst(this._dialogInput,!1)).settings={},V.data(this._dialogInput[0],"datepicker",a)),at(a.settings,s||{}),e=e&&e.constructor===Date?this._formatDate(a,e):e,this._dialogInput.val(e),this._pos=n?n.length?n:[n.pageX,n.pageY]:null,this._pos||(o=document.documentElement.clientWidth,s=document.documentElement.clientHeight,e=document.documentElement.scrollLeft||document.body.scrollLeft,n=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[o/2-100+e,s/2-150+n]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),a.settings.onSelect=i,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),V.blockUI&&V.blockUI(this.dpDiv),V.data(this._dialogInput[0],"datepicker",a),this},_destroyDatepicker:function(t){var e,i=V(t),s=V.data(t,"datepicker");i.hasClass(this.markerClassName)&&(e=t.nodeName.toLowerCase(),V.removeData(t,"datepicker"),"input"===e?(s.append.remove(),s.trigger.remove(),i.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):"div"!==e&&"span"!==e||i.removeClass(this.markerClassName).empty(),it===s&&(it=null,this._curInst=null))},_enableDatepicker:function(e){var t,i=V(e),s=V.data(e,"datepicker");i.hasClass(this.markerClassName)&&("input"===(t=e.nodeName.toLowerCase())?(e.disabled=!1,s.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):"div"!==t&&"span"!==t||((i=i.children("."+this._inlineClass)).children().removeClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=V.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var t,i=V(e),s=V.data(e,"datepicker");i.hasClass(this.markerClassName)&&("input"===(t=e.nodeName.toLowerCase())?(e.disabled=!0,s.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):"div"!==t&&"span"!==t||((i=i.children("."+this._inlineClass)).children().addClass("ui-state-disabled"),i.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=V.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;e<this._disabledInputs.length;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(t){try{return V.data(t,"datepicker")}catch(t){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,e,i){var s,n,o=this._getInst(t);if(2===arguments.length&&"string"==typeof e)return"defaults"===e?V.extend({},V.datepicker._defaults):o?"all"===e?V.extend({},o.settings):this._get(o,e):null;s=e||{},"string"==typeof e&&((s={})[e]=i),o&&(this._curInst===o&&this._hideDatepicker(),n=this._getDateDatepicker(t,!0),e=this._getMinMaxDate(o,"min"),i=this._getMinMaxDate(o,"max"),at(o.settings,s),null!==e&&void 0!==s.dateFormat&&void 0===s.minDate&&(o.settings.minDate=this._formatDate(o,e)),null!==i&&void 0!==s.dateFormat&&void 0===s.maxDate&&(o.settings.maxDate=this._formatDate(o,i)),"disabled"in s&&(s.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(V(t),o),this._autoSize(o),this._setDate(o,n),this._updateAlternate(o),this._updateDatepicker(o))},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){t=this._getInst(t);t&&this._updateDatepicker(t)},_setDateDatepicker:function(t,e){t=this._getInst(t);t&&(this._setDate(t,e),this._updateDatepicker(t),this._updateAlternate(t))},_getDateDatepicker:function(t,e){t=this._getInst(t);return t&&!t.inline&&this._setDateFromField(t,e),t?this._getDate(t):null},_doKeyDown:function(t){var e,i,s=V.datepicker._getInst(t.target),n=!0,o=s.dpDiv.is(".ui-datepicker-rtl");if(s._keyEvent=!0,V.datepicker._datepickerShowing)switch(t.keyCode){case 9:V.datepicker._hideDatepicker(),n=!1;break;case 13:return(i=V("td."+V.datepicker._dayOverClass+":not(."+V.datepicker._currentClass+")",s.dpDiv))[0]&&V.datepicker._selectDay(t.target,s.selectedMonth,s.selectedYear,i[0]),(e=V.datepicker._get(s,"onSelect"))?(i=V.datepicker._formatDate(s),e.apply(s.input?s.input[0]:null,[i,s])):V.datepicker._hideDatepicker(),!1;case 27:V.datepicker._hideDatepicker();break;case 33:V.datepicker._adjustDate(t.target,t.ctrlKey?-V.datepicker._get(s,"stepBigMonths"):-V.datepicker._get(s,"stepMonths"),"M");break;case 34:V.datepicker._adjustDate(t.target,t.ctrlKey?+V.datepicker._get(s,"stepBigMonths"):+V.datepicker._get(s,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&V.datepicker._clearDate(t.target),n=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&V.datepicker._gotoToday(t.target),n=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&V.datepicker._adjustDate(t.target,o?1:-1,"D"),n=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&V.datepicker._adjustDate(t.target,t.ctrlKey?-V.datepicker._get(s,"stepBigMonths"):-V.datepicker._get(s,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&V.datepicker._adjustDate(t.target,-7,"D"),n=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&V.datepicker._adjustDate(t.target,o?-1:1,"D"),n=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&V.datepicker._adjustDate(t.target,t.ctrlKey?+V.datepicker._get(s,"stepBigMonths"):+V.datepicker._get(s,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&V.datepicker._adjustDate(t.target,7,"D"),n=t.ctrlKey||t.metaKey;break;default:n=!1}else 36===t.keyCode&&t.ctrlKey?V.datepicker._showDatepicker(this):n=!1;n&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var e,i=V.datepicker._getInst(t.target);if(V.datepicker._get(i,"constrainInput"))return e=V.datepicker._possibleChars(V.datepicker._get(i,"dateFormat")),i=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||i<" "||!e||-1<e.indexOf(i)},_doKeyUp:function(t){t=V.datepicker._getInst(t.target);if(t.input.val()!==t.lastVal)try{V.datepicker.parseDate(V.datepicker._get(t,"dateFormat"),t.input?t.input.val():null,V.datepicker._getFormatConfig(t))&&(V.datepicker._setDateFromField(t),V.datepicker._updateAlternate(t),V.datepicker._updateDatepicker(t))}catch(t){}return!0},_showDatepicker:function(t){var e,i,s,n;"input"!==(t=t.target||t).nodeName.toLowerCase()&&(t=V("input",t.parentNode)[0]),V.datepicker._isDisabledDatepicker(t)||V.datepicker._lastInput===t||(n=V.datepicker._getInst(t),V.datepicker._curInst&&V.datepicker._curInst!==n&&(V.datepicker._curInst.dpDiv.stop(!0,!0),n&&V.datepicker._datepickerShowing&&V.datepicker._hideDatepicker(V.datepicker._curInst.input[0])),!1!==(i=(s=V.datepicker._get(n,"beforeShow"))?s.apply(t,[t,n]):{})&&(at(n.settings,i),n.lastVal=null,V.datepicker._lastInput=t,V.datepicker._setDateFromField(n),V.datepicker._inDialog&&(t.value=""),V.datepicker._pos||(V.datepicker._pos=V.datepicker._findPos(t),V.datepicker._pos[1]+=t.offsetHeight),e=!1,V(t).parents().each(function(){return!(e|="fixed"===V(this).css("position"))}),s={left:V.datepicker._pos[0],top:V.datepicker._pos[1]},V.datepicker._pos=null,n.dpDiv.empty(),n.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),V.datepicker._updateDatepicker(n),s=V.datepicker._checkOffset(n,s,e),n.dpDiv.css({position:V.datepicker._inDialog&&V.blockUI?"static":e?"fixed":"absolute",display:"none",left:s.left+"px",top:s.top+"px"}),n.inline||(i=V.datepicker._get(n,"showAnim"),s=V.datepicker._get(n,"duration"),n.dpDiv.css("z-index",function(t){for(var e,i;t.length&&t[0]!==document;){if(("absolute"===(e=t.css("position"))||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}(V(t))+1),V.datepicker._datepickerShowing=!0,V.effects&&V.effects.effect[i]?n.dpDiv.show(i,V.datepicker._get(n,"showOptions"),s):n.dpDiv[i||"show"](i?s:null),V.datepicker._shouldFocusInput(n)&&n.input.trigger("focus"),V.datepicker._curInst=n)))},_updateDatepicker:function(t){this.maxRows=4,(it=t).dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var e,i=this._getNumberOfMonths(t),s=i[1],n=t.dpDiv.find("."+this._dayOverClass+" a"),o=V.datepicker._get(t,"onUpdateDatepicker");0<n.length&&ot.apply(n.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),1<s&&t.dpDiv.addClass("ui-datepicker-multi-"+s).css("width",17*s+"em"),t.dpDiv[(1!==i[0]||1!==i[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===V.datepicker._curInst&&V.datepicker._datepickerShowing&&V.datepicker._shouldFocusInput(t)&&t.input.trigger("focus"),t.yearshtml&&(e=t.yearshtml,setTimeout(function(){e===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year").first().replaceWith(t.yearshtml),e=t.yearshtml=null},0)),o&&o.apply(t.input?t.input[0]:null,[t])},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(t,e,i){var s=t.dpDiv.outerWidth(),n=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,a=t.input?t.input.outerHeight():0,r=document.documentElement.clientWidth+(i?0:V(document).scrollLeft()),l=document.documentElement.clientHeight+(i?0:V(document).scrollTop());return e.left-=this._get(t,"isRTL")?s-o:0,e.left-=i&&e.left===t.input.offset().left?V(document).scrollLeft():0,e.top-=i&&e.top===t.input.offset().top+a?V(document).scrollTop():0,e.left-=Math.min(e.left,e.left+s>r&&s<r?Math.abs(e.left+s-r):0),e.top-=Math.min(e.top,e.top+n>l&&n<l?Math.abs(n+a):0),e},_findPos:function(t){for(var e=this._getInst(t),i=this._get(e,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||V.expr.pseudos.hidden(t));)t=t[i?"previousSibling":"nextSibling"];return[(e=V(t).offset()).left,e.top]},_hideDatepicker:function(t){var e,i,s=this._curInst;!s||t&&s!==V.data(t,"datepicker")||this._datepickerShowing&&(e=this._get(s,"showAnim"),i=this._get(s,"duration"),t=function(){V.datepicker._tidyDialog(s)},V.effects&&(V.effects.effect[e]||V.effects[e])?s.dpDiv.hide(e,V.datepicker._get(s,"showOptions"),i,t):s.dpDiv["slideDown"===e?"slideUp":"fadeIn"===e?"fadeOut":"hide"](e?i:null,t),e||t(),this._datepickerShowing=!1,(t=this._get(s,"onClose"))&&t.apply(s.input?s.input[0]:null,[s.input?s.input.val():"",s]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),V.blockUI&&(V.unblockUI(),V("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(t){var e;V.datepicker._curInst&&(e=V(t.target),t=V.datepicker._getInst(e[0]),(e[0].id===V.datepicker._mainDivId||0!==e.parents("#"+V.datepicker._mainDivId).length||e.hasClass(V.datepicker.markerClassName)||e.closest("."+V.datepicker._triggerClass).length||!V.datepicker._datepickerShowing||V.datepicker._inDialog&&V.blockUI)&&(!e.hasClass(V.datepicker.markerClassName)||V.datepicker._curInst===t)||V.datepicker._hideDatepicker())},_adjustDate:function(t,e,i){var s=V(t),t=this._getInst(s[0]);this._isDisabledDatepicker(s[0])||(this._adjustInstDate(t,e,i),this._updateDatepicker(t))},_gotoToday:function(t){var e=V(t),i=this._getInst(e[0]);this._get(i,"gotoCurrent")&&i.currentDay?(i.selectedDay=i.currentDay,i.drawMonth=i.selectedMonth=i.currentMonth,i.drawYear=i.selectedYear=i.currentYear):(t=new Date,i.selectedDay=t.getDate(),i.drawMonth=i.selectedMonth=t.getMonth(),i.drawYear=i.selectedYear=t.getFullYear()),this._notifyChange(i),this._adjustDate(e)},_selectMonthYear:function(t,e,i){var s=V(t),t=this._getInst(s[0]);t["selected"+("M"===i?"Month":"Year")]=t["draw"+("M"===i?"Month":"Year")]=parseInt(e.options[e.selectedIndex].value,10),this._notifyChange(t),this._adjustDate(s)},_selectDay:function(t,e,i,s){var n=V(t);V(s).hasClass(this._unselectableClass)||this._isDisabledDatepicker(n[0])||((n=this._getInst(n[0])).selectedDay=n.currentDay=parseInt(V("a",s).attr("data-date")),n.selectedMonth=n.currentMonth=e,n.selectedYear=n.currentYear=i,this._selectDate(t,this._formatDate(n,n.currentDay,n.currentMonth,n.currentYear)))},_clearDate:function(t){t=V(t);this._selectDate(t,"")},_selectDate:function(t,e){var i=V(t),t=this._getInst(i[0]);e=null!=e?e:this._formatDate(t),t.input&&t.input.val(e),this._updateAlternate(t),(i=this._get(t,"onSelect"))?i.apply(t.input?t.input[0]:null,[e,t]):t.input&&t.input.trigger("change"),t.inline?this._updateDatepicker(t):(this._hideDatepicker(),this._lastInput=t.input[0],"object"!=typeof t.input[0]&&t.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(t){var e,i,s=this._get(t,"altField");s&&(e=this._get(t,"altFormat")||this._get(t,"dateFormat"),i=this._getDate(t),t=this.formatDate(e,i,this._getFormatConfig(t)),V(document).find(s).val(t))},noWeekends:function(t){t=t.getDay();return[0<t&&t<6,""]},iso8601Week:function(t){var e=new Date(t.getTime());return e.setDate(e.getDate()+4-(e.getDay()||7)),t=e.getTime(),e.setMonth(0),e.setDate(1),Math.floor(Math.round((t-e)/864e5)/7)+1},parseDate:function(e,n,t){if(null==e||null==n)throw"Invalid arguments";if(""===(n="object"==typeof n?n.toString():n+""))return null;for(var i,s,o,a=0,r=(t?t.shortYearCutoff:null)||this._defaults.shortYearCutoff,r="string"!=typeof r?r:(new Date).getFullYear()%100+parseInt(r,10),l=(t?t.dayNamesShort:null)||this._defaults.dayNamesShort,h=(t?t.dayNames:null)||this._defaults.dayNames,c=(t?t.monthNamesShort:null)||this._defaults.monthNamesShort,u=(t?t.monthNames:null)||this._defaults.monthNames,d=-1,p=-1,f=-1,g=-1,m=!1,_=function(t){t=w+1<e.length&&e.charAt(w+1)===t;return t&&w++,t},v=function(t){var e=_(t),e="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,e=new RegExp("^\\d{"+("y"===t?e:1)+","+e+"}"),e=n.substring(a).match(e);if(!e)throw"Missing number at position "+a;return a+=e[0].length,parseInt(e[0],10)},b=function(t,e,i){var s=-1,e=V.map(_(t)?i:e,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(V.each(e,function(t,e){var i=e[1];if(n.substr(a,i.length).toLowerCase()===i.toLowerCase())return s=e[0],a+=i.length,!1}),-1!==s)return s+1;throw"Unknown name at position "+a},y=function(){if(n.charAt(a)!==e.charAt(w))throw"Unexpected literal at position "+a;a++},w=0;w<e.length;w++)if(m)"'"!==e.charAt(w)||_("'")?y():m=!1;else switch(e.charAt(w)){case"d":f=v("d");break;case"D":b("D",l,h);break;case"o":g=v("o");break;case"m":p=v("m");break;case"M":p=b("M",c,u);break;case"y":d=v("y");break;case"@":d=(o=new Date(v("@"))).getFullYear(),p=o.getMonth()+1,f=o.getDate();break;case"!":d=(o=new Date((v("!")-this._ticksTo1970)/1e4)).getFullYear(),p=o.getMonth()+1,f=o.getDate();break;case"'":_("'")?y():m=!0;break;default:y()}if(a<n.length&&(s=n.substr(a),!/^\s+/.test(s)))throw"Extra/unparsed characters found in date: "+s;if(-1===d?d=(new Date).getFullYear():d<100&&(d+=(new Date).getFullYear()-(new Date).getFullYear()%100+(d<=r?0:-100)),-1<g)for(p=1,f=g;;){if(f<=(i=this._getDaysInMonth(d,p-1)))break;p++,f-=i}if((o=this._daylightSavingAdjust(new Date(d,p-1,f))).getFullYear()!==d||o.getMonth()+1!==p||o.getDate()!==f)throw"Invalid date";return o},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*60*60*1e7,formatDate:function(e,t,i){if(!t)return"";function s(t,e,i){var s=""+e;if(c(t))for(;s.length<i;)s="0"+s;return s}function n(t,e,i,s){return(c(t)?s:i)[e]}var o,a=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,r=(i?i.dayNames:null)||this._defaults.dayNames,l=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,h=(i?i.monthNames:null)||this._defaults.monthNames,c=function(t){t=o+1<e.length&&e.charAt(o+1)===t;return t&&o++,t},u="",d=!1;if(t)for(o=0;o<e.length;o++)if(d)"'"!==e.charAt(o)||c("'")?u+=e.charAt(o):d=!1;else switch(e.charAt(o)){case"d":u+=s("d",t.getDate(),2);break;case"D":u+=n("D",t.getDay(),a,r);break;case"o":u+=s("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=s("m",t.getMonth()+1,2);break;case"M":u+=n("M",t.getMonth(),l,h);break;case"y":u+=c("y")?t.getFullYear():(t.getFullYear()%100<10?"0":"")+t.getFullYear()%100;break;case"@":u+=t.getTime();break;case"!":u+=1e4*t.getTime()+this._ticksTo1970;break;case"'":c("'")?u+="'":d=!0;break;default:u+=e.charAt(o)}return u},_possibleChars:function(e){for(var t="",i=!1,s=function(t){t=n+1<e.length&&e.charAt(n+1)===t;return t&&n++,t},n=0;n<e.length;n++)if(i)"'"!==e.charAt(n)||s("'")?t+=e.charAt(n):i=!1;else switch(e.charAt(n)){case"d":case"m":case"y":case"@":t+="0123456789";break;case"D":case"M":return null;case"'":s("'")?t+="'":i=!0;break;default:t+=e.charAt(n)}return t},_get:function(t,e){return(void 0!==t.settings[e]?t.settings:this._defaults)[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(t){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(r,t,e){var i,s,t=null==t||""===t?e:"string"==typeof t?function(t){try{return V.datepicker.parseDate(V.datepicker._get(r,"dateFormat"),t,V.datepicker._getFormatConfig(r))}catch(t){}for(var e=(t.toLowerCase().match(/^c/)?V.datepicker._getDate(r):null)||new Date,i=e.getFullYear(),s=e.getMonth(),n=e.getDate(),o=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,a=o.exec(t);a;){switch(a[2]||"d"){case"d":case"D":n+=parseInt(a[1],10);break;case"w":case"W":n+=7*parseInt(a[1],10);break;case"m":case"M":s+=parseInt(a[1],10),n=Math.min(n,V.datepicker._getDaysInMonth(i,s));break;case"y":case"Y":i+=parseInt(a[1],10),n=Math.min(n,V.datepicker._getDaysInMonth(i,s))}a=o.exec(t)}return new Date(i,s,n)}(t):"number"==typeof t?isNaN(t)?e:(i=t,(s=new Date).setDate(s.getDate()+i),s):new Date(t.getTime());return(t=t&&"Invalid Date"===t.toString()?e:t)&&(t.setHours(0),t.setMinutes(0),t.setSeconds(0),t.setMilliseconds(0)),this._daylightSavingAdjust(t)},_daylightSavingAdjust:function(t){return t?(t.setHours(12<t.getHours()?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,e=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=e.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=e.getMonth(),t.drawYear=t.selectedYear=t.currentYear=e.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){return!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay))},_attachHandlers:function(t){var e=this._get(t,"stepMonths"),i="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){V.datepicker._adjustDate(i,-e,"M")},next:function(){V.datepicker._adjustDate(i,+e,"M")},hide:function(){V.datepicker._hideDatepicker()},today:function(){V.datepicker._gotoToday(i)},selectDay:function(){return V.datepicker._selectDay(i,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return V.datepicker._selectMonthYear(i,this,"M"),!1},selectYear:function(){return V.datepicker._selectMonthYear(i,this,"Y"),!1}};V(this).on(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,l,h,c,u,d,p,f,g,m,_,v,b,y,w,x,k,C,D,I,T,P,M,S,H,z,A=new Date,O=this._daylightSavingAdjust(new Date(A.getFullYear(),A.getMonth(),A.getDate())),N=this._get(t,"isRTL"),E=this._get(t,"showButtonPanel"),W=this._get(t,"hideIfNoPrevNext"),F=this._get(t,"navigationAsDateFormat"),L=this._getNumberOfMonths(t),R=this._get(t,"showCurrentAtPos"),A=this._get(t,"stepMonths"),Y=1!==L[0]||1!==L[1],B=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),j=this._getMinMaxDate(t,"min"),q=this._getMinMaxDate(t,"max"),K=t.drawMonth-R,U=t.drawYear;if(K<0&&(K+=12,U--),q)for(e=this._daylightSavingAdjust(new Date(q.getFullYear(),q.getMonth()-L[0]*L[1]+1,q.getDate())),e=j&&e<j?j:e;this._daylightSavingAdjust(new Date(U,K,1))>e;)--K<0&&(K=11,U--);for(t.drawMonth=K,t.drawYear=U,R=this._get(t,"prevText"),R=F?this.formatDate(R,this._daylightSavingAdjust(new Date(U,K-A,1)),this._getFormatConfig(t)):R,i=this._canAdjustMonth(t,-1,U,K)?V("<a>").attr({class:"ui-datepicker-prev ui-corner-all","data-handler":"prev","data-event":"click",title:R}).append(V("<span>").addClass("ui-icon ui-icon-circle-triangle-"+(N?"e":"w")).text(R))[0].outerHTML:W?"":V("<a>").attr({class:"ui-datepicker-prev ui-corner-all ui-state-disabled",title:R}).append(V("<span>").addClass("ui-icon ui-icon-circle-triangle-"+(N?"e":"w")).text(R))[0].outerHTML,R=this._get(t,"nextText"),R=F?this.formatDate(R,this._daylightSavingAdjust(new Date(U,K+A,1)),this._getFormatConfig(t)):R,s=this._canAdjustMonth(t,1,U,K)?V("<a>").attr({class:"ui-datepicker-next ui-corner-all","data-handler":"next","data-event":"click",title:R}).append(V("<span>").addClass("ui-icon ui-icon-circle-triangle-"+(N?"w":"e")).text(R))[0].outerHTML:W?"":V("<a>").attr({class:"ui-datepicker-next ui-corner-all ui-state-disabled",title:R}).append(V("<span>").attr("class","ui-icon ui-icon-circle-triangle-"+(N?"w":"e")).text(R))[0].outerHTML,A=this._get(t,"currentText"),W=this._get(t,"gotoCurrent")&&t.currentDay?B:O,A=F?this.formatDate(A,W,this._getFormatConfig(t)):A,R="",t.inline||(R=V("<button>").attr({type:"button",class:"ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all","data-handler":"hide","data-event":"click"}).text(this._get(t,"closeText"))[0].outerHTML),F="",E&&(F=V("<div class='ui-datepicker-buttonpane ui-widget-content'>").append(N?R:"").append(this._isInRange(t,W)?V("<button>").attr({type:"button",class:"ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all","data-handler":"today","data-event":"click"}).text(A):"").append(N?"":R)[0].outerHTML),n=parseInt(this._get(t,"firstDay"),10),n=isNaN(n)?0:n,o=this._get(t,"showWeek"),a=this._get(t,"dayNames"),r=this._get(t,"dayNamesMin"),l=this._get(t,"monthNames"),h=this._get(t,"monthNamesShort"),c=this._get(t,"beforeShowDay"),u=this._get(t,"showOtherMonths"),d=this._get(t,"selectOtherMonths"),p=this._getDefaultDate(t),f="",m=0;m<L[0];m++){for(_="",this.maxRows=4,v=0;v<L[1];v++){if(b=this._daylightSavingAdjust(new Date(U,K,t.selectedDay)),y=" ui-corner-all",w="",Y){if(w+="<div class='ui-datepicker-group",1<L[1])switch(v){case 0:w+=" ui-datepicker-group-first",y=" ui-corner-"+(N?"right":"left");break;case L[1]-1:w+=" ui-datepicker-group-last",y=" ui-corner-"+(N?"left":"right");break;default:w+=" ui-datepicker-group-middle",y=""}w+="'>"}for(w+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+y+"'>"+(/all|left/.test(y)&&0===m?N?s:i:"")+(/all|right/.test(y)&&0===m?N?i:s:"")+this._generateMonthYearHeader(t,K,U,j,q,0<m||0<v,l,h)+"</div><table class='ui-datepicker-calendar'><thead><tr>",x=o?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",g=0;g<7;g++)x+="<th scope='col'"+(5<=(g+n+6)%7?" class='ui-datepicker-week-end'":"")+"><span title='"+a[k=(g+n)%7]+"'>"+r[k]+"</span></th>";for(w+=x+"</tr></thead><tbody>",D=this._getDaysInMonth(U,K),U===t.selectedYear&&K===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,D)),C=(this._getFirstDayOfMonth(U,K)-n+7)%7,D=Math.ceil((C+D)/7),I=Y&&this.maxRows>D?this.maxRows:D,this.maxRows=I,T=this._daylightSavingAdjust(new Date(U,K,1-C)),P=0;P<I;P++){for(w+="<tr>",M=o?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(T)+"</td>":"",g=0;g<7;g++)S=c?c.apply(t.input?t.input[0]:null,[T]):[!0,""],z=(H=T.getMonth()!==K)&&!d||!S[0]||j&&T<j||q&&q<T,M+="<td class='"+(5<=(g+n+6)%7?" ui-datepicker-week-end":"")+(H?" ui-datepicker-other-month":"")+(T.getTime()===b.getTime()&&K===t.selectedMonth&&t._keyEvent||p.getTime()===T.getTime()&&p.getTime()===b.getTime()?" "+this._dayOverClass:"")+(z?" "+this._unselectableClass+" ui-state-disabled":"")+(H&&!u?"":" "+S[1]+(T.getTime()===B.getTime()?" "+this._currentClass:"")+(T.getTime()===O.getTime()?" ui-datepicker-today":""))+"'"+(H&&!u||!S[2]?"":" title='"+S[2].replace(/'/g,"&#39;")+"'")+(z?"":" data-handler='selectDay' data-event='click' data-month='"+T.getMonth()+"' data-year='"+T.getFullYear()+"'")+">"+(H&&!u?"&#xa0;":z?"<span class='ui-state-default'>"+T.getDate()+"</span>":"<a class='ui-state-default"+(T.getTime()===O.getTime()?" ui-state-highlight":"")+(T.getTime()===B.getTime()?" ui-state-active":"")+(H?" ui-priority-secondary":"")+"' href='#' aria-current='"+(T.getTime()===B.getTime()?"true":"false")+"' data-date='"+T.getDate()+"'>"+T.getDate()+"</a>")+"</td>",T.setDate(T.getDate()+1),T=this._daylightSavingAdjust(T);w+=M+"</tr>"}11<++K&&(K=0,U++),_+=w+="</tbody></table>"+(Y?"</div>"+(0<L[0]&&v===L[1]-1?"<div class='ui-datepicker-row-break'></div>":""):"")}f+=_}return f+=F,t._keyEvent=!1,f},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var l,h,c,u,d,p,f=this._get(t,"changeMonth"),g=this._get(t,"changeYear"),m=this._get(t,"showMonthAfterYear"),_=this._get(t,"selectMonthLabel"),v=this._get(t,"selectYearLabel"),b="<div class='ui-datepicker-title'>",y="";if(o||!f)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(l=s&&s.getFullYear()===i,h=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' aria-label='"+_+"' data-handler='selectMonth' data-event='change'>",c=0;c<12;c++)(!l||c>=s.getMonth())&&(!h||c<=n.getMonth())&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(m||(b+=y+(!o&&f&&g?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!g)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(a=this._get(t,"yearRange").split(":"),u=(new Date).getFullYear(),d=(_=function(t){t=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?u+parseInt(t,10):parseInt(t,10);return isNaN(t)?u:t})(a[0]),p=Math.max(d,_(a[1]||"")),d=s?Math.max(d,s.getFullYear()):d,p=n?Math.min(p,n.getFullYear()):p,t.yearshtml+="<select class='ui-datepicker-year' aria-label='"+v+"' data-handler='selectYear' data-event='change'>";d<=p;d++)t.yearshtml+="<option value='"+d+"'"+(d===i?" selected='selected'":"")+">"+d+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),m&&(b+=(!o&&f&&g?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),e=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),e=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,e)));t.selectedDay=e.getDate(),t.drawMonth=t.selectedMonth=e.getMonth(),t.drawYear=t.selectedYear=e.getFullYear(),"M"!==i&&"Y"!==i||this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),t=this._getMinMaxDate(t,"max"),e=i&&e<i?i:e;return t&&t<e?t:e},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){t=this._get(t,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),n=this._daylightSavingAdjust(new Date(i,s+(e<0?e:n[0]*n[1]),1));return e<0&&n.setDate(this._getDaysInMonth(n.getFullYear(),n.getMonth())),this._isInRange(t,n)},_isInRange:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=null,o=null,a=this._get(t,"yearRange");return a&&(t=a.split(":"),a=(new Date).getFullYear(),n=parseInt(t[0],10),o=parseInt(t[1],10),t[0].match(/[+\-].*/)&&(n+=a),t[1].match(/[+\-].*/)&&(o+=a)),(!i||e.getTime()>=i.getTime())&&(!s||e.getTime()<=s.getTime())&&(!n||e.getFullYear()>=n)&&(!o||e.getFullYear()<=o)},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return{shortYearCutoff:e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);e=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),e,this._getFormatConfig(t))}}),V.fn.datepicker=function(t){if(!this.length)return this;V.datepicker.initialized||(V(document).on("mousedown",V.datepicker._checkExternalClick),V.datepicker.initialized=!0),0===V("#"+V.datepicker._mainDivId).length&&V("body").append(V.datepicker.dpDiv);var e=Array.prototype.slice.call(arguments,1);return"string"==typeof t&&("isDisabled"===t||"getDate"===t||"widget"===t)||"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?V.datepicker["_"+t+"Datepicker"].apply(V.datepicker,[this[0]].concat(e)):this.each(function(){"string"==typeof t?V.datepicker["_"+t+"Datepicker"].apply(V.datepicker,[this].concat(e)):V.datepicker._attachDatepicker(this,t)})},V.datepicker=new st,V.datepicker.initialized=!1,V.datepicker.uuid=(new Date).getTime(),V.datepicker.version="1.13.2";V.datepicker,V.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var rt=!1;V(document).on("mouseup",function(){rt=!1});V.widget("ui.mouse",{version:"1.13.2",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(t){if(!0===V.data(t.target,e.widgetName+".preventClickEvent"))return V.removeData(t.target,e.widgetName+".preventClickEvent"),t.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!rt){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var e=this,i=1===t.which,s=!("string"!=typeof this.options.cancel||!t.target.nodeName)&&V(t.target).closest(this.options.cancel).length;return i&&!s&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(t),!this._mouseStarted)?(t.preventDefault(),!0):(!0===V.data(t.target,this.widgetName+".preventClickEvent")&&V.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return e._mouseMove(t)},this._mouseUpDelegate=function(t){return e._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),rt=!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(V.ui.ie&&(!document.documentMode||document.documentMode<9)&&!t.button)return this._mouseUp(t);if(!t.which)if(t.originalEvent.altKey||t.originalEvent.ctrlKey||t.originalEvent.metaKey||t.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,t),this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&V.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,rt=!1,t.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),V.ui.plugin={add:function(t,e,i){var s,n=V.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n<o.length;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},V.ui.safeBlur=function(t){t&&"body"!==t.nodeName.toLowerCase()&&V(t).trigger("blur")};V.widget("ui.draggable",V.ui.mouse,{version:"1.13.2",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){(this.helper||this.element).is(".ui-draggable-dragging")?this.destroyOnClear=!0:(this._removeHandleClassName(),this._mouseDestroy())},_mouseCapture:function(t){var e=this.options;return!(this.helper||e.disabled||0<V(t.target).closest(".ui-resizable-handle").length)&&(this.handle=this._getHandle(t),!!this.handle&&(this._blurActiveElement(t),this._blockFrames(!0===e.iframeFix?"iframe":e.iframeFix),!0))},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=V(this);return V("<div>").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var e=V.ui.safeActiveElement(this.document[0]);V(t.target).closest(e).length||V.ui.safeBlur(e)},_mouseStart:function(t){var e=this.options;return this.helper=this._createHelper(t),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),V.ui.ddmanager&&(V.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=0<this.helper.parents().filter(function(){return"fixed"===V(this).css("position")}).length,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt),this._setContainment(),!1===this._trigger("start",t)?(this._clear(),!1):(this._cacheHelperProportions(),V.ui.ddmanager&&!e.dropBehaviour&&V.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),V.ui.ddmanager&&V.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(t,e){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!e){e=this._uiHash();if(!1===this._trigger("drag",t,e))return this._mouseUp(new V.Event("mouseup",t)),!1;this.position=e.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",V.ui.ddmanager&&V.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var e=this,i=!1;return V.ui.ddmanager&&!this.options.dropBehaviour&&(i=V.ui.ddmanager.drop(this,t)),this.dropped&&(i=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!i||"valid"===this.options.revert&&i||!0===this.options.revert||"function"==typeof this.options.revert&&this.options.revert.call(this.element,i)?V(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){!1!==e._trigger("stop",t)&&e._clear()}):!1!==this._trigger("stop",t)&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),V.ui.ddmanager&&V.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.trigger("focus"),V.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new V.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(t){return!this.options.handle||!!V(t.target).closest(this.element.find(this.options.handle)).length},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(t){var e=this.options,i="function"==typeof e.helper,t=i?V(e.helper.apply(this.element[0],[t])):"clone"===e.helper?this.element.clone().removeAttr("id"):this.element;return t.parents("body").length||t.appendTo("parent"===e.appendTo?this.element[0].parentNode:e.appendTo),i&&t[0]===this.element[0]&&this._setPositionRelative(),t[0]===this.element[0]||/(fixed|absolute)/.test(t.css("position"))||t.css("position","absolute"),t},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),"left"in(t=Array.isArray(t)?{left:+t[0],top:+t[1]||0}:t)&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),e=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==e&&V.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),{top:(t=this._isRootNode(this.offsetParent[0])?{top:0,left:0}:t).top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,e,i,s=this.options,n=this.document[0];this.relativeContainer=null,s.containment?"window"!==s.containment?"document"!==s.containment?s.containment.constructor!==Array?("parent"===s.containment&&(s.containment=this.helper[0].parentNode),(i=(e=V(s.containment))[0])&&(t=/(scroll|auto)/.test(e.css("overflow")),this.containment=[(parseInt(e.css("borderLeftWidth"),10)||0)+(parseInt(e.css("paddingLeft"),10)||0),(parseInt(e.css("borderTopWidth"),10)||0)+(parseInt(e.css("paddingTop"),10)||0),(t?Math.max(i.scrollWidth,i.offsetWidth):i.offsetWidth)-(parseInt(e.css("borderRightWidth"),10)||0)-(parseInt(e.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(i.scrollHeight,i.offsetHeight):i.offsetHeight)-(parseInt(e.css("borderBottomWidth"),10)||0)-(parseInt(e.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=e)):this.containment=s.containment:this.containment=[0,0,V(n).width()-this.helperProportions.width-this.margins.left,(V(n).height()||n.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:this.containment=[V(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,V(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,V(window).scrollLeft()+V(window).width()-this.helperProportions.width-this.margins.left,V(window).scrollTop()+(V(window).height()||n.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]:this.containment=null},_convertPositionTo:function(t,e){e=e||this.position;var i="absolute"===t?1:-1,t=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:t?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:t?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s=this.options,n=this._isRootNode(this.scrollParent[0]),o=t.pageX,a=t.pageY;return n&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(i=this.relativeContainer?(i=this.relativeContainer.offset(),[this.containment[0]+i.left,this.containment[1]+i.top,this.containment[2]+i.left,this.containment[3]+i.top]):this.containment,t.pageX-this.offset.click.left<i[0]&&(o=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(a=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(o=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(a=i[3]+this.offset.click.top)),s.grid&&(t=s.grid[1]?this.originalPageY+Math.round((a-this.originalPageY)/s.grid[1])*s.grid[1]:this.originalPageY,a=!i||t-this.offset.click.top>=i[1]||t-this.offset.click.top>i[3]?t:t-this.offset.click.top>=i[1]?t-s.grid[1]:t+s.grid[1],t=s.grid[0]?this.originalPageX+Math.round((o-this.originalPageX)/s.grid[0])*s.grid[0]:this.originalPageX,o=!i||t-this.offset.click.left>=i[0]||t-this.offset.click.left>i[2]?t:t-this.offset.click.left>=i[0]?t-s.grid[0]:t+s.grid[0]),"y"===s.axis&&(o=this.originalPageX),"x"===s.axis&&(a=this.originalPageY)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:n?0:this.offset.scroll.top),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:n?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(t,e,i){return i=i||this._uiHash(),V.ui.plugin.call(this,t,[e,i,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),i.offset=this.positionAbs),V.Widget.prototype._trigger.call(this,t,e,i)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),V.ui.plugin.add("draggable","connectToSortable",{start:function(e,t,i){var s=V.extend({},t,{item:i.element});i.sortables=[],V(i.options.connectToSortable).each(function(){var t=V(this).sortable("instance");t&&!t.options.disabled&&(i.sortables.push(t),t.refreshPositions(),t._trigger("activate",e,s))})},stop:function(e,t,i){var s=V.extend({},t,{item:i.element});i.cancelHelperRemoval=!1,V.each(i.sortables,function(){var t=this;t.isOver?(t.isOver=0,i.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,s))})},drag:function(i,s,n){V.each(n.sortables,function(){var t=!1,e=this;e.positionAbs=n.positionAbs,e.helperProportions=n.helperProportions,e.offset.click=n.offset.click,e._intersectsWith(e.containerCache)&&(t=!0,V.each(n.sortables,function(){return this.positionAbs=n.positionAbs,this.helperProportions=n.helperProportions,this.offset.click=n.offset.click,t=this!==e&&this._intersectsWith(this.containerCache)&&V.contains(e.element[0],this.element[0])?!1:t})),t?(e.isOver||(e.isOver=1,n._parent=s.helper.parent(),e.currentItem=s.helper.appendTo(e.element).data("ui-sortable-item",!0),e.options._helper=e.options.helper,e.options.helper=function(){return s.helper[0]},i.target=e.currentItem[0],e._mouseCapture(i,!0),e._mouseStart(i,!0,!0),e.offset.click.top=n.offset.click.top,e.offset.click.left=n.offset.click.left,e.offset.parent.left-=n.offset.parent.left-e.offset.parent.left,e.offset.parent.top-=n.offset.parent.top-e.offset.parent.top,n._trigger("toSortable",i),n.dropped=e.element,V.each(n.sortables,function(){this.refreshPositions()}),n.currentItem=n.element,e.fromOutside=n),e.currentItem&&(e._mouseDrag(i),s.position=e.position)):e.isOver&&(e.isOver=0,e.cancelHelperRemoval=!0,e.options._revert=e.options.revert,e.options.revert=!1,e._trigger("out",i,e._uiHash(e)),e._mouseStop(i,!0),e.options.revert=e.options._revert,e.options.helper=e.options._helper,e.placeholder&&e.placeholder.remove(),s.helper.appendTo(n._parent),n._refreshOffsets(i),s.position=n._generatePosition(i,!0),n._trigger("fromSortable",i),n.dropped=!1,V.each(n.sortables,function(){this.refreshPositions()}))})}}),V.ui.plugin.add("draggable","cursor",{start:function(t,e,i){var s=V("body"),i=i.options;s.css("cursor")&&(i._cursor=s.css("cursor")),s.css("cursor",i.cursor)},stop:function(t,e,i){i=i.options;i._cursor&&V("body").css("cursor",i._cursor)}}),V.ui.plugin.add("draggable","opacity",{start:function(t,e,i){e=V(e.helper),i=i.options;e.css("opacity")&&(i._opacity=e.css("opacity")),e.css("opacity",i.opacity)},stop:function(t,e,i){i=i.options;i._opacity&&V(e.helper).css("opacity",i._opacity)}}),V.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,e,i){var s=i.options,n=!1,o=i.scrollParentNotHidden[0],a=i.document[0];o!==a&&"HTML"!==o.tagName?(s.axis&&"x"===s.axis||(i.overflowOffset.top+o.offsetHeight-t.pageY<s.scrollSensitivity?o.scrollTop=n=o.scrollTop+s.scrollSpeed:t.pageY-i.overflowOffset.top<s.scrollSensitivity&&(o.scrollTop=n=o.scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(i.overflowOffset.left+o.offsetWidth-t.pageX<s.scrollSensitivity?o.scrollLeft=n=o.scrollLeft+s.scrollSpeed:t.pageX-i.overflowOffset.left<s.scrollSensitivity&&(o.scrollLeft=n=o.scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(t.pageY-V(a).scrollTop()<s.scrollSensitivity?n=V(a).scrollTop(V(a).scrollTop()-s.scrollSpeed):V(window).height()-(t.pageY-V(a).scrollTop())<s.scrollSensitivity&&(n=V(a).scrollTop(V(a).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(t.pageX-V(a).scrollLeft()<s.scrollSensitivity?n=V(a).scrollLeft(V(a).scrollLeft()-s.scrollSpeed):V(window).width()-(t.pageX-V(a).scrollLeft())<s.scrollSensitivity&&(n=V(a).scrollLeft(V(a).scrollLeft()+s.scrollSpeed)))),!1!==n&&V.ui.ddmanager&&!s.dropBehaviour&&V.ui.ddmanager.prepareOffsets(i,t)}}),V.ui.plugin.add("draggable","snap",{start:function(t,e,i){var s=i.options;i.snapElements=[],V(s.snap.constructor!==String?s.snap.items||":data(ui-draggable)":s.snap).each(function(){var t=V(this),e=t.offset();this!==i.element[0]&&i.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:e.top,left:e.left})})},drag:function(t,e,i){for(var s,n,o,a,r,l,h,c,u,d=i.options,p=d.snapTolerance,f=e.offset.left,g=f+i.helperProportions.width,m=e.offset.top,_=m+i.helperProportions.height,v=i.snapElements.length-1;0<=v;v--)l=(r=i.snapElements[v].left-i.margins.left)+i.snapElements[v].width,c=(h=i.snapElements[v].top-i.margins.top)+i.snapElements[v].height,g<r-p||l+p<f||_<h-p||c+p<m||!V.contains(i.snapElements[v].item.ownerDocument,i.snapElements[v].item)?(i.snapElements[v].snapping&&i.options.snap.release&&i.options.snap.release.call(i.element,t,V.extend(i._uiHash(),{snapItem:i.snapElements[v].item})),i.snapElements[v].snapping=!1):("inner"!==d.snapMode&&(s=Math.abs(h-_)<=p,n=Math.abs(c-m)<=p,o=Math.abs(r-g)<=p,a=Math.abs(l-f)<=p,s&&(e.position.top=i._convertPositionTo("relative",{top:h-i.helperProportions.height,left:0}).top),n&&(e.position.top=i._convertPositionTo("relative",{top:c,left:0}).top),o&&(e.position.left=i._convertPositionTo("relative",{top:0,left:r-i.helperProportions.width}).left),a&&(e.position.left=i._convertPositionTo("relative",{top:0,left:l}).left)),u=s||n||o||a,"outer"!==d.snapMode&&(s=Math.abs(h-m)<=p,n=Math.abs(c-_)<=p,o=Math.abs(r-f)<=p,a=Math.abs(l-g)<=p,s&&(e.position.top=i._convertPositionTo("relative",{top:h,left:0}).top),n&&(e.position.top=i._convertPositionTo("relative",{top:c-i.helperProportions.height,left:0}).top),o&&(e.position.left=i._convertPositionTo("relative",{top:0,left:r}).left),a&&(e.position.left=i._convertPositionTo("relative",{top:0,left:l-i.helperProportions.width}).left)),!i.snapElements[v].snapping&&(s||n||o||a||u)&&i.options.snap.snap&&i.options.snap.snap.call(i.element,t,V.extend(i._uiHash(),{snapItem:i.snapElements[v].item})),i.snapElements[v].snapping=s||n||o||a||u)}}),V.ui.plugin.add("draggable","stack",{start:function(t,e,i){var s,i=i.options,i=V.makeArray(V(i.stack)).sort(function(t,e){return(parseInt(V(t).css("zIndex"),10)||0)-(parseInt(V(e).css("zIndex"),10)||0)});i.length&&(s=parseInt(V(i[0]).css("zIndex"),10)||0,V(i).each(function(t){V(this).css("zIndex",s+t)}),this.css("zIndex",s+i.length))}}),V.ui.plugin.add("draggable","zIndex",{start:function(t,e,i){e=V(e.helper),i=i.options;e.css("zIndex")&&(i._zIndex=e.css("zIndex")),e.css("zIndex",i.zIndex)},stop:function(t,e,i){i=i.options;i._zIndex&&V(e.helper).css("zIndex",i._zIndex)}});V.ui.draggable;V.widget("ui.resizable",V.ui.mouse,{version:"1.13.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(t,e){if("hidden"===V(t).css("overflow"))return!1;var i=e&&"left"===e?"scrollLeft":"scrollTop",e=!1;if(0<t[i])return!0;try{t[i]=1,e=0<t[i],t[i]=0}catch(t){}return e},_create:function(){var t,e=this.options,i=this;this._addClass("ui-resizable"),V.extend(this,{_aspectRatio:!!e.aspectRatio,aspectRatio:e.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:e.helper||e.ghost||e.animate?e.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(V("<div class='ui-wrapper'></div>").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&V(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){V(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,a=this;if(this.handles=o.handles||(V(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=V(),this._addedHandles=V(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e<i.length;e++)s="ui-resizable-"+(t=String.prototype.trim.call(i[e])),n=V("<div>"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=V(this.handles[e]),this._on(this.handles[e],{mousedown:a._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=V(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){a.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),a.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=V(this.handles[e])[0])!==t.target&&!V.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=V(s.containment).scrollLeft()||0,i+=V(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=V(".ui-resizable-"+this.axis).css("cursor"),V("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),V.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(V.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),V("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),s<n.maxWidth&&(n.maxWidth=s),t<n.maxHeight&&(n.maxHeight=t)),this._vBoundaries=n},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,h=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&h&&(t.left=r-e.minWidth),s&&h&&(t.left=r-e.maxWidth),a&&i&&(t.top=l-e.minHeight),n&&i&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e<this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,e=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||V("<div></div>").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return V.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return V.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return V.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return V.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){V.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),V.ui.plugin.add("resizable","animate",{stop:function(e){var i=V(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,a=n?0:i.sizeDiff.width,n={width:i.size.width-a,height:i.size.height-o},a=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(V.extend(n,o&&a?{top:o,left:a}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&V(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),V.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=V(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,a=o instanceof V?o.get(0):/parent/.test(o)?e.parent().get(0):o;a&&(n.containerElement=V(a),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:V(document),left:0,top:0,width:V(document).width(),height:V(document).height()||document.body.parentNode.scrollHeight}):(i=V(a),s=[],V(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(a,"left")?a.scrollWidth:o,e=n._hasScroll(a)?a.scrollHeight:e,n.parentData={element:a,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=V(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,a={top:0,left:0},r=e.containerElement,t=!0;r[0]!==document&&/static/.test(r.css("position"))&&(a=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-a.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-a.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-a.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=V(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=V(t.helper),a=o.offset(),r=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&V(this).css({left:a.left-s.left-i.left,width:r,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&V(this).css({left:a.left-s.left-i.left,width:r,height:o})}}),V.ui.plugin.add("resizable","alsoResize",{start:function(){var t=V(this).resizable("instance").options;V(t.alsoResize).each(function(){var t=V(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=V(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,a={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};V(s.alsoResize).each(function(){var t=V(this),s=V(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];V.each(e,function(t,e){var i=(s[e]||0)+(a[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){V(this).removeData("ui-resizable-alsoresize")}}),V.ui.plugin.add("resizable","ghost",{start:function(){var t=V(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==V.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=V(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=V(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),V.ui.plugin.add("resizable","grid",{resize:function(){var t,e=V(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,a=e.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,l=r[0]||1,h=r[1]||1,c=Math.round((s.width-n.width)/l)*l,u=Math.round((s.height-n.height)/h)*h,d=n.width+c,p=n.height+u,f=i.maxWidth&&i.maxWidth<d,g=i.maxHeight&&i.maxHeight<p,m=i.minWidth&&i.minWidth>d,s=i.minHeight&&i.minHeight>p;i.grid=r,m&&(d+=l),s&&(p+=h),f&&(d-=l),g&&(p-=h),/^(se|s|e)$/.test(a)?(e.size.width=d,e.size.height=p):/^(ne)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.top=o.top-u):/^(sw)$/.test(a)?(e.size.width=d,e.size.height=p,e.position.left=o.left-c):((p-h<=0||d-l<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0<p-h?(e.size.height=p,e.position.top=o.top-u):(p=h-t.height,e.size.height=p,e.position.top=o.top+n.height-p),0<d-l?(e.size.width=d,e.position.left=o.left-c):(d=l-t.width,e.size.width=d,e.position.left=o.left+n.width-d))}});V.ui.resizable;V.widget("ui.dialog",{version:"1.13.2",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var e=V(this).css(t).offset().top;e<0&&V(this).css("top",t.top-e)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&V.fn.draggable&&this._makeDraggable(),this.options.resizable&&V.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?V(t):this.document.find(t||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),(t=e.parent.children().eq(e.index)).length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:V.noop,enable:V.noop,close:function(t){var e=this;this._isOpen&&!1!==this._trigger("beforeClose",t)&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||V.ui.safeBlur(V.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){e._trigger("close",t)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,e){var i=!1,s=this.uiDialog.siblings(".ui-front:visible").map(function(){return+V(this).css("z-index")}).get(),s=Math.max.apply(null,s);return s>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",s+1),i=!0),i&&!e&&this._trigger("focus",t),i},open:function(){var t=this;this._isOpen?this._moveToTop()&&this._focusTabbable():(this._isOpen=!0,this.opener=V(V.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"))},_focusTabbable:function(){var t=this._focusedElement;(t=!(t=!(t=!(t=!(t=t||this.element.find("[autofocus]")).length?this.element.find(":tabbable"):t).length?this.uiDialogButtonPane.find(":tabbable"):t).length?this.uiDialogTitlebarClose.filter(":tabbable"):t).length?this.uiDialog:t).eq(0).trigger("focus")},_restoreTabbableFocus:function(){var t=V.ui.safeActiveElement(this.document[0]);this.uiDialog[0]===t||V.contains(this.uiDialog[0],t)||this._focusTabbable()},_keepFocus:function(t){t.preventDefault(),this._restoreTabbableFocus(),this._delay(this._restoreTabbableFocus)},_createWrapper:function(){this.uiDialog=V("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===V.ui.keyCode.ESCAPE)return t.preventDefault(),void this.close(t);var e,i,s;t.keyCode!==V.ui.keyCode.TAB||t.isDefaultPrevented()||(e=this.uiDialog.find(":tabbable"),i=e.first(),s=e.last(),t.target!==s[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==i[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){s.trigger("focus")}),t.preventDefault()):(this._delay(function(){i.trigger("focus")}),t.preventDefault()))},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=V("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(t){V(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=V("<button type='button'></button>").button({label:V("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),t=V("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(t,"ui-dialog-title"),this._title(t),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=V("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=V("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var s=this,t=this.options.buttons;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),V.isEmptyObject(t)||Array.isArray(t)&&!t.length?this._removeClass(this.uiDialog,"ui-dialog-buttons"):(V.each(t,function(t,e){var i;e=V.extend({type:"button"},e="function"==typeof e?{click:e,text:t}:e),i=e.click,t={icon:e.icon,iconPosition:e.iconPosition,showLabel:e.showLabel,icons:e.icons,text:e.text},delete e.click,delete e.icon,delete e.iconPosition,delete e.showLabel,delete e.icons,"boolean"==typeof e.text&&delete e.text,V("<button></button>",e).button(t).appendTo(s.uiButtonSet).on("click",function(){i.apply(s.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable:function(){var n=this,o=this.options;function a(t){return{position:t.position,offset:t.offset}}this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(t,e){n._addClass(V(this),"ui-dialog-dragging"),n._blockFrames(),n._trigger("dragStart",t,a(e))},drag:function(t,e){n._trigger("drag",t,a(e))},stop:function(t,e){var i=e.offset.left-n.document.scrollLeft(),s=e.offset.top-n.document.scrollTop();o.position={my:"left top",at:"left"+(0<=i?"+":"")+i+" top"+(0<=s?"+":"")+s,of:n.window},n._removeClass(V(this),"ui-dialog-dragging"),n._unblockFrames(),n._trigger("dragStop",t,a(e))}})},_makeResizable:function(){var n=this,o=this.options,t=o.resizable,e=this.uiDialog.css("position"),t="string"==typeof t?t:"n,e,s,w,se,sw,ne,nw";function a(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:o.maxWidth,maxHeight:o.maxHeight,minWidth:o.minWidth,minHeight:this._minHeight(),handles:t,start:function(t,e){n._addClass(V(this),"ui-dialog-resizing"),n._blockFrames(),n._trigger("resizeStart",t,a(e))},resize:function(t,e){n._trigger("resize",t,a(e))},stop:function(t,e){var i=n.uiDialog.offset(),s=i.left-n.document.scrollLeft(),i=i.top-n.document.scrollTop();o.height=n.uiDialog.height(),o.width=n.uiDialog.width(),o.position={my:"left top",at:"left"+(0<=s?"+":"")+s+" top"+(0<=i?"+":"")+i,of:n.window},n._removeClass(V(this),"ui-dialog-resizing"),n._unblockFrames(),n._trigger("resizeStop",t,a(e))}}).css("position",e)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=V(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),e=V.inArray(this,t);-1!==e&&t.splice(e,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||this.document.data("ui-dialog-instances",t=[]),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};V.each(t,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(t,e){var i,s=this.uiDialog;"disabled"!==t&&(this._super(t,e),"appendTo"===t&&this.uiDialog.appendTo(this._appendTo()),"buttons"===t&&this._createButtons(),"closeText"===t&&this.uiDialogTitlebarClose.button({label:V("<a>").text(""+this.options.closeText).html()}),"draggable"===t&&((i=s.is(":data(ui-draggable)"))&&!e&&s.draggable("destroy"),!i&&e&&this._makeDraggable()),"position"===t&&this._position(),"resizable"===t&&((i=s.is(":data(ui-resizable)"))&&!e&&s.resizable("destroy"),i&&"string"==typeof e&&s.resizable("option","handles",e),i||!1===e||this._makeResizable()),"title"===t&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=V(this);return V("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return!!V(t.target).closest(".ui-dialog").length||!!V(t.target).closest(".ui-datepicker").length},_createOverlay:function(){var i,s;this.options.modal&&(i=V.fn.jquery.substring(0,4),s=!0,this._delay(function(){s=!1}),this.document.data("ui-dialog-overlays")||this.document.on("focusin.ui-dialog",function(t){var e;s||((e=this._trackingInstances()[0])._allowInteraction(t)||(t.preventDefault(),e._focusTabbable(),"3.4."!==i&&"3.5."!==i||e._delay(e._restoreTabbableFocus)))}.bind(this)),this.overlay=V("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1))},_destroyOverlay:function(){var t;this.options.modal&&this.overlay&&((t=this.document.data("ui-dialog-overlays")-1)?this.document.data("ui-dialog-overlays",t):(this.document.off("focusin.ui-dialog"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null)}}),!1!==V.uiBackCompat&&V.widget("ui.dialog",V.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}});V.ui.dialog;function lt(t,e,i){return e<=t&&t<e+i}V.widget("ui.droppable",{version:"1.13.2",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,e=this.options,i=e.accept;this.isover=!1,this.isout=!0,this.accept="function"==typeof i?i:function(t){return t.is(i)},this.proportions=function(){if(!arguments.length)return t=t||{width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};t=arguments[0]},this._addToManager(e.scope),e.addClasses&&this._addClass("ui-droppable")},_addToManager:function(t){V.ui.ddmanager.droppables[t]=V.ui.ddmanager.droppables[t]||[],V.ui.ddmanager.droppables[t].push(this)},_splice:function(t){for(var e=0;e<t.length;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var t=V.ui.ddmanager.droppables[this.options.scope];this._splice(t)},_setOption:function(t,e){var i;"accept"===t?this.accept="function"==typeof e?e:function(t){return t.is(e)}:"scope"===t&&(i=V.ui.ddmanager.droppables[this.options.scope],this._splice(i),this._addToManager(e)),this._super(t,e)},_activate:function(t){var e=V.ui.ddmanager.current;this._addActiveClass(),e&&this._trigger("activate",t,this.ui(e))},_deactivate:function(t){var e=V.ui.ddmanager.current;this._removeActiveClass(),e&&this._trigger("deactivate",t,this.ui(e))},_over:function(t){var e=V.ui.ddmanager.current;e&&(e.currentItem||e.element)[0]!==this.element[0]&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this._addHoverClass(),this._trigger("over",t,this.ui(e)))},_out:function(t){var e=V.ui.ddmanager.current;e&&(e.currentItem||e.element)[0]!==this.element[0]&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this._removeHoverClass(),this._trigger("out",t,this.ui(e)))},_drop:function(e,t){var i=t||V.ui.ddmanager.current,s=!1;return!(!i||(i.currentItem||i.element)[0]===this.element[0])&&(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=V(this).droppable("instance");if(t.options.greedy&&!t.options.disabled&&t.options.scope===i.options.scope&&t.accept.call(t.element[0],i.currentItem||i.element)&&V.ui.intersect(i,V.extend(t,{offset:t.element.offset()}),t.options.tolerance,e))return!(s=!0)}),!s&&(!!this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(i)),this.element)))},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}}),V.ui.intersect=function(t,e,i,s){if(!e.offset)return!1;var n=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,a=n+t.helperProportions.width,r=o+t.helperProportions.height,l=e.offset.left,h=e.offset.top,c=l+e.proportions().width,u=h+e.proportions().height;switch(i){case"fit":return l<=n&&a<=c&&h<=o&&r<=u;case"intersect":return l<n+t.helperProportions.width/2&&a-t.helperProportions.width/2<c&&h<o+t.helperProportions.height/2&&r-t.helperProportions.height/2<u;case"pointer":return lt(s.pageY,h,e.proportions().height)&&lt(s.pageX,l,e.proportions().width);case"touch":return(h<=o&&o<=u||h<=r&&r<=u||o<h&&u<r)&&(l<=n&&n<=c||l<=a&&a<=c||n<l&&c<a);default:return!1}},!(V.ui.ddmanager={current:null,droppables:{default:[]},prepareOffsets:function(t,e){var i,s,n=V.ui.ddmanager.droppables[t.options.scope]||[],o=e?e.type:null,a=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();t:for(i=0;i<n.length;i++)if(!(n[i].options.disabled||t&&!n[i].accept.call(n[i].element[0],t.currentItem||t.element))){for(s=0;s<a.length;s++)if(a[s]===n[i].element[0]){n[i].proportions().height=0;continue t}n[i].visible="none"!==n[i].element.css("display"),n[i].visible&&("mousedown"===o&&n[i]._activate.call(n[i],e),n[i].offset=n[i].element.offset(),n[i].proportions({width:n[i].element[0].offsetWidth,height:n[i].element[0].offsetHeight}))}},drop:function(t,e){var i=!1;return V.each((V.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&V.ui.intersect(t,this,this.options.tolerance,e)&&(i=this._drop.call(this,e)||i),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,e)))}),i},dragStart:function(t,e){t.element.parentsUntil("body").on("scroll.droppable",function(){t.options.refreshPositions||V.ui.ddmanager.prepareOffsets(t,e)})},drag:function(n,o){n.options.refreshPositions&&V.ui.ddmanager.prepareOffsets(n,o),V.each(V.ui.ddmanager.droppables[n.options.scope]||[],function(){var t,e,i,s;this.options.disabled||this.greedyChild||!this.visible||(s=!(i=V.ui.intersect(n,this,this.options.tolerance,o))&&this.isover?"isout":i&&!this.isover?"isover":null)&&(this.options.greedy&&(e=this.options.scope,(i=this.element.parents(":data(ui-droppable)").filter(function(){return V(this).droppable("instance").options.scope===e})).length&&((t=V(i[0]).droppable("instance")).greedyChild="isover"===s)),t&&"isover"===s&&(t.isover=!1,t.isout=!0,t._out.call(t,o)),this[s]=!0,this["isout"===s?"isover":"isout"]=!1,this["isover"===s?"_over":"_out"].call(this,o),t&&"isout"===s&&(t.isout=!1,t.isover=!0,t._over.call(t,o)))})},dragStop:function(t,e){t.element.parentsUntil("body").off("scroll.droppable"),t.options.refreshPositions||V.ui.ddmanager.prepareOffsets(t,e)}})!==V.uiBackCompat&&V.widget("ui.droppable",V.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}});V.ui.droppable,V.widget("ui.progressbar",{version:"1.13.2",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=V("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){if(void 0===t)return this.options.value;this.options.value=this._constrainedValue(t),this._refreshValue()},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=!1===t,"number"!=typeof t&&(t=0),!this.indeterminate&&Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,e=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).width(e.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,t===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=V("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),V.widget("ui.selectable",V.ui.mouse,{version:"1.13.2",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var i=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){i.elementPos=V(i.element[0]).offset(),i.selectees=V(i.options.filter,i.element[0]),i._addClass(i.selectees,"ui-selectee"),i.selectees.each(function(){var t=V(this),e=t.offset(),e={left:e.left-i.elementPos.left,top:e.top-i.elementPos.top};V.data(this,"selectable-item",{element:this,$element:t,left:e.left,top:e.top,right:e.left+t.outerWidth(),bottom:e.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=V("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(i){var s=this,t=this.options;this.opos=[i.pageX,i.pageY],this.elementPos=V(this.element[0]).offset(),this.options.disabled||(this.selectees=V(t.filter,this.element[0]),this._trigger("start",i),V(t.appendTo).append(this.helper),this.helper.css({left:i.pageX,top:i.pageY,width:0,height:0}),t.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var t=V.data(this,"selectable-item");t.startselected=!0,i.metaKey||i.ctrlKey||(s._removeClass(t.$element,"ui-selected"),t.selected=!1,s._addClass(t.$element,"ui-unselecting"),t.unselecting=!0,s._trigger("unselecting",i,{unselecting:t.element}))}),V(i.target).parents().addBack().each(function(){var t,e=V.data(this,"selectable-item");if(e)return t=!i.metaKey&&!i.ctrlKey||!e.$element.hasClass("ui-selected"),s._removeClass(e.$element,t?"ui-unselecting":"ui-selected")._addClass(e.$element,t?"ui-selecting":"ui-unselecting"),e.unselecting=!t,e.selecting=t,(e.selected=t)?s._trigger("selecting",i,{selecting:e.element}):s._trigger("unselecting",i,{unselecting:e.element}),!1}))},_mouseDrag:function(s){if(this.dragged=!0,!this.options.disabled){var t,n=this,o=this.options,a=this.opos[0],r=this.opos[1],l=s.pageX,h=s.pageY;return l<a&&(t=l,l=a,a=t),h<r&&(t=h,h=r,r=t),this.helper.css({left:a,top:r,width:l-a,height:h-r}),this.selectees.each(function(){var t=V.data(this,"selectable-item"),e=!1,i={};t&&t.element!==n.element[0]&&(i.left=t.left+n.elementPos.left,i.right=t.right+n.elementPos.left,i.top=t.top+n.elementPos.top,i.bottom=t.bottom+n.elementPos.top,"touch"===o.tolerance?e=!(i.left>l||i.right<a||i.top>h||i.bottom<r):"fit"===o.tolerance&&(e=i.left>a&&i.right<l&&i.top>r&&i.bottom<h),e?(t.selected&&(n._removeClass(t.$element,"ui-selected"),t.selected=!1),t.unselecting&&(n._removeClass(t.$element,"ui-unselecting"),t.unselecting=!1),t.selecting||(n._addClass(t.$element,"ui-selecting"),t.selecting=!0,n._trigger("selecting",s,{selecting:t.element}))):(t.selecting&&((s.metaKey||s.ctrlKey)&&t.startselected?(n._removeClass(t.$element,"ui-selecting"),t.selecting=!1,n._addClass(t.$element,"ui-selected"),t.selected=!0):(n._removeClass(t.$element,"ui-selecting"),t.selecting=!1,t.startselected&&(n._addClass(t.$element,"ui-unselecting"),t.unselecting=!0),n._trigger("unselecting",s,{unselecting:t.element}))),t.selected&&(s.metaKey||s.ctrlKey||t.startselected||(n._removeClass(t.$element,"ui-selected"),t.selected=!1,n._addClass(t.$element,"ui-unselecting"),t.unselecting=!0,n._trigger("unselecting",s,{unselecting:t.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,V(".ui-unselecting",this.element[0]).each(function(){var t=V.data(this,"selectable-item");i._removeClass(t.$element,"ui-unselecting"),t.unselecting=!1,t.startselected=!1,i._trigger("unselected",e,{unselected:t.element})}),V(".ui-selecting",this.element[0]).each(function(){var t=V.data(this,"selectable-item");i._removeClass(t.$element,"ui-selecting")._addClass(t.$element,"ui-selected"),t.selecting=!1,t.selected=!0,t.startselected=!0,i._trigger("selected",e,{selected:t.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),V.widget("ui.selectmenu",[V.ui.formResetMixin,{version:"1.13.2",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var t=this.element.uniqueId().attr("id");this.ids={element:t,button:t+"-button",menu:t+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=V()},_drawButton:function(){var t,e=this,i=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.trigger("focus"),t.preventDefault()}}),this.element.hide(),this.button=V("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),t=V("<span>").appendTo(this.button),this._addClass(t,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(i).appendTo(this.button),!1!==this.options.width&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){e._rendered||e._refreshMenu()})},_drawMenu:function(){var i=this;this.menu=V("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=V("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,e){t.preventDefault(),i._setSelection(),i._select(e.item.data("ui-selectmenu-item"),t)},focus:function(t,e){e=e.item.data("ui-selectmenu-item");null!=i.focusIndex&&e.index!==i.focusIndex&&(i._trigger("focus",t,{item:e}),i.isOpen||i._select(e,t)),i.focusIndex=e.index,i.button.attr("aria-activedescendant",i.menuItems.eq(e.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t=this.element.find("option");this.menu.empty(),this._parseOptions(t),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,t.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(V.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(t){var e=V("<span>");return this._setText(e,t.label),this._addClass(e,"ui-selectmenu-text"),e},_renderMenu:function(s,t){var n=this,o="";V.each(t,function(t,e){var i;e.optgroup!==o&&(i=V("<li>",{text:e.optgroup}),n._addClass(i,"ui-selectmenu-optgroup","ui-menu-divider"+(e.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),i.appendTo(s),o=e.optgroup),n._renderItemData(s,e)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(t,e){var i=V("<li>"),s=V("<div>",{title:e.element.attr("title")});return e.disabled&&this._addClass(i,null,"ui-state-disabled"),this._setText(s,e.label),i.append(s).appendTo(t)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),s+=":not(.ui-state-disabled)"),(s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](s).eq(-1):i[t+"All"](s).eq(0)).length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?((t=window.getSelection()).removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.trigger("focus"))},_documentClick:{mousedown:function(t){this.isOpen&&(V(t.target).closest(".ui-selectmenu-menu, #"+V.escapeSelector(this.ids.button)).length||this.close(t))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection()).rangeCount&&(this.range=t.getRangeAt(0)):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(t){var e=!0;switch(t.keyCode){case V.ui.keyCode.TAB:case V.ui.keyCode.ESCAPE:this.close(t),e=!1;break;case V.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(t);break;case V.ui.keyCode.UP:t.altKey?this._toggle(t):this._move("prev",t);break;case V.ui.keyCode.DOWN:t.altKey?this._toggle(t):this._move("next",t);break;case V.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(t):this._toggle(t);break;case V.ui.keyCode.LEFT:this._move("prev",t);break;case V.ui.keyCode.RIGHT:this._move("next",t);break;case V.ui.keyCode.HOME:case V.ui.keyCode.PAGE_UP:this._move("first",t);break;case V.ui.keyCode.END:case V.ui.keyCode.PAGE_DOWN:this._move("last",t);break;default:this.menu.trigger(t),e=!1}e&&t.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){t=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":t,"aria-activedescendant":t}),this.menu.attr("aria-activedescendant",t)},_setOption:function(t,e){var i;"icons"===t&&(i=this.button.find("span.ui-icon"),this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)),this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?V(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(".ui-front, dialog"):t).length?this.document[0].body:t},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;!1!==t?(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t)):this.button.css("width","")},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(t){var i=this,s=[];t.each(function(t,e){e.hidden||s.push(i._parseOption(V(e),t))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),V.widget("ui.slider",V.ui.mouse,{version:"1.13.2",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,e=this.options,i=this.element.find(".ui-slider-handle"),s=[],n=e.values&&e.values.length||1;for(i.length>n&&(i.slice(n).remove(),i=i.slice(0,n)),t=i.length;t<n;t++)s.push("<span tabindex='0'></span>");this.handles=i.add(V(s.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(t){V(this).data("ui-slider-handle-index",t).attr("tabIndex",0)})},_createRange:function(){var t=this.options;t.range?(!0===t.range&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:Array.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=V("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),"min"!==t.range&&"max"!==t.range||this._addClass(this.range,"ui-slider-range-"+t.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(t){var i,s,n,o,e,a,r=this,l=this.options;return!l.disabled&&(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),a={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(a),s=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var e=Math.abs(i-r.values(t));(e<s||s===e&&(t===r._lastChangedValue||r.values(t)===l.min))&&(s=e,n=V(this),o=t)}),!1!==this._start(t,o)&&(this._mouseSliding=!0,this._handleIndex=o,this._addClass(n,null,"ui-state-active"),n.trigger("focus"),e=n.offset(),a=!V(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=a?{left:0,top:0}:{left:t.pageX-e.left-n.width()/2,top:t.pageY-e.top-n.height()/2-(parseInt(n.css("borderTopWidth"),10)||0)-(parseInt(n.css("borderBottomWidth"),10)||0)+(parseInt(n.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,i),this._animateOff=!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},e=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,e),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,t="horizontal"===this.orientation?(e=this.elementSize.width,t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),t=t/e;return(t=1<t?1:t)<0&&(t=0),"vertical"===this.orientation&&(t=1-t),e=this._valueMax()-this._valueMin(),e=this._valueMin()+t*e,this._trimAlignValue(e)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n=this.value(),o=this.values();this._hasMultipleValues()&&(s=this.values(e?0:1),n=this.values(e),2===this.options.values.length&&!0===this.options.range&&(i=0===e?Math.min(s,i):Math.max(s,i)),o[e]=i),i!==n&&!1!==this._trigger("slide",t,this._uiHash(e,i,o))&&(this._hasMultipleValues()?this.values(e,i):this.value(i))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),void this._change(null,0)):this._value()},values:function(t,e){var i,s,n;if(1<arguments.length)return this.options.values[t]=this._trimAlignValue(e),this._refreshValue(),void this._change(null,t);if(!arguments.length)return this._values();if(!Array.isArray(t))return this._hasMultipleValues()?this._values(t):this.value();for(i=this.options.values,s=t,n=0;n<i.length;n+=1)i[n]=this._trimAlignValue(s[n]),this._change(null,n);this._refreshValue()},_setOption:function(t,e){var i,s=0;switch("range"===t&&!0===this.options.range&&("min"===e?(this.options.value=this._values(0),this.options.values=null):"max"===e&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),Array.isArray(this.options.values)&&(s=this.options.values.length),this._super(t,e),t){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(e),this.handles.css("horizontal"===e?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),i=s-1;0<=i;i--)this._change(null,i);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i;if(arguments.length)return t=this.options.values[t],t=this._trimAlignValue(t);if(this._hasMultipleValues()){for(e=this.options.values.slice(),i=0;i<e.length;i+=1)e[i]=this._trimAlignValue(e[i]);return e}return[]},_trimAlignValue:function(t){if(t<=this._valueMin())return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=0<this.options.step?this.options.step:1,i=(t-this._valueMin())%e,t=t-i;return 2*Math.abs(i)>=e&&(t+=0<i?e:-e),parseFloat(t.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step;(t=Math.round((t-e)/i)*i+e)>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return t=null!==this.options.min?Math.max(t,this._precisionOf(this.options.min)):t},_precisionOf:function(t){var e=t.toString(),t=e.indexOf(".");return-1===t?0:e.length-t-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,t,s,n,o=this.options.range,a=this.options,r=this,l=!this._animateOff&&a.animate,h={};this._hasMultipleValues()?this.handles.each(function(t){i=(r.values(t)-r._valueMin())/(r._valueMax()-r._valueMin())*100,h["horizontal"===r.orientation?"left":"bottom"]=i+"%",V(this).stop(1,1)[l?"animate":"css"](h,a.animate),!0===r.options.range&&("horizontal"===r.orientation?(0===t&&r.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},a.animate),1===t&&r.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:a.animate})):(0===t&&r.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},a.animate),1===t&&r.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:a.animate}))),e=i}):(t=this.value(),s=this._valueMin(),n=this._valueMax(),i=n!==s?(t-s)/(n-s)*100:0,h["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](h,a.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},a.animate),"max"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},a.animate),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},a.animate),"max"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},a.animate))},_handleEvents:{keydown:function(t){var e,i,s,n=V(t.target).data("ui-slider-handle-index");switch(t.keyCode){case V.ui.keyCode.HOME:case V.ui.keyCode.END:case V.ui.keyCode.PAGE_UP:case V.ui.keyCode.PAGE_DOWN:case V.ui.keyCode.UP:case V.ui.keyCode.RIGHT:case V.ui.keyCode.DOWN:case V.ui.keyCode.LEFT:if(t.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(V(t.target),null,"ui-state-active"),!1===this._start(t,n)))return}switch(s=this.options.step,e=i=this._hasMultipleValues()?this.values(n):this.value(),t.keyCode){case V.ui.keyCode.HOME:i=this._valueMin();break;case V.ui.keyCode.END:i=this._valueMax();break;case V.ui.keyCode.PAGE_UP:i=this._trimAlignValue(e+(this._valueMax()-this._valueMin())/this.numPages);break;case V.ui.keyCode.PAGE_DOWN:i=this._trimAlignValue(e-(this._valueMax()-this._valueMin())/this.numPages);break;case V.ui.keyCode.UP:case V.ui.keyCode.RIGHT:if(e===this._valueMax())return;i=this._trimAlignValue(e+s);break;case V.ui.keyCode.DOWN:case V.ui.keyCode.LEFT:if(e===this._valueMin())return;i=this._trimAlignValue(e-s)}this._slide(t,n,i)},keyup:function(t){var e=V(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,e),this._change(t,e),this._removeClass(V(t.target),null,"ui-state-active"))}}}),V.widget("ui.sortable",V.ui.mouse,{version:"1.13.2",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return e<=t&&t<e+i},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var t=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),V.each(this.items,function(){t._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;0<=t;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,e){var i=null,s=!1,n=this;return!this.reverting&&(!this.options.disabled&&"static"!==this.options.type&&(this._refreshItems(t),V(t.target).parents().each(function(){if(V.data(this,n.widgetName+"-item")===n)return i=V(this),!1}),!!(i=V.data(t.target,n.widgetName+"-item")===n?V(t.target):i)&&(!(this.options.handle&&!e&&(V(this.options.handle,i).find("*").addBack().each(function(){this===t.target&&(s=!0)}),!s))&&(this.currentItem=i,this._removeCurrentsFromItems(),!0))))},_mouseStart:function(t,e,i){var s,n,o=this.options;if((this.currentContainer=this).refreshPositions(),this.appendTo=V("parent"!==o.appendTo?o.appendTo:this.currentItem.parent()),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},V.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),this.scrollParent=this.placeholder.scrollParent(),V.extend(this.offset,{parent:this._getParentOffset()}),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(n=this.document.find("body"),this.storedCursor=n.css("cursor"),n.css("cursor",o.cursor),this.storedStylesheet=V("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(n)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",o.zIndex)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!i)for(s=this.containers.length-1;0<=s;s--)this.containers[s]._trigger("activate",t,this._uiHash(this));return V.ui.ddmanager&&(V.ui.ddmanager.current=this),V.ui.ddmanager&&!o.dropBehaviour&&V.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this.helper.parent().is(this.appendTo)||(this.helper.detach().appendTo(this.appendTo),this.offset.parent=this._getParentOffset()),this.position=this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,this.lastPositionAbs=this.positionAbs=this._convertPositionTo("absolute"),this._mouseDrag(t),!0},_scroll:function(t){var e=this.options,i=!1;return this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<e.scrollSensitivity?this.scrollParent[0].scrollTop=i=this.scrollParent[0].scrollTop+e.scrollSpeed:t.pageY-this.overflowOffset.top<e.scrollSensitivity&&(this.scrollParent[0].scrollTop=i=this.scrollParent[0].scrollTop-e.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<e.scrollSensitivity?this.scrollParent[0].scrollLeft=i=this.scrollParent[0].scrollLeft+e.scrollSpeed:t.pageX-this.overflowOffset.left<e.scrollSensitivity&&(this.scrollParent[0].scrollLeft=i=this.scrollParent[0].scrollLeft-e.scrollSpeed)):(t.pageY-this.document.scrollTop()<e.scrollSensitivity?i=this.document.scrollTop(this.document.scrollTop()-e.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<e.scrollSensitivity&&(i=this.document.scrollTop(this.document.scrollTop()+e.scrollSpeed)),t.pageX-this.document.scrollLeft()<e.scrollSensitivity?i=this.document.scrollLeft(this.document.scrollLeft()-e.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<e.scrollSensitivity&&(i=this.document.scrollLeft(this.document.scrollLeft()+e.scrollSpeed))),i},_mouseDrag:function(t){var e,i,s,n,o=this.options;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),o.scroll&&!1!==this._scroll(t)&&(this._refreshItemPositions(!0),V.ui.ddmanager&&!o.dropBehaviour&&V.ui.ddmanager.prepareOffsets(this,t)),this.dragDirection={vertical:this._getDragVerticalDirection(),horizontal:this._getDragHorizontalDirection()},e=this.items.length-1;0<=e;e--)if(s=(i=this.items[e]).item[0],(n=this._intersectsWithPointer(i))&&i.instance===this.currentContainer&&!(s===this.currentItem[0]||this.placeholder[1===n?"next":"prev"]()[0]===s||V.contains(this.placeholder[0],s)||"semi-dynamic"===this.options.type&&V.contains(this.element[0],s))){if(this.direction=1===n?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(i))break;this._rearrange(t,i),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),V.ui.ddmanager&&V.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,e){var i,s,n,o;if(t)return V.ui.ddmanager&&!this.options.dropBehaviour&&V.ui.ddmanager.drop(this,t),this.options.revert?(s=(i=this).placeholder.offset(),o={},(n=this.options.axis)&&"x"!==n||(o.left=s.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),n&&"y"!==n||(o.top=s.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,V(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){i._clear(t)})):this._clear(t,e),!1},cancel:function(){if(this.dragging){this._mouseUp(new V.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var t=this.containers.length-1;0<=t;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),V.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?V(this.domPosition.prev).after(this.currentItem):V(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var t=this._getItemsAsjQuery(e&&e.connected),i=[];return e=e||{},V(t).each(function(){var t=(V(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);t&&i.push((e.key||t[1]+"[]")+"="+(e.key&&e.expression?t[1]:t[2]))}),!i.length&&e.key&&i.push(e.key+"="),i.join("&")},toArray:function(t){var e=this._getItemsAsjQuery(t&&t.connected),i=[];return t=t||{},e.each(function(){i.push(V(t.item||this).attr(t.attribute||"id")||"")}),i},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,l=r+t.height,h=this.offset.click.top,c=this.offset.click.left,h="x"===this.options.axis||r<s+h&&s+h<l,c="y"===this.options.axis||o<e+c&&e+c<a;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?h&&c:o<e+this.helperProportions.width/2&&i-this.helperProportions.width/2<a&&r<s+this.helperProportions.height/2&&n-this.helperProportions.height/2<l},_intersectsWithPointer:function(t){var e="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),t="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width);return!(!e||!t)&&(e=this.dragDirection.vertical,t=this.dragDirection.horizontal,this.floating?"right"===t||"down"===e?2:1:e&&("down"===e?2:1))},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this.dragDirection.vertical,t=this.dragDirection.horizontal;return this.floating&&t?"right"===t&&i||"left"===t&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!=t&&(0<t?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!=t&&(0<t?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(t){var e,i,s,n,o=[],a=[],r=this._connectWith();if(r&&t)for(e=r.length-1;0<=e;e--)for(i=(s=V(r[e],this.document[0])).length-1;0<=i;i--)(n=V.data(s[i],this.widgetFullName))&&n!==this&&!n.options.disabled&&a.push(["function"==typeof n.options.items?n.options.items.call(n.element):V(n.options.items,n.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),n]);function l(){o.push(this)}for(a.push(["function"==typeof this.options.items?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):V(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),e=a.length-1;0<=e;e--)a[e][0].each(l);return V(o)},_removeCurrentsFromItems:function(){var i=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=V.grep(this.items,function(t){for(var e=0;e<i.length;e++)if(i[e]===t.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var e,i,s,n,o,a,r,l,h=this.items,c=[["function"==typeof this.options.items?this.options.items.call(this.element[0],t,{item:this.currentItem}):V(this.options.items,this.element),this]],u=this._connectWith();if(u&&this.ready)for(e=u.length-1;0<=e;e--)for(i=(s=V(u[e],this.document[0])).length-1;0<=i;i--)(n=V.data(s[i],this.widgetFullName))&&n!==this&&!n.options.disabled&&(c.push(["function"==typeof n.options.items?n.options.items.call(n.element[0],t,{item:this.currentItem}):V(n.options.items,n.element),n]),this.containers.push(n));for(e=c.length-1;0<=e;e--)for(o=c[e][1],l=(a=c[e][i=0]).length;i<l;i++)(r=V(a[i])).data(this.widgetName+"-item",o),h.push({item:r,instance:o,width:0,height:0,left:0,top:0})},_refreshItemPositions:function(t){for(var e,i,s=this.items.length-1;0<=s;s--)e=this.items[s],this.currentContainer&&e.instance!==this.currentContainer&&e.item[0]!==this.currentItem[0]||(i=this.options.toleranceElement?V(this.options.toleranceElement,e.item):e.item,t||(e.width=i.outerWidth(),e.height=i.outerHeight()),i=i.offset(),e.left=i.left,e.top=i.top)},refreshPositions:function(t){var e,i;if(this.floating=!!this.items.length&&("x"===this.options.axis||this._isFloating(this.items[0].item)),this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset()),this._refreshItemPositions(t),this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(e=this.containers.length-1;0<=e;e--)i=this.containers[e].element.offset(),this.containers[e].containerCache.left=i.left,this.containers[e].containerCache.top=i.top,this.containers[e].containerCache.width=this.containers[e].element.outerWidth(),this.containers[e].containerCache.height=this.containers[e].element.outerHeight();return this},_createPlaceholder:function(i){var s,n,o=(i=i||this).options;o.placeholder&&o.placeholder.constructor!==String||(s=o.placeholder,n=i.currentItem[0].nodeName.toLowerCase(),o.placeholder={element:function(){var t=V("<"+n+">",i.document[0]);return i._addClass(t,"ui-sortable-placeholder",s||i.currentItem[0].className)._removeClass(t,"ui-sortable-helper"),"tbody"===n?i._createTrPlaceholder(i.currentItem.find("tr").eq(0),V("<tr>",i.document[0]).appendTo(t)):"tr"===n?i._createTrPlaceholder(i.currentItem,t):"img"===n&&t.attr("src",i.currentItem.attr("src")),s||t.css("visibility","hidden"),t},update:function(t,e){s&&!o.forcePlaceholderSize||(e.height()&&(!o.forcePlaceholderSize||"tbody"!==n&&"tr"!==n)||e.height(i.currentItem.innerHeight()-parseInt(i.currentItem.css("paddingTop")||0,10)-parseInt(i.currentItem.css("paddingBottom")||0,10)),e.width()||e.width(i.currentItem.innerWidth()-parseInt(i.currentItem.css("paddingLeft")||0,10)-parseInt(i.currentItem.css("paddingRight")||0,10)))}}),i.placeholder=V(o.placeholder.element.call(i.element,i.currentItem)),i.currentItem.after(i.placeholder),o.placeholder.update(i,i.placeholder)},_createTrPlaceholder:function(t,e){var i=this;t.children().each(function(){V("<td>&#160;</td>",i.document[0]).attr("colspan",V(this).attr("colspan")||1).appendTo(e)})},_contactContainers:function(t){for(var e,i,s,n,o,a,r,l,h,c=null,u=null,d=this.containers.length-1;0<=d;d--)V.contains(this.currentItem[0],this.containers[d].element[0])||(this._intersectsWith(this.containers[d].containerCache)?c&&V.contains(this.containers[d].element[0],c.element[0])||(c=this.containers[d],u=d):this.containers[d].containerCache.over&&(this.containers[d]._trigger("out",t,this._uiHash(this)),this.containers[d].containerCache.over=0));if(c)if(1===this.containers.length)this.containers[u].containerCache.over||(this.containers[u]._trigger("over",t,this._uiHash(this)),this.containers[u].containerCache.over=1);else{for(i=1e4,s=null,n=(l=c.floating||this._isFloating(this.currentItem))?"left":"top",o=l?"width":"height",h=l?"pageX":"pageY",e=this.items.length-1;0<=e;e--)V.contains(this.containers[u].element[0],this.items[e].item[0])&&this.items[e].item[0]!==this.currentItem[0]&&(a=this.items[e].item.offset()[n],r=!1,t[h]-a>this.items[e][o]/2&&(r=!0),Math.abs(t[h]-a)<i&&(i=Math.abs(t[h]-a),s=this.items[e],this.direction=r?"up":"down"));(s||this.options.dropOnEmpty)&&(this.currentContainer!==this.containers[u]?(s?this._rearrange(t,s,null,!0):this._rearrange(t,null,this.containers[u].element,!0),this._trigger("change",t,this._uiHash()),this.containers[u]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[u],this.options.placeholder.update(this.currentContainer,this.placeholder),this.scrollParent=this.placeholder.scrollParent(),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this.containers[u]._trigger("over",t,this._uiHash(this)),this.containers[u].containerCache.over=1):this.currentContainer.containerCache.over||(this.containers[u]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1))}},_createHelper:function(t){var e=this.options,t="function"==typeof e.helper?V(e.helper.apply(this.element[0],[t,this.currentItem])):"clone"===e.helper?this.currentItem.clone():this.currentItem;return t.parents("body").length||this.appendTo[0].appendChild(t[0]),t[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),t[0].style.width&&!e.forceHelperSize||t.width(this.currentItem.width()),t[0].style.height&&!e.forceHelperSize||t.height(this.currentItem.height()),t},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),"left"in(t=Array.isArray(t)?{left:+t[0],top:+t[1]||0}:t)&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&V.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),{top:(t=this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&V.ui.ie?{top:0,left:0}:t).top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,e,i=this.options;"parent"===i.containment&&(i.containment=this.helper[0].parentNode),"document"!==i.containment&&"window"!==i.containment||(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===i.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===i.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(i.containment)||(t=V(i.containment)[0],e=V(i.containment).offset(),i="hidden"!==V(t).css("overflow"),this.containment=[e.left+(parseInt(V(t).css("borderLeftWidth"),10)||0)+(parseInt(V(t).css("paddingLeft"),10)||0)-this.margins.left,e.top+(parseInt(V(t).css("borderTopWidth"),10)||0)+(parseInt(V(t).css("paddingTop"),10)||0)-this.margins.top,e.left+(i?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(V(t).css("borderLeftWidth"),10)||0)-(parseInt(V(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,e.top+(i?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(V(t).css("borderTopWidth"),10)||0)-(parseInt(V(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,e){e=e||this.position;var i="absolute"===t?1:-1,s="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&V.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,t=/(html|body)/i.test(s[0].tagName);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():t?0:s.scrollTop())*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():t?0:s.scrollLeft())*i}},_generatePosition:function(t){var e=this.options,i=t.pageX,s=t.pageY,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&V.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(i=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(s=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(i=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(s=this.containment[3]+this.offset.click.top)),e.grid&&(t=this.originalPageY+Math.round((s-this.originalPageY)/e.grid[1])*e.grid[1],s=!this.containment||t-this.offset.click.top>=this.containment[1]&&t-this.offset.click.top<=this.containment[3]?t:t-this.offset.click.top>=this.containment[1]?t-e.grid[1]:t+e.grid[1],t=this.originalPageX+Math.round((i-this.originalPageX)/e.grid[0])*e.grid[0],i=!this.containment||t-this.offset.click.left>=this.containment[0]&&t-this.offset.click.left<=this.containment[2]?t:t-this.offset.click.left>=this.containment[0]?t-e.grid[0]:t+e.grid[0])),{top:s-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop()),left:i-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)"auto"!==this._storedCSS[i]&&"static"!==this._storedCSS[i]||(this._storedCSS[i]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();function n(e,i,s){return function(t){s._trigger(e,t,i._uiHash(i))}}for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;0<=i;i--)e||s.push(n("deactivate",this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(n("out",this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(i=0;i<s.length;i++)s[i].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){!1===V.Widget.prototype._trigger.apply(this,arguments)&&this.cancel()},_uiHash:function(t){var e=t||this;return{helper:e.helper,placeholder:e.placeholder||V([]),position:e.position,originalPosition:e.originalPosition,offset:e.positionAbs,item:e.currentItem,sender:t?t.element:null}}});function ht(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}V.widget("ui.spinner",{version:"1.13.2",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var s=this._super(),n=this.element;return V.each(["min","max","step"],function(t,e){var i=n.attr(e);null!=i&&i.length&&(s[e]=i)}),s},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t))},mousewheel:function(t,e){var i=V.ui.safeActiveElement(this.document[0]);if(this.element[0]===i&&e){if(!this.spinning&&!this._start(t))return!1;this._spin((0<e?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(t){var e;function i(){this.element[0]===V.ui.safeActiveElement(this.document[0])||(this.element.trigger("focus"),this.previous=e,this._delay(function(){this.previous=e}))}e=this.element[0]===V.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),!1!==this._start(t)&&this._repeat(null,V(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){if(V(t.currentTarget).hasClass("ui-state-active"))return!1!==this._start(t)&&void this._repeat(null,V(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&0<this.uiSpinner.height()&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(t){var e=this.options,i=V.ui.keyCode;switch(t.keyCode){case i.UP:return this._repeat(null,1,t),!0;case i.DOWN:return this._repeat(null,-1,t),!0;case i.PAGE_UP:return this._repeat(null,e.page,t),!0;case i.PAGE_DOWN:return this._repeat(null,-e.page,t),!0}return!1},_start:function(t){return!(!this.spinning&&!1===this._trigger("start",t))&&(this.counter||(this.counter=1),this.spinning=!0)},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&!1===this._trigger("spin",e,{value:i})||(this._value(i),this.counter++)},_increment:function(t){var e=this.options.incremental;return e?"function"==typeof e?e(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return t=null!==this.options.min?Math.max(t,this._precisionOf(this.options.min)):t},_precisionOf:function(t){var e=t.toString(),t=e.indexOf(".");return-1===t?0:e.length-t-1},_adjustValue:function(t){var e=this.options,i=null!==e.min?e.min:0,s=t-i;return t=i+Math.round(s/e.step)*e.step,t=parseFloat(t.toFixed(this._precision())),null!==e.max&&t>e.max?e.max:null!==e.min&&t<e.min?e.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i;if("culture"===t||"numberFormat"===t)return i=this._parse(this.element.val()),this.options[t]=e,void this.element.val(this._format(i));"max"!==t&&"min"!==t&&"step"!==t||"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(i=this.buttons.first().find(".ui-icon"),this._removeClass(i,null,this.options.icons.up),this._addClass(i,null,e.up),i=this.buttons.last().find(".ui-icon"),this._removeClass(i,null,this.options.icons.down),this._addClass(i,null,e.down)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:ht(function(t){this._super(t)}),_parse:function(t){return""===(t="string"==typeof t&&""!==t?window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t:t)||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null!==t&&t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&null!==(i=this._parse(t))&&(e||(i=this._adjustValue(i)),t=this._format(i)),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:ht(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:ht(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:ht(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:ht(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){if(!arguments.length)return this._parse(this.element.val());ht(this._value).call(this,t)},widget:function(){return this.uiSpinner}}),!1!==V.uiBackCompat&&V.widget("ui.spinner",V.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}});var ct;V.ui.spinner;V.widget("ui.tabs",{version:"1.13.2",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:(ct=/#.*$/,function(t){var e=t.href.replace(ct,""),i=location.href.replace(ct,"");try{e=decodeURIComponent(e)}catch(t){}try{i=decodeURIComponent(i)}catch(t){}return 1<t.hash.length&&e===i}),_create:function(){var e=this,t=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,t.collapsible),this._processTabs(),t.active=this._initialActive(),Array.isArray(t.disabled)&&(t.disabled=V.uniqueSort(t.disabled.concat(V.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),!1!==this.options.active&&this.anchors.length?this.active=this._findActive(t.active):this.active=V(),this._refresh(),this.active.length&&this.load(t.active)},_initialActive:function(){var i=this.options.active,t=this.options.collapsible,s=location.hash.substring(1);return null===i&&(s&&this.tabs.each(function(t,e){if(V(e).attr("aria-controls")===s)return i=t,!1}),null!==(i=null===i?this.tabs.index(this.tabs.filter(".ui-tabs-active")):i)&&-1!==i||(i=!!this.tabs.length&&0)),!1!==i&&-1===(i=this.tabs.index(this.tabs.eq(i)))&&(i=!t&&0),i=!t&&!1===i&&this.anchors.length?0:i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):V()}},_tabKeydown:function(t){var e=V(V.ui.safeActiveElement(this.document[0])).closest("li"),i=this.tabs.index(e),s=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case V.ui.keyCode.RIGHT:case V.ui.keyCode.DOWN:i++;break;case V.ui.keyCode.UP:case V.ui.keyCode.LEFT:s=!1,i--;break;case V.ui.keyCode.END:i=this.anchors.length-1;break;case V.ui.keyCode.HOME:i=0;break;case V.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),void this._activate(i);case V.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),void this._activate(i!==this.options.active&&i);default:return}t.preventDefault(),clearTimeout(this.activating),i=this._focusNextTab(i,s),t.ctrlKey||t.metaKey||(e.attr("aria-selected","false"),this.tabs.eq(i).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",i)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===V.ui.keyCode.UP&&(t.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(t){return t.altKey&&t.keyCode===V.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===V.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,e){var i=this.tabs.length-1;for(;-1!==V.inArray(t=(t=i<t?0:t)<0?i:t,this.options.disabled);)t=e?t+1:t-1;return t},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){"active"!==t?(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||!1!==this.options.active||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e)):this._activate(e)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,e=this.tablist.children(":has(a[href])");t.disabled=V.map(e.filter(".ui-state-disabled"),function(t){return e.index(t)}),this._processTabs(),!1!==t.active&&this.anchors.length?this.active.length&&!V.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=V()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=V()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var l=this,t=this.tabs,e=this.anchors,i=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(t){V(this).is(".ui-state-disabled")&&t.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){V(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return V("a",this)[0]}).attr({tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=V(),this.anchors.each(function(t,e){var i,s,n,o=V(e).uniqueId().attr("id"),a=V(e).closest("li"),r=a.attr("aria-controls");l._isLocal(e)?(n=(i=e.hash).substring(1),s=l.element.find(l._sanitizeSelector(i))):(n=a.attr("aria-controls")||V({}).uniqueId()[0].id,(s=l.element.find(i="#"+n)).length||(s=l._createPanel(n)).insertAfter(l.panels[t-1]||l.tablist),s.attr("aria-live","polite")),s.length&&(l.panels=l.panels.add(s)),r&&a.data("ui-tabs-aria-controls",r),a.attr({"aria-controls":n,"aria-labelledby":o}),s.attr("aria-labelledby",o)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),t&&(this._off(t.not(this.tabs)),this._off(e.not(this.anchors)),this._off(i.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(t){return V("<div>").attr("id",t).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(t){var e,i;for(Array.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1),i=0;e=this.tabs[i];i++)e=V(e),!0===t||-1!==V.inArray(i,t)?(e.attr("aria-disabled","true"),this._addClass(e,null,"ui-state-disabled")):(e.removeAttr("aria-disabled"),this._removeClass(e,null,"ui-state-disabled"));this.options.disabled=t,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!0===t)},_setupEvents:function(t){var i={};t&&V.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,e=this.element.parent();"fill"===t?(i=e.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=V(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=V(this).outerHeight(!0)}),this.panels.each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,V(this).height("").height())}).height(i))},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget).closest("li"),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():this._getPanelForTab(s),r=i.length?this._getPanelForTab(i):V(),i={oldTab:i,oldPanel:r,newTab:o?V():s,newPanel:a};t.preventDefault(),s.hasClass("ui-state-disabled")||s.hasClass("ui-tabs-loading")||this.running||n&&!e.collapsible||!1===this._trigger("beforeActivate",t,i)||(e.active=!o&&this.tabs.index(s),this.active=n?V():s,this.xhr&&this.xhr.abort(),r.length||a.length||V.error("jQuery UI Tabs: Mismatching fragment identifier."),a.length&&this.load(this.tabs.index(s),t),this._toggle(t,i))},_toggle:function(t,e){var i=this,s=e.newPanel,n=e.oldPanel;function o(){i.running=!1,i._trigger("activate",t,e)}function a(){i._addClass(e.newTab.closest("li"),"ui-tabs-active","ui-state-active"),s.length&&i.options.show?i._show(s,i.options.show,o):(s.show(),o())}this.running=!0,n.length&&this.options.hide?this._hide(n,this.options.hide,function(){i._removeClass(e.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),a()}):(this._removeClass(e.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n.hide(),a()),n.attr("aria-hidden","true"),e.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),s.length&&n.length?e.oldTab.attr("tabIndex",-1):s.length&&this.tabs.filter(function(){return 0===V(this).attr("tabIndex")}).attr("tabIndex",-1),s.attr("aria-hidden","false"),e.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var t=this._findActive(t);t[0]!==this.active[0]&&(t=(t=!t.length?this.active:t).find(".ui-tabs-anchor")[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return!1===t?V():this.tabs.eq(t)},_getIndex:function(t){return t="string"==typeof t?this.anchors.index(this.anchors.filter("[href$='"+V.escapeSelector(t)+"']")):t},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){V.data(this,"ui-tabs-destroy")?V(this).remove():V(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var t=V(this),e=t.data("ui-tabs-aria-controls");e?t.attr("aria-controls",e).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var t=this.options.disabled;!1!==t&&(t=void 0!==i&&(i=this._getIndex(i),Array.isArray(t)?V.map(t,function(t){return t!==i?t:null}):V.map(this.tabs,function(t,e){return e!==i?e:null})),this._setOptionDisabled(t))},disable:function(t){var e=this.options.disabled;if(!0!==e){if(void 0===t)e=!0;else{if(t=this._getIndex(t),-1!==V.inArray(t,e))return;e=Array.isArray(e)?V.merge([t],e).sort():[t]}this._setOptionDisabled(e)}},load:function(t,s){t=this._getIndex(t);function n(t,e){"abort"===e&&o.panels.stop(!1,!0),o._removeClass(i,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===o.xhr&&delete o.xhr}var o=this,i=this.tabs.eq(t),t=i.find(".ui-tabs-anchor"),a=this._getPanelForTab(i),r={tab:i,panel:a};this._isLocal(t[0])||(this.xhr=V.ajax(this._ajaxSettings(t,s,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(i,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,i){setTimeout(function(){a.html(t),o._trigger("load",s,r),n(i,e)},1)}).fail(function(t,e){setTimeout(function(){n(t,e)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href").replace(/#.*$/,""),beforeSend:function(t,e){return n._trigger("beforeLoad",i,V.extend({jqXHR:t,ajaxSettings:e},s))}}},_getPanelForTab:function(t){t=V(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+t))}}),!1!==V.uiBackCompat&&V.widget("ui.tabs",V.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}});V.ui.tabs;V.widget("ui.tooltip",{version:"1.13.2",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var t=V(this).attr("title");return V("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(t,e){var i=(t.attr("aria-describedby")||"").split(/\s+/);i.push(e),t.data("ui-tooltip-id",e).attr("aria-describedby",String.prototype.trim.call(i.join(" ")))},_removeDescribedBy:function(t){var e=t.data("ui-tooltip-id"),i=(t.attr("aria-describedby")||"").split(/\s+/),e=V.inArray(e,i);-1!==e&&i.splice(e,1),t.removeData("ui-tooltip-id"),(i=String.prototype.trim.call(i.join(" ")))?t.attr("aria-describedby",i):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=V("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=V([])},_setOption:function(t,e){var i=this;this._super(t,e),"content"===t&&V.each(this.tooltips,function(t,e){i._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var s=this;V.each(this.tooltips,function(t,e){var i=V.Event("blur");i.target=i.currentTarget=e.element[0],s.close(i,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var t=V(this);if(t.is("[title]"))return t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")}))},_enable:function(){this.disabledTitles.each(function(){var t=V(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))}),this.disabledTitles=V([])},open:function(t){var i=this,e=V(t?t.target:this.element).closest(this.options.items);e.length&&!e.data("ui-tooltip-id")&&(e.attr("title")&&e.data("ui-tooltip-title",e.attr("title")),e.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&e.parents().each(function(){var t,e=V(this);e.data("ui-tooltip-open")&&((t=V.Event("blur")).target=t.currentTarget=this,i.close(t,!0)),e.attr("title")&&(e.uniqueId(),i.parents[this.id]={element:this,title:e.attr("title")},e.attr("title",""))}),this._registerCloseHandlers(t,e),this._updateContent(e,t))},_updateContent:function(e,i){var t=this.options.content,s=this,n=i?i.type:null;if("string"==typeof t||t.nodeType||t.jquery)return this._open(i,e,t);(t=t.call(e[0],function(t){s._delay(function(){e.data("ui-tooltip-open")&&(i&&(i.type=n),this._open(i,e,t))})}))&&this._open(i,e,t)},_open:function(t,e,i){var s,n,o,a=V.extend({},this.options.position);function r(t){a.of=t,n.is(":hidden")||n.position(a)}i&&((s=this._find(e))?s.tooltip.find(".ui-tooltip-content").html(i):(e.is("[title]")&&(t&&"mouseover"===t.type?e.attr("title",""):e.removeAttr("title")),s=this._tooltip(e),n=s.tooltip,this._addDescribedBy(e,n.attr("id")),n.find(".ui-tooltip-content").html(i),this.liveRegion.children().hide(),(i=V("<div>").html(n.find(".ui-tooltip-content").html())).removeAttr("name").find("[name]").removeAttr("name"),i.removeAttr("id").find("[id]").removeAttr("id"),i.appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:r}),r(t)):n.position(V.extend({of:e},this.options.position)),n.hide(),this._show(n,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(o=this.delayedShow=setInterval(function(){n.is(":visible")&&(r(a.of),clearInterval(o))},13)),this._trigger("open",t,{tooltip:n})))},_registerCloseHandlers:function(t,e){var i={keyup:function(t){t.keyCode===V.ui.keyCode.ESCAPE&&((t=V.Event(t)).currentTarget=e[0],this.close(t,!0))}};e[0]!==this.element[0]&&(i.remove=function(){var t=this._find(e);t&&this._removeTooltip(t.tooltip)}),t&&"mouseover"!==t.type||(i.mouseleave="close"),t&&"focusin"!==t.type||(i.focusout="close"),this._on(!0,e,i)},close:function(t){var e,i=this,s=V(t?t.currentTarget:this.element),n=this._find(s);n?(e=n.tooltip,n.closing||(clearInterval(this.delayedShow),s.data("ui-tooltip-title")&&!s.attr("title")&&s.attr("title",s.data("ui-tooltip-title")),this._removeDescribedBy(s),n.hiding=!0,e.stop(!0),this._hide(e,this.options.hide,function(){i._removeTooltip(V(this))}),s.removeData("ui-tooltip-open"),this._off(s,"mouseleave focusout keyup"),s[0]!==this.element[0]&&this._off(s,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&V.each(this.parents,function(t,e){V(e.element).attr("title",e.title),delete i.parents[t]}),n.closing=!0,this._trigger("close",t,{tooltip:e}),n.hiding||(n.closing=!1))):s.removeData("ui-tooltip-open")},_tooltip:function(t){var e=V("<div>").attr("role","tooltip"),i=V("<div>").appendTo(e),s=e.uniqueId().attr("id");return this._addClass(i,"ui-tooltip-content"),this._addClass(e,"ui-tooltip","ui-widget ui-widget-content"),e.appendTo(this._appendTo(t)),this.tooltips[s]={element:t,tooltip:e}},_find:function(t){t=t.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(t){clearInterval(this.delayedShow),t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){t=t.closest(".ui-front, dialog");return t=!t.length?this.document[0].body:t},_destroy:function(){var s=this;V.each(this.tooltips,function(t,e){var i=V.Event("blur"),e=e.element;i.target=i.currentTarget=e[0],s.close(i,!0),V("#"+t).remove(),e.data("ui-tooltip-title")&&(e.attr("title")||e.attr("title",e.data("ui-tooltip-title")),e.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),!1!==V.uiBackCompat&&V.widget("ui.tooltip",V.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}});V.ui.tooltip});
/*! jQuery UI Accessible Datepicker extension
* (to be appended to jquery-ui-*.custom.min.js)
*
* @licstart The following is the entire license notice for the
*  JavaScript code in this page.
*
* Copyright 2014 Kolab Systems AG
*
* The JavaScript code in this page is free software: you can
* redistribute it and/or modify it under the terms of the GNU
* General Public License (GNU GPL) as published by the Free Software
* Foundation, either version 3 of the License, or (at your option)
* any later version.  The code is distributed WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
*
* As additional permission under GNU GPL version 3 section 7, you
* may distribute non-source (e.g., minimized or compacted) forms of
* that code without the copy of the GNU GPL normally required by
* section 4, provided you include this license notice and a URL
* through which recipients can access the Corresponding Source.
*
* @licend The above is the entire license notice
*  for the JavaScript code in this page.
*/

(function($, undefined) {

// references to super class methods
var __newInst           = $.datepicker._newInst;
var __updateDatepicker  = $.datepicker._updateDatepicker;
var __connectDatepicker = $.datepicker._connectDatepicker;
var __showDatepicker    = $.datepicker._showDatepicker;
var __hideDatepicker    = $.datepicker._hideDatepicker;

// "extend" singleton instance methods
$.extend($.datepicker, {

	/* Create a new instance object */
	_newInst: function(target, inline) {
		var that = this, inst = __newInst.call(this, target, inline);

		if (inst.inline) {
			// attach keyboard event handler
			inst.dpDiv.on('keydown.datepicker', '.ui-datepicker-calendar', function(event) {
				// we're only interested navigation keys
				if ($.inArray(event.keyCode, [ 13, 33, 34, 35, 36, 37, 38, 39, 40]) == -1) {
					return;
				}
				event.stopPropagation();
				event.preventDefault();
				inst._hasfocus = true;

				var activeCell;
				switch (event.keyCode) {
					case $.ui.keyCode.ENTER:
						if ((activeCell = $('.' + that._dayOverClass, inst.dpDiv).get(0) || $('.' + that._currentClass, inst.dpDiv).get(0))) {
							that._selectDay(inst.input, inst.selectedMonth, inst.selectedYear, activeCell);
						}
						break;

					case $.ui.keyCode.PAGE_UP:
						that._adjustDate(inst.input, -that._get(inst, 'stepMonths'), 'M');
						break;
					case $.ui.keyCode.PAGE_DOWN:
						that._adjustDate(inst.input, that._get(inst, 'stepMonths'), 'M');
						break;

					default:
						return that._cursorKeydown(event, inst);
				}
			})
			.attr('role', 'region')
			.attr('aria-labelledby', inst.id + '-dp-title');
		}
		else {
			var widgetId = inst.dpDiv.attr('id') || inst.id + '-dp-widget';
			inst.dpDiv.attr('id', widgetId)
				.attr('aria-hidden', 'true')
				.attr('aria-labelledby', inst.id + '-dp-title');

				$(inst.input).attr('aria-haspopup', 'true')
					.attr('aria-expanded', 'false')
					.attr('aria-owns', widgetId);
		}

		return inst;
	},

	/* Attach the date picker to an input field */
	_connectDatepicker: function(target, inst) {
		__connectDatepicker.call(this, target, inst);

		var that = this;

		// register additional keyboard events to control date selection with cursor keys
		$(target).unbind('keydown.datepicker-extended').bind('keydown.datepicker-extended', function(event) {
			var inc = 1;
			switch (event.keyCode) {
				case 109:
				case 173:
				case 189:  // "minus"
					inc = -1;
				case 61:
				case 107:
				case 187:  // "plus"
					// do nothing if the input does not contain full date string
					if (this.value.length < that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear).length) {
						return true;
					}
					that._adjustInstDate(inst, inc, 'D');
					that._selectDateRC(target, that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear));
					return false;

				case $.ui.keyCode.UP:
				case $.ui.keyCode.DOWN:
					// unfold datepicker if not visible
					if ($.datepicker._lastInput !== target && !$.datepicker._isDisabledDatepicker(target)) {
						that._showDatepicker(event);
						event.stopPropagation();
						event.preventDefault();
						return false;
					}

				default:
					if (!$.datepicker._isDisabledDatepicker(target) && !event.ctrlKey && !event.metaKey) {
						return that._cursorKeydown(event, inst);
					}
			}
		})
		// fix https://bugs.jqueryui.com/ticket/8593
		.click(function (event) { that._showDatepicker(event); })
		.attr('autocomplete', 'off');
	},

	/* Handle keyboard event on datepicker widget */
	_cursorKeydown: function(event, inst) {
		inst._keyEvent = true;

		var isRTL = inst.dpDiv.hasClass('ui-datepicker-rtl');

		switch (event.keyCode) {
			case $.ui.keyCode.LEFT:
				this._adjustDate(inst.input, (isRTL ? +1 : -1), 'D');
				break;
			case $.ui.keyCode.RIGHT:
				this._adjustDate(inst.input, (isRTL ? -1 : +1), 'D');
				break;
			case $.ui.keyCode.UP:
				this._adjustDate(inst.input, -7, 'D');
				break;
			case $.ui.keyCode.DOWN:
				this._adjustDate(inst.input, +7, 'D');
				break;
			case $.ui.keyCode.HOME:
				// TODO: jump to first of month
				break;
			case $.ui.keyCode.END:
				// TODO: jump to end of month
				break;
		}

		return true;
	},

	/* Pop-up the date picker for a given input field */
	_showDatepicker: function(input) {
		input = input.target || input;
		__showDatepicker.call(this, input);

		var inst = $.datepicker._getInst(input);
		if (inst && $.datepicker._datepickerShowing) {
			inst.dpDiv.attr('aria-hidden', 'false');
			$(input).attr('aria-expanded', 'true');
		}
	},

	/* Hide the date picker from view */
	_hideDatepicker: function(input) {
		__hideDatepicker.call(this, input);

		var inst = this._curInst;
		if (inst && !$.datepicker._datepickerShowing) {
			inst.dpDiv.attr('aria-hidden', 'true');
			$(inst.input).attr('aria-expanded', 'false');
		}
	},

	/* Render the date picker content */
	_updateDatepicker: function(inst) {
		__updateDatepicker.call(this, inst);

		var activeCell = $('.' + this._dayOverClass, inst.dpDiv).get(0) || $('.' + this._currentClass, inst.dpDiv).get(0);
		if (activeCell) {
			activeCell = $(activeCell);
			activeCell.attr('id', inst.id + '-day-' + activeCell.text());
		}

		// allow focus on main container only
		inst.dpDiv.find('.ui-datepicker-calendar')
			.attr('tabindex', inst.inline ? '0' : '-1')
			.attr('role', 'grid')
			.attr('aria-readonly', 'true')
			.attr('aria-activedescendant', activeCell ? activeCell.attr('id') : '')
			.find('td').attr('role', 'gridcell').attr('aria-selected', 'false')
			.find('a').attr('tabindex', '-1');

		$('.ui-datepicker-current-day', inst.dpDiv).attr('aria-selected', 'true');

		inst.dpDiv.find('.ui-datepicker-title')
			.attr('id', inst.id + '-dp-title')

		// set focus again after update
		if (inst._hasfocus) {
			inst.dpDiv.find('.ui-datepicker-calendar').focus();
			inst._hasfocus = false;
		}
	},

	_selectDateRC: function(id, dateStr) {
		var target = $(id), inst = this._getInst(target[0]);

		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
		if (inst.input) {
			inst.input.val(dateStr);
		}
		this._updateAlternate(inst);
		if (inst.input) {
			inst.input.trigger("change"); // fire the change event
		}
		if (inst.inline) {
			this._updateDatepicker(inst);
		}
	}
});

}(jQuery));
PKsc�\RE�.��.jqueryui/js/jquery-ui-accessible-datepicker.jsnu�[���/*! jQuery UI Accessible Datepicker extension
* (to be appended to jquery-ui-*.custom.min.js)
*
* @licstart The following is the entire license notice for the
*  JavaScript code in this page.
*
* Copyright 2014 Kolab Systems AG
*
* The JavaScript code in this page is free software: you can
* redistribute it and/or modify it under the terms of the GNU
* General Public License (GNU GPL) as published by the Free Software
* Foundation, either version 3 of the License, or (at your option)
* any later version.  The code is distributed WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
*
* As additional permission under GNU GPL version 3 section 7, you
* may distribute non-source (e.g., minimized or compacted) forms of
* that code without the copy of the GNU GPL normally required by
* section 4, provided you include this license notice and a URL
* through which recipients can access the Corresponding Source.
*
* @licend The above is the entire license notice
*  for the JavaScript code in this page.
*/

(function($, undefined) {

// references to super class methods
var __newInst           = $.datepicker._newInst;
var __updateDatepicker  = $.datepicker._updateDatepicker;
var __connectDatepicker = $.datepicker._connectDatepicker;
var __showDatepicker    = $.datepicker._showDatepicker;
var __hideDatepicker    = $.datepicker._hideDatepicker;

// "extend" singleton instance methods
$.extend($.datepicker, {

	/* Create a new instance object */
	_newInst: function(target, inline) {
		var that = this, inst = __newInst.call(this, target, inline);

		if (inst.inline) {
			// attach keyboard event handler
			inst.dpDiv.on('keydown.datepicker', '.ui-datepicker-calendar', function(event) {
				// we're only interested navigation keys
				if ($.inArray(event.keyCode, [ 13, 33, 34, 35, 36, 37, 38, 39, 40]) == -1) {
					return;
				}
				event.stopPropagation();
				event.preventDefault();
				inst._hasfocus = true;

				var activeCell;
				switch (event.keyCode) {
					case $.ui.keyCode.ENTER:
						if ((activeCell = $('.' + that._dayOverClass, inst.dpDiv).get(0) || $('.' + that._currentClass, inst.dpDiv).get(0))) {
							that._selectDay(inst.input, inst.selectedMonth, inst.selectedYear, activeCell);
						}
						break;

					case $.ui.keyCode.PAGE_UP:
						that._adjustDate(inst.input, -that._get(inst, 'stepMonths'), 'M');
						break;
					case $.ui.keyCode.PAGE_DOWN:
						that._adjustDate(inst.input, that._get(inst, 'stepMonths'), 'M');
						break;

					default:
						return that._cursorKeydown(event, inst);
				}
			})
			.attr('role', 'region')
			.attr('aria-labelledby', inst.id + '-dp-title');
		}
		else {
			var widgetId = inst.dpDiv.attr('id') || inst.id + '-dp-widget';
			inst.dpDiv.attr('id', widgetId)
				.attr('aria-hidden', 'true')
				.attr('aria-labelledby', inst.id + '-dp-title');

				$(inst.input).attr('aria-haspopup', 'true')
					.attr('aria-expanded', 'false')
					.attr('aria-owns', widgetId);
		}

		return inst;
	},

	/* Attach the date picker to an input field */
	_connectDatepicker: function(target, inst) {
		__connectDatepicker.call(this, target, inst);

		var that = this;

		// register additional keyboard events to control date selection with cursor keys
		$(target).unbind('keydown.datepicker-extended').bind('keydown.datepicker-extended', function(event) {
			var inc = 1;
			switch (event.keyCode) {
				case 109:
				case 173:
				case 189:  // "minus"
					inc = -1;
				case 61:
				case 107:
				case 187:  // "plus"
					// do nothing if the input does not contain full date string
					if (this.value.length < that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear).length) {
						return true;
					}
					that._adjustInstDate(inst, inc, 'D');
					that._selectDateRC(target, that._formatDate(inst, inst.selectedDay, inst.selectedMonth, inst.selectedYear));
					return false;

				case $.ui.keyCode.UP:
				case $.ui.keyCode.DOWN:
					// unfold datepicker if not visible
					if ($.datepicker._lastInput !== target && !$.datepicker._isDisabledDatepicker(target)) {
						that._showDatepicker(event);
						event.stopPropagation();
						event.preventDefault();
						return false;
					}

				default:
					if (!$.datepicker._isDisabledDatepicker(target) && !event.ctrlKey && !event.metaKey) {
						return that._cursorKeydown(event, inst);
					}
			}
		})
		// fix https://bugs.jqueryui.com/ticket/8593
		.click(function (event) { that._showDatepicker(event); })
		.attr('autocomplete', 'off');
	},

	/* Handle keyboard event on datepicker widget */
	_cursorKeydown: function(event, inst) {
		inst._keyEvent = true;

		var isRTL = inst.dpDiv.hasClass('ui-datepicker-rtl');

		switch (event.keyCode) {
			case $.ui.keyCode.LEFT:
				this._adjustDate(inst.input, (isRTL ? +1 : -1), 'D');
				break;
			case $.ui.keyCode.RIGHT:
				this._adjustDate(inst.input, (isRTL ? -1 : +1), 'D');
				break;
			case $.ui.keyCode.UP:
				this._adjustDate(inst.input, -7, 'D');
				break;
			case $.ui.keyCode.DOWN:
				this._adjustDate(inst.input, +7, 'D');
				break;
			case $.ui.keyCode.HOME:
				// TODO: jump to first of month
				break;
			case $.ui.keyCode.END:
				// TODO: jump to end of month
				break;
		}

		return true;
	},

	/* Pop-up the date picker for a given input field */
	_showDatepicker: function(input) {
		input = input.target || input;
		__showDatepicker.call(this, input);

		var inst = $.datepicker._getInst(input);
		if (inst && $.datepicker._datepickerShowing) {
			inst.dpDiv.attr('aria-hidden', 'false');
			$(input).attr('aria-expanded', 'true');
		}
	},

	/* Hide the date picker from view */
	_hideDatepicker: function(input) {
		__hideDatepicker.call(this, input);

		var inst = this._curInst;
		if (inst && !$.datepicker._datepickerShowing) {
			inst.dpDiv.attr('aria-hidden', 'true');
			$(inst.input).attr('aria-expanded', 'false');
		}
	},

	/* Render the date picker content */
	_updateDatepicker: function(inst) {
		__updateDatepicker.call(this, inst);

		var activeCell = $('.' + this._dayOverClass, inst.dpDiv).get(0) || $('.' + this._currentClass, inst.dpDiv).get(0);
		if (activeCell) {
			activeCell = $(activeCell);
			activeCell.attr('id', inst.id + '-day-' + activeCell.text());
		}

		// allow focus on main container only
		inst.dpDiv.find('.ui-datepicker-calendar')
			.attr('tabindex', inst.inline ? '0' : '-1')
			.attr('role', 'grid')
			.attr('aria-readonly', 'true')
			.attr('aria-activedescendant', activeCell ? activeCell.attr('id') : '')
			.find('td').attr('role', 'gridcell').attr('aria-selected', 'false')
			.find('a').attr('tabindex', '-1');

		$('.ui-datepicker-current-day', inst.dpDiv).attr('aria-selected', 'true');

		inst.dpDiv.find('.ui-datepicker-title')
			.attr('id', inst.id + '-dp-title')

		// set focus again after update
		if (inst._hasfocus) {
			inst.dpDiv.find('.ui-datepicker-calendar').focus();
			inst._hasfocus = false;
		}
	},

	_selectDateRC: function(id, dateStr) {
		var target = $(id), inst = this._getInst(target[0]);

		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
		if (inst.input) {
			inst.input.val(dateStr);
		}
		this._updateAlternate(inst);
		if (inst.input) {
			inst.input.trigger("change"); // fire the change event
		}
		if (inst.inline) {
			this._updateDatepicker(inst);
		}
	}
});

}(jQuery));
PKsc�\�w�<�<$jqueryui/js/jquery.minicolors.min.jsnu�[���//
// jQuery MiniColors: A tiny color picker built on jQuery
//
// Developed by Cory LaViska for A Beautiful Site, LLC
//
// Licensed under the MIT license: http://opensource.org/licenses/MIT
//
!function(i){"function"==typeof define&&define.amd?define(["jquery"],i):"object"==typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function(i){"use strict";function t(t,o){var s,a,n,e,r,l,h,d=i('<div class="minicolors" />'),p=i.minicolors.defaults;if(!t.data("minicolors-initialized")){if(o=i.extend(!0,{},p,o),d.addClass("minicolors-theme-"+o.theme).toggleClass("minicolors-with-opacity",o.opacity),void 0!==o.position&&i.each(o.position.split(" "),function(){d.addClass("minicolors-position-"+this)}),a="rgb"===o.format?o.opacity?"25":"20":o.keywords?"11":"7",t.addClass("minicolors-input").data("minicolors-initialized",!1).data("minicolors-settings",o).prop("size",a).wrap(d).after('<div class="minicolors-panel minicolors-slider-'+o.control+'"><div class="minicolors-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-opacity-slider minicolors-sprite"><div class="minicolors-picker"></div></div><div class="minicolors-grid minicolors-sprite"><div class="minicolors-grid-inner"></div><div class="minicolors-picker"><div></div></div></div></div>'),o.inline||(t.after('<span class="minicolors-swatch minicolors-sprite minicolors-input-swatch"><span class="minicolors-swatch-color"></span></span>'),t.next(".minicolors-input-swatch").on("click",function(i){i.preventDefault(),t.focus()})),l=t.parent().find(".minicolors-panel"),l.on("selectstart",function(){return!1}).end(),o.swatches&&0!==o.swatches.length)for(l.addClass("minicolors-with-swatches"),n=i('<ul class="minicolors-swatches"></ul>').appendTo(l),h=0;h<o.swatches.length;++h)"object"===i.type(o.swatches[h])?(s=o.swatches[h].name,e=o.swatches[h].color):(s="",e=o.swatches[h]),r=e,e=v(e)?g(e,!0):I(u(e,!0)),i('<li class="minicolors-swatch minicolors-sprite"><span class="minicolors-swatch-color" title="'+s+'"></span></li>').appendTo(n).data("swatch-color",r).find(".minicolors-swatch-color").css({backgroundColor:C(e),opacity:e.a}),o.swatches[h]=e;o.inline&&t.parent().addClass("minicolors-inline"),c(t,!1),t.data("minicolors-initialized",!0)}}function o(i){var t=i.parent();i.removeData("minicolors-initialized").removeData("minicolors-settings").removeProp("size").removeClass("minicolors-input"),t.before(i).remove()}function s(i){var t=i.parent(),o=t.find(".minicolors-panel"),s=i.data("minicolors-settings");!i.data("minicolors-initialized")||i.prop("disabled")||t.hasClass("minicolors-inline")||t.hasClass("minicolors-focus")||(a(),t.addClass("minicolors-focus"),o.animate?o.stop(!0,!0).fadeIn(s.showSpeed,function(){s.show&&s.show.call(i.get(0))}):(o.show(),s.show&&s.show.call(i.get(0))))}function a(){i(".minicolors-focus").each(function(){var t=i(this),o=t.find(".minicolors-input"),s=t.find(".minicolors-panel"),a=o.data("minicolors-settings");s.animate?s.fadeOut(a.hideSpeed,function(){a.hide&&a.hide.call(o.get(0)),t.removeClass("minicolors-focus")}):(s.hide(),a.hide&&a.hide.call(o.get(0)),t.removeClass("minicolors-focus"))})}function n(i,t,o){var s,a,n,r,c,l=i.parents(".minicolors").find(".minicolors-input"),h=l.data("minicolors-settings"),d=i.find("[class$=-picker]"),p=i.offset().left,u=i.offset().top,g=Math.round(t.pageX-p),m=Math.round(t.pageY-u),f=o?h.animationSpeed:0;t.originalEvent.changedTouches&&(g=t.originalEvent.changedTouches[0].pageX-p,m=t.originalEvent.changedTouches[0].pageY-u),g<0&&(g=0),m<0&&(m=0),g>i.width()&&(g=i.width()),m>i.height()&&(m=i.height()),i.parent().is(".minicolors-slider-wheel")&&d.parent().is(".minicolors-grid")&&(s=75-g,a=75-m,n=Math.sqrt(s*s+a*a),r=Math.atan2(a,s),r<0&&(r+=2*Math.PI),n>75&&(n=75,g=75-75*Math.cos(r),m=75-75*Math.sin(r)),g=Math.round(g),m=Math.round(m)),c={top:m+"px"},i.is(".minicolors-grid")&&(c.left=g+"px"),d.animate?d.stop(!0).animate(c,f,h.animationEasing,function(){e(l,i)}):(d.css(c),e(l,i))}function e(i,t){function o(i,t){var o,s;return i.length&&t?(o=i.offset().left,s=i.offset().top,{x:o-t.offset().left+i.outerWidth()/2,y:s-t.offset().top+i.outerHeight()/2}):null}var s,a,n,e,c,h,d,p=i.val(),u=i.attr("data-opacity"),g=i.parent(),m=i.data("minicolors-settings"),v=g.find(".minicolors-input-swatch"),b=g.find(".minicolors-grid"),w=g.find(".minicolors-slider"),y=g.find(".minicolors-opacity-slider"),C=b.find("[class$=-picker]"),M=w.find("[class$=-picker]"),x=y.find("[class$=-picker]"),I=o(C,b),S=o(M,w),z=o(x,y);if(t.is(".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider")){switch(m.control){case"wheel":e=b.width()/2-I.x,c=b.height()/2-I.y,h=Math.sqrt(e*e+c*c),d=Math.atan2(c,e),d<0&&(d+=2*Math.PI),h>75&&(h=75,I.x=69-75*Math.cos(d),I.y=69-75*Math.sin(d)),a=f(h/.75,0,100),s=f(180*d/Math.PI,0,360),n=f(100-Math.floor(S.y*(100/w.height())),0,100),p=k({h:s,s:a,b:n}),w.css("backgroundColor",k({h:s,s:a,b:100}));break;case"saturation":s=f(parseInt(I.x*(360/b.width()),10),0,360),a=f(100-Math.floor(S.y*(100/w.height())),0,100),n=f(100-Math.floor(I.y*(100/b.height())),0,100),p=k({h:s,s:a,b:n}),w.css("backgroundColor",k({h:s,s:100,b:n})),g.find(".minicolors-grid-inner").css("opacity",a/100);break;case"brightness":s=f(parseInt(I.x*(360/b.width()),10),0,360),a=f(100-Math.floor(I.y*(100/b.height())),0,100),n=f(100-Math.floor(S.y*(100/w.height())),0,100),p=k({h:s,s:a,b:n}),w.css("backgroundColor",k({h:s,s:a,b:100})),g.find(".minicolors-grid-inner").css("opacity",1-n/100);break;default:s=f(360-parseInt(S.y*(360/w.height()),10),0,360),a=f(Math.floor(I.x*(100/b.width())),0,100),n=f(100-Math.floor(I.y*(100/b.height())),0,100),p=k({h:s,s:a,b:n}),b.css("backgroundColor",k({h:s,s:100,b:100}))}u=m.opacity?parseFloat(1-z.y/y.height()).toFixed(2):1,r(i,p,u)}else v.find("span").css({backgroundColor:p,opacity:u}),l(i,p,u)}function r(i,t,o){var s,a=i.parent(),n=i.data("minicolors-settings"),e=a.find(".minicolors-input-swatch");n.opacity&&i.attr("data-opacity",o),"rgb"===n.format?(s=v(t)?g(t,!0):I(u(t,!0)),o=""===i.attr("data-opacity")?1:f(parseFloat(i.attr("data-opacity")).toFixed(2),0,1),!isNaN(o)&&n.opacity||(o=1),t=i.minicolors("rgbObject").a<=1&&s&&n.opacity?"rgba("+s.r+", "+s.g+", "+s.b+", "+parseFloat(o)+")":"rgb("+s.r+", "+s.g+", "+s.b+")"):(v(t)&&(t=y(t)),t=p(t,n.letterCase)),i.val(t),e.find("span").css({backgroundColor:t,opacity:o}),l(i,t,o)}function c(t,o){var s,a,n,e,r,c,h,d,w,C,x=t.parent(),I=t.data("minicolors-settings"),S=x.find(".minicolors-input-swatch"),z=x.find(".minicolors-grid"),F=x.find(".minicolors-slider"),T=x.find(".minicolors-opacity-slider"),j=z.find("[class$=-picker]"),D=F.find("[class$=-picker]"),q=T.find("[class$=-picker]");switch(v(t.val())?(s=y(t.val()),r=f(parseFloat(b(t.val())).toFixed(2),0,1),r&&t.attr("data-opacity",r)):s=p(u(t.val(),!0),I.letterCase),s||(s=p(m(I.defaultValue,!0),I.letterCase)),a=M(s),e=I.keywords?i.map(I.keywords.split(","),function(t){return i.trim(t.toLowerCase())}):[],c=""!==t.val()&&i.inArray(t.val().toLowerCase(),e)>-1?p(t.val()):v(t.val())?g(t.val()):s,o||t.val(c),I.opacity&&(n=""===t.attr("data-opacity")?1:f(parseFloat(t.attr("data-opacity")).toFixed(2),0,1),isNaN(n)&&(n=1),t.attr("data-opacity",n),S.find("span").css("opacity",n),d=f(T.height()-T.height()*n,0,T.height()),q.css("top",d+"px")),"transparent"===t.val().toLowerCase()&&S.find("span").css("opacity",0),S.find("span").css("backgroundColor",s),I.control){case"wheel":w=f(Math.ceil(.75*a.s),0,z.height()/2),C=a.h*Math.PI/180,h=f(75-Math.cos(C)*w,0,z.width()),d=f(75-Math.sin(C)*w,0,z.height()),j.css({top:d+"px",left:h+"px"}),d=150-a.b/(100/z.height()),""===s&&(d=0),D.css("top",d+"px"),F.css("backgroundColor",k({h:a.h,s:a.s,b:100}));break;case"saturation":h=f(5*a.h/12,0,150),d=f(z.height()-Math.ceil(a.b/(100/z.height())),0,z.height()),j.css({top:d+"px",left:h+"px"}),d=f(F.height()-a.s*(F.height()/100),0,F.height()),D.css("top",d+"px"),F.css("backgroundColor",k({h:a.h,s:100,b:a.b})),x.find(".minicolors-grid-inner").css("opacity",a.s/100);break;case"brightness":h=f(5*a.h/12,0,150),d=f(z.height()-Math.ceil(a.s/(100/z.height())),0,z.height()),j.css({top:d+"px",left:h+"px"}),d=f(F.height()-a.b*(F.height()/100),0,F.height()),D.css("top",d+"px"),F.css("backgroundColor",k({h:a.h,s:a.s,b:100})),x.find(".minicolors-grid-inner").css("opacity",1-a.b/100);break;default:h=f(Math.ceil(a.s/(100/z.width())),0,z.width()),d=f(z.height()-Math.ceil(a.b/(100/z.height())),0,z.height()),j.css({top:d+"px",left:h+"px"}),d=f(F.height()-a.h/(360/F.height()),0,F.height()),D.css("top",d+"px"),z.css("backgroundColor",k({h:a.h,s:100,b:100}))}t.data("minicolors-initialized")&&l(t,c,n)}function l(i,t,o){var s,a,n,e=i.data("minicolors-settings"),r=i.data("minicolors-lastChange");if(!r||r.value!==t||r.opacity!==o){if(i.data("minicolors-lastChange",{value:t,opacity:o}),e.swatches&&0!==e.swatches.length){for(s=v(t)?g(t,!0):I(t),a=-1,n=0;n<e.swatches.length;++n)if(s.r===e.swatches[n].r&&s.g===e.swatches[n].g&&s.b===e.swatches[n].b&&s.a===e.swatches[n].a){a=n;break}i.parent().find(".minicolors-swatches .minicolors-swatch").removeClass("selected"),a!==-1&&i.parent().find(".minicolors-swatches .minicolors-swatch").eq(n).addClass("selected")}e.change&&(e.changeDelay?(clearTimeout(i.data("minicolors-changeTimeout")),i.data("minicolors-changeTimeout",setTimeout(function(){e.change.call(i.get(0),t,o)},e.changeDelay))):e.change.call(i.get(0),t,o)),i.trigger("change").trigger("input")}}function h(t){var o,s=i(t).attr("data-opacity");if(v(i(t).val()))o=g(i(t).val(),!0);else{var a=u(i(t).val(),!0);o=I(a)}return o?(void 0!==s&&i.extend(o,{a:parseFloat(s)}),o):null}function d(t,o){var s,a=i(t).attr("data-opacity");if(v(i(t).val()))s=g(i(t).val(),!0);else{var n=u(i(t).val(),!0);s=I(n)}return s?(void 0===a&&(a=1),o?"rgba("+s.r+", "+s.g+", "+s.b+", "+parseFloat(a)+")":"rgb("+s.r+", "+s.g+", "+s.b+")"):null}function p(i,t){return"uppercase"===t?i.toUpperCase():i.toLowerCase()}function u(i,t){return i=i.replace(/^#/g,""),i.match(/^[A-F0-9]{3,6}/gi)?3!==i.length&&6!==i.length?"":(3===i.length&&t&&(i=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]),"#"+i):""}function g(i,t){var o=i.replace(/[^\d,.]/g,""),s=o.split(",");return s[0]=f(parseInt(s[0],10),0,255),s[1]=f(parseInt(s[1],10),0,255),s[2]=f(parseInt(s[2],10),0,255),void 0!==s[3]&&(s[3]=f(parseFloat(s[3],10),0,1)),t?void 0!==s[3]?{r:s[0],g:s[1],b:s[2],a:s[3]}:{r:s[0],g:s[1],b:s[2]}:"undefined"!=typeof s[3]&&s[3]<=1?"rgba("+s[0]+", "+s[1]+", "+s[2]+", "+s[3]+")":"rgb("+s[0]+", "+s[1]+", "+s[2]+")"}function m(i,t){return v(i)?g(i):u(i,t)}function f(i,t,o){return i<t&&(i=t),i>o&&(i=o),i}function v(i){var t=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);return!(!t||4!==t.length)}function b(i){return i=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+(\.\d{1,2})?|\.\d{1,2})[\s+]?/i),i&&6===i.length?i[4]:"1"}function w(i){var t={},o=Math.round(i.h),s=Math.round(255*i.s/100),a=Math.round(255*i.b/100);if(0===s)t.r=t.g=t.b=a;else{var n=a,e=(255-s)*a/255,r=(n-e)*(o%60)/60;360===o&&(o=0),o<60?(t.r=n,t.b=e,t.g=e+r):o<120?(t.g=n,t.b=e,t.r=n-r):o<180?(t.g=n,t.r=e,t.b=e+r):o<240?(t.b=n,t.r=e,t.g=n-r):o<300?(t.b=n,t.g=e,t.r=e+r):o<360?(t.r=n,t.g=e,t.b=n-r):(t.r=0,t.g=0,t.b=0)}return{r:Math.round(t.r),g:Math.round(t.g),b:Math.round(t.b)}}function y(i){return i=i.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i),i&&4===i.length?"#"+("0"+parseInt(i[1],10).toString(16)).slice(-2)+("0"+parseInt(i[2],10).toString(16)).slice(-2)+("0"+parseInt(i[3],10).toString(16)).slice(-2):""}function C(t){var o=[t.r.toString(16),t.g.toString(16),t.b.toString(16)];return i.each(o,function(i,t){1===t.length&&(o[i]="0"+t)}),"#"+o.join("")}function k(i){return C(w(i))}function M(i){var t=x(I(i));return 0===t.s&&(t.h=360),t}function x(i){var t={h:0,s:0,b:0},o=Math.min(i.r,i.g,i.b),s=Math.max(i.r,i.g,i.b),a=s-o;return t.b=s,t.s=0!==s?255*a/s:0,0!==t.s?i.r===s?t.h=(i.g-i.b)/a:i.g===s?t.h=2+(i.b-i.r)/a:t.h=4+(i.r-i.g)/a:t.h=-1,t.h*=60,t.h<0&&(t.h+=360),t.s*=100/255,t.b*=100/255,t}function I(i){return i=parseInt(i.indexOf("#")>-1?i.substring(1):i,16),{r:i>>16,g:(65280&i)>>8,b:255&i}}i.minicolors={defaults:{animationSpeed:50,animationEasing:"swing",change:null,changeDelay:0,control:"hue",defaultValue:"",format:"hex",hide:null,hideSpeed:100,inline:!1,keywords:"",letterCase:"lowercase",opacity:!1,position:"bottom",show:null,showSpeed:100,theme:"default",swatches:[]}},i.extend(i.fn,{minicolors:function(n,e){switch(n){case"destroy":return i(this).each(function(){o(i(this))}),i(this);case"hide":return a(),i(this);case"opacity":return void 0===e?i(this).attr("data-opacity"):(i(this).each(function(){c(i(this).attr("data-opacity",e))}),i(this));case"rgbObject":return h(i(this),"rgbaObject"===n);case"rgbString":case"rgbaString":return d(i(this),"rgbaString"===n);case"settings":return void 0===e?i(this).data("minicolors-settings"):(i(this).each(function(){var t=i(this).data("minicolors-settings")||{};o(i(this)),i(this).minicolors(i.extend(!0,t,e))}),i(this));case"show":return s(i(this).eq(0)),i(this);case"value":return void 0===e?i(this).val():(i(this).each(function(){"object"==typeof e&&null!==e?(void 0!==e.opacity&&i(this).attr("data-opacity",f(e.opacity,0,1)),e.color&&i(this).val(e.color)):i(this).val(e),c(i(this))}),i(this));default:return"create"!==n&&(e=n),i(this).each(function(){t(i(this),e)}),i(this)}}}),i([document]).on("mousedown.minicolors touchstart.minicolors",function(t){i(t.target).parents().add(t.target).hasClass("minicolors")||a()}).on("mousedown.minicolors touchstart.minicolors",".minicolors-grid, .minicolors-slider, .minicolors-opacity-slider",function(t){var o=i(this);t.preventDefault(),i(t.delegateTarget).data("minicolors-target",o),n(o,t,!0)}).on("mousemove.minicolors touchmove.minicolors",function(t){var o=i(t.delegateTarget).data("minicolors-target");o&&n(o,t)}).on("mouseup.minicolors touchend.minicolors",function(){i(this).removeData("minicolors-target")}).on("click.minicolors",".minicolors-swatches li",function(t){t.preventDefault();var o=i(this),s=o.parents(".minicolors").find(".minicolors-input"),a=o.data("swatch-color");r(s,a,b(a)),c(s)}).on("mousedown.minicolors touchstart.minicolors",".minicolors-input-swatch",function(t){var o=i(this).parent().find(".minicolors-input");t.preventDefault(),s(o)}).on("focus.minicolors",".minicolors-input",function(){var t=i(this);t.data("minicolors-initialized")&&s(t)}).on("blur.minicolors",".minicolors-input",function(){var t,o,s,a,n,e=i(this),r=e.data("minicolors-settings");e.data("minicolors-initialized")&&(t=r.keywords?i.map(r.keywords.split(","),function(t){return i.trim(t.toLowerCase())}):[],""!==e.val()&&i.inArray(e.val().toLowerCase(),t)>-1?n=e.val():(v(e.val())?s=g(e.val(),!0):(o=u(e.val(),!0),s=o?I(o):null),n=null===s?r.defaultValue:"rgb"===r.format?g(r.opacity?"rgba("+s.r+","+s.g+","+s.b+","+e.attr("data-opacity")+")":"rgb("+s.r+","+s.g+","+s.b+")"):C(s)),a=r.opacity?e.attr("data-opacity"):1,"transparent"===n.toLowerCase()&&(a=0),e.closest(".minicolors").find(".minicolors-input-swatch > span").css("opacity",a),e.val(n),""===e.val()&&e.val(m(r.defaultValue,!0)),e.val(p(e.val(),r.letterCase)))}).on("keydown.minicolors",".minicolors-input",function(t){var o=i(this);if(o.data("minicolors-initialized"))switch(t.which){case 9:a();break;case 13:case 27:a(),o.blur()}}).on("keyup.minicolors",".minicolors-input",function(){var t=i(this);t.data("minicolors-initialized")&&c(t,!0)}).on("paste.minicolors",".minicolors-input",function(){var t=i(this);t.data("minicolors-initialized")&&setTimeout(function(){c(t,!0)},1)})});PKsc�\�s��$jqueryui/js/i18n/datepicker-nl-BE.jsnu�[���/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */
/* David De Sloovere @DavidDeSloovere */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "nl-BE" ] = {
	closeText: "Sluiten",
	prevText: "Vorig",
	nextText: "Volgende",
	currentText: "Vandaag",
	monthNames: [ "januari", "februari", "maart", "april", "mei", "juni",
	"juli", "augustus", "september", "oktober", "november", "december" ],
	monthNamesShort: [ "jan", "feb", "mrt", "apr", "mei", "jun",
	"jul", "aug", "sep", "okt", "nov", "dec" ],
	dayNames: [ "zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag" ],
	dayNamesShort: [ "zon", "maa", "din", "woe", "don", "vri", "zat" ],
	dayNamesMin: [ "zo", "ma", "di", "wo", "do", "vr", "za" ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "nl-BE" ] );

return datepicker.regional[ "nl-BE" ];

} );
PKsc�\���E!jqueryui/js/i18n/datepicker-is.jsnu�[���/* Icelandic initialisation for the jQuery UI date picker plugin. */
/* Written by Haukur H. Thorsson (haukur@eskill.is). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.is = {
	closeText: "Loka",
	prevText: "Fyrri",
	nextText: "Næsti ",
	currentText: "Í dag",
	monthNames: [ "Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní",
	"Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Maí", "Jún",
	"Júl", "Ágú", "Sep", "Okt", "Nóv", "Des" ],
	dayNames: [
		"Sunnudagur",
		"Mánudagur",
		"Þriðjudagur",
		"Miðvikudagur",
		"Fimmtudagur",
		"Föstudagur",
		"Laugardagur"
	],
	dayNamesShort: [ "Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau" ],
	dayNamesMin: [ "Su", "Má", "Þr", "Mi", "Fi", "Fö", "La" ],
	weekHeader: "Vika",
	dateFormat: "dd.mm.yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.is );

return datepicker.regional.is;

} );
PKsc�\���7$jqueryui/js/i18n/datepicker-pt-BR.jsnu�[���/* Brazilian initialisation for the jQuery UI date picker plugin. */
/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "pt-BR" ] = {
	closeText: "Fechar",
	prevText: "Anterior",
	nextText: "Próximo",
	currentText: "Hoje",
	monthNames: [ "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho",
	"Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" ],
	monthNamesShort: [ "Jan", "Fev", "Mar", "Abr", "Mai", "Jun",
	"Jul", "Ago", "Set", "Out", "Nov", "Dez" ],
	dayNames: [
		"Domingo",
		"Segunda-feira",
		"Terça-feira",
		"Quarta-feira",
		"Quinta-feira",
		"Sexta-feira",
		"Sábado"
	],
	dayNamesShort: [ "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb" ],
	dayNamesMin: [ "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb" ],
	weekHeader: "Sm",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "pt-BR" ] );

return datepicker.regional[ "pt-BR" ];

} );
PKsc�\����!jqueryui/js/i18n/datepicker-sq.jsnu�[���/* Albanian initialisation for the jQuery UI date picker plugin. */
/* Written by Flakron Bytyqi (flakron@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.sq = {
	closeText: "mbylle",
	prevText: "mbrapa",
	nextText: "Përpara",
	currentText: "sot",
	monthNames: [ "Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor",
	"Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor" ],
	monthNamesShort: [ "Jan", "Shk", "Mar", "Pri", "Maj", "Qer",
	"Kor", "Gus", "Sht", "Tet", "Nën", "Dhj" ],
	dayNames: [ "E Diel", "E Hënë", "E Martë", "E Mërkurë", "E Enjte", "E Premte", "E Shtune" ],
	dayNamesShort: [ "Di", "Hë", "Ma", "Më", "En", "Pr", "Sh" ],
	dayNamesMin: [ "Di", "Hë", "Ma", "Më", "En", "Pr", "Sh" ],
	weekHeader: "Ja",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.sq );

return datepicker.regional.sq;

} );
PKsc�\��l!jqueryui/js/i18n/datepicker-lt.jsnu�[���/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* @author Arturas Paleicikas <arturas@avalon.lt> */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.lt = {
	closeText: "Uždaryti",
	prevText: "Atgal",
	nextText: "Pirmyn",
	currentText: "Šiandien",
	monthNames: [ "Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis",
	"Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis" ],
	monthNamesShort: [ "Sau", "Vas", "Kov", "Bal", "Geg", "Bir",
	"Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru" ],
	dayNames: [
		"sekmadienis",
		"pirmadienis",
		"antradienis",
		"trečiadienis",
		"ketvirtadienis",
		"penktadienis",
		"šeštadienis"
	],
	dayNamesShort: [ "sek", "pir", "ant", "tre", "ket", "pen", "šeš" ],
	dayNamesMin: [ "Se", "Pr", "An", "Tr", "Ke", "Pe", "Še" ],
	weekHeader: "SAV",
	dateFormat: "yy-mm-dd",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.lt );

return datepicker.regional.lt;

} );
PKsc�\,�BU��!jqueryui/js/i18n/datepicker-fa.jsnu�[���/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
/* Javad Mowlanezhad -- jmowla@gmail.com */
/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.fa = {
	closeText: "بستن",
	prevText: "قبلی",
	nextText: "بعدی",
	currentText: "امروز",
	monthNames: [
		"ژانویه",
		"فوریه",
		"مارس",
		"آوریل",
		"مه",
		"ژوئن",
		"ژوئیه",
		"اوت",
		"سپتامبر",
		"اکتبر",
		"نوامبر",
		"دسامبر"
	],
	monthNamesShort: [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" ],
	dayNames: [
		"يکشنبه",
		"دوشنبه",
		"سه‌شنبه",
		"چهارشنبه",
		"پنجشنبه",
		"جمعه",
		"شنبه"
	],
	dayNamesShort: [
		"ی",
		"د",
		"س",
		"چ",
		"پ",
		"ج",
		"ش"
	],
	dayNamesMin: [
		"ی",
		"د",
		"س",
		"چ",
		"پ",
		"ج",
		"ش"
	],
	weekHeader: "هف",
	dateFormat: "yy/mm/dd",
	firstDay: 6,
	isRTL: true,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.fa );

return datepicker.regional.fa;

} );
PKsc�\x����!jqueryui/js/i18n/datepicker-af.jsnu�[���/* Afrikaans initialisation for the jQuery UI date picker plugin. */
/* Written by Renier Pretorius. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.af = {
	closeText: "Selekteer",
	prevText: "Vorige",
	nextText: "Volgende",
	currentText: "Vandag",
	monthNames: [ "Januarie", "Februarie", "Maart", "April", "Mei", "Junie",
	"Julie", "Augustus", "September", "Oktober", "November", "Desember" ],
	monthNamesShort: [ "Jan", "Feb", "Mrt", "Apr", "Mei", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Des" ],
	dayNames: [ "Sondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag" ],
	dayNamesShort: [ "Son", "Maa", "Din", "Woe", "Don", "Vry", "Sat" ],
	dayNamesMin: [ "So", "Ma", "Di", "Wo", "Do", "Vr", "Sa" ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.af );

return datepicker.regional.af;

} );
PKsc�\D_�\��!jqueryui/js/i18n/datepicker-ml.jsnu�[���/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Saji Nediyanchath (saji89@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ml = {
	closeText: "ശരി",
	prevText: "മുന്നത്തെ",
	nextText: "അടുത്തത് ",
	currentText: "ഇന്ന്",
	monthNames: [ "ജനുവരി", "ഫെബ്രുവരി", "മാര്‍ച്ച്", "ഏപ്രില്‍", "മേയ്", "ജൂണ്‍",
	"ജൂലൈ", "ആഗസ്റ്റ്", "സെപ്റ്റംബര്‍", "ഒക്ടോബര്‍", "നവംബര്‍", "ഡിസംബര്‍" ],
	monthNamesShort: [ "ജനു", "ഫെബ്", "മാര്‍", "ഏപ്രി", "മേയ്", "ജൂണ്‍",
	"ജൂലാ", "ആഗ", "സെപ്", "ഒക്ടോ", "നവം", "ഡിസ" ],
	dayNames: [ "ഞായര്‍", "തിങ്കള്‍", "ചൊവ്വ", "ബുധന്‍", "വ്യാഴം", "വെള്ളി", "ശനി" ],
	dayNamesShort: [ "ഞായ", "തിങ്ക", "ചൊവ്വ", "ബുധ", "വ്യാഴം", "വെള്ളി", "ശനി" ],
	dayNamesMin: [ "ഞാ", "തി", "ചൊ", "ബു", "വ്യാ", "വെ", "ശ" ],
	weekHeader: "ആ",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ml );

return datepicker.regional.ml;

} );
PKsc�\���7!jqueryui/js/i18n/datepicker-uk.jsnu�[���/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.uk = {
	closeText: "Закрити",
	prevText: "Попередній",
	nextText: "найближчий",
	currentText: "Сьогодні",
	monthNames: [ "Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень",
	"Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень" ],
	monthNamesShort: [ "Січ", "Лют", "Бер", "Кві", "Тра", "Чер",
	"Лип", "Сер", "Вер", "Жов", "Лис", "Гру" ],
	dayNames: [ "неділя", "понеділок", "вівторок", "середа", "четвер", "п’ятниця", "субота" ],
	dayNamesShort: [ "нед", "пнд", "вів", "срд", "чтв", "птн", "сбт" ],
	dayNamesMin: [ "Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
	weekHeader: "Тиж",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.uk );

return datepicker.regional.uk;

} );
PKsc�\7	'���!jqueryui/js/i18n/datepicker-nl.jsnu�[���/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Mathias Bynens <http://mathiasbynens.be/> */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.nl = {
	closeText: "Sluiten",
	prevText: "Vorig",
	nextText: "Volgende",
	currentText: "Vandaag",
	monthNames: [ "januari", "februari", "maart", "april", "mei", "juni",
	"juli", "augustus", "september", "oktober", "november", "december" ],
	monthNamesShort: [ "jan", "feb", "mrt", "apr", "mei", "jun",
	"jul", "aug", "sep", "okt", "nov", "dec" ],
	dayNames: [ "zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag" ],
	dayNamesShort: [ "zon", "maa", "din", "woe", "don", "vri", "zat" ],
	dayNamesMin: [ "zo", "ma", "di", "wo", "do", "vr", "za" ],
	weekHeader: "Wk",
	dateFormat: "dd-mm-yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.nl );

return datepicker.regional.nl;

} );
PKsc�\�Y���!jqueryui/js/i18n/datepicker-ca.jsnu�[���/* Inicialització en català per a l'extensió 'UI date picker' per jQuery. */
/* Writers: (joan.leon@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ca = {
	closeText: "Tanca",
	prevText: "Anterior",
	nextText: "Següent",
	currentText: "Avui",
	monthNames: [ "gener", "febrer", "març", "abril", "maig", "juny",
	"juliol", "agost", "setembre", "octubre", "novembre", "desembre" ],
	monthNamesShort: [ "gen", "feb", "març", "abr", "maig", "juny",
	"jul", "ag", "set", "oct", "nov", "des" ],
	dayNames: [ "diumenge", "dilluns", "dimarts", "dimecres", "dijous", "divendres", "dissabte" ],
	dayNamesShort: [ "dg", "dl", "dt", "dc", "dj", "dv", "ds" ],
	dayNamesMin: [ "dg", "dl", "dt", "dc", "dj", "dv", "ds" ],
	weekHeader: "Set",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ca );

return datepicker.regional.ca;

} );
PKsc�\��_���!jqueryui/js/i18n/datepicker-es.jsnu�[���/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
/* Traducido por Vester (xvester@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.es = {
	closeText: "Cerrar",
	prevText: "Ant",
	nextText: "Sig",
	currentText: "Hoy",
	monthNames: [ "enero", "febrero", "marzo", "abril", "mayo", "junio",
	"julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre" ],
	monthNamesShort: [ "ene", "feb", "mar", "abr", "may", "jun",
	"jul", "ago", "sep", "oct", "nov", "dic" ],
	dayNames: [ "domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado" ],
	dayNamesShort: [ "dom", "lun", "mar", "mié", "jue", "vie", "sáb" ],
	dayNamesMin: [ "D", "L", "M", "X", "J", "V", "S" ],
	weekHeader: "Sm",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.es );

return datepicker.regional.es;

} );
PKsc�\\�V�aa!jqueryui/js/i18n/datepicker-vi.jsnu�[���/* Vietnamese initialisation for the jQuery UI date picker plugin. */
/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.vi = {
	closeText: "Đóng",
	prevText: "Trước",
	nextText: "Tiếp",
	currentText: "Hôm nay",
	monthNames: [ "Tháng Một", "Tháng Hai", "Tháng Ba", "Tháng Tư", "Tháng Năm", "Tháng Sáu",
	"Tháng Bảy", "Tháng Tám", "Tháng Chín", "Tháng Mười", "Tháng Mười Một", "Tháng Mười Hai" ],
	monthNamesShort: [ "Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6",
	"Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12" ],
	dayNames: [ "Chủ Nhật", "Thứ Hai", "Thứ Ba", "Thứ Tư", "Thứ Năm", "Thứ Sáu", "Thứ Bảy" ],
	dayNamesShort: [ "CN", "T2", "T3", "T4", "T5", "T6", "T7" ],
	dayNamesMin: [ "CN", "T2", "T3", "T4", "T5", "T6", "T7" ],
	weekHeader: "Tu",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.vi );

return datepicker.regional.vi;

} );
PKsc�\^|O��!jqueryui/js/i18n/datepicker-mk.jsnu�[���/* Macedonian i18n for the jQuery UI date picker plugin. */
/* Written by Stojce Slavkovski. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.mk = {
	closeText: "Затвори",
	prevText: "Претходна",
	nextText: "Следно",
	currentText: "Денес",
	monthNames: [ "Јануари", "Февруари", "Март", "Април", "Мај", "Јуни",
	"Јули", "Август", "Септември", "Октомври", "Ноември", "Декември" ],
	monthNamesShort: [ "Јан", "Фев", "Мар", "Апр", "Мај", "Јун",
	"Јул", "Авг", "Сеп", "Окт", "Ное", "Дек" ],
	dayNames: [ "Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота" ],
	dayNamesShort: [ "Нед", "Пон", "Вто", "Сре", "Чет", "Пет", "Саб" ],
	dayNamesMin: [ "Не", "По", "Вт", "Ср", "Че", "Пе", "Са" ],
	weekHeader: "Сед",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.mk );

return datepicker.regional.mk;

} );
PKsc�\��J��!jqueryui/js/i18n/datepicker-hy.jsnu�[���/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.hy = {
	closeText: "Փակել",
	prevText: "Նախ.",
	nextText: "Հաջ.",
	currentText: "Այսօր",
	monthNames: [ "Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս",
	"Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր" ],
	monthNamesShort: [ "Հունվ", "Փետր", "Մարտ", "Ապր", "Մայիս", "Հունիս",
	"Հուլ", "Օգս", "Սեպ", "Հոկ", "Նոյ", "Դեկ" ],
	dayNames: [ "կիրակի", "եկուշաբթի", "երեքշաբթի", "չորեքշաբթի", "հինգշաբթի", "ուրբաթ", "շաբաթ" ],
	dayNamesShort: [ "կիր", "երկ", "երք", "չրք", "հնգ", "ուրբ", "շբթ" ],
	dayNamesMin: [ "կիր", "երկ", "երք", "չրք", "հնգ", "ուրբ", "շբթ" ],
	weekHeader: "ՇԲՏ",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.hy );

return datepicker.regional.hy;

} );
PKsc�\�L�**$jqueryui/js/i18n/datepicker-zh-CN.jsnu�[���/* Chinese initialisation for the jQuery UI date picker plugin. */
/* Written by Cloudream (cloudream@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "zh-CN" ] = {
	closeText: "关闭",
	prevText: "上月",
	nextText: "下月",
	currentText: "今天",
	monthNames: [ "一月", "二月", "三月", "四月", "五月", "六月",
	"七月", "八月", "九月", "十月", "十一月", "十二月" ],
	monthNamesShort: [ "一月", "二月", "三月", "四月", "五月", "六月",
	"七月", "八月", "九月", "十月", "十一月", "十二月" ],
	dayNames: [ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" ],
	dayNamesShort: [ "周日", "周一", "周二", "周三", "周四", "周五", "周六" ],
	dayNamesMin: [ "日", "一", "二", "三", "四", "五", "六" ],
	weekHeader: "周",
	dateFormat: "yy-mm-dd",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "年" };
datepicker.setDefaults( datepicker.regional[ "zh-CN" ] );

return datepicker.regional[ "zh-CN" ];

} );
PKsc�\yn~�nn!jqueryui/js/i18n/datepicker-sr.jsnu�[���/* Serbian i18n for the jQuery UI date picker plugin. */
/* Written by Dejan Dimić. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.sr = {
	closeText: "Затвори",
	prevText: "Претходна",
	nextText: "Следећи",
	currentText: "Данас",
	monthNames: [ "Јануар", "Фебруар", "Март", "Април", "Мај", "Јун",
	"Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар" ],
	monthNamesShort: [ "Јан", "Феб", "Мар", "Апр", "Мај", "Јун",
	"Јул", "Авг", "Сеп", "Окт", "Нов", "Дец" ],
	dayNames: [ "Недеља", "Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота" ],
	dayNamesShort: [ "Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб" ],
	dayNamesMin: [ "Не", "По", "Ут", "Ср", "Че", "Пе", "Су" ],
	weekHeader: "Сед",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.sr );

return datepicker.regional.sr;

} );
PKsc�\�{�ż�!jqueryui/js/i18n/datepicker-ms.jsnu�[���/* Malaysian initialisation for the jQuery UI date picker plugin. */
/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ms = {
	closeText: "Tutup",
	prevText: "Sebelum",
	nextText: "Selepas",
	currentText: "hari ini",
	monthNames: [ "Januari", "Februari", "Mac", "April", "Mei", "Jun",
	"Julai", "Ogos", "September", "Oktober", "November", "Disember" ],
	monthNamesShort: [ "Jan", "Feb", "Mac", "Apr", "Mei", "Jun",
	"Jul", "Ogo", "Sep", "Okt", "Nov", "Dis" ],
	dayNames: [ "Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu" ],
	dayNamesShort: [ "Aha", "Isn", "Sel", "Rab", "kha", "Jum", "Sab" ],
	dayNamesMin: [ "Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa" ],
	weekHeader: "Mg",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ms );

return datepicker.regional.ms;

} );
PKsc�\vo�
��$jqueryui/js/i18n/datepicker-cy-GB.jsnu�[���/* Welsh/UK initialisation for the jQuery UI date picker plugin. */
/* Written by William Griffiths. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "cy-GB" ] = {
	closeText: "Done",
	prevText: "Prev",
	nextText: "Next",
	currentText: "Today",
	monthNames: [ "Ionawr", "Chwefror", "Mawrth", "Ebrill", "Mai", "Mehefin",
	"Gorffennaf", "Awst", "Medi", "Hydref", "Tachwedd", "Rhagfyr" ],
	monthNamesShort: [ "Ion", "Chw", "Maw", "Ebr", "Mai", "Meh",
	"Gor", "Aws", "Med", "Hyd", "Tac", "Rha" ],
	dayNames: [
		"Dydd Sul",
		"Dydd Llun",
		"Dydd Mawrth",
		"Dydd Mercher",
		"Dydd Iau",
		"Dydd Gwener",
		"Dydd Sadwrn"
	],
	dayNamesShort: [ "Sul", "Llu", "Maw", "Mer", "Iau", "Gwe", "Sad" ],
	dayNamesMin: [ "Su", "Ll", "Ma", "Me", "Ia", "Gw", "Sa" ],
	weekHeader: "Wy",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "cy-GB" ] );

return datepicker.regional[ "cy-GB" ];

} );
PKsc�\v�ҵ�$jqueryui/js/i18n/datepicker-sr-SR.jsnu�[���/* Serbian i18n for the jQuery UI date picker plugin. */
/* Written by Dejan Dimić. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "sr-SR" ] = {
	closeText: "Zatvori",
	prevText: "Prethodno",
	nextText: "Sljedeći",
	currentText: "Danas",
	monthNames: [ "Januar", "Februar", "Mart", "April", "Maj", "Jun",
	"Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Maj", "Jun",
	"Jul", "Avg", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [ "Nedelja", "Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota" ],
	dayNamesShort: [ "Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub" ],
	dayNamesMin: [ "Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su" ],
	weekHeader: "Sed",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "sr-SR" ] );

return datepicker.regional[ "sr-SR" ];

} );
PKsc�\�a
:��!jqueryui/js/i18n/datepicker-et.jsnu�[���/* Estonian initialisation for the jQuery UI date picker plugin. */
/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.et = {
	closeText: "Sulge",
	prevText: "Eelnev",
	nextText: "Järgnev",
	currentText: "Täna",
	monthNames: [ "Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni",
	"Juuli", "August", "September", "Oktoober", "November", "Detsember" ],
	monthNamesShort: [ "Jaan", "Veebr", "Märts", "Apr", "Mai", "Juuni",
	"Juuli", "Aug", "Sept", "Okt", "Nov", "Dets" ],
	dayNames: [
		"Pühapäev",
		"Esmaspäev",
		"Teisipäev",
		"Kolmapäev",
		"Neljapäev",
		"Reede",
		"Laupäev"
	],
	dayNamesShort: [ "Pühap", "Esmasp", "Teisip", "Kolmap", "Neljap", "Reede", "Laup" ],
	dayNamesMin: [ "P", "E", "T", "K", "N", "R", "L" ],
	weekHeader: "näd",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.et );

return datepicker.regional.et;

} );
PKsc�\a^�=��!jqueryui/js/i18n/datepicker-da.jsnu�[���/* Danish initialisation for the jQuery UI date picker plugin. */
/* Written by Jan Christensen ( deletestuff@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.da = {
	closeText: "Luk",
	prevText: "Forrige",
	nextText: "Næste",
	currentText: "I dag",
	monthNames: [ "Januar", "Februar", "Marts", "April", "Maj", "Juni",
	"Juli", "August", "September", "Oktober", "November", "December" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Maj", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [ "Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag" ],
	dayNamesShort: [ "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør" ],
	dayNamesMin: [ "Sø", "Ma", "Ti", "On", "To", "Fr", "Lø" ],
	weekHeader: "Uge",
	dateFormat: "dd-mm-yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.da );

return datepicker.regional.da;

} );
PKsc�\�Yq���$jqueryui/js/i18n/datepicker-en-NZ.jsnu�[���/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
/* Based on the en-GB initialisation. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "en-NZ" ] = {
	closeText: "Done",
	prevText: "Prev",
	nextText: "Next",
	currentText: "Today",
	monthNames: [ "January", "February", "March", "April", "May", "June",
	"July", "August", "September", "October", "November", "December" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ],
	dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
	dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
	dayNamesMin: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "en-NZ" ] );

return datepicker.regional[ "en-NZ" ];

} );
PKsc�\=����$jqueryui/js/i18n/datepicker-en-AU.jsnu�[���/* English/Australia initialisation for the jQuery UI date picker plugin. */
/* Based on the en-GB initialisation. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "en-AU" ] = {
	closeText: "Done",
	prevText: "Prev",
	nextText: "Next",
	currentText: "Today",
	monthNames: [ "January", "February", "March", "April", "May", "June",
	"July", "August", "September", "October", "November", "December" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ],
	dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
	dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
	dayNamesMin: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "en-AU" ] );

return datepicker.regional[ "en-AU" ];

} );
PKsc�\_}�{��!jqueryui/js/i18n/datepicker-pl.jsnu�[���/* Polish initialisation for the jQuery UI date picker plugin. */
/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.pl = {
	closeText: "Zamknij",
	prevText: "Poprzedni",
	nextText: "Następny",
	currentText: "Dziś",
	monthNames: [ "Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec",
	"Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień" ],
	monthNamesShort: [ "Sty", "Lu", "Mar", "Kw", "Maj", "Cze",
	"Lip", "Sie", "Wrz", "Pa", "Lis", "Gru" ],
	dayNames: [ "Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota" ],
	dayNamesShort: [ "Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So" ],
	dayNamesMin: [ "N", "Pn", "Wt", "Śr", "Cz", "Pt", "So" ],
	weekHeader: "Tydz",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.pl );

return datepicker.regional.pl;

} );
PKsc�\Pو��!jqueryui/js/i18n/datepicker-sv.jsnu�[���/* Swedish initialisation for the jQuery UI date picker plugin. */
/* Written by Anders Ekdahl ( anders@nomadiz.se). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.sv = {
	closeText: "Stäng",
	prevText: "Förra",
	nextText: "Nästa",
	currentText: "Idag",
	monthNames: [ "januari", "februari", "mars", "april", "maj", "juni",
	"juli", "augusti", "september", "oktober", "november", "december" ],
	monthNamesShort: [ "jan.", "feb.", "mars", "apr.", "maj", "juni",
	"juli", "aug.", "sep.", "okt.", "nov.", "dec." ],
	dayNamesShort: [ "sön", "mån", "tis", "ons", "tor", "fre", "lör" ],
	dayNames: [ "söndag", "måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag" ],
	dayNamesMin: [ "sö", "må", "ti", "on", "to", "fr", "lö" ],
	weekHeader: "Ve",
	dateFormat: "yy-mm-dd",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.sv );

return datepicker.regional.sv;

} );
PKsc�\x^�3��!jqueryui/js/i18n/datepicker-bs.jsnu�[���/* Bosnian i18n for the jQuery UI date picker plugin. */
/* Written by Kenan Konjo. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.bs = {
	closeText: "Zatvori",
	prevText: "Prethodno",
	nextText: "Sljedeći",
	currentText: "Danas",
	monthNames: [ "Januar", "Februar", "Mart", "April", "Maj", "Juni",
	"Juli", "August", "Septembar", "Oktobar", "Novembar", "Decembar" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Maj", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [ "Nedelja", "Ponedeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota" ],
	dayNamesShort: [ "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub" ],
	dayNamesMin: [ "Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su" ],
	weekHeader: "Wk",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.bs );

return datepicker.regional.bs;

} );
PKsc�\EEb��!jqueryui/js/i18n/datepicker-sl.jsnu�[���/* Slovenian initialisation for the jQuery UI date picker plugin. */
/* Written by Jaka Jancar (jaka@kubje.org). */
/* c = č, s = š z = ž C = Č S = Š Z = Ž */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.sl = {
	closeText: "Zapri",
	prevText: "Prejšnji",
	nextText: "Naslednji",
	currentText: "Trenutni",
	monthNames: [ "Januar", "Februar", "Marec", "April", "Maj", "Junij",
	"Julij", "Avgust", "September", "Oktober", "November", "December" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Maj", "Jun",
	"Jul", "Avg", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [ "Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota" ],
	dayNamesShort: [ "Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob" ],
	dayNamesMin: [ "Ne", "Po", "To", "Sr", "Če", "Pe", "So" ],
	weekHeader: "Teden",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.sl );

return datepicker.regional.sl;

} );
PKsc�\��Y��!jqueryui/js/i18n/datepicker-hu.jsnu�[���/* Hungarian initialisation for the jQuery UI date picker plugin. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.hu = {
	closeText: "Bezár",
	prevText: "Vissza",
	nextText: "Előre",
	currentText: "Ma",
	monthNames: [ "Január", "Február", "Március", "Április", "Május", "Június",
	"Július", "Augusztus", "Szeptember", "Október", "November", "December" ],
	monthNamesShort: [ "Jan", "Feb", "Már", "Ápr", "Máj", "Jún",
	"Júl", "Aug", "Szep", "Okt", "Nov", "Dec" ],
	dayNames: [ "Vasárnap", "Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat" ],
	dayNamesShort: [ "Vas", "Hét", "Ked", "Sze", "Csü", "Pén", "Szo" ],
	dayNamesMin: [ "V", "H", "K", "Sze", "Cs", "P", "Szo" ],
	weekHeader: "Hét",
	dateFormat: "yy.mm.dd.",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.hu );

return datepicker.regional.hu;

} );
PKsc�\�i���!jqueryui/js/i18n/datepicker-fo.jsnu�[���/* Faroese initialisation for the jQuery UI date picker plugin */
/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.fo = {
	closeText: "Lat aftur",
	prevText: "Fyrra",
	nextText: "Næsta",
	currentText: "Í dag",
	monthNames: [ "Januar", "Februar", "Mars", "Apríl", "Mei", "Juni",
	"Juli", "August", "September", "Oktober", "November", "Desember" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Mei", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Des" ],
	dayNames: [
		"Sunnudagur",
		"Mánadagur",
		"Týsdagur",
		"Mikudagur",
		"Hósdagur",
		"Fríggjadagur",
		"Leyardagur"
	],
	dayNamesShort: [ "Sun", "Mán", "Týs", "Mik", "Hós", "Frí", "Ley" ],
	dayNamesMin: [ "Su", "Má", "Tý", "Mi", "Hó", "Fr", "Le" ],
	weekHeader: "Vk",
	dateFormat: "dd-mm-yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.fo );

return datepicker.regional.fo;

} );
PKsc�\�30I��!jqueryui/js/i18n/datepicker-eo.jsnu�[���/* Esperanto initialisation for the jQuery UI date picker plugin. */
/* Written by Olivier M. (olivierweb@ifrance.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.eo = {
	closeText: "Fermi",
	prevText: "Anta",
	nextText: "Sekv",
	currentText: "Nuna",
	monthNames: [ "Januaro", "Februaro", "Marto", "Aprilo", "Majo", "Junio",
	"Julio", "Aŭgusto", "Septembro", "Oktobro", "Novembro", "Decembro" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Maj", "Jun",
	"Jul", "Aŭg", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [ "Dimanĉo", "Lundo", "Mardo", "Merkredo", "Ĵaŭdo", "Vendredo", "Sabato" ],
	dayNamesShort: [ "Dim", "Lun", "Mar", "Mer", "Ĵaŭ", "Ven", "Sab" ],
	dayNamesMin: [ "Di", "Lu", "Ma", "Me", "Ĵa", "Ve", "Sa" ],
	weekHeader: "Sb",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.eo );

return datepicker.regional.eo;

} );
PKsc�\�M�5��!jqueryui/js/i18n/datepicker-bg.jsnu�[���/* Bulgarian initialisation for the jQuery UI date picker plugin. */
/* Written by Stoyan Kyosev (http://svest.org). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.bg = {
	closeText: "затвори",
	prevText: "назад",
	nextText: "напред",
	nextBigText: "&#x3E;&#x3E;",
	currentText: "днес",
	monthNames: [ "Януари", "Февруари", "Март", "Април", "Май", "Юни",
	"Юли", "Август", "Септември", "Октомври", "Ноември", "Декември" ],
	monthNamesShort: [ "Яну", "Фев", "Мар", "Апр", "Май", "Юни",
	"Юли", "Авг", "Сеп", "Окт", "Нов", "Дек" ],
	dayNames: [ "Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота" ],
	dayNamesShort: [ "Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб" ],
	dayNamesMin: [ "Не", "По", "Вт", "Ср", "Че", "Пе", "Съ" ],
	weekHeader: "Wk",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.bg );

return datepicker.regional.bg;

} );
PKsc�\�?=��!jqueryui/js/i18n/datepicker-ru.jsnu�[���/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Andrew Stromnov (stromnov@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ru = {
	closeText: "Закрыть",
	prevText: "Пред",
	nextText: "След",
	currentText: "Сегодня",
	monthNames: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
	"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
	monthNamesShort: [ "Янв", "Фев", "Мар", "Апр", "Май", "Июн",
	"Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" ],
	dayNames: [ "воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота" ],
	dayNamesShort: [ "вск", "пнд", "втр", "срд", "чтв", "птн", "сбт" ],
	dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
	weekHeader: "Нед",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ru );

return datepicker.regional.ru;

} );
PKsc�\����$jqueryui/js/i18n/datepicker-fr-CH.jsnu�[���/* Swiss-French initialisation for the jQuery UI date picker plugin. */
/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "fr-CH" ] = {
	closeText: "Fermer",
	prevText: "Préc",
	nextText: "Suiv",
	currentText: "Courant",
	monthNames: [ "janvier", "février", "mars", "avril", "mai", "juin",
		"juillet", "août", "septembre", "octobre", "novembre", "décembre" ],
	monthNamesShort: [ "janv.", "févr.", "mars", "avril", "mai", "juin",
		"juil.", "août", "sept.", "oct.", "nov.", "déc." ],
	dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ],
	dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ],
	dayNamesMin: [ "D", "L", "M", "M", "J", "V", "S" ],
	weekHeader: "Sm",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "fr-CH" ] );

return datepicker.regional[ "fr-CH" ];

} );
PKsc�\?ZT�**$jqueryui/js/i18n/datepicker-zh-TW.jsnu�[���/* Chinese initialisation for the jQuery UI date picker plugin. */
/* Written by Ressol (ressol@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "zh-TW" ] = {
	closeText: "關閉",
	prevText: "上個月",
	nextText: "下個月",
	currentText: "今天",
	monthNames: [ "一月", "二月", "三月", "四月", "五月", "六月",
	"七月", "八月", "九月", "十月", "十一月", "十二月" ],
	monthNamesShort: [ "一月", "二月", "三月", "四月", "五月", "六月",
	"七月", "八月", "九月", "十月", "十一月", "十二月" ],
	dayNames: [ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" ],
	dayNamesShort: [ "週日", "週一", "週二", "週三", "週四", "週五", "週六" ],
	dayNamesMin: [ "日", "一", "二", "三", "四", "五", "六" ],
	weekHeader: "週",
	dateFormat: "yy/mm/dd",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "年" };
datepicker.setDefaults( datepicker.regional[ "zh-TW" ] );

return datepicker.regional[ "zh-TW" ];

} );
PKsc�\��Z���!jqueryui/js/i18n/datepicker-el.jsnu�[���/* Greek (el) initialisation for the jQuery UI date picker plugin. */
/* Written by Alex Cicovic (http://www.alexcicovic.com) */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.el = {
	closeText: "Κλείσιμο",
	prevText: "Προηγούμενος",
	nextText: "Επόμενος",
	currentText: "Σήμερα",
	monthNames: [ "Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος",
	"Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος" ],
	monthNamesShort: [ "Ιαν", "Φεβ", "Μαρ", "Απρ", "Μαι", "Ιουν",
	"Ιουλ", "Αυγ", "Σεπ", "Οκτ", "Νοε", "Δεκ" ],
	dayNames: [ "Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο" ],
	dayNamesShort: [ "Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ" ],
	dayNamesMin: [ "Κυ", "Δε", "Τρ", "Τε", "Πε", "Πα", "Σα" ],
	weekHeader: "Εβδ",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.el );

return datepicker.regional.el;

} );
PKsc�\ƲZ��!jqueryui/js/i18n/datepicker-be.jsnu�[���/* Belarusian initialisation for the jQuery UI date picker plugin. */
/* Written by Pavel Selitskas <p.selitskas@gmail.com> */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.be = {
	closeText: "Зачыніць",
	prevText: "Папяр.",
	nextText: "Наст.",
	currentText: "Сёньня",
	monthNames: [ "Студзень", "Люты", "Сакавік", "Красавік", "Травень", "Чэрвень",
	"Ліпень", "Жнівень", "Верасень", "Кастрычнік", "Лістапад", "Сьнежань" ],
	monthNamesShort: [ "Сту", "Лют", "Сак", "Кра", "Тра", "Чэр",
	"Ліп", "Жні", "Вер", "Кас", "Ліс", "Сьн" ],
	dayNames: [ "нядзеля", "панядзелак", "аўторак", "серада", "чацьвер", "пятніца", "субота" ],
	dayNamesShort: [ "ндз", "пнд", "аўт", "срд", "чцв", "птн", "сбт" ],
	dayNamesMin: [ "Нд", "Пн", "Аў", "Ср", "Чц", "Пт", "Сб" ],
	weekHeader: "Тд",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.be );

return datepicker.regional.be;

} );
PKsc�\?��!jqueryui/js/i18n/datepicker-hr.jsnu�[���/* Croatian i18n for the jQuery UI date picker plugin. */
/* Written by Vjekoslav Nesek. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.hr = {
	closeText: "Zatvori",
	prevText: "Prethodno",
	nextText: "Sljedeći",
	currentText: "Danas",
	monthNames: [ "Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj",
	"Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac" ],
	monthNamesShort: [ "Sij", "Velj", "Ožu", "Tra", "Svi", "Lip",
	"Srp", "Kol", "Ruj", "Lis", "Stu", "Pro" ],
	dayNames: [ "Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota" ],
	dayNamesShort: [ "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub" ],
	dayNamesMin: [ "Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su" ],
	weekHeader: "Tje",
	dateFormat: "dd.mm.yy.",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.hr );

return datepicker.regional.hr;

} );
PKsc�\冢��$jqueryui/js/i18n/datepicker-en-GB.jsnu�[���/* English/UK initialisation for the jQuery UI date picker plugin. */
/* Written by Stuart. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "en-GB" ] = {
	closeText: "Done",
	prevText: "Prev",
	nextText: "Next",
	currentText: "Today",
	monthNames: [ "January", "February", "March", "April", "May", "June",
	"July", "August", "September", "October", "November", "December" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ],
	dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
	dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
	dayNamesMin: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "en-GB" ] );

return datepicker.regional[ "en-GB" ];

} );
PKsc�\�Z�,

!jqueryui/js/i18n/datepicker-lv.jsnu�[���/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.lv = {
	closeText: "Aizvērt",
	prevText: "Iepr.",
	nextText: "Nāk.",
	currentText: "Šodien",
	monthNames: [ "Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs",
	"Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Mai", "Jūn",
	"Jūl", "Aug", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [
		"svētdiena",
		"pirmdiena",
		"otrdiena",
		"trešdiena",
		"ceturtdiena",
		"piektdiena",
		"sestdiena"
	],
	dayNamesShort: [ "svt", "prm", "otr", "tre", "ctr", "pkt", "sst" ],
	dayNamesMin: [ "Sv", "Pr", "Ot", "Tr", "Ct", "Pk", "Ss" ],
	weekHeader: "Ned.",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.lv );

return datepicker.regional.lv;

} );
PKsc�\������!jqueryui/js/i18n/datepicker-id.jsnu�[���/* Indonesian initialisation for the jQuery UI date picker plugin. */
/* Written by Deden Fathurahman (dedenf@gmail.com). */
/* Fixed by Denny Septian Panggabean (xamidimura@gmail.com) */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.id = {
	closeText: "Tutup",
	prevText: "Mundur",
	nextText: "Maju",
	currentText: "Hari ini",
	monthNames: [ "Januari", "Februari", "Maret", "April", "Mei", "Juni",
	"Juli", "Agustus", "September", "Oktober", "Nopember", "Desember" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Mei", "Jun",
	"Jul", "Agus", "Sep", "Okt", "Nop", "Des" ],
	dayNames: [ "Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu" ],
	dayNamesShort: [ "Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab" ],
	dayNamesMin: [ "Mg", "Sn", "Sl", "Rb", "Km", "Jm", "Sb" ],
	weekHeader: "Mg",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.id );

return datepicker.regional.id;

} );
PKsc�\#W��!jqueryui/js/i18n/datepicker-ro.jsnu�[���/* Romanian initialisation for the jQuery UI date picker plugin.
 *
 * Written by Edmond L. (ll_edmond@walla.com)
 * and Ionut G. Stan (ionut.g.stan@gmail.com)
 */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ro = {
	closeText: "Închide",
	prevText: "Luna precedentă",
	nextText: "Luna următoare ",
	currentText: "Azi",
	monthNames: [ "Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie",
	"Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie" ],
	monthNamesShort: [ "Ian", "Feb", "Mar", "Apr", "Mai", "Iun",
	"Iul", "Aug", "Sep", "Oct", "Nov", "Dec" ],
	dayNames: [ "Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă" ],
	dayNamesShort: [ "Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm" ],
	dayNamesMin: [ "Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ" ],
	weekHeader: "Săpt",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ro );

return datepicker.regional.ro;

} );
PKsc�\���7��$jqueryui/js/i18n/datepicker-fr-CA.jsnu�[���/* Canadian-French initialisation for the jQuery UI date picker plugin. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "fr-CA" ] = {
	closeText: "Fermer",
	prevText: "Précédent",
	nextText: "Suivant",
	currentText: "Aujourd'hui",
	monthNames: [ "janvier", "février", "mars", "avril", "mai", "juin",
		"juillet", "août", "septembre", "octobre", "novembre", "décembre" ],
	monthNamesShort: [ "janv.", "févr.", "mars", "avril", "mai", "juin",
		"juil.", "août", "sept.", "oct.", "nov.", "déc." ],
	dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ],
	dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ],
	dayNamesMin: [ "D", "L", "M", "M", "J", "V", "S" ],
	weekHeader: "Sem.",
	dateFormat: "yy-mm-dd",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: ""
};
datepicker.setDefaults( datepicker.regional[ "fr-CA" ] );

return datepicker.regional[ "fr-CA" ];

} );
PKsc�\,zC���$jqueryui/js/i18n/datepicker-it-CH.jsnu�[���/* Italian initialisation for the jQuery UI date picker plugin. */
/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "it-CH" ] = {
	closeText: "Chiudi",
	prevText: "Prec",
	nextText: "Succ",
	currentText: "Oggi",
	monthNames: [ "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
		"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" ],
	monthNamesShort: [ "Gen", "Feb", "Mar", "Apr", "Mag", "Giu",
		"Lug", "Ago", "Set", "Ott", "Nov", "Dic" ],
	dayNames: [ "Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato" ],
	dayNamesShort: [ "Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab" ],
	dayNamesMin: [ "Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa" ],
	weekHeader: "Sm",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "it-CH" ] );

return datepicker.regional[ "it-CH" ];

} );
PKsc�\y;�K��!jqueryui/js/i18n/datepicker-nb.jsnu�[���/* Norwegian Bokmål initialisation for the jQuery UI date picker plugin. */
/* Written by Bjørn Johansen (post@bjornjohansen.no). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.nb = {
	closeText: "Lukk",
	prevText: "Forrige",
	nextText: "Neste",
	currentText: "I dag",
	monthNames: [
		"januar",
		"februar",
		"mars",
		"april",
		"mai",
		"juni",
		"juli",
		"august",
		"september",
		"oktober",
		"november",
		"desember"
	],
	monthNamesShort: [ "jan", "feb", "mar", "apr", "mai", "jun", "jul", "aug", "sep", "okt", "nov", "des" ],
	dayNamesShort: [ "søn", "man", "tir", "ons", "tor", "fre", "lør" ],
	dayNames: [ "søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag" ],
	dayNamesMin: [ "sø", "ma", "ti", "on", "to", "fr", "lø" ],
	weekHeader: "Uke",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: ""
};
datepicker.setDefaults( datepicker.regional.nb );

return datepicker.regional.nb;

} );
PKsc�\���X��!jqueryui/js/i18n/datepicker-it.jsnu�[���/* Italian initialisation for the jQuery UI date picker plugin. */
/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.it = {
	closeText: "Chiudi",
	prevText: "Prec",
	nextText: "Succ",
	currentText: "Oggi",
	monthNames: [ "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno",
		"Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" ],
	monthNamesShort: [ "Gen", "Feb", "Mar", "Apr", "Mag", "Giu",
		"Lug", "Ago", "Set", "Ott", "Nov", "Dic" ],
	dayNames: [ "Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato" ],
	dayNamesShort: [ "Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab" ],
	dayNamesMin: [ "Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa" ],
	weekHeader: "Sm",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.it );

return datepicker.regional.it;

} );
PKsc�\�Y���!jqueryui/js/i18n/datepicker-nn.jsnu�[���/* Norwegian Nynorsk initialisation for the jQuery UI date picker plugin. */
/* Written by Bjørn Johansen (post@bjornjohansen.no). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.nn = {
	closeText: "Lukk",
	prevText: "Førre",
	nextText: "Neste",
	currentText: "I dag",
	monthNames: [
		"januar",
		"februar",
		"mars",
		"april",
		"mai",
		"juni",
		"juli",
		"august",
		"september",
		"oktober",
		"november",
		"desember"
	],
	monthNamesShort: [ "jan", "feb", "mar", "apr", "mai", "jun", "jul", "aug", "sep", "okt", "nov", "des" ],
	dayNamesShort: [ "sun", "mån", "tys", "ons", "tor", "fre", "lau" ],
	dayNames: [ "sundag", "måndag", "tysdag", "onsdag", "torsdag", "fredag", "laurdag" ],
	dayNamesMin: [ "su", "må", "ty", "on", "to", "fr", "la" ],
	weekHeader: "Veke",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: ""
};
datepicker.setDefaults( datepicker.regional.nn );

return datepicker.regional.nn;

} );
PKsc�\��m��!jqueryui/js/i18n/datepicker-rm.jsnu�[���/* Romansh initialisation for the jQuery UI date picker plugin. */
/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.rm = {
	closeText: "Serrar",
	prevText: "Suandant",
	nextText: "Precedent",
	currentText: "Actual",
	monthNames: [
		"Schaner",
		"Favrer",
		"Mars",
		"Avrigl",
		"Matg",
		"Zercladur",
		"Fanadur",
		"Avust",
		"Settember",
		"October",
		"November",
		"December"
	],
	monthNamesShort: [
		"Scha",
		"Fev",
		"Mar",
		"Avr",
		"Matg",
		"Zer",
		"Fan",
		"Avu",
		"Sett",
		"Oct",
		"Nov",
		"Dec"
	],
	dayNames: [ "Dumengia", "Glindesdi", "Mardi", "Mesemna", "Gievgia", "Venderdi", "Sonda" ],
	dayNamesShort: [ "Dum", "Gli", "Mar", "Mes", "Gie", "Ven", "Som" ],
	dayNamesMin: [ "Du", "Gl", "Ma", "Me", "Gi", "Ve", "So" ],
	weekHeader: "emna",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.rm );

return datepicker.regional.rm;

} );
PKsc�\�=3���!jqueryui/js/i18n/datepicker-eu.jsnu�[���/* Karrikas-ek itzulia (karrikas@karrikas.com) */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.eu = {
	closeText: "Egina",
	prevText: "Aur",
	nextText: "Hur",
	currentText: "Gaur",
	monthNames: [ "urtarrila", "otsaila", "martxoa", "apirila", "maiatza", "ekaina",
		"uztaila", "abuztua", "iraila", "urria", "azaroa", "abendua" ],
	monthNamesShort: [ "urt.", "ots.", "mar.", "api.", "mai.", "eka.",
		"uzt.", "abu.", "ira.", "urr.", "aza.", "abe." ],
	dayNames: [ "igandea", "astelehena", "asteartea", "asteazkena", "osteguna", "ostirala", "larunbata" ],
	dayNamesShort: [ "ig.", "al.", "ar.", "az.", "og.", "ol.", "lr." ],
	dayNamesMin: [ "ig", "al", "ar", "az", "og", "ol", "lr" ],
	weekHeader: "As",
	dateFormat: "yy-mm-dd",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.eu );

return datepicker.regional.eu;

} );
PKsc�\ad�ss!jqueryui/js/i18n/datepicker-tj.jsnu�[���/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Abdurahmon Saidov (saidovab@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.tj = {
	closeText: "Идома",
	prevText: "Қафо",
	nextText: "Пеш",
	currentText: "Имрӯз",
	monthNames: [ "Январ", "Феврал", "Март", "Апрел", "Май", "Июн",
	"Июл", "Август", "Сентябр", "Октябр", "Ноябр", "Декабр" ],
	monthNamesShort: [ "Янв", "Фев", "Мар", "Апр", "Май", "Июн",
	"Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" ],
	dayNames: [ "якшанбе", "душанбе", "сешанбе", "чоршанбе", "панҷшанбе", "ҷумъа", "шанбе" ],
	dayNamesShort: [ "якш", "душ", "сеш", "чор", "пан", "ҷум", "шан" ],
	dayNamesMin: [ "Як", "Дш", "Сш", "Чш", "Пш", "Ҷм", "Шн" ],
	weekHeader: "Хф",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.tj );

return datepicker.regional.tj;

} );
PKsc�\A��$jqueryui/js/i18n/datepicker-ar-DZ.jsnu�[���/* Algerian Arabic Translation for jQuery UI date picker plugin.
/* Used in most of Maghreb countries, primarily in Algeria, Tunisia, Morocco.
/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
/* Mohamed Amine HADDAD -- zatamine@gmail.com */

( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "ar-DZ" ] = {
	closeText: "إغلاق",
	prevText: "السابق",
	nextText: "التالي",
	currentText: "اليوم",
	monthNames: [ "جانفي", "فيفري", "مارس", "أفريل", "ماي", "جوان",
	"جويلية", "أوت", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر" ],
	monthNamesShort: [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" ],
	dayNames: [ "الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت" ],
	dayNamesShort: [ "الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت" ],
	dayNamesMin: [ "ح", "ن", "ث", "ر", "خ", "ج", "س" ],
	weekHeader: "أسبوع",
	dateFormat: "dd/mm/yy",
	firstDay: 6,
		isRTL: true,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "ar-DZ" ] );

return datepicker.regional[ "ar-DZ" ];

} );
PKsc�\�&��!jqueryui/js/i18n/datepicker-de.jsnu�[���/* German initialisation for the jQuery UI date picker plugin. */
/* Written by Milian Wolff (mail@milianw.de). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.de = {
	closeText: "Schließen",
	prevText: "Zurück",
	nextText: "Vor",
	currentText: "Heute",
	monthNames: [ "Januar", "Februar", "März", "April", "Mai", "Juni",
	"Juli", "August", "September", "Oktober", "November", "Dezember" ],
	monthNamesShort: [ "Jan", "Feb", "Mär", "Apr", "Mai", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Dez" ],
	dayNames: [ "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" ],
	dayNamesShort: [ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" ],
	dayNamesMin: [ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" ],
	weekHeader: "KW",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.de );

return datepicker.regional.de;

} );
PKsc�\r�jCC!jqueryui/js/i18n/datepicker-ta.jsnu�[���/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by S A Sureshkumar (saskumar@live.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ta = {
	closeText: "மூடு",
	prevText: "முன்னையது",
	nextText: "அடுத்தது",
	currentText: "இன்று",
	monthNames: [ "தை", "மாசி", "பங்குனி", "சித்திரை", "வைகாசி", "ஆனி",
	"ஆடி", "ஆவணி", "புரட்டாசி", "ஐப்பசி", "கார்த்திகை", "மார்கழி" ],
	monthNamesShort: [ "தை", "மாசி", "பங்", "சித்", "வைகா", "ஆனி",
	"ஆடி", "ஆவ", "புர", "ஐப்", "கார்", "மார்" ],
	dayNames: [
		"ஞாயிற்றுக்கிழமை",
		"திங்கட்கிழமை",
		"செவ்வாய்க்கிழமை",
		"புதன்கிழமை",
		"வியாழக்கிழமை",
		"வெள்ளிக்கிழமை",
		"சனிக்கிழமை"
	],
	dayNamesShort: [
		"ஞாயிறு",
		"திங்கள்",
		"செவ்வாய்",
		"புதன்",
		"வியாழன்",
		"வெள்ளி",
		"சனி"
	],
	dayNamesMin: [ "ஞா", "தி", "செ", "பு", "வி", "வெ", "ச" ],
	weekHeader: "Не",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ta );

return datepicker.regional.ta;

} );
PKsc�\�GE�//!jqueryui/js/i18n/datepicker-th.jsnu�[���/* Thai initialisation for the jQuery UI date picker plugin. */
/* Written by pipo (pipo@sixhead.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.th = {
	closeText: "ปิด",
	prevText: "ย้อน",
	nextText: "ถัดไป",
	currentText: "วันนี้",
	monthNames: [ "มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน",
	"กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม" ],
	monthNamesShort: [ "ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.",
	"ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค." ],
	dayNames: [ "อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัสบดี", "ศุกร์", "เสาร์" ],
	dayNamesShort: [ "อา.", "จ.", "อ.", "พ.", "พฤ.", "ศ.", "ส." ],
	dayNamesMin: [ "อา.", "จ.", "อ.", "พ.", "พฤ.", "ศ.", "ส." ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.th );

return datepicker.regional.th;

} );
PKsc�\��>Umm!jqueryui/js/i18n/datepicker-km.jsnu�[���/* Khmer initialisation for the jQuery calendar extension. */
/* Written by Chandara Om (chandara.teacher@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.km = {
	closeText: "ធ្វើ​រួច",
	prevText: "មុន",
	nextText: "បន្ទាប់",
	currentText: "ថ្ងៃ​នេះ",
	monthNames: [ "មករា", "កុម្ភៈ", "មីនា", "មេសា", "ឧសភា", "មិថុនា",
	"កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ" ],
	monthNamesShort: [ "មករា", "កុម្ភៈ", "មីនា", "មេសា", "ឧសភា", "មិថុនា",
	"កក្កដា", "សីហា", "កញ្ញា", "តុលា", "វិច្ឆិកា", "ធ្នូ" ],
	dayNames: [ "អាទិត្យ", "ចន្ទ", "អង្គារ", "ពុធ", "ព្រហស្បតិ៍", "សុក្រ", "សៅរ៍" ],
	dayNamesShort: [ "អា", "ច", "អ", "ពុ", "ព្រហ", "សុ", "សៅ" ],
	dayNamesMin: [ "អា", "ច", "អ", "ពុ", "ព្រហ", "សុ", "សៅ" ],
	weekHeader: "សប្ដាហ៍",
	dateFormat: "dd-mm-yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.km );

return datepicker.regional.km;

} );
PKsc�\v���!jqueryui/js/i18n/datepicker-az.jsnu�[���/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Jamil Najafov (necefov33@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.az = {
	closeText: "Bağla",
	prevText: "Geri",
	nextText: "İrəli",
	currentText: "Bugün",
	monthNames: [ "Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun",
	"İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr" ],
	monthNamesShort: [ "Yan", "Fev", "Mar", "Apr", "May", "İyun",
	"İyul", "Avq", "Sen", "Okt", "Noy", "Dek" ],
	dayNames: [ "Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə" ],
	dayNamesShort: [ "B", "Be", "Ça", "Ç", "Ca", "C", "Ş" ],
	dayNamesMin: [ "B", "B", "Ç", "С", "Ç", "C", "Ş" ],
	weekHeader: "Hf",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.az );

return datepicker.regional.az;

} );
PKsc�\�;���!jqueryui/js/i18n/datepicker-pt.jsnu�[���/* Portuguese initialisation for the jQuery UI date picker plugin. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.pt = {
	closeText: "Fechar",
	prevText: "Anterior",
	nextText: "Seguinte",
	currentText: "Hoje",
	monthNames: [ "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho",
	"Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro" ],
	monthNamesShort: [ "Jan", "Fev", "Mar", "Abr", "Mai", "Jun",
	"Jul", "Ago", "Set", "Out", "Nov", "Dez" ],
	dayNames: [
		"Domingo",
		"Segunda-feira",
		"Terça-feira",
		"Quarta-feira",
		"Quinta-feira",
		"Sexta-feira",
		"Sábado"
	],
	dayNamesShort: [ "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb" ],
	dayNamesMin: [ "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb" ],
	weekHeader: "Sem",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.pt );

return datepicker.regional.pt;

} );
PKsc�\����!jqueryui/js/i18n/datepicker-ky.jsnu�[���/* Kyrgyz (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Sergey Kartashov (ebishkek@yandex.ru). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ky = {
	closeText: "Жабуу",
	prevText: "Мур",
	nextText: "Кий",
	currentText: "Бүгүн",
	monthNames: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
	"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
	monthNamesShort: [ "Янв", "Фев", "Мар", "Апр", "Май", "Июн",
	"Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" ],
	dayNames: [ "жекшемби", "дүйшөмбү", "шейшемби", "шаршемби", "бейшемби", "жума", "ишемби" ],
	dayNamesShort: [ "жек", "дүй", "шей", "шар", "бей", "жум", "ише" ],
	dayNamesMin: [ "Жк", "Дш", "Шш", "Шр", "Бш", "Жм", "Иш" ],
	weekHeader: "Жум",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: ""
};
datepicker.setDefaults( datepicker.regional.ky );

return datepicker.regional.ky;

} );
PKsc�\j�����!jqueryui/js/i18n/datepicker-ka.jsnu�[���/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Lado Lomidze (lado.lomidze@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ka = {
	closeText: "დახურვა",
	prevText: "წინა",
	nextText: "შემდეგი ",
	currentText: "დღეს",
	monthNames: [
		"იანვარი",
		"თებერვალი",
		"მარტი",
		"აპრილი",
		"მაისი",
		"ივნისი",
		"ივლისი",
		"აგვისტო",
		"სექტემბერი",
		"ოქტომბერი",
		"ნოემბერი",
		"დეკემბერი"
	],
	monthNamesShort: [ "იან", "თებ", "მარ", "აპრ", "მაი", "ივნ", "ივლ", "აგვ", "სექ", "ოქტ", "ნოე", "დეკ" ],
	dayNames: [ "კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი" ],
	dayNamesShort: [ "კვ", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ" ],
	dayNamesMin: [ "კვ", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ" ],
	weekHeader: "კვირა",
	dateFormat: "dd-mm-yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ka );

return datepicker.regional.ka;

} );
PKsc�\lV/b��$jqueryui/js/i18n/datepicker-de-AT.jsnu�[���/* German/Austrian initialisation for the jQuery UI date picker plugin. */
/* Based on the de initialisation. */

( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "de-AT" ] = {
	closeText: "Schließen",
	prevText: "Zurück",
	nextText: "Vor",
	currentText: "Heute",
	monthNames: [ "Jänner", "Februar", "März", "April", "Mai", "Juni",
	"Juli", "August", "September", "Oktober", "November", "Dezember" ],
	monthNamesShort: [ "Jän", "Feb", "Mär", "Apr", "Mai", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Dez" ],
	dayNames: [ "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" ],
	dayNamesShort: [ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" ],
	dayNamesMin: [ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" ],
	weekHeader: "KW",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional[ "de-AT" ] );

return datepicker.regional[ "de-AT" ];

} );
PKsc�\������!jqueryui/js/i18n/datepicker-cs.jsnu�[���/* Czech initialisation for the jQuery UI date picker plugin. */
/* Written by Tomas Muller (tomas@tomas-muller.net). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.cs = {
	closeText: "Zavřít",
	prevText: "Dříve",
	nextText: "Později",
	currentText: "Nyní",
	monthNames: [ "leden", "únor", "březen", "duben", "květen", "červen",
	"červenec", "srpen", "září", "říjen", "listopad", "prosinec" ],
	monthNamesShort: [ "led", "úno", "bře", "dub", "kvě", "čer",
	"čvc", "srp", "zář", "říj", "lis", "pro" ],
	dayNames: [ "neděle", "pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota" ],
	dayNamesShort: [ "ne", "po", "út", "st", "čt", "pá", "so" ],
	dayNamesMin: [ "ne", "po", "út", "st", "čt", "pá", "so" ],
	weekHeader: "Týd",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.cs );

return datepicker.regional.cs;

} );
PKsc�\�����!jqueryui/js/i18n/datepicker-kk.jsnu�[���/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.kk = {
	closeText: "Жабу",
	prevText: "Алдыңғы",
	nextText: "Келесі",
	currentText: "Бүгін",
	monthNames: [ "Қаңтар", "Ақпан", "Наурыз", "Сәуір", "Мамыр", "Маусым",
	"Шілде", "Тамыз", "Қыркүйек", "Қазан", "Қараша", "Желтоқсан" ],
	monthNamesShort: [ "Қаң", "Ақп", "Нау", "Сәу", "Мам", "Мау",
	"Шіл", "Там", "Қыр", "Қаз", "Қар", "Жел" ],
	dayNames: [ "Жексенбі", "Дүйсенбі", "Сейсенбі", "Сәрсенбі", "Бейсенбі", "Жұма", "Сенбі" ],
	dayNamesShort: [ "жкс", "дсн", "ссн", "срс", "бсн", "жма", "снб" ],
	dayNamesMin: [ "Жк", "Дс", "Сс", "Ср", "Бс", "Жм", "Сн" ],
	weekHeader: "Не",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.kk );

return datepicker.regional.kk;

} );
PKsc�\u����!jqueryui/js/i18n/datepicker-lb.jsnu�[���/* Luxembourgish initialisation for the jQuery UI date picker plugin. */
/* Written by Michel Weimerskirch <michel@weimerskirch.net> */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.lb = {
	closeText: "Fäerdeg",
	prevText: "Zréck",
	nextText: "Weider",
	currentText: "Haut",
	monthNames: [ "Januar", "Februar", "Mäerz", "Abrëll", "Mee", "Juni",
	"Juli", "August", "September", "Oktober", "November", "Dezember" ],
	monthNamesShort: [ "Jan", "Feb", "Mäe", "Abr", "Mee", "Jun",
	"Jul", "Aug", "Sep", "Okt", "Nov", "Dez" ],
	dayNames: [
		"Sonndeg",
		"Méindeg",
		"Dënschdeg",
		"Mëttwoch",
		"Donneschdeg",
		"Freideg",
		"Samschdeg"
	],
	dayNamesShort: [ "Son", "Méi", "Dën", "Mët", "Don", "Fre", "Sam" ],
	dayNamesMin: [ "So", "Mé", "Dë", "Më", "Do", "Fr", "Sa" ],
	weekHeader: "W",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.lb );

return datepicker.regional.lb;

} );
PKsc�\�|����!jqueryui/js/i18n/datepicker-ja.jsnu�[���/* Japanese initialisation for the jQuery UI date picker plugin. */
/* Written by Kentaro SATO (kentaro@ranvis.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ja = {
	closeText: "閉じる",
	prevText: "前",
	nextText: "次",
	currentText: "今日",
	monthNames: [ "1月", "2月", "3月", "4月", "5月", "6月",
	"7月", "8月", "9月", "10月", "11月", "12月" ],
	monthNamesShort: [ "1月", "2月", "3月", "4月", "5月", "6月",
	"7月", "8月", "9月", "10月", "11月", "12月" ],
	dayNames: [ "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日" ],
	dayNamesShort: [ "日", "月", "火", "水", "木", "金", "土" ],
	dayNamesMin: [ "日", "月", "火", "水", "木", "金", "土" ],
	weekHeader: "週",
	dateFormat: "yy/mm/dd",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "年" };
datepicker.setDefaults( datepicker.regional.ja );

return datepicker.regional.ja;

} );
PKsc�\N;���!jqueryui/js/i18n/datepicker-fi.jsnu�[���/* Finnish initialisation for the jQuery UI date picker plugin. */
/* Written by Harri Kilpiö (harrikilpio@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.fi = {
	closeText: "Sulje",
	prevText: "Edellinen",
	nextText: "Seuraava",
	currentText: "Tänään",
	monthNames: [ "Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu",
	"Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu" ],
	monthNamesShort: [ "Tammi", "Helmi", "Maalis", "Huhti", "Touko", "Kesä",
	"Heinä", "Elo", "Syys", "Loka", "Marras", "Joulu" ],
	dayNamesShort: [ "Su", "Ma", "Ti", "Ke", "To", "Pe", "La" ],
	dayNames: [ "Sunnuntai", "Maanantai", "Tiistai", "Keskiviikko", "Torstai", "Perjantai", "Lauantai" ],
	dayNamesMin: [ "Su", "Ma", "Ti", "Ke", "To", "Pe", "La" ],
	weekHeader: "Vk",
	dateFormat: "d.m.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.fi );

return datepicker.regional.fi;

} );
PKsc�\1#r��!jqueryui/js/i18n/datepicker-sk.jsnu�[���/* Slovak initialisation for the jQuery UI date picker plugin. */
/* Written by Vojtech Rinik (vojto@hmm.sk). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.sk = {
	closeText: "Zavrieť",
	prevText: "Predchádzajúci",
	nextText: "Nasledujúci",
	currentText: "Dnes",
	monthNames: [ "január", "február", "marec", "apríl", "máj", "jún",
	"júl", "august", "september", "október", "november", "december" ],
	monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "Máj", "Jún",
	"Júl", "Aug", "Sep", "Okt", "Nov", "Dec" ],
	dayNames: [ "nedeľa", "pondelok", "utorok", "streda", "štvrtok", "piatok", "sobota" ],
	dayNamesShort: [ "Ned", "Pon", "Uto", "Str", "Štv", "Pia", "Sob" ],
	dayNamesMin: [ "Ne", "Po", "Ut", "St", "Št", "Pia", "So" ],
	weekHeader: "Ty",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.sk );

return datepicker.regional.sk;

} );
PKsc�\R<�--!jqueryui/js/i18n/datepicker-he.jsnu�[���/* Hebrew initialisation for the UI Datepicker extension. */
/* Written by Amir Hardon (ahardon at gmail dot com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.he = {
	closeText: "סגור",
	prevText: "הקודם",
	nextText: "הבא",
	currentText: "היום",
	monthNames: [ "ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני",
	"יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר" ],
	monthNamesShort: [ "ינו", "פבר", "מרץ", "אפר", "מאי", "יוני",
	"יולי", "אוג", "ספט", "אוק", "נוב", "דצמ" ],
	dayNames: [ "ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת" ],
	dayNamesShort: [ "א'", "ב'", "ג'", "ד'", "ה'", "ו'", "שבת" ],
	dayNamesMin: [ "א'", "ב'", "ג'", "ד'", "ה'", "ו'", "שבת" ],
	weekHeader: "Wk",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
	isRTL: true,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.he );

return datepicker.regional.he;

} );
PKtc�\Ka��!jqueryui/js/i18n/datepicker-no.jsnu�[���/* Norwegian initialisation for the jQuery UI date picker plugin. */
/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */

( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.no = {
	closeText: "Lukk",
	prevText: "Forrige",
	nextText: "Neste",
	currentText: "I dag",
	monthNames: [
		"januar",
		"februar",
		"mars",
		"april",
		"mai",
		"juni",
		"juli",
		"august",
		"september",
		"oktober",
		"november",
		"desember"
	],
	monthNamesShort: [ "jan", "feb", "mar", "apr", "mai", "jun", "jul", "aug", "sep", "okt", "nov", "des" ],
	dayNamesShort: [ "søn", "man", "tir", "ons", "tor", "fre", "lør" ],
	dayNames: [ "søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag" ],
	dayNamesMin: [ "sø", "ma", "ti", "on", "to", "fr", "lø" ],
	weekHeader: "Uke",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: ""
};
datepicker.setDefaults( datepicker.regional.no );

return datepicker.regional.no;

} );
PKtc�\���,��!jqueryui/js/i18n/datepicker-ar.jsnu�[���/* Arabic Translation for jQuery UI date picker plugin. */
/* Used in most of Arab countries, primarily in Bahrain, */
/* Kuwait, Oman, Qatar, Saudi Arabia and the United Arab Emirates, Egypt, Sudan and Yemen. */
/* Written by Mohammed Alshehri -- m@dralshehri.com */

( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ar = {
	closeText: "إغلاق",
	prevText: "السابق",
	nextText: "التالي",
	currentText: "اليوم",
	monthNames: [ "يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو",
	"يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر" ],
	monthNamesShort: [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" ],
	dayNames: [ "الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت" ],
	dayNamesShort: [ "أحد", "اثنين", "ثلاثاء", "أربعاء", "خميس", "جمعة", "سبت" ],
	dayNamesMin: [ "ح", "ن", "ث", "ر", "خ", "ج", "س" ],
	weekHeader: "أسبوع",
	dateFormat: "dd/mm/yy",
	firstDay: 0,
		isRTL: true,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.ar );

return datepicker.regional.ar;

} );
PKtc�\˲�q(($jqueryui/js/i18n/datepicker-zh-HK.jsnu�[���/* Chinese initialisation for the jQuery UI date picker plugin. */
/* Written by SCCY (samuelcychan@gmail.com). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional[ "zh-HK" ] = {
	closeText: "關閉",
	prevText: "上月",
	nextText: "下月",
	currentText: "今天",
	monthNames: [ "一月", "二月", "三月", "四月", "五月", "六月",
	"七月", "八月", "九月", "十月", "十一月", "十二月" ],
	monthNamesShort: [ "一月", "二月", "三月", "四月", "五月", "六月",
	"七月", "八月", "九月", "十月", "十一月", "十二月" ],
	dayNames: [ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" ],
	dayNamesShort: [ "周日", "周一", "周二", "周三", "周四", "周五", "周六" ],
	dayNamesMin: [ "日", "一", "二", "三", "四", "五", "六" ],
	weekHeader: "周",
	dateFormat: "dd-mm-yy",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "年" };
datepicker.setDefaults( datepicker.regional[ "zh-HK" ] );

return datepicker.regional[ "zh-HK" ];

} );
PKtc�\�I�==!jqueryui/js/i18n/datepicker-fr.jsnu�[���/* French initialisation for the jQuery UI date picker plugin. */
/* Written by Keith Wood (kbwood{at}iinet.com.au),
			  Stéphane Nahmani (sholby@sholby.net),
			  Stéphane Raimbault <stephane.raimbault@gmail.com> */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.fr = {
	closeText: "Fermer",
	prevText: "Précédent",
	nextText: "Suivant",
	currentText: "Aujourd'hui",
	monthNames: [ "janvier", "février", "mars", "avril", "mai", "juin",
		"juillet", "août", "septembre", "octobre", "novembre", "décembre" ],
	monthNamesShort: [ "janv.", "févr.", "mars", "avr.", "mai", "juin",
		"juil.", "août", "sept.", "oct.", "nov.", "déc." ],
	dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ],
	dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ],
	dayNamesMin: [ "D", "L", "M", "M", "J", "V", "S" ],
	weekHeader: "Sem.",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.fr );

return datepicker.regional.fr;

} );
PKtc�\骷��!jqueryui/js/i18n/datepicker-tr.jsnu�[���/* Turkish initialisation for the jQuery UI date picker plugin. */
/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.tr = {
	closeText: "kapat",
	prevText: "geri",
	nextText: "ileri",
	currentText: "bugün",
	monthNames: [ "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran",
	"Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık" ],
	monthNamesShort: [ "Oca", "Şub", "Mar", "Nis", "May", "Haz",
	"Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara" ],
	dayNames: [ "Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi" ],
	dayNamesShort: [ "Pz", "Pt", "Sa", "Ça", "Pe", "Cu", "Ct" ],
	dayNamesMin: [ "Pz", "Pt", "Sa", "Ça", "Pe", "Cu", "Ct" ],
	weekHeader: "Hf",
	dateFormat: "dd.mm.yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.tr );

return datepicker.regional.tr;

} );
PKtc�\�!��RR!jqueryui/js/i18n/datepicker-hi.jsnu�[���/* Hindi initialisation for the jQuery UI date picker plugin. */
/* Written by Michael Dawart. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.hi = {
	closeText: "बंद",
	prevText: "पिछला",
	nextText: "अगला",
	currentText: "आज",
	monthNames: [ "जनवरी ", "फरवरी", "मार्च", "अप्रेल", "मई", "जून",
	"जूलाई", "अगस्त ", "सितम्बर", "अक्टूबर", "नवम्बर", "दिसम्बर" ],
	monthNamesShort: [ "जन", "फर", "मार्च", "अप्रेल", "मई", "जून",
	"जूलाई", "अग", "सित", "अक्ट", "नव", "दि" ],
	dayNames: [ "रविवार", "सोमवार", "मंगलवार", "बुधवार", "गुरुवार", "शुक्रवार", "शनिवार" ],
	dayNamesShort: [ "रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि" ],
	dayNamesMin: [ "रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि" ],
	weekHeader: "हफ्ता",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.hi );

return datepicker.regional.hi;

} );
PKtc�\p����!jqueryui/js/i18n/datepicker-gl.jsnu�[���/* Galician localization for 'UI date picker' jQuery extension. */
/* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.gl = {
	closeText: "Pechar",
	prevText: "Ant",
	nextText: "Seg",
	currentText: "Hoxe",
	monthNames: [ "Xaneiro", "Febreiro", "Marzo", "Abril", "Maio", "Xuño",
	"Xullo", "Agosto", "Setembro", "Outubro", "Novembro", "Decembro" ],
	monthNamesShort: [ "Xan", "Feb", "Mar", "Abr", "Mai", "Xuñ",
	"Xul", "Ago", "Set", "Out", "Nov", "Dec" ],
	dayNames: [ "Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado" ],
	dayNamesShort: [ "Dom", "Lun", "Mar", "Mér", "Xov", "Ven", "Sáb" ],
	dayNamesMin: [ "Do", "Lu", "Ma", "Mé", "Xo", "Ve", "Sá" ],
	weekHeader: "Sm",
	dateFormat: "dd/mm/yy",
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.gl );

return datepicker.regional.gl;

} );
PKtc�\�j\��!jqueryui/js/i18n/datepicker-ko.jsnu�[���/* Korean initialisation for the jQuery calendar extension. */
/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie and Myeongjin Lee. */
( function( factory ) {
	"use strict";

	if ( typeof define === "function" && define.amd ) {

		// AMD. Register as an anonymous module.
		define( [ "../widgets/datepicker" ], factory );
	} else {

		// Browser globals
		factory( jQuery.datepicker );
	}
} )( function( datepicker ) {
"use strict";

datepicker.regional.ko = {
	closeText: "닫기",
	prevText: "이전달",
	nextText: "다음달",
	currentText: "오늘",
	monthNames: [ "1월", "2월", "3월", "4월", "5월", "6월",
	"7월", "8월", "9월", "10월", "11월", "12월" ],
	monthNamesShort: [ "1월", "2월", "3월", "4월", "5월", "6월",
	"7월", "8월", "9월", "10월", "11월", "12월" ],
	dayNames: [ "일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일" ],
	dayNamesShort: [ "일", "월", "화", "수", "목", "금", "토" ],
	dayNamesMin: [ "일", "월", "화", "수", "목", "금", "토" ],
	weekHeader: "주",
	dateFormat: "yy. m. d.",
	firstDay: 0,
	isRTL: false,
	showMonthAfterYear: true,
	yearSuffix: "년" };
datepicker.setDefaults( datepicker.regional.ko );

return datepicker.regional.ko;

} );
PKtc�\�&d�_�_jqueryui/js/jquery.tagedit.jsnu�[���/*
* Tagedit - jQuery Plugin
* The Plugin can be used to edit tags from a database the easy way
*
* Examples and documentation at: tagedit.webwork-albrecht.de
*
* License:
* This work is licensed under a MIT License
*
* @licstart  The following is the entire license notice for the
* JavaScript code in this file.
*
* Copyright (c) 2010 Oliver Albrecht <info@webwork-albrecht.de>
* Copyright (c) 2014 Thomas Brüderli <thomas@roundcube.net>
*
* Licensed under the MIT licenses
*
* 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.
*
* @licend  The above is the entire license notice
* for the JavaScript code in this file.
*
* @author Oliver Albrecht Mial: info@webwork-albrecht.de Twitter: @webworka
* @version 1.5.2 (06/2014)
* Requires: jQuery v1.4+, jQueryUI v1.8+, jQuerry.autoGrowInput
*
* Example of usage:
*
* $( "input.tag" ).tagedit();
*
* Possible options:
*
*  autocompleteURL: '', // url for a autocompletion
*  deleteEmptyItems: true, // Deletes items with empty value
*  deletedPostfix: '-d', // will be put to the Items that are marked as delete
*  addedPostfix: '-a', // will be put to the Items that are choosem from the database
*  additionalListClass: '', // put a classname here if the wrapper ul shoud receive a special class
*  allowEdit: true, // Switch on/off edit entries
*  allowDelete: true, // Switch on/off deletion of entries. Will be ignored if allowEdit = false
*  allowAdd: true, // switch on/off the creation of new entries
*  direction: 'ltr' // Sets the writing direction for Outputs and Inputs
*  animSpeed: 500 // Sets the animation speed for effects
*  autocompleteOptions: {}, // Setting Options for the jquery UI Autocomplete (http://jqueryui.com/demos/autocomplete/)
*  breakKeyCodes: [ 13, 44 ], // Sets the characters to break on to parse the tags (defaults: return, comma)
*  checkNewEntriesCaseSensitive: false, // If there is a new Entry, it is checked against the autocompletion list. This Flag controlls if the check is (in-)casesensitive
*  texts: { // some texts
*      removeLinkTitle: 'Remove from list.',
*      saveEditLinkTitle: 'Save changes.',
*      deleteLinkTitle: 'Delete this tag from database.',
*      deleteConfirmation: 'Are you sure to delete this entry?',
*      deletedElementTitle: 'This Element will be deleted.',
*      breakEditLinkTitle: 'Cancel'
*  }
*/

(function($) {

	$.fn.tagedit = function(options) {
		/**
		* Merge Options with defaults
		*/
		options = $.extend(true, {
			// default options here
			autocompleteURL: null,
			checkToDeleteURL: null,
			deletedPostfix: '-d',
			addedPostfix: '-a',
			additionalListClass: '',
			allowEdit: true,
			allowDelete: true,
			allowAdd: true,
			direction: 'ltr',
			animSpeed: 500,
			autocompleteOptions: {
				select: function( event, ui ) {
					$(this).val(ui.item.value).trigger('transformToTag', [ui.item.id]);
					return false;
				}
			},
			breakKeyCodes: [ 13, 44 ],
			checkNewEntriesCaseSensitive: false,
			texts: {
				removeLinkTitle: 'Remove from list.',
				saveEditLinkTitle: 'Save changes.',
				deleteLinkTitle: 'Delete this tag from database.',
				deleteConfirmation: 'Are you sure to delete this entry?',
				deletedElementTitle: 'This Element will be deleted.',
				breakEditLinkTitle: 'Cancel',
                forceDeleteConfirmation: 'There are more records using this tag, are you sure do you want to remove it?'
			},
			tabindex: false
		}, options || {});

		// no action if there are no elements
		if(this.length == 0) {
			return;
		}

		// set the autocompleteOptions source
		if(options.autocompleteURL) {
			options.autocompleteOptions.source = options.autocompleteURL;
		}

		// Set the direction of the inputs
		var direction= this.attr('dir');
		if(direction && direction.length > 0) {
			options.direction = this.attr('dir');
		}

		var elements = this;
		var focusItem = null;

		var baseNameRegexp = new RegExp("^(.*)\\[([0-9]*?("+options.deletedPostfix+"|"+options.addedPostfix+")?)?\]$", "i");

		var baseName = elements.eq(0).attr('name').match(baseNameRegexp);
		if(baseName && baseName.length == 4) {
			baseName = baseName[1];
		}
		else {
			// Elementname does not match the expected format, exit
			alert('elementname dows not match the expected format (regexp: '+baseNameRegexp+')')
			return;
		}

		// read tabindex from source element
		var ti;
		if (!options.tabindex && (ti = elements.eq(0).attr('tabindex')))
			options.tabindex = ti;

		// init elements
		inputsToList();

		/**
		* Creates the tageditinput from a list of textinputs
		*
		*/
		function inputsToList() {
			var html = '<ul class="tagedit-list '+options.additionalListClass+'">';

			elements.each(function(i) {
				var element_name = $(this).attr('name').match(baseNameRegexp);
				if(element_name && element_name.length == 4 && (options.deleteEmptyItems == false || $(this).val().length > 0)) {
					if(element_name[1].length > 0) {
						var elementId = typeof element_name[2] != 'undefined'? element_name[2]: '',
							domId = 'tagedit-' + baseName + '-' + (elementId || i);

						html += '<li class="tagedit-listelement tagedit-listelement-old" aria-labelledby="'+domId+'">';
						html += '<span dir="'+options.direction+'" id="'+domId+'">' + $(this).val() + '</span>';
						html += '<input type="hidden" name="'+baseName+'['+elementId+']" value="'+$(this).val()+'" />';
						if (options.allowDelete)
							html += '<a class="tagedit-close" title="'+options.texts.removeLinkTitle+'" aria-label="'+options.texts.removeLinkTitle+' '+$(this).val()+'">x</a>';
						html += '</li>';
					}
				}
			});

			// replace Elements with the list and save the list in the local variable elements
			elements.last().after(html)
			var newList = elements.last().next();
			elements.remove();
			elements = newList;

			// Check if some of the elementshav to be marked as deleted
			if(options.deletedPostfix.length > 0) {
				elements.find('input[name$="'+options.deletedPostfix+'\]"]').each(function() {
					markAsDeleted($(this).parent());
				});
			}

			// put an input field at the End
			// Put an empty element at the end
			html = '<li class="tagedit-listelement tagedit-listelement-new">';
			if (options.allowAdd)
				html += '<input type="text" name="'+baseName+'[]" value="" id="tagedit-input" disabled="disabled" class="tagedit-input-disabled" dir="'+options.direction+'"/>';
			html += '</li>';
			html += '</ul>';

			elements
				.append(html)
				.attr('tabindex', options.tabindex) // set tabindex to <ul> to recieve focus

				// Set function on the input
				.find('#tagedit-input')
					.attr('tabindex', options.tabindex)
					.each(function() {
						$(this).autoGrowInput({comfortZone: 15, minWidth: 15, maxWidth: 20000});

						// Event is triggert in case of choosing an item from the autocomplete, or finish the input
						$(this).bind('transformToTag', function(event, id) {
							var oldValue = (typeof id != 'undefined' && (id.length > 0 || id > 0));

							var checkAutocomplete = oldValue == true || options.autocompleteOptions.noCheck ? false : true;
							// check if the Value ist new
							var isNewResult = isNew($(this).val(), checkAutocomplete);
							if(isNewResult[0] === true || (isNewResult[0] === false && typeof isNewResult[1] == 'string')) {

								if(oldValue == false && typeof isNewResult[1] == 'string') {
									oldValue = true;
									id = isNewResult[1];
								}

								if(options.allowAdd == true || oldValue) {
									var domId = 'tagedit-' + baseName + '-' + id;
									// Make a new tag in front the input
									html = '<li class="tagedit-listelement tagedit-listelement-old" aria-labelledby="'+domId+'">';
									html += '<span dir="'+options.direction+'" id="'+domId+'">' + $(this).val() + '</span>';
									var name = oldValue? baseName + '['+id+options.addedPostfix+']' : baseName + '[]';
									html += '<input type="hidden" name="'+name+'" value="'+$(this).val()+'" />';
									html += '<a class="tagedit-close" title="'+options.texts.removeLinkTitle+'" aria-label="'+options.texts.removeLinkTitle+' '+$(this).val()+'">x</a>';
									html += '</li>';

									$(this).parent().before(html);
								}
							}
							$(this).val('');

							// close autocomplete
							if(options.autocompleteOptions.source) {
								if($(this).is(':ui-autocomplete'))
									$(this).autocomplete( "close" );
							}

						})
						.keydown(function(event) {
							var code = event.keyCode > 0? event.keyCode : event.which;

							switch(code) {
								case 46:
									if (!focusItem)
										break;
								case 8: // BACKSPACE
									if(focusItem) {
										focusItem.fadeOut(options.animSpeed, function() {
											$(this).remove();
										})
										unfocusItem();
										event.preventDefault();
										return false;
									}
									else if($(this).val().length == 0) {
										// delete Last Tag
										var elementToRemove = elements.find('li.tagedit-listelement-old').last();
										elementToRemove.fadeOut(options.animSpeed, function() {elementToRemove.remove();})
										event.preventDefault();
										return false;
									}
									break;
								case 9: // TAB
									if($(this).val().length > 0 && $('ul.ui-autocomplete #ui-active-menuitem').length == 0) {
										$(this).trigger('transformToTag');
										event.preventDefault();
										return false;
									}
									break;
								case 37: // LEFT
								case 39: // RIGHT
									if($(this).val().length == 0) {
										// select previous Tag
										var inc = code == 37 ? -1 : 1,
											items = elements.find('li.tagedit-listelement-old')
											x = items.length, next = 0;
										items.each(function(i, elem) {
											if ($(elem).hasClass('tagedit-listelement-focus')) {
												x = i;
												return true;
											}
										});
										unfocusItem();
										next = Math.max(0, x + inc);
										if (items.get(next)) {
											focusItem = items.eq(next).addClass('tagedit-listelement-focus');
											$(this).attr('aria-activedescendant', focusItem.attr('aria-labelledby'))

											if(options.autocompleteOptions.source != false) {
												$(this).autocomplete('close').autocomplete('disable');
											}
										}
										event.preventDefault();
										return false;
									}
									break;
								default:
									// ignore input if an item is focused
									if (focusItem !== null) {
										event.preventDefault();
										event.bubble = false;
										return false;
									}
							}
							return true;
						})
						.keypress(function(event) {
							var code = event.keyCode > 0? event.keyCode : event.which;
							if($.inArray(code, options.breakKeyCodes) > -1) {
								if($(this).val().length > 0 && $('ul.ui-autocomplete #ui-active-menuitem').length == 0) {
									$(this).trigger('transformToTag');
								}
								event.preventDefault();
								return false;
							}
							else if($(this).val().length > 0){
								unfocusItem();
							}
							return true;
						})
						.bind('paste', function(e){
							var that = $(this);
							if (e.type == 'paste'){
								setTimeout(function(){
									that.trigger('transformToTag');
								}, 1);
							}
						})
						.blur(function() {
							if($(this).val().length == 0) {
								// disable the field to prevent sending with the form
								$(this).attr('disabled', 'disabled').addClass('tagedit-input-disabled');
							}
							else {
								// Delete entry after a timeout
								var input = $(this);
								$(this).data('blurtimer', window.setTimeout(function() {input.val('');}, 500));
							}
							unfocusItem();
							// restore tabindex when widget looses focus
							if (options.tabindex)
								elements.attr('tabindex', options.tabindex);
						})
						.focus(function() {
							window.clearTimeout($(this).data('blurtimer'));
							// remove tabindex on <ul> because #tagedit-input now has it
							elements.attr('tabindex', '-1');
						});

						if(options.autocompleteOptions.source != false) {
							$(this).autocomplete(options.autocompleteOptions);
						}
					})
				.end()
				.click(function(event) {
					switch(event.target.tagName) {
						case 'A':
							$(event.target).parent().fadeOut(options.animSpeed, function() {
								$(event.target).parent().remove();
								elements.find('#tagedit-input').focus();
								});
							break;
						case 'INPUT':
						case 'SPAN':
						case 'LI':
							if($(event.target).hasClass('tagedit-listelement-deleted') == false &&
							$(event.target).parent('li').hasClass('tagedit-listelement-deleted') == false) {
								// Don't edit an deleted Items
								return doEdit(event);
							}
						default:
							$(this).find('#tagedit-input')
								.removeAttr('disabled')
								.removeClass('tagedit-input-disabled')
								.focus();
					}
					return false;
				})
				// forward focus event (on tabbing through the form)
				.focus(function(e){ $(this).click(); })
		}

		/**
		 * Remove class and reference to currently focused tag item
		 */
		function unfocusItem() {
			if(focusItem){
				if(options.autocompleteOptions.source != false) {
					elements.find('#tagedit-input').autocomplete('enable');
				}
				focusItem.removeClass('tagedit-listelement-focus');
				focusItem = null;
				elements.find('#tagedit-input').removeAttr('aria-activedescendant');
			}
		}

		/**
		* Sets all Actions and events for editing an Existing Tag.
		*
		* @param event {object} The original Event that was given
		* return {boolean}
		*/
		function doEdit(event) {
			if(options.allowEdit == false) {
				// Do nothing
				return;
			}

			var element = event.target.tagName == 'SPAN'? $(event.target).parent() : $(event.target);

			var closeTimer = null;

			// Event that is fired if the User finishes the edit of a tag
			element.bind('finishEdit', function(event, doReset) {
				window.clearTimeout(closeTimer);

				var textfield = $(this).find(':text');
				var isNewResult = isNew(textfield.val(), true);
				if(textfield.val().length > 0 && (typeof doReset == 'undefined' || doReset === false) && (isNewResult[0] == true)) {
					// This is a new Value and we do not want to do a reset. Set the new value
					$(this).find(':hidden').val(textfield.val());
					$(this).find('span').html(textfield.val());
				}

				textfield.remove();
				$(this).find('a.tagedit-save, a.tagedit-break, a.tagedit-delete').remove(); // Workaround. This normaly has to be done by autogrow Plugin
				$(this).removeClass('tagedit-listelement-edit').unbind('finishEdit');
				return false;
			});

			var hidden = element.find(':hidden');
			html = '<input type="text" name="tmpinput" autocomplete="off" value="'+hidden.val()+'" class="tagedit-edit-input" dir="'+options.direction+'"/>';
			html += '<a class="tagedit-save" title="'+options.texts.saveEditLinkTitle+'">o</a>';
			html += '<a class="tagedit-break" title="'+options.texts.breakEditLinkTitle+'">x</a>';

			// If the Element is one from the Database, it can be deleted
			if(options.allowDelete == true && element.find(':hidden').length > 0 &&
			typeof element.find(':hidden').attr('name').match(baseNameRegexp)[3] != 'undefined') {
				html += '<a class="tagedit-delete" title="'+options.texts.deleteLinkTitle+'">d</a>';
			}

			hidden.after(html);
			element
				.addClass('tagedit-listelement-edit')
				.find('a.tagedit-save')
					.click(function() {
						$(this).parent().trigger('finishEdit');
						return false;
					})
				.end()
				.find('a.tagedit-break')
					.click(function() {
						$(this).parent().trigger('finishEdit', [true]);
						return false;
					})
				.end()
				.find('a.tagedit-delete')
					.click(function() {
                        window.clearTimeout(closeTimer);
						if(confirm(options.texts.deleteConfirmation)) {
                            var canDelete = checkToDelete($(this).parent());
                            if (!canDelete && confirm(options.texts.forceDeleteConfirmation)) {
                                markAsDeleted($(this).parent());
                            }

                            if(canDelete) {
                                markAsDeleted($(this).parent());
                            }

                            $(this).parent().find(':text').trigger('finishEdit', [true]);
						}
                        else {
                            $(this).parent().find(':text').trigger('finishEdit', [true]);
                        }
						return false;
					})
				.end()
				.find(':text')
					.focus()
					.autoGrowInput({comfortZone: 10, minWidth: 15, maxWidth: 20000})
					.keypress(function(event) {
						switch(event.keyCode) {
							case 13: // RETURN
								event.preventDefault();
								$(this).parent().trigger('finishEdit');
								return false;
							case 27: // ESC
								event.preventDefault();
								$(this).parent().trigger('finishEdit', [true]);
								return false;
						}
						return true;
					})
					.blur(function() {
						var that = $(this);
						closeTimer = window.setTimeout(function() {that.parent().trigger('finishEdit', [true])}, 500);
					});
		}

        /**
         * Verifies if the tag select to be deleted is used by other records using an Ajax request.
         *
         * @param element
         * @returns {boolean}
         */
        function checkToDelete(element) {
            // if no URL is provide will not verify
            if(options.checkToDeleteURL === null) {
                return false;
            }

            var inputName = element.find('input:hidden').attr('name');
            var idPattern = new RegExp('\\d');
            var tagId = inputName.match(idPattern);
            var checkResult = false;

            $.ajax({
                async   : false,
                url     : options.checkToDeleteURL,
                dataType: 'json',
                type    : 'POST',
                data    : { 'tagId' : tagId},
                complete: function (XMLHttpRequest, textStatus) {

                    // Expected JSON Object: { "success": Boolean, "allowDelete": Boolean}
                    var result = $.parseJSON(XMLHttpRequest.responseText);
                    if(result.success === true){
                        checkResult = result.allowDelete;
                    }
                }
            });

            return checkResult;
        }

		/**
		* Marks a single Tag as deleted.
		*
		* @param element {object}
		*/
		function markAsDeleted(element) {
			element
				.trigger('finishEdit', [true])
				.addClass('tagedit-listelement-deleted')
				.attr('title', options.deletedElementTitle);
				element.find(':hidden').each(function() {
					var nameEndRegexp = new RegExp('('+options.addedPostfix+'|'+options.deletedPostfix+')?\]');
					var name = $(this).attr('name').replace(nameEndRegexp, options.deletedPostfix+']');
					$(this).attr('name', name);
				});

		}

		/**
		* Checks if a tag is already choosen.
		*
		* @param value {string}
		* @param checkAutocomplete {boolean} optional Check also the autocomplet values
		* @returns {Array} First item is a boolean, telling if the item should be put to the list, second is optional the ID from autocomplete list
		*/
		function isNew(value, checkAutocomplete) {
            checkAutocomplete = typeof checkAutocomplete == 'undefined'? false : checkAutocomplete;
			var autoCompleteId = null;
            
            var compareValue = options.checkNewEntriesCaseSensitive == true? value : value.toLowerCase();

			var isNew = true;
			elements.find('li.tagedit-listelement-old input:hidden').each(function() {
                var elementValue = options.checkNewEntriesCaseSensitive == true? $(this).val() : $(this).val().toLowerCase();
				if(elementValue == compareValue) {
					isNew = false;
				}
			});

			if (isNew == true && checkAutocomplete == true && options.autocompleteOptions.source != false) {
				var result = [];
				if ($.isArray(options.autocompleteOptions.source)) {
					result = options.autocompleteOptions.source;
				}
                else if ($.isFunction(options.autocompleteOptions.source)) {
					options.autocompleteOptions.source({term: value}, function (data) {result = data});
				}
                else if (typeof options.autocompleteOptions.source === "string") {
					// Check also autocomplete values
					var autocompleteURL = options.autocompleteOptions.source;
					if (autocompleteURL.match(/\?/)) {
						autocompleteURL += '&';
					} else {
						autocompleteURL += '?';
					}
					autocompleteURL += 'term=' + value;
					$.ajax({
						async: false,
						url: autocompleteURL,
						dataType: 'json',
						complete: function (XMLHttpRequest, textStatus) {
							result = $.parseJSON(XMLHttpRequest.responseText);
						}
					});
				}
                
				// If there is an entry for that already in the autocomplete, don't use it (Check could be case sensitive or not)
				for (var i = 0; i < result.length; i++) {
					var resultValue = result[i].label? result[i].label : result[i];
					var label = options.checkNewEntriesCaseSensitive == true? resultValue : resultValue.toLowerCase();
					if (label == compareValue) {
						isNew = false;
						autoCompleteId = typeof result[i] == 'string' ? i : result[i].id;
						break;
					}
				}
			}

			return new Array(isNew, autoCompleteId);
		}
	}
})(jQuery);

(function($){
    
// jQuery autoGrowInput plugin by James Padolsey
// See related thread: http://stackoverflow.com/questions/931207/is-there-a-jquery-autogrow-plugin-for-text-fields
        
$.fn.autoGrowInput = function(o) {
    
    o = $.extend({
        maxWidth: 1000,
        minWidth: 0,
        comfortZone: 70
    }, o);
    
    this.filter('input:text').each(function(){
        
        var minWidth = o.minWidth || $(this).width(),
            val = '',
            input = $(this),
            testSubject = $('<tester/>').css({
                position: 'absolute',
                top: -9999,
                left: -9999,
                width: 'auto',
                fontSize: input.css('fontSize'),
                fontFamily: input.css('fontFamily'),
                fontWeight: input.css('fontWeight'),
                letterSpacing: input.css('letterSpacing'),
                whiteSpace: 'nowrap'
            }),
            check = function() {
                
                if (val === (val = input.val())) {return;}
                
                // Enter new content into testSubject
                var escaped = val.replace(/&/g, '&amp;').replace(/\s/g,'&nbsp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
                testSubject.html(escaped);
                
                // Calculate new width + whether to change
                var testerWidth = testSubject.width(),
                    newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth,
                    currentWidth = input.width(),
                    isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth)
                                         || (newWidth > minWidth && newWidth < o.maxWidth);
                
                // Animate width
                if (isValidWidthChange) {
                    input.width(newWidth);
                }
                
            };
            
        testSubject.insertAfter(input);
        
        $(this).bind('keyup keydown blur update', check);
        
        check();
    });
    
    return this;

};

})(jQuery);PKtc�\��m�jqueryui/composer.jsonnu�[���{
    "name": "roundcube/jqueryui",
    "type": "roundcube-plugin",
    "description": "Plugin adds the complete jQuery-UI library including the smoothness theme to Roundcube. This allows other plugins to use jQuery-UI without having to load their own version. The benefit of using one central jQuery-UI is that we wont run into problems of conflicting jQuery libraries being loaded. All plugins that want to use jQuery-UI should use this plugin as a requirement.",
    "license": "GPL-3.0-or-later",
    "version": "1.13.2",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKtc�\dK�0LLjqueryui/jqueryui.phpnu�[���<?php

/**
 * jQuery UI
 *
 * Provide the jQuery UI library with according themes.
 *
 * @version 1.13.2
 * @author Cor Bosman <roundcube@wa.ter.net>
 * @author Thomas Bruederli <roundcube@gmail.com>
 * @author Aleksander Machniak <alec@alec.pl>
 * @license GNU GPLv3+
 */
class jqueryui extends rcube_plugin
{
    public $noajax  = true;
    public $version = '1.13.2';

    private static $features = [];
    private static $ui_theme;
    private static $css_path;
    private static $skin_map = [
        'larry'   => 'larry',
        'default' => 'elastic',
    ];

    /**
     * Plugin initialization
     */
    public function init()
    {
        $rcmail = rcmail::get_instance();

        // the plugin might have been force-loaded so do some sanity check first
        if ($rcmail->output->type != 'html' || self::$ui_theme) {
            return;
        }

        $this->load_config();

        // include UI scripts
        $this->include_script("js/jquery-ui.min.js");

        // include UI stylesheet
        $skin     = $rcmail->config->get('skin');
        $ui_map   = $rcmail->config->get('jquery_ui_skin_map', self::$skin_map);
        $skins    = array_keys($rcmail->output->skins);
        $skins[]  = 'elastic';

        foreach ($skins as $skin) {
            self::$ui_theme = !empty($ui_map[$skin]) ? $ui_map[$skin] : $skin;
            self::$css_path = $this->local_skin_path('themes', self::$ui_theme);

            $css = self::$css_path . '/jquery-ui.css';
            if (self::asset_exists($css)) {
                $this->include_stylesheet($css);
                break;
            }
        }

        // jquery UI localization
        $jquery_ui_i18n = $rcmail->config->get('jquery_ui_i18n', ['datepicker']);
        if (count($jquery_ui_i18n) > 0) {
            $lang_l = str_replace('_', '-', substr($_SESSION['language'], 0, 5));
            $lang_s = substr($_SESSION['language'], 0, 2);

            foreach ($jquery_ui_i18n as $package) {
                if (self::asset_exists("js/i18n/$package-$lang_l.js", false)) {
                    $this->include_script("js/i18n/$package-$lang_l.js");
                }
                else if ($lang_s != 'en' && self::asset_exists("js/i18n/$package-$lang_s.js", false)) {
                    $this->include_script("js/i18n/$package-$lang_s.js");
                }
            }
        }

        // Date format for datepicker
        $date_format = $date_format_localized = $rcmail->config->get('date_format', 'Y-m-d');
        $date_format = strtr($date_format, [
                'y' => 'y',
                'Y' => 'yy',
                'm' => 'mm',
                'n' => 'm',
                'd' => 'dd',
                'j' => 'd',
        ]);

        $replaces = ['Y' => 'yyyy', 'y' => 'yy', 'm' => 'mm', 'd' => 'dd', 'j' => 'd', 'n' => 'm'];

        foreach (array_keys($replaces) as $key) {
            if ($rcmail->text_exists("dateformat$key")) {
                $replaces[$key] = $rcmail->gettext("dateformat$key");
            }
        }

        $date_format_localized = strtr($date_format_localized, $replaces);

        $rcmail->output->set_env('date_format', $date_format);
        $rcmail->output->set_env('date_format_localized', $date_format_localized);
    }

    /**
     * Initialize and include miniColors widget
     */
    public static function miniColors()
    {
        if (in_array('miniColors', self::$features)) {
            return;
        }

        self::$features[] = 'miniColors';

        $rcube  = rcube::get_instance();
        $script = 'plugins/jqueryui/js/jquery.minicolors.min.js';
        $css    = self::$css_path . "/jquery.minicolors.css";

        $colors_theme = $rcube->config->get('jquery_ui_colors_theme', 'default');
        $config       = ['theme' => $colors_theme];
        $config_str   = rcube_output::json_serialize($config);

        $rcube->output->include_css('plugins/jqueryui/' . $css);
        $rcube->output->include_script($script, 'head', false);
        $rcube->output->add_script('$.fn.miniColors = $.fn.minicolors; $("input.colors").minicolors(' . $config_str . ')', 'docready');
        $rcube->output->set_env('minicolors_config', $config);
    }

    /**
     * Initialize and include tagedit widget
     */
    public static function tagedit()
    {
        if (in_array('tagedit', self::$features)) {
            return;
        }

        self::$features[] = 'tagedit';

        $script = 'plugins/jqueryui/js/jquery.tagedit.js';
        $rcube  = rcube::get_instance();
        $css    = self::$css_path . "/tagedit.css";

        if (!array_key_exists('elastic', (array) $rcube->output->skins)) {
            $rcube->output->include_css('plugins/jqueryui/' . $css);
        }

        $rcube->output->include_script($script, 'head', false);
    }

    /**
     * Checks if an asset file exists in specified location (with assets_dir support)
     */
    protected static function asset_exists($path, $minified = true)
    {
        $rcube = rcube::get_instance();
        $path = (strpos($path, 'plugins/') !== false ? '/' : '/plugins/jqueryui/') . $path;

        return $rcube->find_asset($path, $minified) !== null;
    }
}
PKtc�\�(%%jqueryui/config.inc.php.distnu�[���<?php

// if you want to load localization strings for specific sub-libraries of jquery-ui, configure them here 
$config['jquery_ui_i18n'] = ['datepicker'];

// map Roundcube skins with jquery-ui themes here
$config['jquery_ui_skin_map'] = [
  'larry' => 'larry',
  'default' => 'elastic',
];
PKtc�\�S%�CC6jqueryui/themes/elastic/images/ui-icons-datepicker.pngnu�[����PNG


IHDR  D���]PLTE�������������ڒ�������������������ឞ����������```YYYNNN000��٫���^��tRNS�@���ߥ���``008Kbr�IDAT8���� D[�5�����@zѓ~	$mxnҰ��C�
~�%���yA�@�FP(�S�P�U����
.�1��t���C��P-ϭ��E�W����~��yǭlƘ-��OδO�ړ��Hw�IEND�B`�PKtc�\?Pd���:jqueryui/themes/elastic/images/ui-icons_444444_256x240.pngnu�[����PNG


IHDR�E�r@gAMA���a cHRMz&�����u0�`:�p��Q<bKGDD�<��tIME�
!%!���IDATx��k�%Gu�m;���!�^��l0�[�HXĹ�H��:w8;�������g1s����]�&��<�����������Clfq؅!,"�·�Wu׫��{�v�Gwn�>U�UuN=�ΩS����d�5�x^/2ڄ���̈́�,ڬ+M�^���O��r�`:�S|{Y�`���`k?��a��6���1��@�5S�#�Gd��)�q�vXu�B@�*�J@`H�N�A�1n:�P��,D:A��q+�=��f�]S��q!���+Lm�>|���XhN�^�4
Aٔ�3C���J����`Z�Uێ=s�4����)��-��`F8�i�RY��CP�����C�Z�:ڬ�{���p�����@������pxh8�4^o��;�o2���Yؔ1m�=��	v�Ա���E�GJH���i��U�g�>͵k�6��R_�}�Sk��=��~5<eҷ���.��ܙ�n�oF��d{յ�U�^@��>]�L��-oz�	��e��%PEdR��=�I�l�O\r�6`�S�`��dxup���/
����@������pxh8�t��W�믕��9������К�� {��\B0�]��(eQ�����T��Q5�[	\B��{��V������C�!4({\�h�w�g�{
�Kh��l�X�vp-��Z�^IA:�Ш����ur&�%5�t�S���Ch���NKgn�\Pv:�[(���ݘ8�nb�K�Uk��]Ҷ�A�^�50��\B�i�.�.��4l]�[mkA���L"��.�v���2=�[�Yo�8�2��c`�`��
�T�y�6�ʸ�h
��V~~��~%����pxh8�4^/
���C�;K��	�pшV�g��RH ����Z��Ҳ�ܭL�fSm\�tl�����ehW��0�K@�9Լ��E��V����rs
�Ͽ[
���m�m�������ۚ^ؠ+o
sq�nۂ�� �fIcρ.�w{��ҫ5E�9�mcy���PJ٬0�)��b���^A��n90W����{��ϷŶ	�����Y�4P�- ��**� ��:�P�6=�
�|W�C���/��#�ڃ��qL���r���9�˒��
�'0��3g*�)�l��f_*��T�՜���)��������\Rvp3�
�."̣`��nի.��\ߤ͔N�Cm�s%��,���F^��pxh8�4^/
��^c���
���`�W��]S��o��]`Y����L0i�]V	c��>�
�z��\e�X�����oJ}@H��ٲ{�-.6f�FV;��u�L;[�@.{W��4m
���%���:���*�-��c7��0q�%�z�}g�P"^@Z�eO��!A��1�m�}�vu&6�z��M>6i�UVɚ�$�����dzu!�B��� �C�~yXM2��E/̽�X5��h���!�Hm�&�O!�w�8dP��
Qՠ�/PkCm�,�M{�lu�Z�:�t�D���eM׼Y�+�2�~/�����@������p���K[6����.ۤ�	���-���*6h?C�r��]�IL��O�XHZ�pU]֧���@�*�y�;n�-�J��R��=�O$!����U5������G*���"R}��ez@�M�,s�.��5&{g㧫�/[�Sqs�8ľ��*3{��i�b�W�ל\9�:���Z!����u�5	r�UЛ2�D��bz��L2�9��O�[��_���l����O�p=VBG"��"X�_�O���7e��*���َd2�'j
� �t�@d�'��Gx$���Y���.�d�����8ދ����+1l!��£/��C}���>]�Ǧ�@������p���&+
�}I�2Ƣ��]��A����68T9�G-�~B����2q���z^{��x\�S\�:�\�SJ���~Dݯy��n�	���OH�$�B�I�|�2��W�C��ܨI:]$:�^�΢b�K<�a!,�&�r�s��8X�.�P����~Oq��{�kY`Xg�G8���3\�I�O���-B�5o+c���"����e/
�Ivi��((E d<�^W�\��-��L&����9I�����)�ƥ����8;���!�5p
�U�a/iΔl��E<�t!(f}7 “�	~̧����jCl3�^�II�8,m�>,�U!�9�z�����ǒ�k�y�E<ߐ˿4��=�Y(R)'b1���do�+�]K'�q!���F��Pa�#��'������xAR(v���w1w�s:�?q'�nf��OOg���c>�l.b����dp]
V�?�p�iC\����z�X�0�k����]���c��ަ�^BXf谧0�5�U��ڽ$�B|���	��y�;�A��.��|/���K��x�f�ಈ�sO)�<�!�qf5}��̻��<���A�3�M��7��qPɤ]��c�`��Lq���h�ȴ TW��8wF��
��L"�z
���^`G�[UE0�h����ȼ,h���]�z�j��{ Ȱ�$s��b�Sd���W�.���)^���!���|����W@!�;�\�l�<�!�)b9yˁ�!�E@b�0��/�~�R7^!(��������a���$�(�<*�@������px-<��g8A����l=\N�tìR�>��e��Jyˆ#9��s���}�|�R?��B�6�3c�%����]�y�m�o�V��^̔R��4{�����r�Zp��u�r�9n���nV�&������
�B_�q�X���0A���_�E8�a/(�O|��3\j�ݥh1i��q_V��6�(!�,�mk�b?�'y#��<�M�r�CLtz鑫��W]�o�/.�\�3��l>��CH�4Z:`��3l�w���ɒ5S�&�,�HA	���?���O7��Ȫ����y�*9j�n�Rko�{lp�S��e�Y���<Ӈu�����r!����
%��g�td���3תk��7��NH��� ����5�;�Ǜh��
��j�<s<�U�갆͙��<�>���y^�0.�e��L����b����?�
��[*�w��Դ"~L�m�i_�$����;H�[d�OQ���Wg~Qa��v`'����U,WS��}a�-|���K��Kl�1���
���=���6/�[�:���IP�6w�ʟ�~6?7��9��t��Bɺ�ȕ)�C�F���h��k��I`�z�6i���F��s�3��Gآ�fP��؟w�#cXS�����6�χ�;>*�'"!����S��~)Z�!`�@�Q�A����%&��?g��.n^�[�CA�9�`����o1To�����(��|��5�= 4��>�NE@�p����p��~���$�S&�q�N��w��8JHH�.ad�/�.uS�?�͙_7��)D�ߍ�0���~�>-��ӗ��FZ�c� 1ْ��h6���G��8?S���$�������eЁ�?w�!� ����𺀆�@������p4O��X�N�IT��rH�<�ݡ;ކ�L'P�5����h&۵�k�>��(��G8�=��;xw��BLQ;F��΋�n�c���-�|��
���+��y{�"����A�GH_�Y�$o��D�YL�v�6���}�If�0͂bQE<�cg�&��
�Kq�����X=�W�b�N���nW�ǫ�]�"ټ��r��ͅC�y��ϐ�L�D�����U��˳�}/ÀI`�+�&p���')\}���>�/��|�OI�
72��~�~��h�2D��9�|��PՄ�x0cEQ��^��.�O�9ߏod��������(]4�#eL���T�g��\g1�<fQ'��u�<�/?�'�^A=�!Ў�_\���1�����c�q�EA�=�!�b����.3�`�rij3$�
�Sz

sWՔ=�,�ЉZ?,+���L�W��+�<��ڿ͙�#�c����`':��6Δ.S�K���?R��+@�0�z?!�X��,����n�Qq;{^���U�;+�|a�f�dzBVK���|=�h'�_�i�$��n�3<]%`�5�<�(]�LH�v~��A�r_a�U���7Ad����n:�p.����NE�:ZW�\��U�rf��	���,b���`G:����"���vGE��'xx1�(b���y��\�9֜��\��\��D��ح���Dݠvq6���.�8D:����)��=C�o���-�c�ml��`�i�v+���
�<�4!�|�.���iR?�q�����p��>�8bGnSy��A�RJm5��PV8��@3Zt������i���nu���g�c�"Ìm�4w��IV��$����!�I����c)�d�}�E�~J�^������/qwGb���*�X*Ț���qS���h�.�C����@Ñ�CZ�w�d��k�5�{��R�q9�Z�(����>�
^��0��{�G������;r��J؟�н^��"�<f��?Qb_fƅ�SEթ��
��&���j|�2������K�:
�
X�*I��F9��kY�"��F*����F�H=�jZ�W�<�sA�>ټ��'5��Xb�;�m
���HH�b<RH��?��`�i {�4��<�^�k��zR�.����ۤ��vG�!����Ie��;"S��y�6��	�˜�e��h��F:��+��O���W��H�?'��u�w��q��*�p1a�Ns��Чc���ȪA�*����7��1e�����Ne��ӣ2=@��[�	`z��ʸ���?Pӑ}���/k�廓t/<E�{��1n�=_�۝(#3C���P���x������4%}ϠW'�;��[=�4wGZ�S�6^�$�!��SJ��vs+�s�U�)�t8`�M���Á�,�ɛ�1�`<1c��X�Ixm`������pxh8�4^��u��`�!+!P��	#�c�U�X-��`'�B�F*<-m
6"MC�����wDA?"��A���8�U\e(�;�]����N��\��{�x!�5}Qy�N�lC
G�[�;]|���:tT���:"+�j��6���CV
��6"�aIA'��r�`��*�_oQ�'�'Y4X��q��

X���b��)�`��9	�@���N.��b��™�,�A�i-ݞ<]YL�u�7K

a��!@7��!�'
?̝�@:W)Oݒ�n�,p9�p�4&�u3uK«���pxh8�4^/
G^L{o=F���4�6��}�g����%@�n�~�r�J&ϰ�1^G�a�8��=��~d���A��͗x%!��ZB�;d�����L��8�[v��o��BZt��p�i~ȅ�=�!p����
vj0�T���#w��8ö�?�kx�k2����_�*�8����n�.�j�\�7yW<ÕLr/��.��
�W���{�s��<�x;�8�\<�H;��v�
!O/��}ytOF��.7���Q��7��P���ȳ}��/#E���/���0�t%�9�;�M�KL*��%�!�������V
G�+������A,�<��M^΅�OH���s���2�}d�����O�w��Q�y����4~��pxh8�4^�Tl�ԥ/�ń�EŹ����|��WD���y�����K����7���4�2ξ�.�\�\�y8��K��?/�_��6���~�o��C@�?�m�U��,����h�Um��ߖ~>�~ķ�ߖs����4]|=�u�K"�*V���J6���C�;�n�.����a��Po0K�3��Gث���������Rm
�3OGC�q�8��	5�����@�؁V�\R���%��g��9��[3��	Ω�D�e��Gh���
��
��{\����&>̇�)�{?,o��P���篘B�.ܔ�)���хd�߃!@Lm���W�I&��,={v��{<C��1�Q����_�(6z���V��*�_�ԒpL�@�c��,��vR�mm��ߖ~>�~ķ�ߖS���t@�ե.	����,GY͜�S��0�]8��Ӽe��.ߠ�5 ���q�Fw���_H����rnb�uȰg3�.ߠ��
B�
l8�4^/
����@ÑU�N�v�G����j]�.�c�P�nݚB���N�CB^l\g�H��3�`c�Ηw�����C���������C�!f�	Ӂ/`7��(��0^!9�9�z��&@%�?2f�f��-�(s^���=*�/5^/
����@����غ�B��,���Bf	��{�۬H <*B�}�gа�n���Ags �
�A�ֺ=�{� �]��CX�SC�W/�1���'�-�VXeEٶ`5�)7��1���~�+�`��%��?�`�p�x�K;��*u��~�佁����1�<���f��e�*��}�kP�#�ʱ��	�Q
���}�P���zyh�J{(;�0����5�4[W���?k���*�%tEXtdate:create2022-01-20T13:32:23+00:00�
��%tEXtdate:modify1985-10-26T08:15:00+00:00"�StEXtSoftwareAdobe ImageReadyq�e<IEND�B`�PKtc�\g��:jqueryui/themes/elastic/images/ui-icons_777777_256x240.pngnu�[����PNG


IHDR�E�r@gAMA���a cHRMz&�����u0�`:�p��Q<bKGDwd�ǭtIME�
!%!���IDATx��{�eE}�?H(cX�1�²[R�`����J�H��E�$U��Œ�cE���Q�2;#��fŹc�,Hj�cQ5��5P�qK���$��1���%'�W�9�:��;��=���s�=��>������׿��h2�t</
�mBڃ��f���6+�J�D��0���&�s؇N��_�Bs�&�ڏ>~?��
c{v��j%�ؿ��)��#D�E��F
Iܤ�G���
�R�SơC��$ELځ!�GD�NP)~��tϷ=;��wהme�B�zs�
S���M,4�R�m�� 1�z�̐!(�hnE�6�UjնcO��6�y7��Yʶ~fK��1l��WM�.Ӟ�*��+p��ŔG��Uz��F��Qb�^��pxh8�4^/
����@����q��MF{7��2�m�0?�Ξ:�vux����r�n0s��Os횶����Wr��G��hA���2���t[l{S��O��7#��N�G�=��ZƪS/�co�.����7���Vk�2O���j�blc�l`.[���<%}a������x��t�7^�p�����@������pxh8�4^��CF�W�믕��9������К�� {��\B0�]��(eQ���G���؅�jl���*�,)����C���
r)BhP���/0���r�H(�0��,@�%6���qp-��Z�^IA:�����ur��%U|��)I���!4��ig�371�������E:��q7����n�05A���uP��y
̺8�Pj���K�9
[��E�Z���.�Ȫ����.�L��u֛���L��;X�t�0Ua���2�9�@�às���_!�_	l8�4^/
����@����7�&�R�?�~¥\4����F�>�2H6F��{�V�C��l9w����L�.;�S&�2�+�@��%��j����n+�Nti�����߭t�h�׶K��J`��mM/lЕ����S�m��mu����@��݅�=�n���"k�ݶ��m�EJ)��:�uPSV�+ (�-�*ty�}o�����6�ׁ��vh[�Y+��[@VUT���:�P�6=�
�|W�C���/�&#�ڃ��IL���r���9�˒��
�'0��3g*�)
�hv�/�h*�j΁D���ػ�{�K�n�T��E�y�ۭz��p�뛴�ҩ~��}��� �,�#	/
�_
n8�4^/
����@�1Huv��l0�\�ޮ���7��.�,vYً�&�4�.����n��S=�n�2o��_���7�> dAb���~������j��.4�Icg�hÉwu�N���Љ�^�M�z�3:0뫲����B�r�fSz!�����]�sUϷ�lJd +
� ����|��L�Wmu���j�uQ��G�	��(�"ö���ֺ�c � �B�V��M+V=A�=������4S�<��#s/5V��.�~�{32[�I���AH�]$	���!���jm�n.�R�$��V7�ŪM�I$�l��d�:X��t͛�(�a��xxh8�4^/
��	@kXI�����M*�Љ�Ѣ�)�b���04(�.�M3Q#?]!i�UuY�a�N�Y̫����U��*E LJ�{���"
���O��9U{���D&���"2}��ez@�M�,s�u�kL��&OW?_�(ȧ��>�qH|gUf�xm�d%�>��9�rV��;UO��2�_�$Uk2���5����?��� �P���쀆m�#�.V������c%t�H��<"Q�����[���[@V�:�<ۑL&�DJ�A����"�=��>�#�|^����eݓ,�Ҵ]^#�{	V�~%�A��[n��iG�9@����°�ꙴ�>]�Ǧ�@������p��̦+
�}I�2���]��!��q�mp�rJ�Z4�6�<!Y�e�,��2�l-񸌧��uֹ���"0k����_�=������r)��O�3%�^����p�&�l��{
;���GX�I����[�ʝυ��`	��CU�sD�=�=��1�e�q`�ᄶ��pq&�?��v(v"�y[�%�D��|MH�( ϰKS��@)!����_�*�,�&`2�巈��I"0Ǽփ�n�۸�;��1�g�
≯FN�;�B�%�"�0@^����w�b<	���|ڐ���{�6�6C�e�� �#B�B�H}�AHE`���!�@}En��evp/4��/4shV��TʉX�����l%�kI�$?.�����X�*�y"��!�I�f|��d��#<^�L���V��9���x/3������"�O?������Y\��U���E����h&(� 8���0h'yW����'�w(����:�)yMj�m�v/	����{������_BPd��X���j�@��pY�ǹ���Y��0�8��>��_��Umv� ���&d�J�8�d�.��6�B�M!S�r,�G-o��*��q�4[1=�kجDW�;rߪ*��v.1�X�`A3D���ů����b��&����N���篥_E��Ds0�x�+C�d�ʾ�Ut��^#�����Jg��
§���-�+��#���� bx���J�x]��`/S�0��~���&�FI�Q^/
�����h�1A��YZ��p9y�
�J�����.��&���
Gs����}�|�R?��B�>�3c�%���k`�.s���6�7�+P��/eJ��}���1^�U9e-���&�}9���w��nQ����������Г0�$��:`�.0A7��N�.p��9�^P�>;�g��P�K�b�2��>Q"�Gڴ�����){zx���S��O�fb���f9�a�
:=q��	.Ƿ���C.�Yvh|��!$`�-0п���;JzR��d�L��Ru�H?ZP��z��3�2��M�-Dup��:�\%G-�.���V��'9�:?P��e��ȳ}X|���.�].�{�P�Z�����S�p�ZuM�&��	��t�����p��x+-�2xBZM�g�'�jSְ9s�����g�=����e��s����^ʿ���7y�B�� 1�R-�&t�@�Ƙ��eIb|~-�Á4�h��"�˴��ϼV��%�I�;���{�D�&1�������=��/s�/�Q�&�3>;4��'R�4��;��o��|���&A)��I��V(2���@��2��7�K��D�L��uR��N��\'�I�Uۤ���ygl�Q��P�[a�f�A�nb�|^Q1�!��)���C�p;�#�-����UBu���S����f�������%&�?g��.n^�[$CA�9D�`}�O���&R5j�Q|O� c�]z@hd�}����
�vn���rw����$�S&�q�N��w��8FHH�.al�/�.uS�?�-¯[
��Q�ߍ�0���~�>-��ӗ�쏌���}��dK���@�3>����Lb�,�㺪��k,Ox�AJL��
Q�
��4^/
����y��U�4�T���t�S����m`:�����E�0ݮuBk���@A>����Ż���
1��y0�up^��f>Nȭ�J�ǹ���"o͐�g(�m!��dz��5p���a�휛�=���Nن~Y�/1��YP,�DO>�'ح�E� {�R\)|uz}��(�BO�U����#/������}W�H6����gvs!��Pf^��3dB����3u�B�J|�sy���e0	,p%��dAN�؝���"���o��ԧ�E~��)�_�F�xQ��/�O^�_��V=g�Ow���
V�.�+��"�����8<�`7'�d颹)c���RDz�I�Z�X��E�|�7�����F�8S�@;fqYw\�Sc^s��g�qƕ-����E��}t�a���K3�!yo`�1���0wUM�cʢ
���ò�Z���]��!����p�⿖p���tz�8S�L.I��P�/�H�1E�����U���?~����6�ngs���87��
vV0�������QK���|#�h'�_�i�X�u7�����5F4x�Q����F��t?��@T��C��7Cl����n6�p.��U��NE�9�V���9�rf��	1�k	���`G6����"���v�E��'yx�h�Q����ǹJs�9�����{��_����[q/�\��A��lv��]��I�l��_D���N���3t�&�����e,���{��o����u�'p����0M�:��n���C��
N#���7�g���B��m*/z9-��VS
�e���|
4�E7�ώ��\=�V�^��h~��Zl��������<ɪ��B�t�����?`>6ɛ�r}�a����/���O���E�ᯀkZ��qw,V-�󚂈�P	�hg�M����y�	^/
G^k������Eگsנ3���K����빢�����x;xӠ3�Qbp����C�Pw���V�ި�N��U����/3
�B�)AQu�~r�QZ�U��Q�U���8?�>`�UGa�Kq�/i��B��!�Rs�"�_����� j�k�Q��EOQMk�j�G@�p.h�O6/���I
m!����Ҧۙ��D/�#�LZ��ۉ��@�-,yJxFA��Q��_���\�w����/�臸���!M
�s�>�H����Xguy�Q�i2��*t�)��$�������5�7P��.&,��iNs�t,��,�j��JD�q[��m��7��1c���vW�!����Ie��C����O����χ8%�Ge�Yko	�v�+ʸ���?Pӱ}���/k�廓tS/<E����1��}_�۝(#3CH��P���y������,%}ϠW'�;��[=�4w�Z�S�6^�$�!E$��-vs+�s�U�)�t8`�M���Á�,��q�h<1c��X�Ixm`������pxh8�4^��X��o16��aQ��H�A�	�0�;F[��Ւa�A�vr�*jd��Ҧ�a#�4t�(��,~G�RJ*�o-O�]�U���ŪiK �+8�3�*�d�ބC)^H~M?����fg�lC
G�[�GG ���%П֡��Ψ��YT�O��	���Bٯ��yXR�	�>��F/X������[�I�3,*��S�/
���Ţ�(�������`}��D,(�"H��`�p��4�l�bZ�D�'OW��h�+RCC�-yЍ�Y���s'!����nI�C��C#\r=��h�Lݒ���ï6^/
����@Ñ��[���9�3\�;4[C#=��G=� h�Mݏ^NW��9��:,��Gs���n2�C�d!���2�&�s\K�t���=�:�-�*��%���A$-�����G8�4?�B��8����;5�F�T���cw��8ö�?�kx�k��j�c�/~}�����_���.�j�[\��xW<ÕLr/��.��
�W���{#�2�9x^�vrq��x^��v�e1�e����<�R�����p?]na'٣LOo&q���c�g��y� E���?���Ga�+�J$s�
v�����̟2$J��LqW3������W���7�7�C�D��0~ķx%�>1 �X(Ϲ
G�`j�!�������F����o�p��r������pxh82��P����R�������
�^�[����~F:�.��f���~�o���8�uw���
^���u]��Y��
�O�	����|���@4d���mS�Q\���WӣeW��C|[����V~[���OK�t�Mt1�R�D�U���͕l��w؇zwp��]���W��v���`��
�鑫���K�~����-�ְ|1�t4�0w��q>�Psߜ���Id�hE�%u]�\�1{�Θ���M`OpN�$</�/���#����=���65���|���S��~X�B�!�~��_1�j]�)}S���/��G" ��C@4	���F_&���D�xv��{B����(�r���ݯH�j�$�+�o�د~jIDp\�@��+yz;���6~h�oK?�B?���o˿)~�yUY: u��R�D����"GYN��K��.F�޶i�~�o�����p��w��̟K����snj�
س�~�o����!
��6^/
����@�����A��y���Q�6p<�ZW��K�:��z�[��P���S��Y7��:���� ���� /�`d�8�Fz�C������Tx�Dq���ۜB��k ���3|�|���9/`����/
����@������pl]h��^@���l!���=�mV$!���3h�Zw��Ags �
ɾ�A�ֺ=�{� �]��CX�S#b�^��9@O [��ʊ�m�j�Sn����3�W��W����KY�|�	�|�N�H����*u��~����h�=�kP�#�ʱ��	�Q
����P���zy{x�U�Cٹ�q�����	���غ����椛@^��%tEXtdate:create2022-01-20T13:32:23+00:00�
��%tEXtdate:modify1985-10-26T08:15:00+00:00"�StEXtSoftwareAdobe ImageReadyq�e<IEND�B`�PKtc�\�64jqueryui/themes/elastic/images/jquery.minicolors.pngnu�[����PNG


IHDRf����z�IDATx���ū�[{�ό�03'�0}�D�|�033sDaf2�hg*ջorO�3}^y�-��zz�v|�m���ɷDz��6a��-��P�a�n����7�d�z�m��G?���/zы4os�[[�
��'?1/x��Z�{���u�$!vS�!��N�9�
��+��U�1"���m��j�ܻa�A�3�kM���u��h�oˀ�#&�I�4M{tt���^���Ӟ9s&~�ߴ�x�;���TN��hl�ܚ�ޒ�n�,uL6�;:e��=m��)�)��<s����(c���#c�����X�7)>�bXv�:+���E�h4���fO)qn����r��XJ�2�J��>��H��ݤ=��}$�l(��N�qG1�#�5�{:�֢i��,�M�Wi�z��4x���ٜ�*X�<|}���V���%_����0��%��?��㶔�Sn���2�ۣ56Y�zҘ6�f�o�]u�k�xB�}�`�*K�� �(�Ǻf���ÿ�'���+4��c��[)�f�)~@{�El� ���x��,%����EڔW�s��_����c�}}��eM]��a��;��ន�ܛ��5��t��E؊yJ�f�f�SCV-2�����Eљ[��x�Z��s�a�Υ�M��o�l��?��f�f�y�s��Ԁ��4$�|��o�AE��9�ms�]�P0�Z�=�W[��x�`��F�Vh�A��H k�De������)���c�=����&'�VQ��6:��+l�	�`�����m����u�U�6�y@6:Y\�3��\
f�S�f(hE�x�3}����~0[N�;�Δ1�)٦�
x��(��m?�!do��8ot�ڦ��~��{���׏T�hԩ�}a�_.�|��.=w�x��t��;��Ʋ�����4��{����;�![�
;i�0c(+��=��ؖ�*���<�l"���*VV+���f�=�k���v�}���7f�e��T�;�M�2�v@�K��F@�g
PZ_�!�|,����z+��[����;�-�/8c��?UnK�	bU�Z�h�g0{���}�`��@�P�q��;1�_c�����k0��w��1������5!n
`Zt�9�3�/�����hr W�i
6CY$�5�l?vww����vcc������������6��D�>n����)��>��wq�Ļo��[bv��R�I�@�bԑ�	ܐ#0 s&Li���i��>7/�A��ЉO�nv��,���K,*�6=1+���b2��n��Eq��������y�3/qڞO�ie�n˼��ݔ�zS�p���i���ڊ����:�@���}ݱ�܁z��+a�v|a�����R��b�=>��Xh���!�kts��_�1����D{�gk��ӿ���W�NW�1��1��3H�_v8�߹�>��G��
Cg80���ml�����
�J��v�p���=�k#�s4�E6�����7-���~��̟��S���	��VXb_�,�
h�����l���K��/3~x����¼-f��0��fn��_��b`6�����|f��)c�'~s@V䨞Ru^ ���Z����`�Z�V�aqw�.��YZ/b���XK`6�0V|��"��O���mmm��)����n����^�1�69N�>0s��M����1�AkL���lrb���/8���l��N�`&�>�~�ˍ84�S�B�B���`��5A� ���]�����	�:qT�nkE�N��'�]#�i�M F'i�9��+��~�492cy@2�Y�?J� ��j���H�<�0������
�@�G�2���A��d��J��f������S�cX]�oux'���>k�FN���`!0��W��nX�S�#��q�F
���U�9�G�B�{?�;!��ժ��P�rbv�is(���-�|�>xS��(��R�%��2����M)s��T��m��To����!�ә�N���fOyI��g�K�@�0���-fG�3�=��c�,��J���Ye�Բ�������<���ϴ�����8���3��ݶd˖��f��=}�ꪴ��ˡUlF�{�R���ν'�`�@��{С׏m>����{E�U"���
�V����9xOX��`Ek�\of�f��3�*��Z�B�F �ዀ����fM1�ٝw�Yn���W|~	�A�
�[0W�q�7�UJ��M�[Tlj�����D�Awغ ��>�<�}�P��V���g&�e����C�;@V����6��w���}r-�8�2zе
se@P&r��c����N�Ϥ>���`��8�Ùd�R�f�PF-q6��g6g���7��
�fmf6̇U�~3�DV��@D��!�1g#>A�r�fݕ��B�	q�1�e"ͼX����rʃٞ:�����~E-�]��^b�B�잝�X��š�c��f�p�k�Ry˰�r-���k�6�=�BYBh<�1�|����ٳC�0tlR �[W���|�Bu��[V��������j���,h�''L���m|=�YQ0cT��Q�BV��2S��`0�%�f�q뭷v�������2�<�@��/:6-��=J�˨���Z��9�/��-Z�B�1�q�K(�1+���Z�7�n(�N�z5�@��{��@�H���̞���xVB�K�ա(�,1x���:e�{��	qN��*�ѣ�D�¢��0Z_2
V���Z��@<���K�km��=l��N^�#n<�,��^�C\@BWe*�8T��Az��E��9z(150sD"�8pQE��O�p(�/������|�=�7wjk�v4��c��@0��gr;G���ڿ�}�3
�V�F3���13H��)f���Z6+���<}f�_E�(=@�Qf>�^��)f����ݵ�Ҧ�U3��tiIf�k���P6�9?tQs��0o�N�;�ry-5�1�n���W��Ŧ�`6K?�v�O�7��!���f�Z�,]D?�+]�Ur���>g}(X�z�DP�0W�@�5z��
��ݻ�����9	yD�!�I��mU̬F���~4�������͕�n�����WQ����i��-zaB<�������E�9�)�����2aV�ʨ`�g����'
i��{6z��8���y	iTŌ�?	e< .g��!�L�k�{hN䑥쿥����W�#�̔���t ў���0E����p�Y_�sG!�BK',
F��2����`�^��ҩPɏU2nK�9f�H�����n�p~�a�m\��3�>e*�qԲjq�֢z�0ZB1����Ə>��q�A�(C!Ŭ�d�9��?�S
�Z�����R�߀
`+3�5�c�e>�I���kV;���Z^ڛ��ֱ��Z`��oDP�cWU�(��r���e�<��l0�`Vs�f1��:���U��b`�MH���Jj(�)N�����0)ft�s(�F��_ê$ƊY�������gUqms�AZ3����p��K�_;��Hhb��~��I(c�ۢ�$��pzV`�CL���
r2��y�~�%4�+g�	0 c�7�MdpS��A��?�e'����]3S�
!�,��µ�L�:�����8n{ִ*o��P�2�^|��’B��'��´���p�3.CѾ�Ϝ0c������ߴB�Y����Q���2�:6qҲȰ(��?F�e���8V��U�iPE¯��I����ٗ��/�0SHC_�ʸ"m*J���[��N��f�}w��ًk�Ô_T@L2-���;!�m�̨���0�Zk����7�)��������P5
c�f0��O�00[�d0�/�3Q~�/�iǀ'`��pE�Z����B��$�P%�g@X�=�^�L�[_�H؄C�Eamw�`Ж�0ƒf�Ȫ����V0�ef�4(��pF��W�t��>,���l�1��L�b�5T����f=0�|�K� 0/l�^n}z�Y���|FNՙ��%�(�Yݙ��jx̰	�æɑ�����}���k�\S���j1�h%�B��3�a��7
h��?LUC(c���ʊ�!j��(�����E,�ќ�7і8!�:��%�v5��h��<z(�,�Ld���3�3>�B����]%���Y <
eK�\ڢў;�9����=tɴ�[JI��
��#��~�l3����j��N�}3)���&�`��*�\���;�U1S~�~p�(�gv�4?xJzO�#���̂��lJ�*
�[M�f�3���f
�~t��sGꘂ�*eP���F��l����(�f
fk�__��W��l0{�T���QcYO�����I���y���0��^��^�2b<
_�O&�	�*W�4�sCS�`��i[s����)b��PU31�'�ѽ<��pEB�B1�YS�Z��9`W�6��T0kyf�es���Q.ው��qM��E��Xp�F
"w�������\R�f��~���"eC�CU1�m['��l��R�[��ʬ�~���dm�tL���7<0���(��v$e���r,��i-��ԉ@(k���:M���@]s�{+�:x���aS�w��<��j��b9
�
O{�i�ߘ�K����33�fr�%>=K�����V����nR\(9fy��bℙ�4?�.q�<�f�J�PF_53����_n5�m$����I��T`��a�.�D�d	|��k�,T����&�ŷ�׾�Hkp�����[�P�	��Pƭ�6��/��i�l���f�a�ޟ�Ive��}�0+D	��'�኱2V$NHbx�����.>�P%�\n�%�z��*���d^�!Љ�l�>�|)���`ƊYjC
�����0��0C�Y�3+5Ϭ������3c"�e��a���xF��^Un)S�y[�>�9fs�ӗ8��q`+嘑�}� 圁,s����L!�
"�Xj���2�P�i3����*��+�早~�sXKV�B������bʦzA�b���E{.�B���,��ȉ���R��
(r��[�%���U�%E�d�	���,��:�}�B��s��8mS���k�dZ%��*ZF�~�K:�Z��Z�
�3�T4�m(�����Ytl%�	
~���6�o�>�a·���qjj��������<S��`�06R�Z���ֲ)6�gv49d��*_��a�^��b(k�o〴�j�3:ϬT0���I���~��.�	�j��.2���2�N�����-��BW�5̇��u�L��V���XA���G����1�ג2obJ��O��00[�d0���K��x.��w�(T�J��	H�����@V������PFV��EU��j�5FV%1V�
�l�X�̠�50�3�p�4��Ԝ�RU�;n�0�cn�"�S4��R7�,��RF���c(ό�?V<�8>�q� ���
�4��)
h0���lU�Kr�0�s^��2ߞ�8�l��Y10��I��a]���"��S9f�W�.���t���.�ZX�8|����T�}q��dޖH'�qw��
�`]��ȃ�
Y�����6��/��C(#A'@̻���t^_t��G�w��"�,j�zQ�"��e �
̎����)ֈ�a���ʁ�c�?6�R�*fV�К������i,QZ�"�n3{0���2B����L@f�4)`���}{꧟M�޾�#�,4�������(�(�9@&��r$��OV0��Z�0{�o��{~��'ե��ؿ��1[�d0���G`fa{~h���Eu	��X�t��U�t���l���&0�Ϭ���f��=���KW1Cm�%����?�3���Yf�1c�%�e��n�Yw�❷��T%����8�W�]��B�����
ʲ:4f3�ߝ
���B���9
Tj��d���!�D&�1j�Yb0�|���9J�ZC��#8�b�Pg��
�����PW���x~1ϸ�PBF��>3	Ѡ�t=_��	��;W����PHݢ����X��9x�/�$�u���ix�vV�|��qK�$���{����(�.�Ls��Ҵ|�|3-r�� |Xڄ`c���S�-���8[��_iρ�/O얀�8s���o0�W(�E5+��O�ώL������#��P��N] C�1Q�ޒ͝H(���e�6�5�3��m���襤�����=�>�=���:�e
l�����;̎L2�]t�EP��/��F�dk�ET�Q�c�z��Oj_���W��b���9��(�,mv������1��:�/����7�)��Bn�w3�0 �A1C~Y��a#3w�6�ڣ<�˖�⿽�X�Z���)�g���[8M���F���Zi(����ƒ�o���D�L��Nl&�l�8-�u|>�9fpe��r�\8C��>J�g-�	R��X�,_�ka:���><�	S�_'�?Ps�t�D?/�A��m�Lr�)�X�lkO�
��B������Rԏ�k���1lM���E1�#�B#�+���U���7)������i���s��ML!C��C(��>|��PFl$��J��6ڭ�lF�����C�6��~mk�
�PFp��)���&�qH㄄2�`ሾ�G[�j[��֞��Q��Vu�*�}�f��릘��m��`vQ]��y`��?��l��ݡ��'�.���I^Ԩ�#�:/:c�@�#�SV�څ�?x.<��=uM�u\�p�h�pN���2�u���������0o�!����++M-�eT7����
b8Ӭ���F����͜^�ݗ@q�ng3��0=`�B}?(��"9��`����^�}]N��E�]
�a^��YE��V=%-QqD�����9f��,�	����B�d����0�݀-m#���<$=Եԍ�6F`�g~.A��|&�X���	<�:�
*L�%v/�A�#�dt+p!;?�Κ��Og��~2-.����s�"��9e�C�U��}QN+��=�� *��&gDQ*��B�P�݇?Ml���3�t��P�*�(2﯃b��r
�0���z/�ћf��Ίk�Ye:7���lC�ן�,Ĵ�d��)}��@Y��f�1�Rf`6(�[#��:���uo��C�?���Z�ձV�ĀV2`��̵�Xd��06v(�֭�c7F�?��Ei'V�Px�=)��%�]W�;`��-+�э��n��7��C�04?ɮ�7�|�f���hueWC	�[aKy���]F�ŀS�z�
7F�犈9��qB0������'WM���6lӬ���eIU2L���0�.�L�d�cW�V�5e�չvh��+�s7&e�)cҦЗ<4�/C)�1K�r�k��l��������G�]0C'��0���3��9g�Mv���B&����H��g«
pf�E�bi%|��?aO�,�:~E�#��pa�,iϡCx�g� ���b���8�Qfnua8k?�-7USm&ۍ)K���8�%1/)��"�ɴ�h<���6�,@�G�PQ�)�w'�E��52����������J�H�����L�|��O��4]Ȃ��3�fBLճHGf-y�J��Mk:+������?��T�Գ%�Msf�o�R�W�Sm:3S�(�q�
Y���"a�����m3x۽f�Z!��.Τ�d��h���b��ɚ�CZʘ��_���
cX������ZFug5��R��
ayσ��`��='�V�\x��ϼ�f�h��즛n���xh��Ƹ/���o���}Q���U봖9�+
O�>�:˜�-�:��U+|4/<�>�Y���������`��lt
���0i`�}e0=CV�Q���9U�P��!�j�3&�X��;#)f�k4@��Y��qQ�SgѦXN��a ��h0Ï��r)f�HU�ԍ1L���~:
���c��z_�9f{�m��P����c�m����t��~�G�����G�.^9��j��B����O����f]�;�������2�Q~��84r��83��3�h^�<��1,P��@Ms���[�#��dž���c�B)�l@j
\�&P+�3�7k���[�I0������
d>��vN%��Lǹ����
�,�/S8B;�9eR���%���ɒ��Qalpρٓ�e_�e翱�˓������/:{�)f'�n��F��|�6�%���>�:�9�f�L���1Qʜ�QϢu!|���E����N����z6�|���V�S�bgu���`�``VK���>�3��o���kÜ�iJ�+xA1����1�E��E��
L(l�o�&0�5��R���e�|(����z@[ໍ�3�J�^l�M(f�1k��t ���g�5p���~3�`�l�78^�Ll�\��u�CQ;c�p�}ːX��l��l��*�uJ��ձ\pV�װF�U1�u��GbB<�#c),<?��ƍ4Fr9��}�Y����qR�2l�5d�?��B��l�B"K����6�ϟ��2~�ZcHM_z�R:��U���q��V�����
i�]@S8[�w�C�y��U�gݰ����Qϖ�T0۵���r}�BjY��(��7����{6��u��30���	�Q�6�Q�_)/��7�S`6U��P���^d�Z�����h]GFg�)���z-���˃4���2��Zc���s3�%�]�+��vπٓ?�9f�E�����k��?��sv�]>�I�뮻{fXp��1�(��ִZ��7��8���_�y�8ʗ:Gz΋�	��{��9f�WV�Ã6�%j_��:���s>Y{>L�
c��#A%�RV��NC1k�h�@j;}�ؑ��?6�Vl|�ʸ�2���e�r�b����{FR���z(S
f�c�lʙ�E&b�!6�v�%���#��1�I9gS���B�X���I���f
���;�+���'q\Ĭ��w�W3a=�!B�}Q[�C��hp"Т�g��0��+ �s�R�.�7>�`��91ϲ>'=T�\�,���_��F5��X�۲�k�/-����4���Z8�3)e��u�/���pfTG�}���&�)�A�[�v�O�۠Ȁ͜|�"�+;R��p+.��
�v#(#�,b��QI�C�ڒ�;7�`��:�+�^�\}.�[��G�f=���~H��8�X��ebn-��Q+xjG}ԉ�	k�QR��R�ٓfO�tA�	��>��v��1�`v�׶j�1z}W�b8��}Uô���`�<�Qv��emh�ϒ�/U��>^N��+2�/�Q���Ta��:��u�F,�S[���3��L��6�ZM9fm.}�ؑ+ټ��fH�lf��η�P̎��YҊ���
���>�TY��
5^2)fE��A4"T3	e��b|๟��	���:��Wr���/eS���Cb�1@����m	e,ߔf��Κ�� vˆAS�5Zg9X���q�,R�^�K.��0=��g
��О� F]�Xd��#h)x��[��D|��x�Y����h�iu�.Y���y/|�A��3ΔV���k��e��F:���{|0�
��1�~�	?
��C�@��]A�W��a�Wh>��!�r$�)e�=$��3��w 
�f|�z�Ƹ�iI�e��L`�[םl0{v{s��}PĠ�)��R�j�jf��暹
Jh�Z���<�L�ʴ1�y�備3���!��cGJ꿬���N.�=��f����Z��-��c�<�0}�$�28p`,0���1��g�a�3Seͽ�\�VH>��߅(Z�Ш����j~f��yye0��`���֯��
�k���9g�=1�5�`V�
�ʸfkWh�X"�ʢ~	���g��h6WF0	�	�Hx#C�1��yk�H�B�>��fj]B{I����̢�F-B��X����ʘ�f�y2�Y�;`Ɗ��{�-v�8�l�c��:A9C&MI{o�5v.�_��W� ����=<�-v5�?U����:�}�$����nV�����m傤���8��^�_x��������6P��}U�3��0M(,��9;��?�鱃e�3�0-�1��e����Yl#�rv��'S���g���9f�5
_<J�2����%j�;�o\}2��u�M�f�Z�%%
gt���V��5K�&	�	�AM��H)C[kߕ�S�
Wtr�d�Uܐ��0��H���v���3�10�p��W�\1��.�a`v�$����]0�>T�(�,����$����=t:�}<�-RϜE�]Ȋ�4�4�5!�qP�g`�԰6�f�J��1���hj3�+�g�0���F�Aa���y�2�;�<�a�!�� 4	��欎��Y�?f� @=��	�1�P8#�
<_m����0�S!WF{j0�1��؟#3���5 �(h�Ʀ}5�_�H�/�M�o�e|��G�">�8�y�&γƴ>��l���"<5�݉<�Ϥ��c��?��/<��-M-k�
	��L�%��V�F�͟7ſK=S��cF����38��3r5��Q,C��R=���]k��>9�+9*����+(fk�8�Z�+h�1
�a���_y���9���T�ʔ2���cc@+g2��s�ZvCm�V�[I�e%1�E`��#pvr���z��%G��I\B�����]���1�e��lvv6����i!�	D	p�!�
G�aMR��~7f���m	��Q��q�}�5���1U�x�-��0>$8+]0	iJ���,Ղå����M!�1�}vm�+�W�#5����5ZSh|�r�8�᬴:*��f�۲��Y�o��(�tV���Q��M�z}}�k���6'yh,�X1;�B��Ҋ�c
W�:W1�:�(�8�����z�!�2�t3F��#S�FI��� ��}A�x�Ud�a���b��l��k�d�Q�:��E����P�|e3
�}�R��0�����aA;ӳ`L"–�Pl��!O�D95n��JBKG#�4JU����ѫ����H(#��#0�rV��P��fj���R��լM�3����\5��"0Њ-}�PF��2j���u=���f��d�Nq�J�q?�t��,�0�A-8���d^}4����=
�Z�bS�[P��P$�L`L�Hc@��@���"�|���
��Z��)C[s���eɅ�����Fp��`��C��)W�iE1��Y��00�i��lff�D���8`6�9'9k�W��3U�\�,2	T/�>�*�m���0�+a|���P����.<�����.
��:�L�����]~+6^fm�k�l��%�L�ќo�j+f��w�0�h�N�w�3#A�����\d����8]'�kC��
�0mB=k5��6�}k� ̱�Z8���W6*���fX��B��ַ�l�+x[U����A��0M�p�&>i�p$��/N���p�w��[����}�{c��<?!1�
V3�mkk�X�O��#p��*��8�h�k.}�3c��LB;�㤞u�b����2��
���0��-c.�tz`N���	�f�\��Sc��I}��N�����}fYLRT27��+���a�0y  ��
*���aӿ�������
P��D1�]�ǜTY+=
e�pFqd�C�0g���e���a(#��-�;�2�-sM?��*g�H�l[����#0kEm����ŋ`���Kw��8�`6==��ܳ��0��.��n�<�s
cl�����+���_�Mk��	��&��\��Q��Z��P�Ԛֆ}>���"�ph��,��,}f��E�.��
g:nuf0�d��K(6�p��0�Cg��yR8|�IL�~ɚ�bPV8�1r 0˪S��1;�
^|�W@���f�n`�ЕӀ,���$���<��e��$Һtx2�d�(�酽�<��:M�ʶ��D׺�TJo4\zw_��6��_�{gG�e��=j��~z�̴�����������;?������L�ZVw>g;���������xzQ���U���?�{�
(C�g_��r�l)`*`��
(�!t�^��(rM�~�����x�T��x�+hV�_�
��
O�店�����o��M��$k�bT���	���X���jG�i��N�G�R���+��=������ ���EW�dg �`��#=���C�`�ϋ�1q6�`V�R)S�?��X�ά��W�J0�e�5(+��_��Cm�������y��6�v\l:S�jf����<�7̤���F��Z�a�
.�fI[���v��-�u�l�f�u�bv�Xu��c�Ž�{���Yve|�+^1��F����kZ3R��r�l-+0m��*�<��ዙKc;�u.n$�q����sZ>6��+e�1����ڌ3�T��֠��Ŧ�m~��x���K��B�O���Vi�ϰF�3�lЕ�2�3�>�2f�;���?40��/s�,
�1�,�`P̪�g&�jR������,����E�2��dRʴv��f�\��ޯ]a���jM�v�=����1/ǁKL��ƓԺ�vɛx��5m��2��l*��?�yiS�)����{}��BwA�����Wޘ��io̼�{0�����_��u��)�
ʂ`֡l�k/b.1<��]1��C��]1�"=e�ࡨ�]2|����X�`os�/�ݹ��Gc�ך����z٭�7�Eyz,�@@p����fg����Ba���A(c��C��έ���i^j���㍏=�-�kLoݐ㖀ك�lQ��&s�*���n�o��Ι]�o�e0{��^F0�W�6�x5�@8��]��f ^�!*ud�=s_c띡��n��1���	x�U&H۴~����������ҡQ��]Ï�v��& �g��o �k�h���^y1.�A�[�T�V�YH���}rX`�|���ѷ���X\ڀ��<X����s��_'NP�i�l�v����=75�싎��3��)�)��78�X�Y�B�=���Z���*�c<��[��)�����cޝ�ֿ�ɗ|�������z[�1Z(#,��ܪ
�\9�`v��T1;�`̹��d�e'�� �vv(*f����k3x�yS�h�Q�Bv[o��@O8#�X����{<�����C�C��=0���ֺJ�=�d=H�C��������(��bzS�R�C��^�l[`�a0��v�|ܲPF����OA���T�,l�D�����-�Uc�5�0��go��)f��Uu(�Y�f���8g`�kg�^�җ
�u+�Y�“��]s�j.쑯�5�%��@(c8�y��R)��>��m���c��1��(x�f�c��_�8)`}��	�����n��Y�L����׵�6n����?_�0�QUӘ{hc��>�%b����(��rt��zW��M�)f��&�y�&c5	fx�uk֪�;fJ70?b��(�3|a��Y �L
U�<��4N'`�+��G.^ Z��m�)�
#���fj�J�#�����Ґ��mr���B}�a(d��_��E��S��+�~�% Ўp��y��6�l-��`Pŭ��n�B05�ۇ�Gkf��l�Zn�gч�{��k ������2��QA3��Z;W��?�Pv����3����=FYm�z2��_�60���=*ʵ�[��L)�mv�G��	�塌릐5�jJT��
0+}.�~鮲b��B�4��?w�0���q����P�Hxk�/b\x�t_�a޽3?�a��#cY~6��v��-�l�8W��8�
��B�ʘ�g����YNY�[�9+&=�M
H�!�aO�|J��}�5q�����P�*W8(\�In�Q��/X��[f�[f���~�,�ً_���Ni����9��d>���C;N	��\�m0g`�[⇍�v�\��
��C9v���#���ئ�3�&WƦ���3��A�/ϩ=�g�iscb��4�P���Ap�_���/�=�l�6 J��Nse\���c[|�*�v�l}�汔g[�hh�`���,�����f��mO�kg����/�r1������JЩ�����Z]����+g��ϓ�O^�?�������`,���ѩ��3���ƃݜ�2�~d{Sb�S�m��n��=���#�v0;�+��ŭ�7�_��
�i�]0�\�a��(.�=�*Y;�����P�ͨW��٥j6��-��#�@�$�\��T�	�T%�<�¹���g��<�_TS��XL��
�|(#�ll�y���΢��>?f�áj6��m�_��r��t`6�_�M5�ύ�q�_�f%&zA�LKf���J�]W���|��_>�`�}�`v��z_��)��Z��b��Y_�|�ʚ�sP�,V\�5`���2�J�ͧ�˒Zf��ݸ���v}*h����̺�~yN�?�΄(�ʙ��w��̦&"A\�gF%�(��@��ƗKe�
��3�2�Dz���J/0��u�T��ƢQ�\fr��8���<��z5�,R���9kӕ�Ě:�)h���of�vK��Y�W�_��(A�*-U�E�
,���$#r%�RB�:(�XHӢ��Pb�_��'�c����X��_�4〞��� �5tu�Għ.]��A[��<{=G��Q���B������Q�0t��3��C��]�X��Q1���ka�?I���턖����x5.u0;rd�jv��.�}�ڪ���uPÿ��E�u�M*�V�k���}�R�yf�5�eޑ��m:Wq�X�y1���0oA���Ӄ���w�4-,�q�f 栆��i�#i�\f��.���o@V\!��e6�x����Գ��Y���Lx�����ۘ>>��ȩ��o|����t��aS]1���\��s���gՕ�C�̴u`�)Fi�W)%Xs��P�|=���@���6 ��n�1�;ƽ֯5*`������-!M���N^���P�t
��d�U3���3ml�)�=+���J��OW�\!+��1�,,�O0��@��̢�2����q=���k���
��a��?��)�D�
���T�(e����bKC�����}�|��d�Z��Z�‚Nf�^���.
	��[x-�oTX���L�jr�&|�g�d�����j����|mAw�{�ִ��6��E���Z�@�5�O��S���1��&��(��{#Ē��{*�A���k��N}�ת�_?�}�~`�����y��h+�];�6q��������}}Z��
%:��>�����ɏ��PF���m����v����m~e�8R�n�J& ���N)dWzK�1@k�T�i-(c]�Q�+�3�W�Y�~��!m�o�l�f��y��}5?���j٫�4��!�;5lhC�u�ټT5�9@;��s �������"?/&�)d����@4���Uq��<��k�2�6+Ff����r�^��v��ly���0n��g̺A�� �0�|�m��w��
�t�v_�b�AX)a���PWh��a��T�f�'L�1�L�߃J���ʆ�Y�F�|��L���5Ӝ�E�6�HyF�?�!�JY2�����e.8���q^>y(#��eX��@����'����ED��[O"����P���f�E��>�`f���|�C(c0ך9g�g›?I�Z����W������w�Scxr��z�������G��Oo#2x\�f*��rEsl}��\m��T��?������8'M`�p�ն���r�w5�ԱE�c��֢eT?Їj�Bӛ������� �A%��.�u��v��0V150kjY��� ��bP�&��Z�:���n�Op����u�2W�S��4 �,��=ȇ?��2��%��^-�K�Y�8�1�!�-�
F ���嚝��t�91μ����’pE���M>�/WҤ>�Fy��X̖��pg���4���5kW���Y�q��g̚�9�lWuP�,��k�r͡M������N�Y�)l�;��._�pg�jg���a�et�̝�|f�u�Z���+f��0�3#�L�&H�S��L�#0�?��MB}�i��~oK����1.4UJ�W���8��Z(c���6}�_�����KJ�5�1����9��;�u�?���^Fģz��<�g���^Ԙ�*���UB�F����T��ŗ���QA9 dYZ�pSc�6E��e����o5�Ly������w��Ԍ
��9�{3)�m�3���~�����5�x��Q9(�����?����)�����d����,i��B���w�Y���BF��3F/�D�3(Y�V�{;��z
�BWQ�����4�Fʙ��[��t�C�Y5Ŭ$i�s�g˞cf7f��O�k_�9��"�=��"��{b����r��c\�,�7+��F0�M>�h'��C��|L�PƁE~3@��[�.�0r�v˜<#rӾ#�|�M����p���<�lfo���:g��/?�`���̎�wK{��63�[���#�3�<51��c\=�0�a����ȡl>�ыH�`�:c}�$9f�(�s��h����Do�CC+�A���`M�m�r���/V������l��
���r�|�Kk
�C�4��W�Z;�L�~�+{�2���񊡌fGI�2��R��it��0Ȅՠ����u0���������z/�c�`���ʛVx#�]�*P��/}YԨi�n��Q��^	r X�Y�.���E!�h��:�<�8*D�e���YmQ
����z֘�Ήf=����QOT�6D�\�֛��R�pOtX�j��GLh�.�o��G��ǣ_�S��U�zGoQ�l�s͔ov�Q(c�W1A�[��KHs8k����/��Q�h�۽V!��
�V}
0��i}\{Xcl�c��0�8'*gh��OE�+��?{U�)�.�(|"�ѣ��+fe�`;����3E���r�j�;Ǣ�vE��y��6�kfk���%j!��L�Y�䘕���Y��)�Z��fYb��9��kb���}DyZ��Q��;���^{���dg�~�g/_�\����,����M�Y���y�c_�*tT�v�#�n��Xx9�)D���4�u�d�1�sEL��"��%�i_W��F���Z��!��!Jˮ���@��U�����v/6�<�֧bv_Y�K��O���)�5ڻmu�&}�z�@O������甁����yMVR� 	^�I����c��F@����+���d�]s̯u<K����$�q����h�?�2��%q�q��?�V����}�G'�ɘ��b����a��"�>0ü�U{�L���J�ɏ~*ظZ�h�G��< 
`�9���d�	�9�)f�;�������^T�OO*f;0�\s.o�w�+h��|��o�.�T~5�qr0��0���@+�vSrwe�ϸ���C���$ye�̐sV}Ϝ���5J3E\�	����s�
*����pGF�_\�����ϙ]�Kβ+�<pR0���Z���J_c-�v��+��3;|�k�u���P�=>����_c�&�ր���~;���\(#�ita��اz&0#�5 ۽^`vwYߝØ�M
��_Z���/�|���bӳu��	0c�Y��P�Y��5�0D�Û��׸ik\s\��A
���?���K��w�"�u�z�WF�T
������t ��W�ً^4��8�;2�Gg��_��ێ�&]xSM�`}��=��c�ฌ�87�?C<���w|H�k|��9�9�	�z�f4���m�*�	dk橒IV�!o�����_�0�V��wwF�i}�e3�أAT�1Sɐ��q.:9�\مF
��f�W��>w+��t�j����T�ejz-��=9���ű����ek��uZ0�pœ��8��i.��-��Yg�]>�̭�~Y�L��|N������΁�)c[�c<��}^��q£���Y���՚}��U`���G=w����^t������0��	c�^��\.����m���9f��6�)>g�Yf8�e\�>�q���&
?J�j����6ra�%�p�ʈy昵���`Us2�Xo+ ��i�m�宲����
̰��瑕�T���%`�	�<��:4F�1����9)f
�k�m<��m�A*�.�C)RdBҜB-���\�+e�{��)+t�@f���.�ꙕ8�/x��[8_Ϣ�E��D��˞��8�uɎ7{���ON��q��z(��e+�f�����P)#�Q7V�9����a
a�T��8'�
A����l[����8>g����t��)�)�j�]�b��{F�aY��`�pV�.���ize,�1`�[���9��N�!�`���R�y��ߠ�:��:3��mX�̠L}������)�o�s�8oc�pl<��oƈ�'8��ަFL���D�O|������,�ٽ��;��0E�T�Van�!��ks�n"�ˠ�#0�z!ȉ��63{�c����n�(
�t�EЦ����B�������j��u�jF1��o[k`�|��kq�N�v��$V�Ʈ���VL1KU3?�,&��W're�]�����
�b'I3�ShP
e4��€��$O�<��l�J�bƘ)f�<3�ZEh#4�O
@d~��i��H
���K#�r�͖��m�c���nu�_�i��6��)����6(!��j���e�_�K���ւ9~RU=�r��Nj>��q���~*��#!i��g4����P��r̐KVT8��u�c��p�B��{���Ù��\q�̨���lA̙�P�S9f�d��)Ǭ�Ÿ����r��p�҂�i��!�o~g9��G)?��{�
F#����7����Z�ed�[��59�a|�BӃ�2�
������Բ@����*���jv8dn�o{,���k���c��ͯK0c��'���X��m|��{�?H�;�`v��w�����^]c����<tq�h�G��Y��<�̔���2���qf"�D=Z��Z�3wd��b�����cS�h�!��r���f�70������2�#tq�>���׽,�L�1��5j^ ��Y71�<e�1{tD�9f5S�H������ �U2�6�E��-�`�j6я�5�˜������(f�u�f_3slv�v8kj��������7jpE!�w�Rz�8�8�݀wA,�	�a��`�
�ʰOK�� ʟ��M����L�`\�f��aE��hrYq���2VE�q��
��*�Y�>_�+>�z�ܪ�\5��p&(ۃ[#�5�u�dq	�5�ef�$�J�oc�F������B�P�0�������X�~�E>0���W4�P�9���3�vY��k�gs��!�o����b����;��A-W�F������2��q�&����ܲ$�l��M�ͻ0�[�Ó��+h����W��a-�cv��_����30{�Y�;����|x⬲fkھ�cfk�B�mX�r�C�P�i�ɯn�[d���2� ����-m�c���1�,(�y�F��@�]y"�L�xd����<!��ɅQ`&u���i�է&@��DcLh���s0�&�y����8F�ٜ�``6o���>v���Mf2(bk:5���3}|�MWÏ�=���%C��j����題c�\!CK��f��~v���0��w�� ���/�������(��ոS<�ir6
D��>�����'5z�kw��7��σ�Ua5��2�9��m0�9늙��@^��2�ok���zf���9���õ�
0��of�x �`���3��Mfq�;�y��GXԇj�}eM���ڀ�&aگ����E)Ϗ���r0s����@��j�-���bP�v�#e<LC�!����2�����<�,
a�7�Xq�
>x������nc8{A��#��c`V�:
�/�Sw`���_��9�c�������)���]�u������1s�F*f>&�=��u�]>�8��>9������@B�K��E�	��(�/����Cס;c@9��a�tu�s�(-��f����NW��|���zp��dk����fW����!m0w�{e<��v��b�}�-�n�`#��[�s�>6�,3<A��P�]������]>B��i����+�O-�j��[�ٳ����4���:�Ĵ{����u��L�j}�f����$����L[D�g.RЩG�d���s_�~�s�|�3��sNǾ���E���_UJ�zfi��|��w��ˁ�@�r~83��m\�)�,��Q_���{@�e��,�M�63H#�	�z(�+b%c�U����مJ;|#O�/V� �[F@�+�����7����h���2V�?	��1��
�Z+J��A;��Yh��Z_hi�ޞ:�Qc@��~��[A��V����A�-��f@�כq�X5+�z
�"���*��^/����|����=�,�ٟ��f�����L-�K�q����1S�8�(ss���:e�1_�l�VRP:����ט`F�h(���Kc�E�{;p�C5�z+�L��s�̞<]}�1�*�J����`3F��;6:�Q1�
�\1s�|B�N�c�{�@7�1B��2V�E��_�.σ�#+yR�##s��_�/0���2�S��ԩ��"�Y)^���2_�l�&�lj0��/����&���4����`�Uq��~��c�s��+��8��@�����h�֭���Y<RS�E>�=!w*$!�/r��7��/��>�j��>SԶ�2���E�S{(f����T��l�m�E���?�`N��e��N1s[S�9�c4���U(���hD���|�^�W-�,��n:8o{�jo���K�����X�z�88s`\Y;V�� 	��N^h�T��4��/�؁�M?��W�@����F��3V�|��R����z���H���zΙl��#/\��y0���Y�?��?60�"���yj��
�>W�h�4�4��!͟c^
W��gi�1�$�wc�cV5���	{��yX��2�q�`�A��
�LǐE�i��?�1{���	���ݳ�EZ����L@�	�q޿�w�Me�.�_M1+���T�k\%3B�C��/c�����e8	fc���p�OQ{;3��1����]�����UqF���8
Ow����X��ƶ��o�O�@Z��k�Bd��br��G~��^/($��~
f�Qk�� f�+BI�e}�"�z.�y�7&�_���vw�+ƛ~�W�Le�c��̕��&�J��k�PFcP��+gW����[�A�ծ�U_0��\��l��R.皵+h��y�]��z�Jfa���墭L1�͢/�km|@��C{���0f%�'���y(�|��͏��PF�;W�x���c�XN�_��pet���y���G���O��9f�V�q������Q>��՘�/c�;�y$���x������w�����r�r0���b���"��� ����|Mm�dik�UNk�����2V	Ky�|���M����ڹ��iy��F%�md������Q=s�����40{����x�D#�	���$�PFcW�|��̻b6:.���gA�!�d�>��?ּ����4H8#���PEL�;�����iO;��?���*n��V-ıh�QŦ+G`�����=��>�!Ȯ�2\�ꐏr�����#�|�]<g��g�1u@�=�îl��C'�>Vw����q�a�Z{����?q�ߛ}�� lъa��8�*����G��P�{�D��}�q���5։b�2��n�A�,0&�̠�	��w��󀯞���f*�|�ե�B��җ�����dy�)b`3�z�?\k�D��Ǘȏe��[�!	!��1�4?��AH�
�,��$
���̨�|(#�9�Ũ~Y[��Ze��n��}��l���Nn�g��
r���˻��u���qTg�x5�+�^�|�sf��e0��?���P�?�J��uNǙ��zv4o�^���P��=���W`9d�3��]�\�.���yT�L�`ޘ_�WX�i�!M�0Y��v{Q`����L�k`����c��ce/Q�؀��E}�9vai���9瘛�G3����aђD�4������<Vs�a��1/�l�f�Ilk+�[��k_fk��C6���}��u
��˴��B��Z��t(�0?	�������o$������I6��L˼G��އV�x�*S�����J~�x����K��!u�t�����[|�כ2/Uc�c���¨����Y.��,�q�1׍ad���m�./t!0s���!�{#���Y��,̴���C��!B�e���0��5�i����Ø��I|������c��b���Xz�kd�06tj�y[�r0sWF��:�R�q`>�3��l�&�s̮ZK�s�y1�!�V����
L=g�=#�����բ3E��a)��Q�6�y���Y��β+�����3�PMK�5�}X_��G_�#u�s���q~b=�}�`�U�������A��q��C����RC�vh�5������x����b�?[�p�����?(dPcߔ�f��7=�ql����k
� Iӥöo����x�(
��\�q(�;2Χ��[�v0�*v���O�S��lb��?.�Ps�e�`����U)P $�@#H�{¦��d\��?]�5�IS8���X7��O�V�^�fL�*7��X��+�����R
?o~U����ykύ��R���YII=�:��%�U[�r�[�k�/�%S���Z5 ���DU�����*�%VW�ڜ�~�*�5���������,���шH�C�b���	a�B��+f/���Zo����������X�	����y�
��GᏨU�q
mY�i��g�ȕq�r���O�_���c��wÏ�zd��!�q��y�Jմ>}�p��wF��Dr��i`FW�SW��f���m΁����2�=���%�p�f�g�9�]�֕�����T��25��0�k�}��}�e�}��x?���kU*����A"@MP���3��̹�`�ږ[�qܱ8���N�k��Ɠ<H+�e�b�(���Z�I����9fC0��΀B整{KZ�6K�n���eA���H0sEb���GR�ԃ8Yu����=����-�̕���hmu̮����Ӟv�L!r��^�=�ٚ#ba�c0�� n7r0`�/8Nm
`�{�mo�Y�:"���t��ng�W�^P_�COͫh/%@��V#`�1E�x�ڟO����]�b��7�)s՝�g���~33}��i������P��5˸�p�g�Y�g���d�j�M
��(�Ŧ��噣m�8l���u7�U��/`�ف��+f���VM��ׁbfp�h���b?J��C�"n�!�7�u��X=���c~.���cڅ1^�X�c�ˡMʖ^72�x��`�q�kF��iXh�t�B�ڊ6;]1���s�2S�4�l<�3��uv�Wj�׈�_;�}��M1�k��s�f�y�_x�����=�,��w�qS`6�Cs ��Ήi{խ�3%�C yda�Xs5���Yr��&pR?A����j�m-�-U�'��#�I�xQ1��5���*{pjܭ��g�?-��xtd���iUs�2iT0#���o�ƹ�L����2>���%�	�fx�V7�&���hn���a��+gf�x	���هB����z����[@�r$�U�{�233333333{�=�;�0��^<��̌�m�*ߓ�������4Z~z��֪]����J������pU�>�Hڢ�cia;Mݮߦ2^w�~��K�1�rS���*�Ͻ_rK��f�w�x!2����]f�c�J���JY�LbZ���9Iq��T�ĬB�)�	ĝ�1�c���Ι�O-�Λ�9Ma���Sc�M����83��g�4
f7���0KvYi��)�i_3;��H�Ӊ�,�w�G�������uZoCZ3����ξ��4q+�یʙ�i67�Qח�b��i�b�'!�i��כpƶ�N]����b�`�����TFMcܵpe����~�[�:c`��c�O|�
fc�
a�ִݗx�U�2�Fs�2%����ԙQ���ĺ��A-weTx���a����&բ��>���KL>,�I��%X�o��~��$W�
�u�3��+�E��Y�Y4&<s�H�\=�O�He���1�A9��
Y�gU��r:��pk����5fŖ���	�`�p�1�Y
c�ތm��̓�k̮�V�cS�H�#�pi
b�PxUD%C�b{���ݜ-SVu�,��t�_q�9f&&E�=��ĩ,��o���]h�JF��m���E�JK��@��™
�4�ПI��2B�����
P(S�`�&�q�Eqc�>f��i|9�vd�KyafJ�ZV�,T1׉�����?h��-�߻�#�E�gU�5�]W�z�指�>?7i���6�
gQ��ra,_9�M^S���룊��Q0���/�%�/��p]֥���eJ^l�WW����m��}�1���>��q0k��H�cno�z��tS�S�J ,{�/U�o���c��5f1'��ůp�2�(��m�e�L�
��E�G��G�Շ����
I S�#�I��\�L@*ch���yk����@���k�f=aL&��z.@��	�P��D
9ge���Z��B��(��0sg�&�x�����Ȳ� ��l�vb箹��n���S����Z��j(I�to�r�5��w�8��I��H)���5'I�Y��5��x��m�>qE\/�4�?��K y���o�wB�8đ�k{��8G�(ha��B��&��.BYA�n��l�[���豪g*fT�hRn�u>aLŨ�4�?��a�?��}b���Rk�E�fN��f N��WH�m�R׼{Y����e}�nHc]��mms���hs��T����C�5��e����l3i�Pn�YbZ�����vAj��j�4�|Y3�]0���%
Z����[�;c���=fW����f8��L�|e����6��q��1(�6�*�Eyh]{d�h^C_cL[��~�yӑQ��������1�`�9ڴM-�a
��V�f�KI��l�5f�>�G���lJ*��Y=g����D*樘鲬�ؿl�ѧ��
ڪȤ�̖/��ܷ�ԏ������*�E�Yt���d.���緉Z������%��P�kΕ�� ��J���G�MiS�1�oР����]�W_�9�Y����o��P1;�f_n΀�(��F#��-�V��&���(��
��[� =<qYĤP8���S`��#�	�(l�g��Dp�N`|	8�E�lp����_8�Lg�,���̠NҦ�_}@��?i}�4}����h�1����1���f�^��M�k���h�A��ܿ줱���jy��<ߓ�m�?���h����{~!��5��t�V6	
��}���;�10��1�����Je�>��5��
��	���J��h�d#��[/M{dYױ)Xe`�#���A�4�?j��ڇPf\hc���2F�?ح޷K�r�Z���B�+��WƋ�p�j�=�켤�DU9#��.7�B��m%���3�����l��4�����}j�9���&!�����e}&T��S�J�\e�k���5�_”����K��������z���Y��X��C��S>���b2����?u31�3��q��grp��a�AU��fМ�����׽�~!߰�*��\�_�V�J1�@u��i�l�ǖ%��ɚ���fc����d�H����5�����V�`mU�&07�Yu��gpf�Ӎ�Kso3Me$�4Rc��i�����8OQ����U�V�q�ߤ3�_5�_���_m�?4o }�]�
����ߋ;�10��c���P0��K�h���8j�=jʣe���r�t�d|�V����¼/c]��`�kp�i�%c[T�1��"ߗ
Y���`��n�^۵���PcT�<2���hQ�q So��:F*cU����0Ҡ�pF{�LO\Os�#�	˨�>\f�3�?�e1��z��?o!+&S%�d�Tơ� T#�4Wv�t�|o�C8Fd����/�벊1�����D�L��
\�}մ����p6
�$��ㄗ���K��C	��sT����؆�����x��DH�����w���xA5C|G9 L�a
2x���"�C��%J�t'�x�j�
��2��s�Y�����N��F+}�!ʙ:�b��^��ܤ1~Ж�Q(c=) �JZ�Oߡ<�f"`���7s+��
���]H����@l�k�T!km
0�g}�BԬ�e�>��'N��?�K)�}ѯʴ�\�匁�'�̾�/�l\ȉ8�
u\��-h�b!��]Q]��{��'�����
O-p�5f񾱹5a�fq��x@W���a�_ע
/�~���c�2����Lg�M*���c��0�r��9>DB���mj,Og�0���R�·�0��!�tMv�L6���w1�`��f��o���ˊ]B��3}��:�0��Y�I�
#����E����x;���v��T�ÿ�g%��#}�Z�~��ϗ���]>�1������(J�h����"��\��K��(i�L��H%_U2MS4�b��Q�13Ma�g�6�ق���-M�nd��mz��f&tiC�5��1�������Eg�5}q�R��k���
]�.�ǘ|�34U�Z���Z�2����H[[1��~l�m��0�O5Igt���2��b^拮����΄��5�̾�{��`fc�X�t�*_7��K��m�v�l*m�0iC]���~��b�*�����}D=>UǢ_��!l�qnB��5���tF5�3�z�~����n8G�����1	�����6`�df�2Ȳ��(��d%̀��B�̥��eNN�EN��j�����J��2��}��ã(�cY:c٘|�m�_{HQ�Ǽ�`W�6���˞w��/�P�	lY��` ��� 2
3&�ƙ�d�b�ou��k�i�A�eg�s�^fˀ3��(bQ&t)ר����\�w�wގ-�୘�\c7IŬ��J���+C�C�%����?����A[�_!l�.��ܔ�c��6��XK�0����=���B�,R�f���L��{��`���/���~����n�b&��ퟹ����c�=Θ+�G�ٕ�ꫯ0�IAqw��2f�A��B�1���
uG�mT��TYb�pC$<5T4ݫ,MG��T��DEc]˺�Y�=?�c��x\+bQWU�J]�U����TsSj�\q�����*d��3X��mZ��@�Y~�u3�^gL�����oQ1k�2���g٥�n؜ �:ѡ��V˭�}�؉���J_�u��F5̮���>fn��PSMS���m�P�b���`�T�G��rC�d�[~��m[A
��i����k�7M���>H{y�L;-�Emnޱ�M�hP��tP��ƭ��{|�gOsߖ\K�̴F\I�L�,�?�?IP1;�
>��-�ӂ��ږ�;Rm񗙹<��crQu
	˃�d�6���RF�C<�%Y�կv����~1*fHG�2�2�T��9���U�2�u�!p�r�v��ۖ��86��Y{�3Ie�2�L`$S�tϲ"k�,�\ٹXE=���W�q{�v{;6�}0���ݴ/���3Io��e�J���Ž��}����~��-��+6`
�L�3e-Y��|Si��|혨bx�p=��}s�A��m�q�\�L�OM>���H]p����
W�14��O���0��n>�a����]��E~#:@�&�H�8��b6I ,��AM��Me,�m�p\�$ʘ�0�� 7��=�ͦ��e�$�43�2(f�3�]=�L��jͿHG{�N?�.y�U3��3�
f�~p��>��=w� �HM�;�-iL�{�KG�LՁ]g%J���m�����^��Ț�h
f�(c9Q�D���	l�b�^;;�RwL�n�k�sI�[�7�@�Fh„�^�2�#�5f.PU"�����`f���(��`YN��y�<�ȏ�3~����)�����&��܈i]�sH�����
Z�u��X*���9��ߴ�-��[`�{^)�����i�������w�XC*ccyLA�:��mq�3f8f0{׻޵�����׈c��3���z�/U�X�j�c�p���W��yŵ�ڨ鋪��]��Ƈ���:&?�D�Hy�[�z{U��dZc��lq(KU��@6E��m�MZ/�1Kl��3�E�[�Dbb;aLb���j�L3����<xg�4�yֲ�2���N_�2��~`�������yA*a[޻y^����Pi�˜�F��2S!���2\�b��,��(�fT�t���i]����bvQ31�۰�F�,֘�s��x"V�#�r&�z	0[��A�K���NhS֜}����:s����*���0�m�?̠���3MR&�{�1>xG��i��N5����V��E�y#���=�i��{�i}~�W��lf�������č�*��~q�3`�A@z�1��UW]��1Վ�x�����c35a� |a��(b��Y�w��4�Q���q�6}B����q����%�!
ge�j�� a��i��ѭ�f3�]P�\b��A-�s�U0k�1ҎC7��lZ*�e5����[W�XX�Yf5�t�h�X����a/�]`�vފ@�ڼ~�CX���8���]R��
nE3�e�B+u�\0���CQ�����K5JT��&RH��J���rxK����]�N�z�}pmo�U�&��Zǎ\���0���U^	C��`BE
D �`&��l�r�r_��7Rϥ`�(�lE���Х@f
c�3d2V��wK��8��_Y�e5��Ld����hg��G�w����ϙw?h}��
f���-��ui�3b
n��Q�rPF0�z#�13�����>e��%��,�z���`�Yg�3n�\�T��U�R���8c`��c�w��
f%3��Z(U�f�k0Rխ�S�X&�MYw��h�����e�" ���/�}P%C|`YR -֕E9�3k���5���a�-�Y]SvSF ����MU/��:&�YYj*cb�_�ƣ���T1S0C�Օ񲺾,|�c���lه2H*#�Kכ���#R+�I*�K�NZn�=9z@v�R�i�سTm���y���9���(��i<mQ����Y;lR�|�ԧy�C�r�r��
cz�`ւ/�l
r��DA���4�1����$V����V,{�7�G��w��bu�;�(̅㠘�E�DF�q(qfmr�o{���߲οKA������y�n����s{�YuG����ȵf�ʨ�0�uff�\2���I�t[�ïKߧ]���0�p{�}_Xc��ŃΘ]���ٕ��w�ˢ�i��):N�h�l�m���UƜ"��U��e�~������6�)؉b�8��>���=�>
 �1%�Ƣ��������(bz�X�q/����U��(e�|���h�<�1�`�����u29�%��5?SL>�?'�uNlg*�Ҭ*f�-dݖ��5l��.(�"qv�4���Yw�J��w�k�}���H}R#�T�?<���V��V��^���_��SE��q�C^���Q0��:-�ن2�?[0���NH��~�1�����eg������_vCw�'PȔeN�Շ}�0�2�m�K3�fh�X]c�Iy/�����`�7\�f����F�Ro�c����(*Zh.v�n�t��
�L��i�a
0����^���|5���M�?��^��u�/���O[<䌁�U�f�<F�L�&7��,Cf���B�	�����&e}�&�)X�ז��I��–����S�
���OS��ԙ1��gJe�����F�{K�~S�[3��P1C���P��,�O��3�|�v*cX�l�l}���iXh
c��kJ���J�cl8}a�.if�.�|
^pa\Z�/��#�P��7�P���l"��ĺw��|�ؐ��i�p��$>'e�H���c`��GȋX��q�Z/cd�낍��
��0��h�B����'ga1�������y�E�:�u�~�t��U���-?�">�{�Q�*@M��P���h2�:n�L��v�*�����
�� ���˜�X��k��UOi6�K�y
���$Au�<�Y�A�M��!qY�!�ֈ�j}3�	̮�E��v�b=�ǵ�.����G>��s���ߦ5�|�Yf�/�e�7ʀ/��ŶRF8T��o�q�>~��ە
WF���̋�0�=n�3���;f0��o���i�͵gZ��s�c�<��Sa��v}��d0S���5���#�rzΔ2�7ך�N�|�̮��o0��f�β�@s�bi���j�ot��
e��]0����F���d��0�1c�!�T�d�т2�
ԍ�u�6�6��������>~�]~�͒Έ5euIg�T�oOrA�qr�6��3SؐQ�	��O�FI����i�$u�S}eUeM���I��\ITx�{�ʅ�y�I�_����G�߷d
��cھ�A�Q��y�T2���|}��ҏR�[⤘�)�P��Q��v�m0;�aMʌɏ��R�LRڵ�eQ�T��<��)��A����ai��o��/�2��U�����x7y3k�k�u��;���Z���(g���&_֕�限����<��C*bc��/f��y*��x�����8c`��c������������k@�m��Q�q�ڿM��m��:_T�j�������=�l$��	c�Ãq1=�7���@*\��1�2&`��I���YvZO�R�3#�,}�˜]~�������h�`�T�U=c2��pqp�7[��wU�.UCm@d"�1�*d.��2��s��>����{��DM	�O��{P؀ܔ�^P*�n;7��P{��w*
<�=s�|ߥ��e.��mi&
Tt,�2啂[}�i�3r�eۗ�{�F'nA�[��h�$O��v:�G��w��e�1�k_ė��$�	��
������M��G�~,ǖ� M�)Q�|ao�My[i���p�������3��>�	(�T�CY�ъ���_���~Ժş��\f˶���V��Ihe��};��Z��pn�fP�J�6X�f9��Z���� X�#OUd����^�X��ڿ���_u{�����49b�����:c`��c�����Q0�h��TF���b���ט�v^�3�j�_�6y`0�בIw��07!3*����0/�5f��x����{C��‚S�V,�2O���lT�wF�Y=F�1��r	��*J��b�dR
��	��q����M�2���núD�-�cY�7m�ܢ��+c=y��ۃ�Z� Z�E*�ߌ�5?�R����B�_Zn%ܵO*'96�r���7dK1BE�[��"N��k��}���{�Ž�\�b�:x˸?��Ƽ�o���|d@Tk�ĕ*�W�E�?�3��xy�OB�Ǘ����~�{��yĖq.P�x(�����^���#3=Zk�f�݊�j��gё�~K����bC�P�T��D�-�g�z�*fR��G�lM���%����*IRe+�7͵��'�u���|
Y,�Z���⪼�5ɔ�0ilJJ֜
�͚���6q3'���lÎ�Al/�,�}~0��n��+��/(fwY<�`�<0��ؕ������7�A�l���9� ��5��f��W��a�Ob�"7�f�Y�Ģ3�,��d�E\i���P�ufzt��ׯ�o�e��Y�M3r1��1��L1K��T��~h�b�O�p����t��X��lO��C*#���j*�`���>�9!��!�J֞5"t�2���P�v���]69�o�W�W�wc#P� ��sB���N;c.1�X�Se���	j��b��Qf�G@�>C��EP�j�V঑�ڊ����u���B�By�ͳ���(f�'��a��&���������֣-�+�����IlW�,�m|�ݪ�JS�cؒ�`��Ȏ��ѝٹ!��2�W�#uAo^ӲcTϬ�ڧ���uݧ#%Ж��PU�b�g��9�g9-�ٷ�?��(�'k�p
�G���9����_]�ߋ�]�_k���0��b�n��TF���%�֘�z��,l�qh0{�1���^����٨J6�]�i{Q�l�';/f�@Z��4��	u� =��[k�m�p�7a-�C\-��.�k�uWt�Wqi�3E�����Y��	meav��AFم����0���]p��b&����	'E���0ÍMJ��>(��YI�1��&�h[DmX�`���NҤ,U����c���o4��K@�9�ä�P.���&��r�-���t�>W��u�VD<�o�R�@�B�k �}*sس�͂�:愩P��T�~�G?�e�]Q��)�
Nq��*�0@�i����~,��'y�Z�J����a*b�$�#�ZA�c��`��\��e�JM���Y	�D���g�2��Z����1�Pf�r�#��P�"UQ��^K�9�8r3�Lߜ�e+1���|��ɺ�+GגI{��<v-�[�֘)���R뙛N	��#7� �n족��=�S��噱��?�}�*fy�b��X��`��'��}�^�`v�W��L ���*���NM�5f-�K�
��gb}K��F�
���
��VJ#떁��5K�PS�}��r��~���/���'��4�CZ����FӶܼ��mWF�N���eĩG�q�an'�L�,Y8��4��5�13�§�]�_��HG'��@@��0���+�!!+@[��6��׃,M������a�,d��4B���
�a`���J��O�G�q���U}�յ��Q��8z�'��O��Y��.�&g%�r����J�-�X�J͢�E�UƖ�W�q�0E�"אU�Y[�k�	�*Q�!`�G�g1��\c�P�2%H��V�C�|�����4F-ωM�fʤ�`}3��Q�rz�ͦi��ݎT�X[�)=T��\áA�c�En_Sט5m�kϊ�2��œ�������5�yM�惘���� ��$]�Sm�OkdE��c�ǵǤ���)�R��L�P�����1��U��sLۋ.`ZĹn0����ScA�#���L�7s��erWF���� ���JZ����2�X&n<S��kЊ5��	N�LSMo�/]���'.��fL&��_q��_�Q�A���fP�ƉD��g�)	�O��Ki�>(4Lu&�Yn��K}o�g��_��V<��b�A�Y�S�B��>D;�?���,P��}	rn�f^�PҰrT��k�E��
fN�ZEY�1�jwX��+��Lŏ�h�/��3ۣ�!�7(��R`J���;�7���Y���B�,��5���oZ�ָ���� ��5S�:��2~���{LWĴ~���l���[k*c�i�[CM�`�O=c`��c�W��U����*d1lB?^s`*��aLE3�=�;�+k���L]s���0���u��]��Lq��*h���+��K�EB���lA��1.Hf�*�/Mx �I�#�qŬ��]Z�Kr�0��ƨtX�PƔ�(s���u�ˬk����#�G/�5f1�B] �:AM	b?>~�d^�j]>���R��.�Z��()�;��9����%��!�eI�k�p�,�=h
V��
�M�m��7�Vٽd�1+���~dy�o�|�[�����s,�I^0���c��xB�����"uQbΛ1\��p[�Y�-�0�ގ���:wR\ꝫj���q`i�c&Ĩj�L6�HlW����w ̴��1�#����ӯվo��V�j28��)�T�x&�� ��vӍ����nߋTFߵy?�W󏿱x�se|�1�2~�W|�N0�X��C�2ƫd��������5����6M�*`����ȨJ��2&*ZL���XO����W���`��~�bcc�5L�,�^c����u��-�o��n�2n�0��}̚6�����9�6�h~���\�'�
Q�r�Y~��P:1�c�[���x��D4V�F�:�g液�W�	��~�R��5uZ�s5�2�b�(��Ԭ�%��\V����n�<��Fd0ѹ4�5#^f!���P�D���RMb1����ʘ|'Hj����4�w%��p�4gb�6�6�3�Q+�T0��r=ZJ���~��	�-O7��E-�1B��"�S��P���'�D����֒z�����-�M���ב�Ӿ�����ˍAJ)�Le,XG�B���_��9մ��l��K}�����W3�}ٗ}�N0����m�ߦ�*ALհ}��
��5fח:D��%׶�g���Q��ź^K��G`���~��tE�c�^ڭ_���*dl'xAe���o0K0L&6�N8�rl2��`:��He��gX]��YI鳦2�dҵf���at�
�9�%�1[��qN�q�U@ļ>�l�7�$H��LB��7�lx���ȡNI1�:�(0&����<�E�q}$Ȉ韃.�T#C�����
���M"Ѷ"�
B$C-�7N`xǾk���GX�G����	����
�c�=��_'TYE�5�`��	v��,W�N$�Q�g��B��s�]����5��Q0\	|����o�A���n�����J�)?�l�WEoV��k�Jư��ۛ^L0;t*cz�_ϖ���u-��9n�̻31� �:⡁�
f?S3���~5�q=���ų�������	f��9c�F;Y#��!Msl9D�]�dhˍA�9�T1����讈M��r;L�ڵ���AP�k4�w���y��Ϟ�OU6Mi��W�r	V����`Y���O�l(�V8�^et&�P*e���q��c%9���N�� '���Mh��|dk���6�YL`%�Mo��urǹ����87�bYA;�?r����
c�f�E`��S�SЪp�P��
�"��y)4�d�V�	�j��K�={�[鷨@V8,JYv	�ռ�u���U]o��E�I�%�ĵ$���B�;[�ݪ��PFp�3r��HV�j@��}�[��:�֯�p�[fi–�	q%��|݋>m���׋)p
�Xֱ������oک!S��c:����z0��U�����z��:�
fp��3f/9f0���k	f���n��ɩ�j���b�+�\�,����2�6w�"]���֘��:4
`	@���R�f26�u��UƖ�ߜz �o!�k�J3�d�Y�ZL��ʸ3���Ll��0��|���r0��L��Le�:�ꆢ�U-�E�����;����)|5nZb4�I�:���/2'$m�a/��R�Pc�*D])\�$��NU��?C����Ħ�xCQ��h�n�/���r�̔�*����`6s(�-3^�����f���_j?��|.*�ag34�k-��ދ�~�k2�E���o(mK�cV�5�Ql��P������q�j��dd]!*P��x��S��b�'b���`��D\�u���:>��ׄ�5�q�P���`���L�*�7/u�a{|(�z�̦�#�?]�m�_o������X�rV�v�U��|M��C1�Ŵ�u�����?���c�k���iv_�������h�o)l5`i|���A�o�(��3~&^�5g)d1�k�_�j��������R�25̗�Y�V�K�u_#�1p���?^t3�P`�u}��"T3�*���c�>6����,�7�6N2�5�]��^a쒶�Gr�E�C)�M�(e��X�%��
ZB<���/�<�#M�
�֢����uL\���
`,�}��9+|o�C�ڥ��=�ߨ��u`b!�3���Y�3�ps�����#`ɞq�)��޽�}Jk�"�; 7�_�z�ڎ�[ ��|،_�<џS��pVD<�%������א�`�)����|��Zk����TC��f)�@xZ��J]�zf���Ɖr��XS�+(����ժ4�g�b>v?e�J[�οOU��W�t��N0���P�l���埻�Ϙ+�����x���fCZ�>7�Q��5f��un�q�&�Snr[���>f��t�.m;S�TYk�d�c�̆��
�P�+bXS&�4�,f8351��0�ufm����g�N�IH} ��zƳLJ'�r`n�����>���^T3B��J/	\+x���h(f�?߬ �����Pw>B]�
���a��r*m����
�;p�vl\���S�.�BH6U�yb�>�1:�M[P&>'$3�N]<��.�)>ZI-��6e�BV����X�����_�lCuܵ��sy�-���0�<��r��	q\c�Dߋ
_,Cc�G0�5fc�R�ʘ��'�n"�_Ij�zl�Ԑ����h�)�h�v�>p"�)]k&7e�Q����;�y�·��c�C��@�q�XGf���1c�ǔtơl�?���10{�1���}�l�{�iU����5��3���Z��m{|*fjHb��Q1#��#�g��5��q����YS�,;�ۂe}P���e�39��c�]~��F��,Ԋ2&���iߚ֙q"<�n��0k��Y�5f+�ٚ V�
}�D/�Ʃ�[k[?﹑G����Կ�m��Т,��ZۣAAD)2"a�S�DF=�ɕ@H��
��@����a2T���G��@�#PQeh�͜��0���;@��W�?h���}k%Z�^tY���,U�G�/̬�Y��;#U�P/eh�	sf�����1�CSy3�0�[
�j3�,0[A����aL���̂��ƌ�L%[�2�_�i[�w���
9�_-X��0d�]��:3��K�a�2G��
�!��!��ƟG*#��W��Ǭ�f��c/=c`��c��<�9�3��2� ރ�]ט�z����ǥm�o�?nck���d̀ؾk�skY�
�?��^v���1i-���ѬP���<�H�Ha��ㅺ'��10���<�����"�N!R��+#nV� ١��b�"�^�1�+a�{�Ey
��~~����HW�������ղ���Z���V�~���nS�#n��5�
!y][�b�H��w��{T�皾�M.��Z��e ����
�?9���~ҍ
�^��n�'yB��;R	_��B�,��2�B;�k$���&�2�:y����t	Sv�ɰ�e��.S�pWX{�8���zp�Le�JS���Z�P��V0�kS�F��o�/V��m��kc��f����~�H0�q*f�_�tr�n�g_~�?H�:f0{���=fҦj�X<��}n*cK1C1Ƥ��q�n�61�����8fmH3Cs*h��an�v��̞�OSF�zvֵb���Y!E�zfA���˲��,��}��˪�G�zL_tܤոK�&�.S‚<1���.�c,Ie��uK�4ST�b
�j�T�—�~�P�5��ʸz�3B�b^n��uEQ�u�#��L�!�w��8�[�{��c���b���d��F �MS(�f��HͤU�+�g�Βkɢ�J �@&�5�*��qz낧T���?�^��c��<�������w�!/R�?]�̹���1K����h.	Ơ=OeP�����z&19��JĪ\]��G���Ġ��
��:ޘ�+9�#��}��s_D���)���K�
R���!.`U�,yƦ�K�ɏ3Բ������BG��`���sf��o��-��+�d�YQmV�쯽��3�̞��gNV��4խ�T�!�P��q;���8UM�*�5�Hm4훩e#)����0�@��g��S�%qM_���A��0F�Fy��X��s�d��;�f�F���UV�mT˄4K��,&��f*2�~�3��wG��e����5f7꼱�+�`&mq�=�i�׸���K�)��f���)�����E�H�B��F��0���4�t\!�ټ)p�-������K.�,�$WNh}s0�
̈G좢Bn����m�q�%�R8S�ma�)m�C�J�&B��"N7F�\\'�l�K�Ĩ�-k���k�����k3�	Ąbrր4�|V!��ڳ_2}��M<����F�jl@ݡo�����+|̆P�<Io�K�_��̾
���	�Շqc`��_}���v̮���Gv�Y{��<�(�Z�Sӽ�r`l�'c����Z��R����y*��PQ��ZJ�	,f p����P���Ó�ZJ�W0SH��2�d��zЁ~U� D�����z����Yi$�Np�
}�1��\�ܚh��L�T0�j�	�y�%<���Y��V�������]=�)�j|,��ؔX��M�5���7�9��V��_��+���Ii�6�K�-���-��ON#�:c�J�^{���f�T)|�=�������f����2R�����w l�{�a�`�ʉ����	h�2\�v�35Y�$�4L0[i�e�C�.�1���MsR���T��3_J����jW?
e��Z�I���z�z:��������*�
f��YØ}ժCB�a�,�솯%�韡Xh��.�.��W�10{�1�ه>�]`fS�>�2u��e�U^W�l�������T���ب���7�
�}�ˀ�e�ܢ�����X��i��,[���|����-����0q��?.ߒ����Y1[�9q�_(%�/!`��8I՟+3�����	Ň�I���ؖ4��)|1�Q\����i���ޘ����<�I�Go:"zgVJ�<�T/�c���uZɞщ2�� �ɍ/�c(�99�2���o�0��yi�80�X�P.H��l���!��Α�-��揜�`*a
E,(���
�`��Q���0N���C��%�@&�nI�������*g+�k&7���������2�mu,�_�,3,~SE�m��,'ѧ��Km��&����:���@)��qIJc�3�l�I�b�f�)�W�,����M���K��R����Y���1KZ�6���3��ٓ��>�����t
c�Oe4Bc���T9i�M���~Ҧ���ղ�ۄ��SȊx
bx�l�%�Y
fO���9��%�%�&Lӳ��Y9���Y�6���
e.N��PVo��C�逹uT�ɠ�i�:i9Tl��>�i��K{�6s[S3cjc�%�+b%K�z��<�	I�u��^$��S9�)�!
� ��{5��j��y�;Hͥ9�C�J'���vl�=�5�|sMN�i�u�O&��RE,b(�-l�6�v�/�z�D��X�ՠ��a��୺P�M����g43���V�AW�Y[�̀lMH����
3��Z�6�q�4�f>��~����;$��-���u��4�Ha�v���Iu6P�	h�����	fU1�
6���O{<V8c�]n7\[��0�{�7�p�n��3fO8f0{���?��ք��Ct]b����`l�|��sSu�lHӘ�f�#�T�])�%�Y_o�j��f
fO����s��E��@'���\h_ݤ.�m0����"�P�-�+}��I�ڮe�T�昋Xa�ʪ�E����->J�$�_���=.��0��:�-���
|�uFu���KC�2/���6���P���8hO6pA6l�\;@URcP���X1A�=���K_�㹑��?/A[��wlX����^=�G	��G�܍6��z�v;�{�w�_L�{��æ��ʟM�JA��a�P�2�rl�2F�.�H��M�
bi����]��!���K���O�3�d��!�bm��*��e����8������W���|RmO}����>7_���X�Zo���3�5�'��]5��Haܞ	%�M�����g�g���ï];,�
f�r���b����K�=d1tn���.��g�.���3�]}��m0k�z4յF��������j�\@c%�ϸe~޿oce�P�ud�ʨ��X�b�p�il�*����b7<�V�j���؄9�,L��G|G�����@V(C�c.�wf��T+��)�S����׉(x��"k�0arL9���F�]�'�\���|
�ڷm_��q�$�X�S������ԇk�B�4I��p�d@Zqի�c�Ms�d`*0�a��xc�_�`G���C�[A�^�!��M���<n�YD'َ���W+�G�*�:ɲ��p��a�
fuzt
���@m�?��7���`�O��� Sf�PJ�5�c��������-V�}܊���-
aR.����
Dk���A�����W�ջ`;��qӲ3���2�z�Z'�J�.��oO~�m�뮙mG?
ez��8�� ׄ3�3���bR������5di*c�3�*V��l�9·��i�7[jd�L���
�ۂ���,y>70��[��>f�>fW��?��)�E�q�LPc]�LALA-�����!L�G��;�@���Jm�M�O���W]&k���
�2�&T���E�S�,�g���=#��V`���b�vJ�Jd⌕�D1�	!�c�`�Iu1�4c0�Nא�2@0�X���m�U�5N[�N:֛q�ݓG?�>�������hD�2��
� �ES����2�QS�	d��U1*ȩ ���e%�“h�{���W�|T�q`[�+�
�a�QB�*�����F����U?bB.�K	
e��Y�o����nYZ"ʉChc<��f�Г��,��c�����VA����1�,z�Aܨ��EV$F����kHeLg#P��If%}<֘ey��NT1�J��L&��+��u�u��]��thk�\ҧ�4��%�ңK31�(�"�]����ԾE3����A�]?|���뭫b�U�̊��F+(�>f�<�mg�.���f�}�cG��m�·�಺�[�^
_��� 
.��8���i9mk��h�04�/�t�^�UV��u���=�a�\��8b��-f��&-�~ff���O�3f��H�9�ɍ։�Y�
���
W�F��}C
���T0�NԳ8)3������BU]��&��'���T�u@_vǝ�ظW���H�s��@e#�|3e��:�	�4���Fe��g:� ��g��A�8�j,i�E��|.�Z��c��ֿ�7	`�q��vU٘K�`�g��#�1Vj�%�v�\���ߵ��]ZЖ�
�?��&s8#� ���:��.�u��@ɾi*f�n4��Ln�I>ᵗ�w?`}�g�)�Z[/�?��mr��G���[@+���2Q��Y9UNJ�)�9�il���A�D���H1�[nް3ߵ����}�����3�=�я��ս@ڌ�E�%���ؿ�B��2w���N��U��6�����O]-��c[���C�`)�IZ�*k����a7��(C=s:5BP�~�1�ѕcPVh+�g3]�bb�vW(e��u�������_���%�;h��A"����[��q�ȗ%�X��حI'��(��V���
��{�5pC,h�1z�Gjl���%�G(�C{8K,�"�����/��쑪H�꩖�ƅ̩S�*f9��JF�a�^�	����{�];�tV�Ņ���R�0��fYz"oV�s�I&�l�L�>l�#�����
�0�#YO�2'!��b�bA��}��m��?���X�g|��[��rV׾ϑ���f���)�C�[`��k�1���dS��f���YU1���Qo��ܺ߬Jۏ[���v�;��e��1�2��;��=�쑏|��Y[��5��= ���Zw���JU?���q)�5��<�Q
A�>m2��W�~љm
h�+}�f[V������T7<�"- (�������G���Ye�TӰ�K�1N_�7u�e�삽T�ĥ��s��f�7*���E�`�U�ħ-�\
��5f�/3@�J��#����	�=��
��T��ڬ�4*&5��J��RN^��6E�paS�r��r��x�H6&�%UU�µ��Y-&�E!8Z���Z�覠�����Z`���+P�����g� T�C([dT��"�q���ua0�L�,�x.�n˾� -��zU�T1#� 
�⑀�$&���/����!�7�T�XK�B�@[�|�)'��7v�^��S�ڷ<��C�Yl\)ӱbR��H��Ǻ k�2�pF(#�E\\k\cSS��Pk����vU1{�ۅ����c����bv���:c`��c�G<�c`�tj�Ƹ���	� dĕq�]~[�����\f(��O]�I�/k�pS�M��c��
�FɎ��q�ʸ&�e�f]��zf��2j"�.�ӔŨ�H�A�7�Iᛘ,e@�2��*��e���Ccjn���h7�2�h'�����h��ALD�#P���|�l�ߦ�k��ᦲ�>�r޲�Z�~��_�3��X��#NP0��~�@�8;F���gG�zw�t��5f�,pM�ָ��e\+f���1_O�#��V_�.� L��UI�S�QW�{����b�\�Z����}Śk�4�4� t�!Fq�֔UuMS�T1۔c�YQ�|�2�Dם�����1}�Ù�L��\7{�ۅ����J�P�3^z�{Θ+��ٕ��o{
f�@^��������kZ!��uM�.[��Q6I[�uf;!K�+
��|��l�V�ޙb��s������c���j��J�r���0��a�� .��E_Ȓ+m��yQ>�a<�6�j�L��:I����sy 	����˶Heč�����A<�
��+)�i"S����KT�������^g2������񽴪�~ޣ}�}����~�#��P��k�.�2�	O/�{�ݿ�2uU$�4���3��|�$ZsRߞ	v��U0+9Qƍ�r��e3�����5&̃C-�,E�v|r~�aMn�Jo��b��~������J�{_G6s�g-k�8���."��e��E��z+�LZS	7���ʘ��K#@�f�!�[�k�@�_�������]���dP�T�_T��z���3���-oQ0�j�1)��gT�����qݟ�mi���a��V����#F!�Ho�ѝ26a-�ĸ#���5���TEm�L0{h7�_.��1��i�Ҧ�aU1[��g��G5-��7�!B݈x��q#i�(d��e@�R���YF�k��7���38���_։���(�R0�q��!�PKr��= ��~��[Xal��#5��!��_���W#�r��%���3���?x��|��t��סn��ơ�Y��+�n�q�+��/[���]=I_
xS0s��
M��db�t��a�ZrW��A��ڱVM�*W~�'�Ih������ϛۏn�*`�ue���-���km���E�k��|c������|z�/ʑI�# 
& e3�b�����<Ցc�ר�x�O�,f��~���̬����Z�\�|���?c`v�c�7���
f�uc���<��#��k�6m5m��C���2��C��f�/�[L��Ҧ��s�q�U��RwB�����f�!{/=hփc�-��q�J`k��s�1�����?2���._e>@�>�T�5�����x�2��m�ŬᲨ`�״��
vnk@W��cbV4M@�.���;�&:�w��������x���6�al	
0��]�5�14�kZ�Q2M;Ό��i�E�L���P1�}u�'�ufr�._��LЮ�%7����Q�j�q�^�E��5z��7�����{����Ơm\m��<�{�
�
ej����k��>?���يF ��Ф��5n�c���Ym�T���]p��.[0s2����������{3�]y�fTk
xMs̮A@#��Y�:
4�z��+#!M�Q`ƴO� MG���D��^c��D���
f�$�<m���}�o�GX/mo�;&J�
�Q*8Q9��tbh���k�^�֍�K��^���T�(�a�q�I���?>��q)�y�����7�c��+Q�����=IMAb����g+}m~"c�s��h�2)�_���͐I�
3!5��7gڣ��:��R;mS�%]�����6|���)[8�4��+6��n+�+���A-��KE��зY�z�?��+9iJڣd
bR�1���o����!m��� �IQ�
��1h1��{�X��{����A+|q�Xװ§��;�y���LZR��Le�p�P6�>g���3�FA,���ފ�^�3{����[뒽���j�e��a���_��3`���=����7��V�H��d��[=B
Sŧ�z21!���������7�W�}r������7+b^ٶ��c)��)o��?��{�x/B։�
-a�2J�_0�P\R-�ڶ|#~A�D��Xf�ͤN��fmÂ9�ԛ�i��ZR���4�_3C*���	f<�ĕQ�Rτ2�?^�����5�~ڦ1���`���'��Ƶ��l^�@��~o1���5ޞ��k��ķ?���0�����r\�ĊƤoF%��-9�H^��Y�V4��7�deя*�1�GQ|�#��Q@b\�>��ٶt~��4�=��#.��V�ּe���޼P��SMc=@���;�[��w�5f9�5ڒXfҞ�Z�q_<+���G(g�{�X��*e��sg�@gE\���L�,�1�ۇ@V����6��f�%۟Z�����FB<
f�����3��x�cve���7�P�p��55���CxST5I�55�`{����vQ�<��IQ�w������.�[�o�8.��
���bF C�m!2Q5+RW0\�+?�N0@�5悊�L_����q�Աo��������v�1�H
fa�a��շ���Q��z�,3�Q�4mQV��W��ݑk��vW+����ɛ�~����G�|[(c
`�G]ˤ�i��(`�6�pz�&ɾ&�/�0Se,��E�Ai���?�<�8��11>�?��G��zO\�ד5����H�T��I��2���p����_�����I���zC5k�A��bzt	���T��=�W{|ub�X�4Ss��WF(e��>����}ord�܄/�x��gA�of��~����+�
���E�`4�@����3fw=f0��}*�B\$��SP`�EAט�ϔ�J�)x�)��y��AS��x���9�fm��a��hSճ�}���'��x���)�E���u�,��by���F
�P�t����!bOf+�TF5i���zvg��II�&�5�?�S8+�4�9����NL�)BI�b��D-[���Mǣ#'���Ⳙ�l㟿˝�X�>�ֵi<��I��5����:�=_�jd�$5sT'�����O��w�C|#l�Y&���c
T���ށ�yG�L`Lb�1i��O�g*�7���U9�Hܓ�eV��u�Y��o�3k�`JS!��n����_��<�qPS[�6��hB���Q0S�m�L�#[_�?�\i*���QAK֚�յQ!�T�V��:��n�����S���7`�g�@���:��?��3fw>f0����9M�<�Ŵ��ښN�; 'ue̠����	n�g�
����+�j�N�zr��՛��kŘ�~�	�(*��<��퀽Ž��nփI�[�O�7��o�[����dճ)��۵�,S��؂���_��IF�:!�4t&qea��~B�'��ĕQב�1
g�fi)���/I��D�-[7c.��V����^q#�����+�[�
��'p��w���e܈���M�I�ڮ�]F�O��'�y�s�]h*�t%dJ:	����~��>g����q�u��Xy�^��r�}B3�%\���ЖN�`1�/�,#}qɺ%���}��Dh���L�q���7�'[�_��:��T�|��7��e�W�_�Xc�5e)����n��!���
���`�x��8j�[�@ws��z��qfv�՗��f��,K[��?�F0��O������y�{����o:����<BA,ڢ_�=��f��a��Ph__�_�,7R�U�B��A���6GY?6e��=��. E@6)e)�$�k̔Kd�~�_
�5���:�0�LRc�郏�\d
��md)7
*Ec%��W�{U���&��i=�`�]S�'������s�MUή���Ӈ�m
Y����{��k7��nk:|�-�Q���.˚��=������_z��˧��}�K�J�EꢒuI{_"�Q��QV(�r����dh�*f���9�6���n�Y_�$�]t��2� �d���,��Nb�`Vd]X.�9�X��^����_�ο���a֌5S�C�,?Ĵ�wXS�Ƕm�Y���0�ܘYRK�~)���搵fs�,��6�iLU��y��T����8��•Q_�~��c�y����3���wo�Yíq�z��QIR��5��_�Ͷ�y�^�sѶH�A�15Q��N����`Hk[ܽ/wr}p�Z�ue�Ax��N�#s�g#�u�k#�-g��.��P���H��R$=�,�(�_��E��8'F�Nǜ����.���1WF|I��
�lH��]k}�l&q�>�ی��V�^�ŵ��]O|���N���ҁR��ik��߹ݠF��,��Xr�Ӎ��{�K �ޤ�Ԩ~�Z���ç��TZ�
T��&�ѕ1+}Pˑ@�ܱ�D���w3���t��G�	�k�Y=Yn��E{�&3P�|��…��"b�?6�hR'!9�j����7c&��/�)0&�5�4�b�X�[0�b6���	�������%��3�>Lel��2-�k�LmTE�
i�4�Xo`��S]̮9cv��=fW�W�����6)�q�:�����MV�ixڬ�f���*5$I狗�-���0���<��%�5��֗;z/���P�a��te��n1�
qSީeZ���(	�٥�\�d?L:���7���(�DӴ�ފ(f4������dЌS��Ӹ����%�;m��6�j�މ�"s��5�*!Cz$����j�:��x#Ur���:�Qq���U�*U-r��k
�O��a븲�I�c�|Ø!�+���7�C9s�
�-uH�k�����
.ܙ�A��'x3�Y6��5��ڪY�B�Qإk̒tłx��b_���Ü�F�+nP�2&;��%L¶��Q�ȢL�I�x�C�h}DЬ�z�JZ�1k�x���g�IҵD'u��)Ó��^�V��%k��\�'m9�u��0���z(g���깱��i�
e�@ְϷl�Ynº�S۹qG;�j�BW����c��-��(f�����v��[3���e/�f�43uQ�
夏�fc�j*N|�`��"���3�R5.N#㵙]�r@nݪ�'Fy_5mq׮�>2C���X��Ϝ<'Y������>�?��9���8,�Bw��o�dꬫ�G��L�-b"B�4�X�84��p���!�0 LS%e��j���TF�8XS-�z���m�BW��[�r<'���h�9�B���2!	�	T�N�_�5����*s�l�K��g
(�����u�#�<�+��<��d��Y���gYK6$�v�Q�.oB����5��e�t�X��(ߴ�l�r�aK�Yty`�_/[����0Q��
����]?�}���}���%JX�5�Y���;.6����"�0�=�P�;�q�@�z�f9����0�e��
ڸ���[�������0���W*�ugl�[3���%/0k+X�r�:ǰo�G�(K_�����F���>��Q��������1||^V0k�}jZ�*g%���'��Eݒul03�������ٝ�r[#���e�^V�r�3i�I�S�IH�@�[80�R����N�pF(�b6a�r 'f�†q���]b{����E9yl��/U̒���D.�����_��y���4i���x�v��TQkCh�o�W1���R��gPH-����F0�Ø�(�wG�;"Q̊u��`�?����SA�`lq�����
Jr�f��w
�L�<ٗ�vLwt�K\���ٜ(%v珺�oߺ3����ƌuQĺ$��
�Ƶ�g�X��yg�I��&_R[����H��ƖK#�əe�֛ �m_�r�?�ٿ3y����Ig�2��/�]J5,�~��}���r�`���8�6�(`��.����j�z	���v�+R�L;̅kb�e��2�j\9�.�
v�j�)q��(k�	fw��m��c�X�&#x����(̢ƅ��R�T�4#����\�=`���Rz4N�1�)]܄�e��L����]~b��d�2���ή���C֘5H�1�n�����l�)j+��(���3UeqI4�t7(�"}P��ͧv�5V�-�*���}5�/K9�n["z+���	���."^;Wx��E�cT��$E}�Z<\�䞣�5�����?J6�ă�p8��Pˤ�ZWW_†d��Z��?��Z�]���`&+D��I&ȃX��lӧlטu! ��4�QZ,��(��tL=�j�w)�&ov���?��ȍf�5�2����n0+�v�Ox����\�ԣ���7�����Ne$�����Ȣ��2���]gH�F�b�?�Y�T1���	aQV�,3���'nH�>�Z��̾����z+�=_^��g���}���t�`���p��8���cǯgZ��S��d@�ܗ^+�HU?=�M�T��Y�>�2��ښ~���5�����ư>
fw�ʭ��h]iھ�gi���Q���mȊ2���έ�VY�w åz��$ȼ�h�6�O���g�zܠҨ�R�z�%b���0�1���c$C��hh/l��E��<�����]�����"�t~
MEדq�S��׫C�^���K�˽����
!c�Z��d��랂L�z�b.�bq�+�ŷ���,���s:�x�<��ݼp�^ˁ�|7�H=IW��0�>|�r� [�}œg�g`ƺ����敪�9��	l��3M�>��,Ե��|i�"n8��Z/�����cr0C_��50��/F{��H��4���7��Y�/j^f2�;~��¿��ߜ��X��M>r�Em��������K�XWVmu9�i9MhW�_g�)��
U��~Rc��n�}Vִ���������<�/��R���хú�:K�Ǹ��k��W��}��1�2����f�lׇ��_�r
hl��pX�ޗ�Q����]�$$���Z�u���Z��]��)`*�I���WnA�ÈP��(89�hg��tE]o����Eg�S
���`B��tQ�NL`��SI�͵gfS��.5��r�Y�ŕQZ�k�"�5f�z��Zq����^��X"��
����Z\1~�:��xq�,7�@HUJ�&�?�D��G[UP�
Q�M	��e2@��M@��{�g�����|��Zw^��c�
]�3@'�i���UO��`� ��/$��k�R��m`j��ۨs�|W�1A���i~&ڣ?���n�l2@-��l�6��.����c���(0��ye�*fo4�d��f���_�h�CL=����G^OetIe�#��mP c�b�D����&M�(f�M��.
AL�bMs���y=� ��f���nEWF:&1�Ѵ-^���s���1��w�`v�[�:��.�(����ue�M֍)�����Zgja��8���;���e=?c^��b^td�S
?W];���v�q�V~�z4����x�/���V�6U̠���UP�Yf���w@�%����u��}�0�<�8̌˼����������������AY7��[Y������:���<δˮ���j%�G�<�e����T8�V������r��F�T��C������nz�c�6T�t�Y�hD-`���{��m��f_/���]�
��Q�<���<��јe���};_kN���2PI3)�c���Tp}d������@��Z&��G;�s�j��
T/D���D��aL0sp��dR� �Y&	��T�N�
�pUt����9K�,@�[N����@�2M�֭>����+66��&ҫ*Yf�kz,�]6���dpa�ǣ]g����'���lùMr|�}$��0{���̊�_���]������ԭٗ]��``���f��?��U0;Z5��6�l�}ѕ��Ը���Roj�\�Yf�1e�2:"�J�9�U�k�1(�i�>�c���ÈR�2Q�|���a�{m���!_l��%�e�!2��#2�#+#6��ݛ�#�DA�B1�]��/3��L�8syh��)2������D1�[ӛ��l3�T�ΡZ�O+!���̅?`o!j��{s��T���2w�*lf�f(�����]׊�+*�P�v��+L8�ǐ��e�.�qq���,�*�	�M��&w���v��!
��\��M����{G�L�"� ��l
f��2ɇ�g��6�l�˱a�Pf&�z�0���=�쏠��d0�pN���|[#c��jKoS>TkhA�m�w�D�/��n{7�l>�)𙍑�u ���H}?4;#3�엄r��a�2ZfP�4��3�yi���S��_O��������Ϭ������QtQ�<�>���g�g0{�K_Z'�XO��;<m>�gc�i�d��)�q�4&i�t��+����I[)[3N������`���߉FC��a�MQG�zW�lM��Ӵ�ݛ�Q]?L�_�?d�1��Wa#qhpe�"]>�i^Z
l����9'_<āk�я��1/{�3P��v�w�8��)�#�"����d|^�����	
	#t�̲HCBw�x/�B��\��f��C|0I:���5��ŗi�A�C�rs J
���E$L)��sG�G 6�Cb�̲>��(n��������f����W�`����~
���̏�ع�c�Cl̊'��z�,�5$+c�[�H�������a�WF2e6P���*~��f����>���b�m��fP�|��m6�p-nM0k�xN�S(��7�����8��3�Xx�����	dR�3[�m��(�5�m`c_�enט������M��ǡ��������_�~�ls�`vz�`���f/~�̌1RZO�N��6��&�0����=��l��.ո7¾��1�f�>�U]L�����,�Q���<�D+
f/�\��j&|Ҁ�b/�������H�G��
z<�<�d;�,��A𪁭X4��4�<s�=�_3D�p�k��Z�����'�Y@&
�fV�6r�6(r%�p"�ͦ4�!`�P>/�bR�BX���R(��_��
�$e�e
�	SW�{!������[8�',�JK?���M%�l0�pg�_Za!�U���,��#3M�c[�H�npA�Z�dC3�?ڲ���:��Z�R�b�~������/V��;E�6_��n��n6R5�ᬄ.n�k��ʠ�A9�	h�/|�2�53i7��p�qf8g��6ύK�@f�y &0V�0�ŬW�Z�LU�w0�����w�m�O�>F���a�C^�~䌓l�8�ǩ���������Z?0欳e���נ !�sQua;OРm�(�GX���o��9]2�Z��Y�._�N�j�Wy�ζM��`��ϱA���U%�8Eʄ7����9�A��~u_��Ro�-���J��)�X�c�`��6�b2j��j���ac��.��r���M��m[�b�M>TI��˞�T��l0�x��ަIˢ}�dV��Rg@\�#�U�6����\��G�li�������I�,�S�M��u�E�"�H=ak[Fn�te�A����Ɔ@��eۆq����r��og�ǡv�
k]�)�_�mn��o��f�^;5���f�|�#�ǘuHk]�l_
d.��2}N�
���N�f}�ehM"U�&8RA;=#@;<AH�����bl̢��3�����l?z���?�<��;��;�\�L�Wf�sc�D T�붬2y�^��!�a�T�\C�f:�N����H�.��*����YN�+C���i'9&c҄e�KU�H×��S[�xO)�9�b�u�l�m��<#m�K�F׋Q�$�$��f��]����u�zF{kӀ�˞�d��7��fmԓ��:���Y/4#M���sŴmvs�gf��y��b�w�$&.kf6�!O�L1w����i�5�e��~�;&���>x� �,�Y8#�S�O�.��BYhYƸ�R�I��D:#O�W�PQ/�	=�0&�(�
f���9�O��\�|��2�P��0J�����/�v��>����H\��V
fhW�Z���te�m	d��7�%�G�9���F5���(���,\ ������L�H�=AMl���^-��?�Vϛ"n�A�p��w����l?~�����������]3�e=Փ�Ԏg\�M8���,*,�.~��'�u�sQ�˴�t5�m}_	2�6� �`IwC��!u�y�/^ϲ�%0{��g�h��+pюiC�l[�dU�<W\���F��Yu2,N������$�ڕ��2�,��hJ�~�w��[�Z1[����7=鉽^�e6��_�*Wl��\h���jC��,�K�2�-�m�)5�3cR�c�Kҗl���V�wuS5�&#�c�a`�s���i?cVt�6U�|��l�S�\�%��L0�4���zV�D�Qά�]�U]Cb=����`�.���3�5�>ۜ\W�.6` �Mw����>0�&��t�}��1f�ed,R�7��U��!7�^����m��@��?n�1���?�?�6w3v�ӕ�M/�O^00{�y���שf}:y^���1�.�ZvM�@t�C6�^�ӊ�c��h�x�5m3Jl? �)c�O`�y
��U`v�\�g�ƌ��[#v�$!��ع~aB ��*���δ%��D�1rl1G�S}t1s�!e�����1S��uZ��bcSĔɭc3Q�鴕�=�	�r>@(Ǐ`�OM�#"a�M������+��&ן�'>�#��U�n_,��0�r�-��m�-��K�}8��W̳��	a�����د�9fe,*���,7�z�w�-��o��b
Y_o���3�b�r�T�:�lmci(e�l4�ǚ�F���C+�ͤ^�����6j���ֶ�Ͻ�b3k���e�H��ݚ��e�鋐�C�ǟg0{۷}�%0��fl�ݾk��l'����E+��5gժ�ҶO�=�g�l\+X-$b޴_�Mc�v'��4�쁯��F��T���#n�1q]��O<����qz�P2d�Xᮈr�31d�P�rqKg���Q��R�.Jyڰ����6�m�gN�
f�\��X�ߘ�q4��#'������|�O�\!gr�ܤ����7e�5��d[����>�c�#�Y&aCƏ5�L��-,�(�Rg.R�^�P��U��6��!���ul��g&e2k9��=o
9	f����!�?��`G��>��c��W���C���b��z�oY���d��eY6��󑮌P͚$ �5��ͨ�Q9;�P>̲�K��UWx��&��K��X�_E��.��^���7�笌�zֳ�J�!�Z���yKR�5��`�����j5���������+�����˯;`�V���g{��GqQT����j+,#��*˕�_��JG��$i�4!�f!`3B[��:��֕1���nG�[ǐ[�S�YwN���n��*a�嫦�pԽs:��?�.?�)�P}Yn�Qe����6M�g�Yh�~*$ه�3�6>��,��tr��RU�M4$�T�哮�Y��iz�/�d�֝cZ�l��U0��tY�EÖ��n����o�����u�`�l��1��Xwe$�qϲ��1=�.��o���N-��2֩��}Q��!�Qƚ�Xǹ��L�J�:��p{����-��P��"��ge�ϗ��.�>f7�g0{�3��?vh6E�o�Ġ�x�fP��ރ��_��}?�l��Ě����wWd3�f��z<��Þ�gDlڹǙ�r�m�/�!mÈ�^��p�l�?f���׊��V�L�x�܂fBg˪u�P�Bo/�	�G,)l/��z(RR`�uMs�� [X8�,��;Rԛi�}�0Q�<���y]g2�S��sΚ(��Q�b?6I�/s���fc.�Q�t�nݼ٤\l3m!��j�6nb"�f��fܣnc�z����h�&"���6��{������C{����Z�w��6]@�r�(��)�Yaj��^,VQ�(�-<'����,maѾ嬄w˷A�B�]�f�(�e?.�y����n�^�ټ�m�t�}b�&�b��H ��jY�/&�A5+�1�r�-ę��1g��YcV��Y��
���ۇ���3E4�7uqŕ��.�]w����Oz��is �䂋�{��x
�fZzӲ�+<0�`(��K�h��`�v̭�^e͠z<��Þ�yS�*�+S�Q)Bak�C�U<Y���?{ң@�#�L�|�D���5�E������r�'�Ynl���$���_ڛ��}��u�"۔�G@ԑ�J�fݧK�&��><�e�bA��L"�\�p���&�p�)�ن&��W�rdHeL��,��:a����$s�ԇ�����Ћ����;
(HJ1�U^�,\����������tM�jY	t�Z�:��h��dž|��r"��W�`#P�V��;Hť,��<
��g�6�ڞ��w��?��_���"�/���a�%��#��<�.cʼ��zci�Xk���yvе�c����:��e{�L�#���sH\�7˵�4�4&5Ѿ��5��4ܞy������c��zn�g'fۭ�3�a�t�1@��<��S��ԃ]tO���eN7?�.33�6ǫ�PwDU�d�1^�`WŦ�%�i���=��,c
l��J���m�6-�<u��Kl�AV)����jb���Y�����0v���-ua2a��4�BhP(S]��
�Lk1*�R�#Pܼj�e��^*f��#��i�u��>Vo�y��F
%m���&����̃*��p���0:R(&�k��y2hv(���:��x4��~b/�ۍ���l~G�]T�g���
f;�(C��~z�O��N�-4^l��I����Tc�X\*H�����v���ㅕ�j�e��L�1��'�R�Ԡ&�������;�ͯ�f�o�cʘ��R�؟e�y�m;��+6@&�zN����] [vi����d��&K#�uM��38�Y�=���<��������ݸc{̞p�~傁�c�3�=�)O�j�"��z�j`l�L�8$Y>/��573�:֍�'��2�!c;�=���S�=n�(��m2@]y��bH�B�@��A��<�uq��G�
Y��wأ,:5
`�8V��l�q�渑	yW�"�p�]]��ut{u�K���N�1ُ��زuO�w�)�'7��.�BJ�{`�G5��^�`��C���"�[a�i�I�DU�$�}��_�7F�	��W��T���+��,��H\�n����LOu[pޭ�>�?�͛t3�=�/}��!�G��cnPؼ�.���G9p��9x�����'�Y����j��7�o�pبDY����������1�ަڎz�/�,�z�NV�����5��DԺ@Y�e>�'ݮ��W���$��M��=�NU�+#�|^�7{]�J 5�Q5�:W��ǩn8�--�%�L�뮍��57J�-lg�J��v���mc��AO@7�ޞ�=����K�������{0k գ]a[^3�l�*�p��1�ֶ��a����{.�;6ـٓ�������9��^��F��=^�!p�8�0��<S�ˉ�H~�O1�o��TR�I�"�X��6�ƣt�(
��*X$�qB
�a1��я� H\�b炧�վ�0:�g��a�qQTд��إ�Q����p����,���J��΍�]��T)�i��y����y�rç�Ù�Y����cy���_6���/�BJ4=�m�\]�k5@�ita<DIS{�'�e�
�	SIs.�]3׌�d��
K
�myMQ�����u}��1�yT�&{ڼ{���<�ܮ�p��ټjX��ɹUȚ��H��J�B�h����@3�lՕq=�L��{���4�
Z��q[���k�U�۷[l���y綱�阮�����P��x�y�7|�7\3-�p�r���VZ���Bm��U�1�XfW4��T9�ڥ��_�^��x̞0�:��eY�@Ӳ2��m�Md�Ⱦ�o{�ID2����|�P*�	;&7�E�ƺ�׼�� ��71��T�|?h�KbH���z::�;c������n3��/���p��5U�4�9FŪ=#�!E�J��lX3f��7��Z��m�@�t�J_����_*�9>.��ZO�%��#ݧ���L�4��5���H��iљm����{�`չ/��
K
o���*6ܼǍ�xY�����E*���zŬ?��o������漐uq�d�;�
6z +�3Ӭ�G�26M��*ָ4�j�s�u���߃�¦�n��O�d��?��btL��.��f��l�y��1{�y����?�8ff�����n�O�io�d$*mײg�Z�e��(���)|�b�r��-��},���]3#�MZĐؘ��<m�m�3��d;0�����8zݨ����FB���I�JV����b�ڛ�ȼue�ͧ�b��EV*���0�6hP�"~�wU&�������bC�?̒�V\n���{���<Iy�p!Q�,D��_t�	*^����ҽ��C�~{�����J�I�7�u�+�xppO�O@dY"0w}���f.�?�	e�Ҟm���Q>�L�a����7Qx��:S�o|B��ڌ;ʲ"�K�od��`k���� ��&�E��hf��9��k�7�e�ͽ�ƚ�*j�	�9��-sFdb̳<M��Z�#��X�(4U���A����uĖ�Q{��q���73�lxG���"�\$�lk���a�u���a��^�^��Tm\�2�?�1s ������}ג{g{��Ր�g������a�5�иZG�aP�2[�����uU���-� v�Orɲ躟�.����8�P�@+�e�=`#���R���M�P8K�F��Y�p���=�jv�R���%ٱ܏���3ᜎyZ���yw����_�U� t�1
ȹ��! *���=�T�R�I@Rg�%�:��(c���K�nZw9'�	��~�2��M�4�|���T.���%�=��o n(ٛf0	�1�*�ICQ�E�x4�����'�fcs��w�h�V���cb3!.d�2�����L�����3�3*���f!k�v���ƀbV��06����/ۑ�������}�.���=�w.�=�<�����,ܤ�
��{�vML`Dښ���c��m�E�z��y��zn�w	�[��,K0�~أ�a����Ue^O�K�E�4���1��\bGxs��I����1����p�,�'��X�3NfN��6?KG�1�	i!�f�PF[��<�Q��P)A��6�Oj�Ϸn�!.����r��	��W�����_�f���+T��Ưc�]C�#ΌDzl(����"F����-Ǵ�V.3�m�S�~T%��ǣs�&�ɹz���xċ��JLl_�\�GS��S2��W��9c}��h�l��[�[&@&��t߲#�˖��ӝ�eI�!V(f��5�f���L�ZW��2��7�����̎��*&���s�݋fC>�Y����V�b_m`����!��q��Sd�D}
��Ⱥ�r��\a˾�X�c߇C\k0�n�#�ʘ+����)6�Y��^���7 pE�j+ 'oX�*~���N?L*f|�f���O�k�ϧ��Kʘx�ntvR0su�By��_�	8}�������Bt8��La6S�B�L�|�ŮO�vH�D��5�
�CR�F��Q>�3��Kb��9Ϝ�f��]Β�ڌl0J&�L��v�Q�@�_r=7��8!�W��(��Z'gbS���3;�{�M
Մ���,�@8V��|~�[���C(��J-��9>�2M>b�yҾ�&S��
��O/������0*�O�*d�/����`�_�*J�ƙ��e�*4����լ�,ּr�k��̎�w�q�b�,7��r.!�7��Cbˊ���vӳ��9�0J��bE5�myn�68+��Wf�a�h�;���ύL���;��=�/X���g0��kV\���ڱ�}lC�V��iM���Vkq��n�4?�y�\Ǹ1&�]��%z�#Ƹ���2���f�u��75�	���.$��2���'S�l+*YЕQ��E�Ȃ����0�c�����i���`]���&��>���jV⭤$U�~&�����*���J�a�U!^�f1!-��	Da|F�&U�h&������=�`�ݪ�u�o����%| �_�Ѧ��Ǔqcs�����u�rcG[���VU5��G�]�"č�.v�q�5�Ṵj���۾k~�,���O���(gT���Wc�5��-��2��?�@�2��>Hg��N癩��hu���cϚx3�YB�%�R9�~`V�ˣ����t�'�?�``���f�y�czPhb���8
��5P��$�i[�&��y]ʦ����
Q�ڶ�7k��1n�{/@@C��0�Cu��R,�����8�xCx��d�^M��<��͑�2F4ĉzk���#�����5������I�f�/{����E-I5E�)MUI�)�5-|�$��B�aj}�?��y��5��\�/sf�A�1�`��\�ks�	׉�]�d��v�%�s������ԍ��*��\{�:�'9]�ص��C��f������6�����I]��
,Lo��Ж���X3ՓC��Z�D�L[�buQ�4�L�����Y� $E�2��qe��UЦI?��GmL����U��"�N&O5�1�x�`ff��66Ą�e�'M���$U0Ɩэ�޷�;{W�*+cg&P&e������Y@!C�%0������dv�`��������R�it���~����G5p<�8V�W]��,ҵq��վ#渴�#@uu9�����8D�"�X~��q��yE�,\�Oq-r��d��q���E�������&�uT�B��mc�k2g���v.v�:@�S!㭥[�i
�X�rF��~��?�ݍ����n��dRF�ѩ*�Uh;s��g��n^�u̩ٜԅ1�_2��lU(/F��}�|$bT�k@�YG��N�)��0ǩ�S@3I�WGf~�]�C]w.�c�r�0�ƍ)��<�s)6�?9x�j�ֱOS�z(Eę�ClJ}���`vGy�a�K��v����@Vo*M��j��I�ߤ�g�|)׀&p&�4K�f�1�8i�T�N���N�b��[^����m�m��?�``v��f�x�#V@�����:-�E�
G�[���k�j�
6��:U���տ��G�=(!��p�k��e��C�Ek��6��L��,�"
���mC!HS�҉�(�At!toLpS0sY���ż��Y��T��;/8g�r:�9�Н�-����de��J4�2�NK��%r��[*8�������JΜ_�-������=�������~����NB�r5>���2".�h�?2��^Ї:�	sfq�1�_T��t�
V�L#*W�gꖨ	1�&+�[�����<c����G���f����j\ �MT3��
��Ч1f����L���`�|���b�f_�ƈvqc�����1(�dv��ُ̚�NI������,+��sV�Wz�WZ�ކYՆ.�e6�j\7��Y���U�Wo.���F̦hXC�T�Z7.p>������`	
������!��k����.���n��eT�.���d>�ua�\X��� L&j�7@���K��!�;S
$x�Y����Ya�����2��#��"�q/�u�e����B�$�Jld�}�8]���b�S,��y�9���gs^r=^C��v�#|M��V�5&�r��E�"9{�1eN�?���Mq]4�2]����{M22�������3��)��J���e��N�t?f����W]ک�	����Y9�0K�����,�U�"��,�_��������
��0����(i��1ᮩ�c>V\���/[K��g�?�u�F�f9��s�$��|c�;�%��|��0�~��ђ1C�q&�=�삁ٽ�3������Z�563�a��Y*S}���zU�e��R�1s��0���G�$�Pf���2ە,�ʸ��r/С����;����؆L���Q�E%H�
�A13D���W�K��u����}WDK�J���(�{��ʺ2A�|gh�?�_��OK:�dԏ
b��iPC�T�7Q�X��ue�V��2�,}2�\�
(Na1_�Y���*�N�N3��&�~�3��>c���
n�0$k�@ߟ����M���|���urNPP��D?����Zʘd^�zf��W��V?�Hr�"��5��_2[�%�4ԁ�EU�2)Q�������П�����������xOٟLbˠ�	�e=|�e
f^Ե��•v�+c
dcTʴ�{�A�߀�O�nh�����f�n1�V���q�2���l�1�m�l�w�����I�Jլ�m
�e��f�R:�����8��oڮȲ�6�E�r��h�'q�O�^@��H��e�L[SoA���=71�i��Q0Ѵ���9���"ׅ�r�x�L����B4���V`��W��n�&}�	��[�����l(�bi������:�B`�%պl\��!�'�H��|W%I�H;M����0K�"�������0a�T�]�-Y��x
g64�I�@1,���,�h���	�H����'�~]{�3��ΗR5�T5���Bڟ�ԏ]Y����y4`�2`�lh+�Q��1N���6u_�6�$� i��OS�*`�O
_媃}t�����@™̰�����h��|��; ɑ�
���1�������33333c���������c�ku��:��U�Ul��f��*�J�j�z�u�^��f�[d1H���Ad8���D�h����*c?���T�boZ;��^�l+�5��+�G���+f�UFhK�����9e�[�fo�6osE@�6B�1��)|�y��JB�����+u��7tga������`m�>�g�"���@�q�1����x��:H�l��JUƤ<>����`����;��,R��7��@a.蜗�:��̸AY���_�ϣ<��y�$Jui~�S/ǯ�)h�{�v%�ؤ�?|�u0����5��#`���E�	��g�9ƶV������))r��m��7�fJ����E8I��#li�܂���Z��Վ�Q�Rl�<rI���f���f�5�^2[Q�=�0@�@0�F���Nal�S�)���!R֏�Յ@r��0��3����Ł�b����̦S�z}���u�i��t˒�����(`A�]��4����u�:�ݑfI��Y8,�ʈYg]7ʲɤUmåZ�g;�.�'L!�Dz�?Ri��*Jb��G7B�P)+�z]�����c����OtY$-���sr�F=r��G���EE��%�E݈4���������6����P ��
���b���R��<��f+&#p�R�>~��w梥bh�5�s0/X��k!��#ʣu.VMDL��Z<UTu�Eʵd��!α-�=�'R w���YTk��l�{�
��om@���G�f|���f���ә6U��0�1T���0���e�Ė`�.��3�Q�l�l�<�}�`V�S��.} ;��G���Y�+�m*�p6W2��u�^�̠�ڬcZ����������߮�eD��]��̆��zǪ�7-Y���w;��^�/�/ї��i���g~�ܡ�`�>�<deA�P����ҲlYa��)l�fp��1wP̅��ܮ�-�
���~��u/IV��=<bF�TH�t1�%%D��Q1�����7;�TWb,�Y�R�i{�yeX_I�?x�
�3�'�8R ��#�	�.<�6R��J����R3`�i�[Ʊr�w�H3D�::.�ҮYr�:��4�VZ���}K��.r�|5)?ɰ.��d��~�`�Ž��HV�d�9�M��B�Lr�q�A
6[��0���'S\=�"��?�(�8ݣ�����6�ܬ_�a��d�n٠q�G� �OP��ʈ���X_���S]"�*#�@+r��w���A����8��̾�E_�����Sf7.���6��	�F[�w~گ�9�L���E��ݡ[��L�ف��o�>�vj�2��/���w�B� �(��C��Fա,��`&Y��D<�I4�@K�+�v��Xt���[6���1G=:U�,�R�=v�
�����,�kڭ�e?��	��tx^�G�PO9�����R��-����M�������k�|���_IA�����sE��06�G�}��QhTz��*̆�U��v�׵�,� �+Re朗�C{f�4���`h��gT�/�1�o��w�Ʊ�"g/�Y�O��J���������?��Pi$��4
g���{fͭ�f�;f��>AZѲ������?oV�j��˕!Z{�Xf�O�<f7,����}�?�s�8WلH�P��);�:��y~���MG����1Q\���9�9�L6BP�����ȗ�Ly�U�³U�;,Q_�����Ц��F�`��:H�Q���UXہl]Mr
Oe������V���nீ��Y���g�`�<��g�j��K�婒B�2N,&\�h��jIlp�=��� �ьV�%��y��5;vo*l�S�|����|�7$��_4��k����c�\qwJܹ��L�t�H}�\�����}��.I"�m๵)�,"f	�Fw<)�l�w��U���o��?F���o�=IKaD��)Cyۯ6�)/^�T~����4�5���E��$�!��ʍhc�(�Q��jS���Kb_i_�z`�y��Y�X��O�C�A���%��w��{�>޺�]R�	���ҍ���-�5�����1J�v�>�����2j��f��gP2�ɠ��	e�j��Oe
;S!� 9�=v���%�>�����Aa���@A�B��A!�Z��`�І$�w�s�zC'��i+�L���3�b)�87�i,���lel�P���M��Q���K�#G=���~�=�s�ɴH�D_�1}�~7y�`,;/m���"��e�k��7�k��3?ډ˂t���8&�s>���׮2����_I����[m�9��-��ˆU�Le�}�9����e��q��"��־�h{�.�}�2X���-��"��Yz���; ]X2��v�m�!`�����E@�I�>��I��Bd"��g�(/˳���#j����#o��t���E88l���K=��
�����$�I�!yP��v�G��leLe�:<������B�D�e��,5�>��0`2�S��-L$��s�ec��L�\v�W�";��Wg3��ఴ�T#-ю%II�,c��n��c�w��c��?/)H��*�xG�{h�\��w��b�sq�ҙj.�*��}�_��C�U03q�0:P�#f�-�+��z��v�� ��p��؇�S��Y�Un�{f�zgB ����e�����n���m��0+}�M�]���l�Rd%B�0S{�p69�Yr�%�{{mG�)���g�A�����WjOZ�}t�dM�6�p_�GO�<f痬��o���	G�6�,))v�sBi�R�(�i�;����3>�E� g��we�L�vn(�M������t9�_�X����Ӫ�2���d��d��L��Po6����@\�eߗ�́<~޾N�@Ja�B@�[�r�s�O��[�Ж��=�ي�p�ߚ�?��ŋ6�k�=v�R��c֏�s?��*E �6^�e%����٭���G~�{=�n-A'ULa4p3𲺨���LOD��.��$�!Җ�v�-��a� 7����� �]�@q `��f^�w��1�C7���W}�Ք*�l*�ֻf��{eө�m�J*�×�M��v�f�[���o��-�>H�_��u�����c���-���M�d���v��k�י��sR�O���Z[Fİm��9���BbM����д�|M�F�0��ѓ��Q�v?�t7ء]JF�خ�O�;�f�t�<��@�&��y�c����l�p�M`�����x��k^a��w� !�v�49��Je�s����S|ﻉm@Xs��D�6�����i��Q���a�M�gt��H
�@?5�.T������(�8|��SN����ygv��n��%������^�>|��f�aM@�f\��TƦ\~[$'ᬮ�8O>����W��S_���s�X�f�џ`z�;fߦ�O�*���K�7z�7�C�����a��_���vgnج��	j��H�J`�b-e��v��`�m��k#I�������d�5C�TD�t��1�I�8�I�O�	Zi�q;���ٳ}`y�\û�z����XL�r���H�|_	k���`�=.��x���a��/bH&$�qT�����Y*b-�&E沀X����6&4��y��E�Ău��ENyܷ5/��(�:�����K�m:���C�t�L�"gm���|5F���+�Ie���-�v�f�ͣ�+�_��_,��;�~����*7�w�Sfg�fo�op�P��>�α�>g���~0&Ô��F"�OL�D�$j`6���ZIg�~��Y�d�D0�S����$r����M��U�W��Pk{q���'l��1��SgΨ���Qݯ޾j�=
���_²��~�=`%��`G]�Ę҄HTY9�
�݁��[<~���}��	c��rY�l�>	i�H���%��~H5c0�lV��E�_�Ct.���R�w�∘�8�ݿ�gf�z��#h�;���ǣb��M�2��2�=��t*#!
`V@�_G�;W��X����Z.��%R�c�?��r?�'O�.�^��_����TX���iv�o�c��]}&g.H��,}�A JSH�@��π�p�ݰG�1��mh�@�_X�}�S�J|K���c����~��1�V��p��۞�F�~DEݝK(�Ƅ�A��@!�*Z�H���xR�ss
	�3x@U��M�(J�Q[��z0x�^za䢂��"���,uu�M��ۏ����?�k̄��*7ImZ5�a!�]�G��s4��C��i�	��)�cZCg��P���}:��󒠌�,
�z����0�oq��<�?s"�0rv%��(}�zyH��E@t����O@�/�_��es^�?�/ZI?0���g�|0{S�rG�!���S6��Uϟ?Š����8���ǰ���9'
"��s����•��Ӄ�.2�iZe�3M�$�*x)�6�,' ��.B��V�'����_e<z�oV�ڈ��t2�]F��
�ӛ�zy���2(�)��V�T�w�C�p\=#]UR�>�|��a�_mdW�9屦��&+m�N���~��N"�m��`��(��Jz�u���}�kǔ�h>"�p֍���� &��*�Gch�q�,0{m%��R�<����)���_2��={�X�`��\���>K8�<�D}��j0�n����{�qi�y�>�e	�~XoF���ȇ�m��|�:Fq��jt�*�1Jh$��IW�ǴV?���,�d׮�D��7<d{S�.����6�v�jzRjYz���䕩�Ya������!��89uo�3��O�~�p�E
���]���kq������{�z�a��S
Ȳ^ךӭVƘ������j1��~fC���sx�^��d��r����M����!K���I3B�k����7C/WKi\��JeT�x�~z%��f�������WV*wu4)~_�)��%����zKDP�=�<g������x����c�19���㋙}���:8�%v\����܋�G������H;J��C�,�l��m�U�oPFD�հ��yʢ;�&��T')�
�pɴ�Ҷ��s��O�V|��S
4B�3�v������c:�3j��8�3a�
�6�I:���������u��3�I�Tq\WO<��N�G��ɉ��1�������)�.^�q���C�'2:�d��i󾾬[5�V�]�Q���Q7��~�c�0��Jz�Qz��3��£�#S�2�/3$�̤�l�n�����Q��QZ�x�f/����~��?�-����˿�{�7�^�U^�ֻ�a�`vpp������_�����ۣ��%�a�O��Y�w�����u;�+�
�%������GD"�$[T}]Ìk4K��������b3<_q��Q��e|���Wg��vw�w���Q7C��v1����f�K^��:��g!��B��ԫ��[7�C���땾Z��hY]��G��V����o�����ܾ3��{ց�c/�.1�1�O��ҹ�Q��b�`�;�X2����i�����\�����Y��6sy��"�<�������h�D_�	���7g�hԛ~��H�͈�_B�ڲ+^<9��z\��^r&e�1���qe�%L�^"�<f����ç�4���o/�7C7��o2�^`�c��)��c�FI�~���7e�[�v0�U-�0s~vIEND�B`�PKtc�\��(���%jqueryui/themes/elastic/jquery-ui.cssnu�[���/*! jQuery UI - v1.13.2 - 2022-07-14
* http://jqueryui.com
* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6
* Copyright jQuery Foundation and other contributors; Licensed MIT */

/* Layout helpers
----------------------------------*/
.ui-helper-hidden {
	display: none;
}
.ui-helper-hidden-accessible {
	border: 0;
	clip: rect(0 0 0 0);
	height: 1px;
	margin: -1px;
	overflow: hidden;
	padding: 0;
	position: absolute;
	width: 1px;
}
.ui-helper-reset {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	line-height: 1.3;
	text-decoration: none;
	font-size: 100%;
	list-style: none;
}
.ui-helper-clearfix:before,
.ui-helper-clearfix:after {
	content: "";
	display: table;
	border-collapse: collapse;
}
.ui-helper-clearfix:after {
	clear: both;
}
.ui-helper-zfix {
	width: 100%;
	height: 100%;
	top: 0;
	left: 0;
	position: absolute;
	opacity: 0;
}

.ui-front {
	z-index: 100;
}


/* Interaction Cues
----------------------------------*/
.ui-state-disabled {
	cursor: default !important;
	pointer-events: none;
}


/* Icons
----------------------------------*/
.ui-icon {
	display: inline-block;
	vertical-align: middle;
	margin-top: -.25em;
	position: relative;
	text-indent: -99999px;
	overflow: hidden;
	background-repeat: no-repeat;
}

.ui-widget-icon-block {
	left: 50%;
	margin-left: -8px;
	display: block;
}

/* Misc visuals
----------------------------------*/

/* Overlays */
.ui-widget-overlay {
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
}
.ui-accordion .ui-accordion-header {
	display: block;
	cursor: pointer;
	position: relative;
	margin: 2px 0 0 0;
	padding: .5em .5em .5em .7em;
	font-size: 100%;
}
.ui-accordion .ui-accordion-content {
	padding: 1em 2.2em;
	border-top: 0;
	overflow: auto;
}
.ui-autocomplete {
	position: absolute;
	top: 0;
	left: 0;
	cursor: default;
}
.ui-menu {
	list-style: none;
	padding: 0;
	margin: 0;
	display: block;
	outline: 0;
}
.ui-menu .ui-menu {
	position: absolute;
}
.ui-menu .ui-menu-item {
	margin: 0;
	/* support: IE10, see #8844 */
	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
}
.ui-menu .ui-menu-item-wrapper {
	position: relative;
	padding: 0 .5em;
	line-height: 2;
	width: 100%;
	display: inline-block;
	text-decoration: none;
}
.ui-menu .ui-menu-divider {
	margin: 5px 0;
	height: 0;
	font-size: 0;
	line-height: 0;
	border-width: 1px 0 0 0;
}
.ui-menu .ui-state-focus,
.ui-menu .ui-state-active {
	margin: -1px;
}

/* icon support */
.ui-menu-icons {
	position: relative;
}
.ui-menu-icons .ui-menu-item-wrapper {
	padding-left: 2em;
}

/* left-aligned */
.ui-menu .ui-icon {
	position: absolute;
	top: 0;
	bottom: 0;
	left: .2em;
	margin: auto 0;
}

/* right-aligned */
.ui-menu .ui-menu-icon {
	left: auto;
	right: 0;
}
.ui-button {
	padding: .4em 1em;
	display: inline-block;
	position: relative;
	line-height: normal;
	margin-right: .1em;
	cursor: pointer;
	vertical-align: middle;
	text-align: center;
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;

	/* Support: IE <= 11 */
	overflow: visible;
}

.ui-button,
.ui-button:link,
.ui-button:visited,
.ui-button:hover,
.ui-button:active {
	text-decoration: none;
}

/* to make room for the icon, a width needs to be set here */
.ui-button-icon-only {
	width: 2em;
	box-sizing: border-box;
	text-indent: -9999px;
	white-space: nowrap;
}

/* no icon support for input elements */
input.ui-button.ui-button-icon-only {
	text-indent: 0;
}

/* button icon element(s) */
.ui-button-icon-only .ui-icon {
	position: absolute;
	top: 50%;
	left: 50%;
	margin-top: -8px;
	margin-left: -8px;
}

.ui-button.ui-icon-notext .ui-icon {
	padding: 0;
	width: 2.1em;
	height: 2.1em;
	text-indent: -9999px;
	white-space: nowrap;

}

input.ui-button.ui-icon-notext .ui-icon {
	width: auto;
	height: auto;
	text-indent: 0;
	white-space: normal;
	padding: .4em 1em;
}

/* workarounds */
/* Support: Firefox 5 - 40 */
input.ui-button::-moz-focus-inner,
button.ui-button::-moz-focus-inner {
	border: 0;
	padding: 0;
}
.ui-controlgroup {
	vertical-align: middle;
	display: inline-block;
}
.ui-controlgroup > .ui-controlgroup-item {
	float: left;
	margin-left: 0;
	margin-right: 0;
}
.ui-controlgroup > .ui-controlgroup-item:focus,
.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
	z-index: 9999;
}
.ui-controlgroup-vertical > .ui-controlgroup-item {
	display: block;
	float: none;
	width: 100%;
	margin-top: 0;
	margin-bottom: 0;
	text-align: left;
}
.ui-controlgroup-vertical .ui-controlgroup-item {
	box-sizing: border-box;
}
.ui-controlgroup .ui-controlgroup-label {
	padding: .4em 1em;
}
.ui-controlgroup .ui-controlgroup-label span {
	font-size: 80%;
}
.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
	border-left: none;
}
.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
	border-top: none;
}
.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
	border-right: none;
}
.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
	border-bottom: none;
}

/* Spinner specific style fixes */
.ui-controlgroup-vertical .ui-spinner-input {

	width: calc( 100% - 2.4em );
}
.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
	border-top-style: solid;
}

.ui-checkboxradio-label .ui-icon-background {
	box-shadow: inset 1px 1px 1px #ccc;
	border-radius: .12em;
	border: none;
}
.ui-checkboxradio-radio-label .ui-icon-background {
	width: 16px;
	height: 16px;
	border-radius: 1em;
	overflow: visible;
	border: none;
}
.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
	background-image: none;
	width: 8px;
	height: 8px;
	border-width: 4px;
	border-style: solid;
}
.ui-checkboxradio-disabled {
	pointer-events: none;
}
.ui-datepicker {
	width: 20em;
	display: none;
}
.ui-datepicker .ui-datepicker-header {
	position: relative;
}
.ui-datepicker .ui-datepicker-prev,
.ui-datepicker .ui-datepicker-next {
	position: absolute;
	top: 0;
	width: 1.8em;
	height: 1.8em;
}
.ui-datepicker .ui-datepicker-prev {
	left: 0;
}
.ui-datepicker .ui-datepicker-next {
	right: 0;
}
.ui-datepicker .ui-datepicker-title {
	margin: 0 2.3em;
	text-align: center;
}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year {
	width: 45%;
}
.ui-datepicker table {
	width: 100%;
	margin: 0 0 .4em;
}
.ui-datepicker th {
	padding: .7em .3em;
	text-align: center;
	font-weight: bold;
	border: 0;
}
.ui-datepicker td {
	border: 0;
	padding: 1px;
}
.ui-datepicker td span,
.ui-datepicker td a {
	display: block;
	padding: .2em;
	text-align: center;
	text-decoration: none;
}
.ui-datepicker .ui-datepicker-buttonpane {
	background-image: none;
	margin: .7em 0 0 0;
	padding: 0 .2em;
	border-left: 0;
	border-right: 0;
	border-bottom: 0;
}
.ui-datepicker .ui-datepicker-buttonpane button {
	float: right;
	margin: .5em .2em .4em;
	cursor: pointer;
	padding: .2em .6em .3em .6em;
	width: auto;
	overflow: visible;
}
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
	float: left;
}

/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi {
	width: auto;
}
.ui-datepicker-multi .ui-datepicker-group {
	float: left;
}
.ui-datepicker-multi .ui-datepicker-group table {
	width: 95%;
	margin: 0 auto .4em;
}
.ui-datepicker-multi-2 .ui-datepicker-group {
	width: 50%;
}
.ui-datepicker-multi-3 .ui-datepicker-group {
	width: 33.3%;
}
.ui-datepicker-multi-4 .ui-datepicker-group {
	width: 25%;
}
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
	border-left-width: 0;
}
.ui-datepicker-multi .ui-datepicker-buttonpane {
	clear: left;
}
.ui-datepicker-row-break {
	clear: both;
	width: 100%;
	font-size: 0;
}

/* RTL support */
.ui-datepicker-rtl {
	direction: rtl;
}
.ui-datepicker-rtl .ui-datepicker-prev {
	right: 2px;
	left: auto;
}
.ui-datepicker-rtl .ui-datepicker-next {
	left: 2px;
	right: auto;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane {
	clear: right;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane button {
	float: left;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
.ui-datepicker-rtl .ui-datepicker-group {
	float: right;
}
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
	border-right-width: 0;
	border-left-width: 1px;
}

/* Icons */
.ui-datepicker .ui-icon {
	display: block;
	text-indent: -99999px;
	overflow: hidden;
	background-repeat: no-repeat;
	left: .5em;
	top: .3em;
}
.ui-dialog {
	position: absolute;
	top: 0;
	left: 0;
	outline: 0;
}
.ui-dialog .ui-dialog-titlebar {
	position: relative;
}
.ui-dialog .ui-dialog-title {
	float: left;
	white-space: nowrap;
	width: 100%;
	overflow: hidden;
	text-overflow: ellipsis;
}
.ui-dialog .ui-dialog-content {
	position: relative;
	border: 0;
	padding: 1em 1em .5em 1em;
	background: none;
	overflow: auto;
}
.ui-dialog .ui-dialog-buttonpane {
	text-align: right;
	white-space: nowrap;
	background-image: none;
	padding: 0 1.5rem;
	height: 4rem;
}
.ui-dialog .ui-dialog-buttonpane button {
	margin: .65rem 0 .65rem .5rem;
}
.ui-dialog .ui-resizable-n {
	height: 2px;
	top: 0;
}
.ui-dialog .ui-resizable-e {
	width: 2px;
	right: 0;
}
.ui-dialog .ui-resizable-s {
	height: 2px;
	bottom: 0;
}
.ui-dialog .ui-resizable-w {
	width: 2px;
	left: 0;
}
.ui-dialog .ui-resizable-se,
.ui-dialog .ui-resizable-sw,
.ui-dialog .ui-resizable-ne,
.ui-dialog .ui-resizable-nw {
	width: 7px;
	height: 7px;
}
.ui-dialog .ui-resizable-se {
	width: 14px;
	height: 14px;
	right: 3px;
	bottom: 3px;
	background-position: -80px -224px;
}
.ui-dialog .ui-resizable-sw {
	left: 0;
	bottom: 0;
}
.ui-dialog .ui-resizable-ne {
	right: 0;
	top: 0;
}
.ui-dialog .ui-resizable-nw {
	left: 0;
	top: 0;
}
.ui-draggable .ui-dialog-titlebar {
	cursor: move;
}
.ui-draggable-handle {
	-ms-touch-action: none;
	touch-action: none;
}
.ui-resizable {
	position: relative;
}
.ui-resizable-handle {
	position: absolute;
	font-size: 0.1px;
	display: block;
	-ms-touch-action: none;
	touch-action: none;
}
.ui-resizable-disabled .ui-resizable-handle,
.ui-resizable-autohide .ui-resizable-handle {
	display: none;
}
.ui-resizable-n {
	cursor: n-resize;
	height: 7px;
	width: 100%;
	top: -5px;
	left: 0;
}
.ui-resizable-s {
	cursor: s-resize;
	height: 7px;
	width: 100%;
	bottom: -5px;
	left: 0;
}
.ui-resizable-e {
	cursor: e-resize;
	width: 7px;
	right: -5px;
	top: 0;
	height: 100%;
}
.ui-resizable-w {
	cursor: w-resize;
	width: 7px;
	left: -5px;
	top: 0;
	height: 100%;
}
.ui-resizable-se {
	cursor: se-resize;
	width: 12px;
	height: 12px;
	right: 1px;
	bottom: 1px;
}
.ui-resizable-sw {
	cursor: sw-resize;
	width: 9px;
	height: 9px;
	left: -5px;
	bottom: -5px;
}
.ui-resizable-nw {
	cursor: nw-resize;
	width: 9px;
	height: 9px;
	left: -5px;
	top: -5px;
}
.ui-resizable-ne {
	cursor: ne-resize;
	width: 9px;
	height: 9px;
	right: -5px;
	top: -5px;
}
.ui-progressbar {
	height: 2em;
	text-align: left;
	overflow: hidden;
}
.ui-progressbar .ui-progressbar-value {
	margin: -1px;
	height: 100%;
}
.ui-progressbar .ui-progressbar-overlay {
	background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
	height: 100%;
	opacity: 0.25;
}
.ui-progressbar-indeterminate .ui-progressbar-value {
	background-image: none;
}
.ui-selectable {
	-ms-touch-action: none;
	touch-action: none;
}
.ui-selectable-helper {
	position: absolute;
	z-index: 100;
	border: 1px dotted black;
}
.ui-selectmenu-menu {
	padding: 0;
	margin: 0;
	position: absolute;
	top: 0;
	left: 0;
	display: none;
}
.ui-selectmenu-menu .ui-menu {
	overflow: auto;
	overflow-x: hidden;
	padding-bottom: 1px;
}
.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
	font-size: 1em;
	font-weight: bold;
	line-height: 1.5;
	padding: 2px 0.4em;
	margin: 0.5em 0 0 0;
	height: auto;
	border: 0;
}
.ui-selectmenu-open {
	display: block;
}
.ui-selectmenu-text {
	display: block;
	margin-right: 20px;
	overflow: hidden;
	text-overflow: ellipsis;
}
.ui-selectmenu-button.ui-button {
	text-align: left;
	white-space: nowrap;
	width: 14em;
}
.ui-selectmenu-icon.ui-icon {
	float: right;
	margin-top: 0;
}
.ui-slider {
	position: relative;
	text-align: left;
}
.ui-slider .ui-slider-handle {
	position: absolute;
	z-index: 1;
	width: 1.2em;
	height: 1.2em;
	cursor: pointer;
	-ms-touch-action: none;
	touch-action: none;
}
.ui-slider .ui-slider-range {
	position: absolute;
	z-index: 1;
	font-size: .7em;
	display: block;
	border: 0;
	background-position: 0 0;
}

.ui-slider-horizontal {
	height: .8em;
}
.ui-slider-horizontal .ui-slider-handle {
	top: -.3em;
	margin-left: -.6em;
}
.ui-slider-horizontal .ui-slider-range {
	top: 0;
	height: 100%;
}
.ui-slider-horizontal .ui-slider-range-min {
	left: 0;
}
.ui-slider-horizontal .ui-slider-range-max {
	right: 0;
}

.ui-slider-vertical {
	width: .8em;
	height: 100px;
}
.ui-slider-vertical .ui-slider-handle {
	left: -.3em;
	margin-left: 0;
	margin-bottom: -.6em;
}
.ui-slider-vertical .ui-slider-range {
	left: 0;
	width: 100%;
}
.ui-slider-vertical .ui-slider-range-min {
	bottom: 0;
}
.ui-slider-vertical .ui-slider-range-max {
	top: 0;
}
.ui-sortable-handle {
	-ms-touch-action: none;
	touch-action: none;
}
.ui-spinner {
	position: relative;
	display: inline-block;
	overflow: hidden;
	padding: 0;
	vertical-align: middle;
}
.ui-spinner-input {
	border: none;
	background: none;
	color: inherit;
	padding: .222em 0;
	margin: .2em 0;
	vertical-align: middle;
	margin-left: .4em;
	margin-right: 2em;
}
.ui-spinner-button {
	width: 1.6em;
	height: 50%;
	font-size: .5em;
	padding: 0;
	margin: 0;
	text-align: center;
	position: absolute;
	cursor: default;
	display: block;
	overflow: hidden;
	right: 0;
}
/* more specificity required here to override default borders */
.ui-spinner a.ui-spinner-button {
	border-top-style: none;
	border-bottom-style: none;
	border-right-style: none;
}
.ui-spinner-up {
	top: 0;
}
.ui-spinner-down {
	bottom: 0;
}
.ui-tabs {
	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
	padding: .2em;
}
.ui-tabs .ui-tabs-nav {
	margin: 0;
	padding: .2em .2em 0;
}
.ui-tabs .ui-tabs-nav li {
	list-style: none;
	float: left;
	position: relative;
	top: 0;
	margin: 1px .2em 0 0;
	border-bottom-width: 0;
	padding: 0;
	white-space: nowrap;
}
.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
	float: left;
	padding: .5em 1em;
	text-decoration: none;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active {
	margin-bottom: -1px;
	padding-bottom: 1px;
}
.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
	cursor: text;
}
.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
	cursor: pointer;
}
.ui-tabs .ui-tabs-panel {
	display: block;
	border-width: 0;
	padding: 1em 1.4em;
	background: none;
}
.ui-tooltip {
	padding: 8px;
	position: absolute;
	z-index: 9999;
	max-width: 300px;
}
body .ui-tooltip {
	border-width: 2px;
}

/* Component containers
----------------------------------*/
.ui-widget .ui-widget {
	font-size: 1rem;
}
.ui-widget-content {
	background-color: #fff;
}
.ui-widget-header {
	font-weight: bold;
	background-color: #fff;
}

/* Interaction states
----------------------------------*/
.ui-state-default,
.ui-widget-content .ui-state-default,
.ui-widget-header .ui-state-default,
.ui-button,

/* We use html here because we need a greater specificity to make sure disabled
works properly when clicked or hovered */
html .ui-button.ui-state-disabled:hover,
html .ui-button.ui-state-disabled:active {
	border: 1px solid #c5c5c5;
	background: #f6f6f6;
	font-weight: normal;
	color: #454545;
}
.ui-state-default a,
.ui-state-default a:link,
.ui-state-default a:visited,
a.ui-button,
a:link.ui-button,
a:visited.ui-button,
.ui-button {
	color: #454545;
	text-decoration: none;
}
.ui-state-hover a,
.ui-state-hover a:hover,
.ui-state-hover a:link,
.ui-state-hover a:visited,
.ui-state-focus a,
.ui-state-focus a:hover,
.ui-state-focus a:link,
.ui-state-focus a:visited,
a.ui-button:hover,
a.ui-button:focus {
	color: #2b2b2b;
	text-decoration: none;
}

.ui-visual-focus {
	box-shadow: 0 0 3px 1px rgb(94, 158, 214);
}
.ui-state-active,
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active,
a.ui-button:active,
.ui-button:active,
.ui-button.ui-state-active:hover {
	border: 1px solid #003eff;
	background: #007fff;
	font-weight: normal;
	color: #ffffff;
}
.ui-icon-background,
.ui-state-active .ui-icon-background {
	border: #003eff;
	background-color: #ffffff;
}
.ui-state-active a,
.ui-state-active a:link,
.ui-state-active a:visited {
	color: #ffffff;
	text-decoration: none;
}

/* Interaction Cues
----------------------------------*/
.ui-state-highlight,
.ui-widget-content .ui-state-highlight,
.ui-widget-header .ui-state-highlight {
	border: 1px solid #dad55e;
	background: #fffa90;
	color: #777620;
}
.ui-state-checked {
	border: 1px solid #dad55e;
	background: #fffa90;
}
.ui-state-highlight a,
.ui-widget-content .ui-state-highlight a,
.ui-widget-header .ui-state-highlight a {
	color: #777620;
}
.ui-state-error,
.ui-widget-content .ui-state-error,
.ui-widget-header .ui-state-error {
	border: 1px solid #f1a899;
	background: #fddfdf;
	color: #5f3f3f;
}
.ui-state-error a,
.ui-widget-content .ui-state-error a,
.ui-widget-header .ui-state-error a {
	color: #5f3f3f;
}
.ui-state-error-text,
.ui-widget-content .ui-state-error-text,
.ui-widget-header .ui-state-error-text {
	color: #5f3f3f;
}
.ui-priority-primary,
.ui-widget-content .ui-priority-primary,
.ui-widget-header .ui-priority-primary {
	font-weight: bold;
}
.ui-priority-secondary,
.ui-widget-content .ui-priority-secondary,
.ui-widget-header .ui-priority-secondary {
	opacity: .5;
	font-weight: normal;
}
.ui-state-disabled,
.ui-widget-content .ui-state-disabled,
.ui-widget-header .ui-state-disabled {
	opacity: .35;
	background-image: none;
}

/* Icons
----------------------------------*/

/* states and images */
.ui-icon {
	width: 16px;
	height: 16px;
}
.ui-icon,
.ui-widget-content .ui-icon {
	background-image: url("images/ui-icons_444444_256x240.png");
}
.ui-widget-header .ui-icon {
	background-image: url("images/ui-icons_444444_256x240.png");
}
.ui-button .ui-icon {
	background-image: url("images/ui-icons_777777_256x240.png");
}

/* positioning */
/* Three classes needed to override `.ui-button:hover .ui-icon` */
.ui-icon-blank.ui-icon-blank.ui-icon-blank {
	background-image: none;
}
.ui-icon-caret-1-n { background-position: 0 0; }
.ui-icon-caret-1-ne { background-position: -16px 0; }
.ui-icon-caret-1-e { background-position: -32px 0; }
.ui-icon-caret-1-se { background-position: -48px 0; }
.ui-icon-caret-1-s { background-position: -65px 0; }
.ui-icon-caret-1-sw { background-position: -80px 0; }
.ui-icon-caret-1-w { background-position: -96px 0; }
.ui-icon-caret-1-nw { background-position: -112px 0; }
.ui-icon-caret-2-n-s { background-position: -128px 0; }
.ui-icon-caret-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -65px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -65px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-on { background-position: -96px -144px; }
.ui-icon-radio-off { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }

/* Overlays */
.ui-widget-overlay {
	opacity: .5;
}
PKtc�\�N�}r}r)jqueryui/themes/elastic/jquery-ui.min.cssnu�[���/*! jQuery UI - v1.13.2 - 2022-07-14
* http://jqueryui.com
* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6
* Copyright jQuery Foundation and other contributors; Licensed MIT */
.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-item-wrapper{position:relative;padding:0 .5em;line-height:2;width:100%;display:inline-block;text-decoration:none}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup>.ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup>.ui-controlgroup-item:focus,.ui-controlgroup>.ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical>.ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label+.ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label+.ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:calc(100% - 2.4em)}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:0}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:0}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:20em;display:none}.ui-datepicker .ui-datepicker-header{position:relative}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:0;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev{left:0}.ui-datepicker .ui-datepicker-next{right:0}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;text-align:center}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:center;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;outline:0}.ui-dialog .ui-dialog-titlebar{position:relative}.ui-dialog .ui-dialog-title{float:left;white-space:nowrap;width:100%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:1em 1em .5em 1em;background:0 0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:right;white-space:nowrap;background-image:none;padding:0 1.5rem;height:4rem}.ui-dialog .ui-dialog-buttonpane button{margin:.65rem 0 .65rem .5rem}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px;background-position:-80px -224px}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==);height:100%;opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:700;line-height:1.5;padding:2px .4em;margin:.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:1;width:1.2em;height:1.2em;cursor:pointer;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0 0;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0 0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget .ui-widget{font-size:1rem}.ui-widget-content{background-color:#fff}.ui-widget-header{font-weight:700;background-color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:400;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px #5e9ed6}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:400;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.5;font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;background-image:none}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_444444_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_444444_256x240.png)}.ui-button .ui-icon{background-image:url(images/ui-icons_777777_256x240.png)}.ui-icon-blank.ui-icon-blank.ui-icon-blank{background-image:none}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0-16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0-32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0-64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0-80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0-96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0-112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0-128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0-144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0-160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0-176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0-192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0-208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0-224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-widget-overlay{opacity:.5}PKtc�\��n�+�+*jqueryui/themes/elastic/jquery-ui.css.diffnu�[���diff --git a/jquery-ui.css.orig b/jquery-ui.css
index 2f0601a..819a492 100644
--- a/jquery-ui.css.orig
+++ b/jquery-ui.css
@@ -45,7 +45,6 @@
 	left: 0;
 	position: absolute;
 	opacity: 0;
-	-ms-filter: "alpha(opacity=0)"; /* support: IE8 */
 }
 
 .ui-front {
@@ -121,13 +120,16 @@
 }
 .ui-menu .ui-menu-item {
 	margin: 0;
-	cursor: pointer;
 	/* support: IE10, see #8844 */
 	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
 }
 .ui-menu .ui-menu-item-wrapper {
 	position: relative;
-	padding: 3px 1em 3px .4em;
+	padding: 0 .5em;
+	line-height: 2;
+	width: 100%;
+	display: inline-block;
+	text-decoration: none;
 }
 .ui-menu .ui-menu-divider {
 	margin: 5px 0;
@@ -281,8 +283,6 @@ button.ui-button::-moz-focus-inner {
 /* Spinner specific style fixes */
 .ui-controlgroup-vertical .ui-spinner-input {
 
-	/* Support: IE8 only, Android < 4.4 only */
-	width: 75%;
 	width: calc( 100% - 2.4em );
 }
 .ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
@@ -313,63 +313,35 @@ button.ui-button::-moz-focus-inner {
 	pointer-events: none;
 }
 .ui-datepicker {
-	width: 17em;
-	padding: .2em .2em 0;
+	width: 20em;
 	display: none;
 }
 .ui-datepicker .ui-datepicker-header {
 	position: relative;
-	padding: .2em 0;
 }
 .ui-datepicker .ui-datepicker-prev,
 .ui-datepicker .ui-datepicker-next {
 	position: absolute;
-	top: 2px;
+	top: 0;
 	width: 1.8em;
 	height: 1.8em;
 }
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
-	top: 1px;
-}
 .ui-datepicker .ui-datepicker-prev {
-	left: 2px;
+	left: 0;
 }
 .ui-datepicker .ui-datepicker-next {
-	right: 2px;
-}
-.ui-datepicker .ui-datepicker-prev-hover {
-	left: 1px;
-}
-.ui-datepicker .ui-datepicker-next-hover {
-	right: 1px;
-}
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
-	display: block;
-	position: absolute;
-	left: 50%;
-	margin-left: -8px;
-	top: 50%;
-	margin-top: -8px;
+	right: 0;
 }
 .ui-datepicker .ui-datepicker-title {
 	margin: 0 2.3em;
-	line-height: 1.8em;
 	text-align: center;
 }
-.ui-datepicker .ui-datepicker-title select {
-	font-size: 1em;
-	margin: 1px 0;
-}
 .ui-datepicker select.ui-datepicker-month,
 .ui-datepicker select.ui-datepicker-year {
 	width: 45%;
 }
 .ui-datepicker table {
 	width: 100%;
-	font-size: .9em;
-	border-collapse: collapse;
 	margin: 0 0 .4em;
 }
 .ui-datepicker th {
@@ -386,7 +358,7 @@ button.ui-button::-moz-focus-inner {
 .ui-datepicker td a {
 	display: block;
 	padding: .2em;
-	text-align: right;
+	text-align: center;
 	text-decoration: none;
 }
 .ui-datepicker .ui-datepicker-buttonpane {
@@ -454,14 +426,6 @@ button.ui-button::-moz-focus-inner {
 	left: 2px;
 	right: auto;
 }
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
-	right: 1px;
-	left: auto;
-}
-.ui-datepicker-rtl .ui-datepicker-next:hover {
-	left: 1px;
-	right: auto;
-}
 .ui-datepicker-rtl .ui-datepicker-buttonpane {
 	clear: right;
 }
@@ -491,50 +455,34 @@ button.ui-button::-moz-focus-inner {
 	position: absolute;
 	top: 0;
 	left: 0;
-	padding: .2em;
 	outline: 0;
 }
 .ui-dialog .ui-dialog-titlebar {
-	padding: .4em 1em;
 	position: relative;
 }
 .ui-dialog .ui-dialog-title {
 	float: left;
-	margin: .1em 0;
 	white-space: nowrap;
-	width: 90%;
+	width: 100%;
 	overflow: hidden;
 	text-overflow: ellipsis;
 }
-.ui-dialog .ui-dialog-titlebar-close {
-	position: absolute;
-	right: .3em;
-	top: 50%;
-	width: 20px;
-	margin: -10px 0 0 0;
-	padding: 1px;
-	height: 20px;
-}
 .ui-dialog .ui-dialog-content {
 	position: relative;
 	border: 0;
-	padding: .5em 1em;
+	padding: 1em 1em .5em 1em;
 	background: none;
 	overflow: auto;
 }
 .ui-dialog .ui-dialog-buttonpane {
-	text-align: left;
-	border-width: 1px 0 0 0;
+	text-align: right;
+	white-space: nowrap;
 	background-image: none;
-	margin-top: .5em;
-	padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
-	float: right;
+	padding: 0 1.5rem;
+	height: 4rem;
 }
 .ui-dialog .ui-dialog-buttonpane button {
-	margin: .5em .4em .5em 0;
-	cursor: pointer;
+	margin: .65rem 0 .65rem .5rem;
 }
 .ui-dialog .ui-resizable-n {
 	height: 2px;
@@ -560,8 +508,11 @@ button.ui-button::-moz-focus-inner {
 	height: 7px;
 }
 .ui-dialog .ui-resizable-se {
-	right: 0;
-	bottom: 0;
+	width: 14px;
+	height: 14px;
+	right: 3px;
+	bottom: 3px;
+	background-position: -80px -224px;
 }
 .ui-dialog .ui-resizable-sw {
 	left: 0;
@@ -664,7 +615,6 @@ button.ui-button::-moz-focus-inner {
 .ui-progressbar .ui-progressbar-overlay {
 	background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
 	height: 100%;
-	-ms-filter: "alpha(opacity=25)"; /* support: IE8 */
 	opacity: 0.25;
 }
 .ui-progressbar-indeterminate .ui-progressbar-value {
@@ -725,7 +675,7 @@ button.ui-button::-moz-focus-inner {
 }
 .ui-slider .ui-slider-handle {
 	position: absolute;
-	z-index: 2;
+	z-index: 1;
 	width: 1.2em;
 	height: 1.2em;
 	cursor: pointer;
@@ -741,12 +691,6 @@ button.ui-button::-moz-focus-inner {
 	background-position: 0 0;
 }
 
-/* support: IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
-	filter: inherit;
-}
-
 .ui-slider-horizontal {
 	height: .8em;
 }
@@ -883,39 +827,15 @@ body .ui-tooltip {
 
 /* Component containers
 ----------------------------------*/
-.ui-widget {
-	font-family: Arial,Helvetica,sans-serif;
-	font-size: 1em;
-}
 .ui-widget .ui-widget {
-	font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
-	font-family: Arial,Helvetica,sans-serif;
-	font-size: 1em;
-}
-.ui-widget.ui-widget-content {
-	border: 1px solid #c5c5c5;
+	font-size: 1rem;
 }
 .ui-widget-content {
-	border: 1px solid #dddddd;
-	background: #ffffff;
-	color: #333333;
-}
-.ui-widget-content a {
-	color: #333333;
+	background-color: #fff;
 }
 .ui-widget-header {
-	border: 1px solid #dddddd;
-	background: #e9e9e9;
-	color: #333333;
 	font-weight: bold;
-}
-.ui-widget-header a {
-	color: #333333;
+	background-color: #fff;
 }
 
 /* Interaction states
@@ -944,19 +864,6 @@ a:visited.ui-button,
 	color: #454545;
 	text-decoration: none;
 }
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus,
-.ui-button:hover,
-.ui-button:focus {
-	border: 1px solid #cccccc;
-	background: #ededed;
-	font-weight: normal;
-	color: #2b2b2b;
-}
 .ui-state-hover a,
 .ui-state-hover a:hover,
 .ui-state-hover a:link,
@@ -1040,20 +947,15 @@ a.ui-button:active,
 .ui-priority-secondary,
 .ui-widget-content .ui-priority-secondary,
 .ui-widget-header .ui-priority-secondary {
-	opacity: .7;
-	-ms-filter: "alpha(opacity=70)"; /* support: IE8 */
+	opacity: .5;
 	font-weight: normal;
 }
 .ui-state-disabled,
 .ui-widget-content .ui-state-disabled,
 .ui-widget-header .ui-state-disabled {
 	opacity: .35;
-	-ms-filter: "alpha(opacity=35)"; /* support: IE8 */
 	background-image: none;
 }
-.ui-state-disabled .ui-icon {
-	-ms-filter: "alpha(opacity=35)"; /* support: IE8 - See #6059 */
-}
 
 /* Icons
 ----------------------------------*/
@@ -1070,24 +972,6 @@ a.ui-button:active,
 .ui-widget-header .ui-icon {
 	background-image: url("images/ui-icons_444444_256x240.png");
 }
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon,
-.ui-button:hover .ui-icon,
-.ui-button:focus .ui-icon {
-	background-image: url("images/ui-icons_555555_256x240.png");
-}
-.ui-state-active .ui-icon,
-.ui-button:active .ui-icon {
-	background-image: url("images/ui-icons_ffffff_256x240.png");
-}
-.ui-state-highlight .ui-icon,
-.ui-button .ui-state-highlight.ui-icon {
-	background-image: url("images/ui-icons_777620_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
-	background-image: url("images/ui-icons_cc0000_256x240.png");
-}
 .ui-button .ui-icon {
 	background-image: url("images/ui-icons_777777_256x240.png");
 }
@@ -1273,43 +1157,7 @@ a.ui-button:active,
 .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
 .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
 
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
-	border-top-left-radius: 3px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
-	border-top-right-radius: 3px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
-	border-bottom-left-radius: 3px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
-	border-bottom-right-radius: 3px;
-}
-
 /* Overlays */
 .ui-widget-overlay {
-	background: #aaaaaa;
-	opacity: .003;
-	-ms-filter: Alpha(Opacity=.3); /* support: IE8 */
-}
-.ui-widget-shadow {
-	-webkit-box-shadow: 0px 0px 5px #666666;
-	box-shadow: 0px 0px 5px #666666;
+	opacity: .5;
 }
PKtc�\���1jqueryui/themes/elastic/jquery.minicolors.min.cssnu�[���.minicolors{position:relative}.minicolors-sprite{background-image:url(images/jquery.minicolors.png)}.minicolors-swatch{position:absolute;vertical-align:middle;background-position:-80px 0;cursor:text;padding:0;margin:0;display:inline-block}.minicolors-swatch-color{position:absolute;top:0;left:0;right:0;bottom:0}.minicolors input[type=hidden]+.minicolors-swatch{width:28px;position:static;cursor:pointer}.minicolors input[type=hidden][disabled]+.minicolors-swatch{cursor:default}.minicolors-panel{position:absolute;width:173px;background:#fff;z-index:99999;box-sizing:content-box;display:none}.minicolors-panel.minicolors-visible{display:block}.minicolors-position-top .minicolors-panel{top:-154px}.minicolors-position-right .minicolors-panel{right:0}.minicolors-position-bottom .minicolors-panel{top:auto}.minicolors-position-left .minicolors-panel{left:0}.minicolors-with-opacity .minicolors-panel{width:194px}.minicolors .minicolors-grid{position:relative;top:1px;left:1px;width:150px;height:150px;margin-bottom:2px;background-position:-120px 0;cursor:crosshair}[dir=rtl] .minicolors .minicolors-grid{right:1px}.minicolors .minicolors-grid-inner{position:absolute;top:0;left:0;width:150px;height:150px}.minicolors-slider-saturation .minicolors-grid{background-position:-420px 0}.minicolors-slider-saturation .minicolors-grid-inner{background-position:-270px 0;background-image:inherit}.minicolors-slider-brightness .minicolors-grid{background-position:-570px 0}.minicolors-slider-brightness .minicolors-grid-inner{background-color:#000}.minicolors-slider-wheel .minicolors-grid{background-position:-720px 0}.minicolors-slider,.minicolors-opacity-slider{position:absolute;top:2px;left:153px;width:20px;height:150px;background-color:#fff;background-position:0 0;cursor:row-resize}[dir=rtl] .minicolors-slider,[dir=rtl] .minicolors-opacity-slider{right:152px}.minicolors-slider-saturation .minicolors-slider{background-position:-60px 0}.minicolors-slider-brightness .minicolors-slider{background-position:-20px 0}.minicolors-slider-wheel .minicolors-slider{background-position:-20px 0}.minicolors-opacity-slider{left:173px;background-position:-40px 0;display:none}[dir=rtl] .minicolors-opacity-slider{right:173px}.minicolors-with-opacity .minicolors-opacity-slider{display:block}.minicolors-grid .minicolors-picker{position:absolute;top:70px;left:70px;width:12px;height:12px;border:solid 1px #000;border-radius:10px;margin-top:-6px;margin-left:-6px;background:0 0}.minicolors-grid .minicolors-picker>div{position:absolute;top:0;left:0;width:8px;height:8px;border-radius:8px;border:solid 2px #fff;box-sizing:content-box}.minicolors-picker{position:absolute;top:0;left:0;width:18px;height:2px;background:#fff;border:solid 1px #000;margin-top:-2px;box-sizing:content-box}.minicolors-swatches,.minicolors-swatches li{margin:5px 0 3px 5px;padding:0;list-style:none;overflow:hidden}[dir=rtl] .minicolors-swatches,[dir=rtl] .minicolors-swatches li{margin:5px 5px 3px 0}.minicolors-swatches .minicolors-swatch{position:relative;float:left;cursor:pointer;margin:0 4px 0 0}[dir=rtl] .minicolors-swatches .minicolors-swatch{float:right;margin:0 0 0 4px}.minicolors-with-opacity .minicolors-swatches .minicolors-swatch{margin-right:7px}[dir=rtl] .minicolors-with-opacity .minicolors-swatches .minicolors-swatch{margin-right:0;margin-left:7px}.minicolors-swatch.selected{border-color:#000}.minicolors-inline{display:inline-block}.minicolors-inline .minicolors-input{display:none!important}.minicolors-inline .minicolors-panel{position:relative;top:auto;left:auto;box-shadow:none;z-index:auto;display:inline-block}[dir=rtl] .minicolors-inline .minicolors-panel{right:auto}.minicolors-theme-bootstrap .minicolors-swatch{z-index:2;top:4px;left:4px;width:25px;height:25px;border-radius:.25rem}[dir=rtl] .minicolors-theme-bootstrap .minicolors-swatch{right:3px}.minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch{margin-bottom:2px;top:0;left:0;width:20px;height:20px}[dir=rtl] .minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch{right:0}.minicolors-theme-bootstrap .minicolors-swatch-color{border-radius:inherit}.minicolors-theme-bootstrap.minicolors-position-right>.minicolors-swatch{left:auto;right:3px}[dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left>.minicolors-swatch{right:auto;left:3px}.minicolors-theme-bootstrap .minicolors-input{float:none;padding-left:36px}[dir=rtl] .minicolors-theme-bootstrap .minicolors-input{text-align:right;unicode-bidi:plaintext;padding-left:12px;padding-right:34px}.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input{padding-right:44px;padding-left:12px}[dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left .minicolors-input{padding-right:12px;padding-left:44px}.minicolors-theme-bootstrap .minicolors-input.input-lg+.minicolors-swatch{top:4px;left:4px;width:37px;height:37px;border-radius:5px}[dir=rtl] .minicolors-theme-bootstrap .minicolors-input.input-lg+.minicolors-swatch{right:4px}.minicolors-theme-bootstrap .minicolors-input.input-sm+.minicolors-swatch{width:24px;height:24px}.minicolors-theme-bootstrap .minicolors-input.input-xs+.minicolors-swatch{width:18px;height:18px}.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input{border-top-left-radius:0;border-bottom-left-radius:0}[dir=rtl] .input-group .minicolors-theme-bootstrap .minicolors-input{border-radius:4px}[dir=rtl] .input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input{border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .input-group .minicolors-theme-bootstrap:not(:last-child) .minicolors-input{border-top-left-radius:0;border-bottom-left-radius:0}[dir=rtl] .input-group .form-control,[dir=rtl] .input-group-addon,[dir=rtl] .input-group-btn>.btn,[dir=rtl] .input-group-btn>.btn-group>.btn,[dir=rtl] .input-group-btn>.dropdown-toggle{border:1px solid #ccc;border-radius:4px}[dir=rtl] .input-group .form-control:first-child,[dir=rtl] .input-group-addon:first-child,[dir=rtl] .input-group-btn:first-child>.btn,[dir=rtl] .input-group-btn:first-child>.btn-group>.btn,[dir=rtl] .input-group-btn:first-child>.dropdown-toggle,[dir=rtl] .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),[dir=rtl] .input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0}[dir=rtl] .input-group .form-control:last-child,[dir=rtl] .input-group-addon:last-child,[dir=rtl] .input-group-btn:last-child>.btn,[dir=rtl] .input-group-btn:last-child>.btn-group>.btn,[dir=rtl] .input-group-btn:last-child>.dropdown-toggle,[dir=rtl] .input-group-btn:first-child>.btn:not(:first-child),[dir=rtl] .input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}PKtc�\��JS��-jqueryui/themes/elastic/jquery.minicolors.cssnu�[���.minicolors {
  position: relative;
}

.minicolors-sprite {
  background-image: url(images/jquery.minicolors.png);
}

.minicolors-swatch {
  position: absolute;
  vertical-align: middle;
  background-position: -80px 0;
  cursor: text;
  padding: 0;
  margin: 0;
  display: inline-block;
}

.minicolors-swatch-color {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

.minicolors input[type=hidden] + .minicolors-swatch {
  width: 28px;
  position: static;
  cursor: pointer;
}

.minicolors input[type=hidden][disabled] + .minicolors-swatch {
  cursor: default;
}

/* Panel */
.minicolors-panel {
  position: absolute;
  width: 173px;
  background: white;
  z-index: 99999;
  box-sizing: content-box;
  display: none;
}

.minicolors-panel.minicolors-visible {
  display: block;
}

/* Panel positioning */
.minicolors-position-top .minicolors-panel {
  top: -154px;
}

.minicolors-position-right .minicolors-panel {
  right: 0;
}

.minicolors-position-bottom .minicolors-panel {
  top: auto;
}

.minicolors-position-left .minicolors-panel {
  left: 0;
}

.minicolors-with-opacity .minicolors-panel {
  width: 194px;
}

.minicolors .minicolors-grid {
  position: relative;
  top: 1px;
  left: 1px; /* LTR */
  width: 150px;
  height: 150px;
  margin-bottom: 2px;
  background-position: -120px 0;
  cursor: crosshair;
}
[dir=rtl] .minicolors .minicolors-grid {
  right: 1px;
}

.minicolors .minicolors-grid-inner {
  position: absolute;
  top: 0;
  left: 0;
  width: 150px;
  height: 150px;
}

.minicolors-slider-saturation .minicolors-grid {
  background-position: -420px 0;
}

.minicolors-slider-saturation .minicolors-grid-inner {
  background-position: -270px 0;
  background-image: inherit;
}

.minicolors-slider-brightness .minicolors-grid {
  background-position: -570px 0;
}

.minicolors-slider-brightness .minicolors-grid-inner {
  background-color: black;
}

.minicolors-slider-wheel .minicolors-grid {
  background-position: -720px 0;
}

.minicolors-slider,
.minicolors-opacity-slider {
  position: absolute;
  top: 2px;
  left: 153px; /* LTR */
  width: 20px;
  height: 150px;
  background-color: white;
  background-position: 0 0;
  cursor: row-resize;
}
[dir=rtl] .minicolors-slider,
[dir=rtl] .minicolors-opacity-slider {
  right: 152px;
}

.minicolors-slider-saturation .minicolors-slider {
  background-position: -60px 0;
}

.minicolors-slider-brightness .minicolors-slider {
  background-position: -20px 0;
}

.minicolors-slider-wheel .minicolors-slider {
  background-position: -20px 0;
}

.minicolors-opacity-slider {
  left: 173px; /* LTR */
  background-position: -40px 0;
  display: none;
}
[dir=rtl] .minicolors-opacity-slider {
  right: 173px;
}

.minicolors-with-opacity .minicolors-opacity-slider {
  display: block;
}

/* Pickers */
.minicolors-grid .minicolors-picker {
  position: absolute;
  top: 70px;
  left: 70px;
  width: 12px;
  height: 12px;
  border: solid 1px black;
  border-radius: 10px;
  margin-top: -6px;
  margin-left: -6px;
  background: none;
}

.minicolors-grid .minicolors-picker > div {
  position: absolute;
  top: 0;
  left: 0;
  width: 8px;
  height: 8px;
  border-radius: 8px;
  border: solid 2px white;
  box-sizing: content-box;
}

.minicolors-picker {
  position: absolute;
  top: 0;
  left: 0;
  width: 18px;
  height: 2px;
  background: white;
  border: solid 1px black;
  margin-top: -2px;
  box-sizing: content-box;
}

/* Swatches */
.minicolors-swatches,
.minicolors-swatches li {
  margin: 5px 0 3px 5px; /* LTR */
  padding: 0;
  list-style: none;
  overflow: hidden;
}
[dir=rtl] .minicolors-swatches,
[dir=rtl] .minicolors-swatches li {
  margin: 5px 5px 3px 0;
}

.minicolors-swatches .minicolors-swatch {
  position: relative;
  float: left; /* LTR */
  cursor: pointer;
  margin:0 4px 0 0; /* LTR */
}
[dir=rtl] .minicolors-swatches .minicolors-swatch {
  float: right;
  margin:0 0 0 4px;
}

.minicolors-with-opacity .minicolors-swatches .minicolors-swatch {
  margin-right: 7px; /* LTR */
}
[dir=rtl] .minicolors-with-opacity .minicolors-swatches .minicolors-swatch {
  margin-right: 0;
  margin-left: 7px;
}

.minicolors-swatch.selected {
  border-color: #000;
}

/* Inline controls */
.minicolors-inline {
  display: inline-block;
}

.minicolors-inline .minicolors-input {
  display: none !important;
}

.minicolors-inline .minicolors-panel {
  position: relative;
  top: auto;
  left: auto; /* LTR */
  box-shadow: none;
  z-index: auto;
  display: inline-block;
}
[dir=rtl] .minicolors-inline .minicolors-panel {
  right: auto;
}

/* Bootstrap theme */
.minicolors-theme-bootstrap .minicolors-swatch {
  z-index: 2;
  top: 4px;
  left: 4px; /* LTR */
  width: 25px;
  height: 25px;
  border-radius: .25rem;
}
[dir=rtl] .minicolors-theme-bootstrap .minicolors-swatch {
  right: 3px;
}
.minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch {
  margin-bottom: 2px;
  top: 0;
  left: 0; /* LTR */
  width: 20px;
  height: 20px;
}
[dir=rtl] .minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch {
  right: 0;
}
.minicolors-theme-bootstrap .minicolors-swatch-color {
  border-radius: inherit;
}
.minicolors-theme-bootstrap.minicolors-position-right > .minicolors-swatch {
  left: auto; /* LTR */
  right: 3px; /* LTR */
}
[dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left > .minicolors-swatch {
  right: auto;
  left: 3px;
}
.minicolors-theme-bootstrap .minicolors-input {
  float: none;
  padding-left: 36px; /* LTR */
}
[dir=rtl] .minicolors-theme-bootstrap .minicolors-input {
  text-align: right;
  unicode-bidi: plaintext;
  padding-left: 12px;
  padding-right: 34px;
}
.minicolors-theme-bootstrap.minicolors-position-right .minicolors-input {
  padding-right: 44px; /* LTR */
  padding-left: 12px; /* LTR */
}
[dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left .minicolors-input {
  padding-right: 12px;
  padding-left: 44px;
}
.minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch {
  top: 4px;
  left: 4px; /* LTR */
  width: 37px;
  height: 37px;
  border-radius: 5px;
}
[dir=rtl] .minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch {
  right: 4px;
}
.minicolors-theme-bootstrap .minicolors-input.input-sm + .minicolors-swatch {
  width: 24px;
  height: 24px;
}
.minicolors-theme-bootstrap .minicolors-input.input-xs + .minicolors-swatch {
  width: 18px;
  height: 18px;
}
.input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {
  border-top-left-radius: 0; /* LTR */
  border-bottom-left-radius: 0; /* LTR */
}
[dir=rtl] .input-group .minicolors-theme-bootstrap .minicolors-input {
  border-radius: 4px;
}
[dir=rtl] .input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input {
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}
[dir=rtl] .input-group .minicolors-theme-bootstrap:not(:last-child) .minicolors-input {
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}
/* bootstrap input-group rtl override */
[dir=rtl] .input-group .form-control,
[dir=rtl] .input-group-addon,
[dir=rtl] .input-group-btn > .btn,
[dir=rtl] .input-group-btn > .btn-group > .btn,
[dir=rtl] .input-group-btn > .dropdown-toggle {
  border: 1px solid #ccc;
  border-radius: 4px;
}
[dir=rtl] .input-group .form-control:first-child,
[dir=rtl] .input-group-addon:first-child,
[dir=rtl] .input-group-btn:first-child > .btn,
[dir=rtl] .input-group-btn:first-child > .btn-group > .btn,
[dir=rtl] .input-group-btn:first-child > .dropdown-toggle,
[dir=rtl] .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
[dir=rtl] .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
  border-left: 0;
}
[dir=rtl] .input-group .form-control:last-child,
[dir=rtl] .input-group-addon:last-child,
[dir=rtl] .input-group-btn:last-child > .btn,
[dir=rtl] .input-group-btn:last-child > .btn-group > .btn,
[dir=rtl] .input-group-btn:last-child > .dropdown-toggle,
[dir=rtl] .input-group-btn:first-child > .btn:not(:first-child),
[dir=rtl] .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}
PKtc�\\;Ei

2jqueryui/themes/elastic/jquery.minicolors.css.diffnu�[���--- jquery.minicolors.css.orig	2019-01-30 11:43:50.000000000 +0100
+++ jquery.minicolors.css	2019-01-30 11:53:43.762019000 +0100
@@ -10,7 +10,6 @@
   position: absolute;
   vertical-align: middle;
   background-position: -80px 0;
-  border: solid 1px #ccc;
   cursor: text;
   padding: 0;
   margin: 0;
@@ -40,8 +39,6 @@
   position: absolute;
   width: 173px;
   background: white;
-  border: solid 1px #CCC;
-  box-shadow: 0 0 20px rgba(0, 0, 0, .2);
   z-index: 99999;
   box-sizing: content-box;
   display: none;
@@ -118,8 +115,8 @@
 .minicolors-slider,
 .minicolors-opacity-slider {
   position: absolute;
-  top: 1px;
-  left: 152px; /* LTR */
+  top: 2px;
+  left: 153px; /* LTR */
   width: 20px;
   height: 150px;
   background-color: white;
@@ -250,67 +247,14 @@
   right: auto;
 }
 
-/* Default theme */
-.minicolors-theme-default .minicolors-swatch {
-  top: 5px;
-  left: 5px; /* LTR */
-  width: 18px;
-  height: 18px;
-}
-[dir=rtl] .minicolors-theme-default .minicolors-swatch {
-  right: 5px;
-}
-.minicolors-theme-default .minicolors-swatches .minicolors-swatch {
-  margin-bottom: 2px;
-  top: 0;
-  left: 0; /* LTR */
-  width: 18px;
-  height: 18px;
-}
-[dir=rtl] .minicolors-theme-default .minicolors-swatches .minicolors-swatch {
-  right: 0;
-}
-.minicolors-theme-default.minicolors-position-right .minicolors-swatch {
-  left: auto; /* LTR */
-  right: 5px; /* LTR */
-}
-[dir=rtl] .minicolors-theme-default.minicolors-position-left .minicolors-swatch {
-  right: auto;
-  left: 5px;
-}
-.minicolors-theme-default.minicolors {
-  width: auto;
-  display: inline-block;
-}
-.minicolors-theme-default .minicolors-input {
-  height: 20px;
-  width: auto;
-  display: inline-block;
-  padding-left: 26px; /* LTR */
-}
-[dir=rtl] .minicolors-theme-default .minicolors-input {
-  text-align: right;
-  unicode-bidi: plaintext;
-  padding-left: 1px;
-  padding-right: 26px;
-}
-.minicolors-theme-default.minicolors-position-right .minicolors-input {
-  padding-right: 26px; /* LTR */
-  padding-left: inherit; /* LTR */
-}
-[dir=rtl] .minicolors-theme-default.minicolors-position-left .minicolors-input {
-  padding-right: inherit;
-  padding-left: 26px;
-}
-
 /* Bootstrap theme */
 .minicolors-theme-bootstrap .minicolors-swatch {
   z-index: 2;
-  top: 3px;
-  left: 3px; /* LTR */
-  width: 28px;
-  height: 28px;
-  border-radius: 3px;
+  top: 4px;
+  left: 4px; /* LTR */
+  width: 25px;
+  height: 25px;
+  border-radius: .25rem;
 }
 [dir=rtl] .minicolors-theme-bootstrap .minicolors-swatch {
   right: 3px;
@@ -338,13 +282,13 @@
 }
 .minicolors-theme-bootstrap .minicolors-input {
   float: none;
-  padding-left: 44px; /* LTR */
+  padding-left: 36px; /* LTR */
 }
 [dir=rtl] .minicolors-theme-bootstrap .minicolors-input {
   text-align: right;
   unicode-bidi: plaintext;
   padding-left: 12px;
-  padding-right: 44px;
+  padding-right: 34px;
 }
 .minicolors-theme-bootstrap.minicolors-position-right .minicolors-input {
   padding-right: 44px; /* LTR */
@@ -417,16 +361,3 @@
   border-top-right-radius: 0;
   border-bottom-right-radius: 0;
 }
-
-/* Semantic Ui theme */
-.minicolors-theme-semanticui .minicolors-swatch {
-  top: 0;
-  left: 0; /* LTR */
-  padding: 18px;
-}
-[dir=rtl] .minicolors-theme-semanticui .minicolors-swatch {
-  right: 0;
-}
-.minicolors-theme-semanticui input {
-  text-indent: 30px;
-}
PKtc�\Fz�

jqueryui/READMEnu�[���+-------------------------------------------------------------------------+
|
|  Author:  Cor Bosman (roundcube@wa.ter.net)
|  Plugin:  jqueryui
|  Version: 1.12.0
|  Purpose: Add jquery-ui to roundcube for every plugin to use
|
+-------------------------------------------------------------------------+

jqueryui adds the complete jquery-ui library including the smoothness
theme to roundcube. This allows other plugins to use jquery-ui without
having to load their own version. The benefit of using 1 central jquery-ui
is that we wont run into problems of conflicting jquery libraries being
loaded. All plugins that want to use jquery-ui should use this plugin as
a requirement.

It is possible for plugin authors to override the default smoothness theme.
To do this, go to the jquery-ui website, and use the download feature to
download your own theme. In the advanced settings, provide a scope class to
your theme and add that class to all your UI elements. Finally, load the
downloaded css files in your own plugin.

Some jquery-ui modules provide localization. One example is the datepicker module.
If you want to load localization for a specific module, then set up config.inc.php.
Check the config.inc.php.dist file on how to set this up for the datepicker module.

As of version 1.8.6 this plugin also supports other themes. If you're a theme
developer and would like a different default theme to be used for your RC theme
then let me know and we can set things up.

This also provides some common UI modules e.g. miniColors extension.
PKtc�\�n����autologout/composer.jsonnu�[���{
    "name": "roundcube/autologout",
    "type": "roundcube-plugin",
    "description": "Plugin to auto log out users with a POST request sent from an external site.",
    "license": "GPLv3+",
    "version": "1.0",
    "authors": [
        {
            "name": "Cover Tower LLC",
            "email": "contact@covertower.com"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKtc�\������autologout/autologout.phpnu�[���<?php

/**
 * Plugin to auto log out users with a POST request sent from an external site.
 *
 * @license GNU GPLv3+
 * @author  Cover Tower LLC
 *
 * First enable this plugin by setting $config['plugins'] = array(..., 'autologout')
 * in the Roundcube configuration file (config.inc.php). To use it, embed
 * a form like the following in a web page:
 *
 * <form id="rcLogoutForm" method="POST" action="https://mail.example.com/">
 * <input type="hidden" name="_action" value="logout" />
 * <input type="hidden" name="_task" value="logout" />
 * <input type="hidden" name="_autologout" value="1" />
 * <input id="loSubmitButton" type="submit" value="Logout" />
 * </form>
 *
 * This plugin won't work if the POST request is made using CURL or other
 * methods. It will only work if the POST request is made by submitting a
 * form similar to the one from above. The form can be hidden and it can
 * be sent automatically using JavaScript or JQuery (for example by using:
 * $("#loSubmitButton").click();)
 */

class autologout extends rcube_plugin
{
    public $task = 'logout';

    /**
     * Plugin initialization
     */
    public function init()
    {
        $this->add_hook('startup', [$this, 'startup']);
    }

    /**
     * Request handler
     */
    public function startup($args)
    {
        $rcmail = rcmail::get_instance();

        // Change task and action to logout
        if (!empty($_SESSION['user_id']) && !empty($_POST['_autologout']) && $this->known_client()) {
            $rcmail->logout_actions();
            $rcmail->kill_session();
        }

        return $args;
    }

    /**
     * Checks if the request came from an allowed client IP
     */
    private function known_client()
    {
        /*
         * If you want to restrict the use of this plugin to specific
         * remote clients, you can verify the remote client's IP like this:
         *
         * return in_array(rcube_utils::remote_addr(), ['123.123.123.123', '124.124.124.124']);
         */

        return true;
    }
}
PKtc�\�a#�U
U
+http_authentication/http_authentication.phpnu�[���<?php

/**
 * HTTP Basic Authentication
 *
 * Make use of an existing HTTP authentication and perform login with the existing user credentials
 *
 * Configuration:
 * // redirect the client to this URL after logout. This page is then responsible to clear HTTP auth
 * $config['logout_url'] = 'http://server.tld/logout.html';
 *
 * See logout.html (in this directory) for an example how HTTP auth can be cleared.
 *
 * For other configuration options, see config.inc.php.dist!
 *
 * @license GNU GPLv3+
 * @author Thomas Bruederli
 */
class http_authentication extends rcube_plugin
{
    private $redirect_query;

    function init()
    {
        $this->add_hook('startup', [$this, 'startup']);
        $this->add_hook('authenticate', [$this, 'authenticate']);
        $this->add_hook('logout_after', [$this, 'logout']);
        $this->add_hook('login_after', [$this, 'login']);
    }

    function startup($args)
    {
        if (!empty($_SERVER['PHP_AUTH_USER'])) {
            $rcmail = rcmail::get_instance();
            $rcmail->add_shutdown_function(['http_authentication', 'shutdown']);

            // handle login action
            if (empty($_SESSION['user_id'])) {
                $args['action']       = 'login';
                $this->redirect_query = $_SERVER['QUERY_STRING'];
            }
            // Set user password in session (see shutdown() method for more info)
            else if (!empty($_SESSION['user_id']) && empty($_SESSION['password'])
                 && !empty($_SERVER['PHP_AUTH_PW'])
            ) {
                $_SESSION['password'] = $rcmail->encrypt($_SERVER['PHP_AUTH_PW']);
            }
        }

        return $args;
    }

    function authenticate($args)
    {
        // Load plugin's config file
        $this->load_config();

        $host = rcmail::get_instance()->config->get('http_authentication_host');
        if (is_string($host) && trim($host) !== '' && empty($args['host'])) {
            $args['host'] = rcube_utils::idn_to_ascii(rcube_utils::parse_host($host));
        }

        // Allow entering other user data in login form,
        // e.g. after log out (#1487953)
        if (!empty($args['user'])) {
            return $args;
        }

        if (!empty($_SERVER['PHP_AUTH_USER'])) {
            $args['user'] = $_SERVER['PHP_AUTH_USER'];
            if (!empty($_SERVER['PHP_AUTH_PW'])) {
                $args['pass'] = $_SERVER['PHP_AUTH_PW'];
            }
        }

        $args['cookiecheck'] = false;
        $args['valid']       = true;

        return $args;
    }

    function logout($args)
    {
        // redirect to configured URL in order to clear HTTP auth credentials
        if (!empty($_SERVER['PHP_AUTH_USER']) && $args['user'] == $_SERVER['PHP_AUTH_USER']) {
            if ($url = rcmail::get_instance()->config->get('logout_url')) {
                header("Location: $url", true, 307);
                exit;
            }
        }
    }

    static function shutdown()
    {
        // There's no need to store password (even if encrypted) in session
        // We'll set it back on startup (#1486553)
        rcmail::get_instance()->session->remove('password');
    }

    function login($args)
    {
        // Redirect to the previous QUERY_STRING
        if ($this->redirect_query) {
            header('Location: ./?' . $this->redirect_query);
            exit;
        }

        return $args;
    }
}
PKtc�\9	�::!http_authentication/composer.jsonnu�[���{
    "name": "roundcube/http_authentication",
    "type": "roundcube-plugin",
    "description": "HTTP Basic Authentication",
    "license": "GPL-3.0-or-later",
    "version": "1.5",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKtc�\Y��'http_authentication/config.inc.php.distnu�[���<?php

// HTTP Basic Authentication Plugin options
// ----------------------------------------
// Default mail host to log-in using user/password from HTTP Authentication.
// This is useful if the users are free to choose arbitrary mail hosts (or
// from a list), but have one host they usually want to log into.
// Unlike $config['imap_host'] this must be a string!
$config['http_authentication_host'] = '';
PKtc�\$2����http_authentication/logout.htmlnu�[���<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Logout</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
<script type="text/javascript">

// as seen on http://stackoverflow.com/questions/31326/is-there-a-browser-equivalent-to-ies-clearauthenticationcache
$(document).ready(function(){
	if (document.all && document.execCommand) {
		document.execCommand("ClearAuthenticationCache", "false");
	 }
	 else {
		 $.ajax({
			url: location.href,
			type: 'POST',
			username: '__LOGOUT__',
			password: '***********'
		});
	}
});

</script>
</head>
<body>
<h1>You've successfully been logged out!</h1>

</body>PKtc�\�T�Zmarkasjunk/composer.jsonnu�[���{
    "name": "roundcube/markasjunk",
    "type": "roundcube-plugin",
    "description": "Adds buttons to mark messages as Junk/Non-Junk with moving to the Junk folder and Spam/Ham learning.",
    "license": "GPL-3.0-or-later",
    "version": "2.0",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Philip Weir",
            "email": "roundcube@tehinterweb.co.uk",
            "role": "Developer"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKtc�\��Go@@#markasjunk/drivers/edit_headers.phpnu�[���<?php

/**
 * Edit headers
 *
 * @version 1.0
 *
 * @author Philip Weir
 *
 * Copyright (C) 2012-2014 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * 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 3 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 Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk_edit_headers
{
    public function spam(&$uids, $src_mbox, $dst_mbox)
    {
        $this->_edit_headers($uids, true, $dst_mbox);
    }

    public function ham(&$uids, $src_mbox, $dst_mbox)
    {
        $this->_edit_headers($uids, false, $dst_mbox);
    }

    private function _edit_headers(&$uids, $spam, $dst_mbox)
    {
        $rcube = rcube::get_instance();
        $args  = $rcube->config->get($spam ? 'markasjunk_spam_patterns' : 'markasjunk_ham_patterns');

        if (empty($args['patterns'])) {
            return;
        }

        $new_uids = [];

        foreach ($uids as $uid) {
            $raw_message = $rcube->storage->get_raw_body($uid);
            $raw_headers = $rcube->storage->get_raw_headers($uid);

            $updated_headers = preg_replace($args['patterns'], $args['replacements'], $raw_headers);
            $raw_message     = str_replace($raw_headers, $updated_headers, $raw_message);

            $saved = $rcube->storage->save_message($dst_mbox, $raw_message);

            if ($saved !== false) {
                $rcube->output->command('markasjunk_move', null, [$uid]);
                array_push($new_uids, $saved);
            }
        }

        if (count($new_uids) > 0) {
            $uids = $new_uids;
        }
    }
}
PKtc�\8�� markasjunk/drivers/sa_detach.phpnu�[���<?php

/**
 * SpamAssassin detach ham driver
 *
 * @version 2.0
 *
 * @author Philip Weir
 *
 * Copyright (C) 2011-2014 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * 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 3 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 Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk_sa_detach
{
    public function spam($uids, $src_mbox, $dst_mbox)
    {
        // do nothing
    }

    public function ham(&$uids, $src_mbox, $dst_mbox)
    {
        $rcube    = rcube::get_instance();
        $storage  = $rcube->storage;
        $new_uids = [];

        foreach ($uids as $uid) {
            $saved   = false;
            $message = new rcube_message($uid);

            foreach ($message->attachments as $part) {
                if (
                    $part->ctype_primary == 'message'
                    && $part->ctype_secondary == 'rfc822'
                    && !empty($part->ctype_parameters['x-spam-type'])
                    && $part->ctype_parameters['x-spam-type'] == 'original'
                ) {
                    $orig_message_raw = $message->get_part_body($part->mime_id);

                    if ($saved = $storage->save_message($dst_mbox, $orig_message_raw)) {
                        $rcube->output->command('markasjunk_move', null, [$uid]);
                        array_push($new_uids, $saved);
                    }
                }
            }
        }

        if (count($new_uids) > 0) {
            $uids = $new_uids;
        }
    }
}
PKtc�\C&VFnn'markasjunk/drivers/amavis_blacklist.phpnu�[���<?php

/**
 * AmavisD Blacklist driver
 *
 * @version 1.0
 * @requires Amacube plugin
 *
 * @author Der-Jan
 *
 * Copyright (C) 2014 Der-Jan
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * 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 3 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 Roundcube. If not, see https://www.gnu.org/licenses/.
 */

/* #   'SELECT wb'.
 * #   ' FROM wblist JOIN mailaddr ON wblist.sid=mailaddr.id'.
 * #   ' WHERE wblist.rid=? AND mailaddr.email IN (%k)'.
 * #   ' ORDER BY mailaddr.priority DESC';
 */

class markasjunk_amavis_blacklist
{
    private $user_email = '';

    public function spam($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_list($uids, true);
    }

    public function ham($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_list($uids, false);
    }

    private function _do_list($uids, $spam)
    {
        $rcube = rcube::get_instance();
        $this->user_email = $rcube->user->data['username'];

        $config_file = $rcube->config->get('markasjunk_amacube_config');

        if (is_file($config_file) && !$rcube->config->load_from_file($config_file)) {
            rcube::raise_error([
                    'code' => 527, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Failed to load config from $config_file"
                ], true, false
            );

            return false;
        }

        $db = rcube_db::factory($rcube->config->get('amacube_db_dsn'), '', true);
        $db->set_debug((bool) $rcube->config->get('sql_debug'));
        $db->db_connect('w');

        $debug = $rcube->config->get('markasjunk_debug');

        // check DB connections and exit on failure
        if ($err_str = $db->is_error()) {
            rcube::raise_error([
                    'code'    => 603,
                    'type'    => 'db',
                    'message' => $err_str
                ], false, true
            );
        }

        $sql_result = $db->query("SELECT `id` FROM `users` WHERE `email` = ?", $this->user_email);
        if ($sql_result && ($res_array = $db->fetch_assoc($sql_result))) {
            $rid = $res_array['id'];
        }
        else {
            if ($debug) {
                rcube::write_log('markasjunk', $this->user_email . ' not found in users table');
            }

            return false;
        }

        foreach ($uids as $uid) {
            $message = new rcube_message($uid);
            $email   = $message->sender['mailto'];

            // skip invalid emails
            if (!rcube_utils::check_email($email, false)) {
                continue;
            }

            $sql_result = $db->query("SELECT `id` FROM `mailaddr` WHERE `email` = ? ORDER BY `priority` DESC", $email);

            if ($sql_result && ($res_array = $db->fetch_assoc($sql_result))) {
                $sid = $res_array['id'];
            }
            else {
                if ($debug) {
                    rcube::write_log('markasjunk', "$email not found in mailaddr table - add it");
                }

                $sql_result = $db->query("INSERT INTO `mailaddr` ( `priority`, `email` ) VALUES ( 20, ? )", $email);

                if ($sql_result) {
                    $sid = $db->insert_id();
                }
                else {
                    if ($debug) {
                        rcube::write_log('markasjunk', "Cannot add $email to mailaddr table: " . $db->is_error($sql_result));
                    }

                    return false;
                }
            }

            $wb = '';
            $sql_result = $db->query("SELECT `wb` FROM `wblist` WHERE `sid` = ? AND `rid` =?", $sid, $rid);

            if ($sql_result && ($res_array = $db->fetch_assoc($sql_result))) {
                $wb = $res_array['wb'];
            }

            if (!$wb || (!$spam && preg_match('/^([BbNnFf])[\s]*\z/', $wb)) || ($spam && preg_match('/^([WwYyTt])[\s]*\z/', $wb))) {
                $newwb = 'w';

                if ($spam) {
                    $newwb = 'b';
                }

                if ($wb) {
                    $sql_result = $db->query("UPDATE `wblist` SET `wb` = ? WHERE `sid` = ? AND `rid` = ?",
                        $newwb, $sid, $rid);
                }
                else {
                    $sql_result = $db->query("INSERT INTO `wblist` (`sid`, `rid`, `wb`) VALUES (?, ?, ?)",
                        $sid, $rid, $newwb);
                }

                if (!$sql_result) {
                    if ($debug) {
                        rcube::write_log('markasjunk', "Cannot update wblist for user {$this->user_email} with $email");
                    }

                    return false;
                }
            }
        }
    }
}
PKtc�\b6�PP markasjunk/drivers/cmd_learn.phpnu�[���<?php

/**
 * Command line learn driver
 *
 * @version 3.1
 *
 * @author Philip Weir
 * Patched by Julien Vehent to support DSPAM
 * Enhanced support for DSPAM by Stevan Bajic <stevan@bajic.ch>
 *
 * Copyright (C) 2009-2018 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * 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 3 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 Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk_cmd_learn
{
    public function spam($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_salearn($uids, true, $src_mbox);
    }

    public function ham($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_salearn($uids, false, $src_mbox);
    }

    private function _do_salearn($uids, $spam, $src_mbox)
    {
        $rcube    = rcube::get_instance();
        $temp_dir = realpath($rcube->config->get('temp_dir'));
        $command  = $rcube->config->get($spam ? 'markasjunk_spam_cmd' : 'markasjunk_ham_cmd');
        $debug    = $rcube->config->get('markasjunk_debug');

        if (!$command) {
            return;
        }

        if (strpos($command, '%h') !== false) {
            preg_match_all('/%h:([\w_-]+)/', $command, $header_names, PREG_SET_ORDER);
            $header_names = array_column($header_names, 1);
        }

        // backwards compatibility %xds removed in markasjunk v1.12
        $command = str_replace('%xds', '%h:x-dspam-signature', $command);
        $command = str_replace('%u', escapeshellarg($_SESSION['username']), $command);
        $command = str_replace('%l', escapeshellarg($rcube->user->get_username('local')), $command);
        $command = str_replace('%d', escapeshellarg($rcube->user->get_username('domain')), $command);
        if (strpos($command, '%i') !== false) {
            $identity = $rcube->user->get_identity();
            $command  = str_replace('%i', escapeshellarg($identity['email']), $command);
        }

        foreach ($uids as $uid) {
            // reset command for next message
            $tmp_command = $command;

            if (strpos($tmp_command, '%s') !== false) {
                $message     = new rcube_message($uid);
                $tmp_command = str_replace('%s', escapeshellarg($message->sender['mailto']), $tmp_command);
            }

            if (!empty($header_names)) {
                $storage = $rcube->get_storage();
                $storage->check_connection();
                $headers = $storage->conn->fetchHeader($src_mbox, $uid, true, false, $header_names);

                foreach ($header_names as $header) {
                    $val = null;
                    if ($headers) {
                        $val = $headers->get($header);
                        $val = is_array($val) ? array_first($val) : $val;
                    }

                    if (!empty($val)) {
                        $tmp_command = str_replace('%h:' . $header, escapeshellarg($val), $tmp_command);
                    }
                    else {
                        if ($debug) {
                            rcube::write_log('markasjunk', "header {$header} not found in message {$src_mbox}/{$uid}");
                        }

                        continue 2;
                    }
                }
            }

            if (strpos($command, '%f') !== false) {
                $tmpfname = tempnam($temp_dir, 'rcmSALearn');
                file_put_contents($tmpfname, $rcube->storage->get_raw_body($uid));
                $tmp_command = str_replace('%f', escapeshellarg($tmpfname), $tmp_command);
            }

            $output = shell_exec($tmp_command);

            if ($debug) {
                if ($output) {
                    $tmp_command .= "\n$output";
                }

                rcube::write_log('markasjunk', $tmp_command);
            }

            if (isset($tmpfname)) {
                unlink($tmpfname);
            }
        }
    }
}
PKtc�\��`dnn"markasjunk/drivers/email_learn.phpnu�[���<?php

/**
 * Email learn driver
 *
 * @version 3.0
 *
 * @author Philip Weir
 *
 * Copyright (C) 2009-2017 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * 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 3 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 Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk_email_learn
{
    private $rcube;

    public function spam($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_emaillearn($uids, true);
    }

    public function ham($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_emaillearn($uids, false);
    }

    private function _do_emaillearn($uids, $spam)
    {
        $this->rcube  = rcube::get_instance();
        $identity     = $this->rcube->user->get_identity();
        $from         = $identity['email'];
        $from_string  = format_email_recipient($from, $identity['name']);
        $attach       = $this->rcube->config->get('markasjunk_email_attach', false);
        $debug        = $this->rcube->config->get('markasjunk_debug');
        $product      = $this->rcube->config->get('product_name');
        $temp_dir     = unslashify($this->rcube->config->get('temp_dir'));

        $subject = (string) $this->rcube->config->get('markasjunk_email_subject');
        $mailto  = (string) $this->rcube->config->get($spam ? 'markasjunk_email_spam' : 'markasjunk_email_ham');
        $subject = $this->_parse_vars($subject, $spam, $from);
        $mailto  = $this->_parse_vars($mailto, $spam, $from);

        // no address to send to, exit
        if (!$mailto) {
            return;
        }

        foreach ($uids as $i => $uid) {
            $MESSAGE = new rcube_message($uid);
            $message_file = null;

            // set message charset as default
            if (!empty($MESSAGE->headers->charset)) {
                $this->rcube->storage->set_charset($MESSAGE->headers->charset);
            }

            $OUTPUT   = $this->rcube->output;
            $SENDMAIL = new rcmail_sendmail(null, [
                    'sendmail'      => true,
                    'from'          => $from,
                    'mailto'        => $mailto,
                    'dsn_enabled'   => false,
                    'charset'       => 'UTF-8',
                    'error_handler' => function(...$args) use ($OUTPUT) {
                        call_user_func_array([$OUTPUT, 'show_message'], $args);
                        $OUTPUT->send();
                    }
            ]);

            if ($attach) {
                $headers = [
                    'Date'       => $this->rcube->user_date(),
                    'From'       => $from_string,
                    'To'         => $mailto,
                    'Subject'    => $subject,
                    'User-Agent' => $this->rcube->config->get('useragent'),
                    'Message-ID' => $this->rcube->gen_message_id($from),
                    'X-Sender'   => $from
                ];

                $message_text = ($spam ? 'Spam' : 'Ham') . " report from $product";

                // create attachment
                $orig_subject = $MESSAGE->get_header('subject');
                $disp_name    = (!empty($orig_subject) ? $orig_subject : 'message_rfc822') . '.eml';
                $message_file = tempnam($temp_dir, 'rcm');
                $attachment   = [];

                if ($fp = fopen($message_file, 'w')) {
                    $this->rcube->storage->get_raw_body($uid, $fp);
                    fclose($fp);

                    $attachment = [
                        'name'     => $disp_name,
                        'mimetype' => 'message/rfc822',
                        'path'     => $message_file,
                        'size'     => filesize($message_file),
                        'charset'  => $MESSAGE->headers->charset
                    ];
                }

                // create message
                $MAIL_MIME = $SENDMAIL->create_message($headers, $message_text, false, [$attachment]);

                if (count($attachment) > 0) { // sanity check in case creating the attachment failed
                    $folding = (int) $this->rcube->config->get('mime_param_folding');

                    $MAIL_MIME->addAttachment($attachment['path'],
                        $attachment['mimetype'], $attachment['name'], true,
                        '8bit', 'attachment', $attachment['charset'], '', '',
                        $folding ? 'quoted-printable' : null,
                        $folding == 2 ? 'quoted-printable' : null,
                        '', RCUBE_CHARSET
                    );
                }
            }
            else {
                $headers = [
                    'Resent-From'       => $from_string,
                    'Resent-To'         => $mailto,
                    'Resent-Date'       => $this->rcube->user_date(),
                    'Resent-Message-ID' => $this->rcube->gen_message_id($from)
                ];

                // create the bounce message
                $MAIL_MIME = new rcmail_resend_mail([
                        'bounce_message' => $MESSAGE,
                        'bounce_headers' => $headers,
                ]);
            }

            $SENDMAIL->deliver_message($MAIL_MIME, $i == count($uids) - 1);

            // clean up
            if ($message_file) {
                unlink($message_file);
            }

            if ($debug) {
                rcube::write_log('markasjunk', $uid . ($spam ? ' SPAM ' : ' HAM ') . $mailto . ' (' . $subject . ')');
            }
        }
    }

    private function _parse_vars($data, $spam, $from)
    {
        $data = str_replace('%u', $_SESSION['username'], $data);
        $data = str_replace('%t', $spam ? 'spam' : 'ham', $data);
        $data = str_replace('%l', $this->rcube->user->get_username('local'), $data);
        $data = str_replace('%d', $this->rcube->user->get_username('domain'), $data);
        $data = str_replace('%i', $from, $data);

        return $data;
    }
}
PKtc�\�B|�MM markasjunk/drivers/dir_learn.phpnu�[���<?php

/**
 * Copy spam/ham messages to a directory for learning later
 *
 * @version 2.0
 *
 * @author Philip Weir
 *
 * Copyright (C) 2009-2014 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * 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 3 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 Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk_dir_learn
{
    public function spam($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_messagemove($uids, true);
    }

    public function ham($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_messagemove($uids, false);
    }

    private function _do_messagemove($uids, $spam)
    {
        $rcube    = rcube::get_instance();
        $dest_dir = unslashify($rcube->config->get($spam ? 'markasjunk_spam_dir' : 'markasjunk_ham_dir'));

        if (!$dest_dir) {
            return;
        }

        $debug    = $rcube->config->get('markasjunk_debug');
        $filename = $rcube->config->get('markasjunk_filename');
        $filename = str_replace('%u', $_SESSION['username'], $filename);
        $filename = str_replace('%t', ($spam) ? 'spam' : 'ham', $filename);
        $filename = str_replace('%l', $rcube->user->get_username('local'), $filename);
        $filename = str_replace('%d', $rcube->user->get_username('domain'), $filename);

        foreach ($uids as $uid) {
            $tmpfname = tempnam($dest_dir, $filename);
            file_put_contents($tmpfname, $rcube->storage->get_raw_body($uid));

            if ($debug) {
                rcube::write_log('markasjunk', $tmpfname);
            }
        }
    }
}
PKtc�\�	��@
@
markasjunk/drivers/jsevent.phpnu�[���<?php

/**
 * MarkAsJunk JS events example
 * This is an example of how to interact with the markasjunk JS event
 * markasjunk-update to change the spam/ham options shown for specific
 * folders
 *
 * @version 0.1
 * @author Philip Weir
 *
 * Copyright (C) 2016 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * 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 3 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 Roundcube. If not, see http://www.gnu.org/licenses/.
 */

class markasjunk_jsevent
{
    private $addition_spam_folders = ['spam2', 'spam3'];
    private $suspicious_folders    = ['unknown1', 'unknown2'];

    public function init()
    {
        $rcmail = rcmail::get_instance();

        // only execute this code on page load
        if ($rcmail->output->type != 'html') {
            return;
        }

        $js_addition_spam_folders = json_encode($this->addition_spam_folders);
        $js_suspicious_folders    = json_encode($this->suspicious_folders);

        $script = <<<EOL
rcmail.addEventListener('markasjunk-update', function(props) {
    var addition_spam_folders = {$js_addition_spam_folders};
    var suspicious_folders = {$js_suspicious_folders};

    // ignore this special code when in a multifolder listing
    if (rcmail.is_multifolder_listing())
        return;

    if ($.inArray(rcmail.env.mailbox, addition_spam_folders) > -1) {
        props.disp.spam = false;
        props.disp.ham = true;
    }
    else if ($.inArray(rcmail.env.mailbox, suspicious_folders) > -1) {
        props.disp.spam = true;
        props.disp.ham = true;

        // from here it is also possible to alter the buttons themselves...
        props.objs.spamobj.find('a > span').text('As possibly spam');
    }
    else {
        props.objs.spamobj.find('a > span').text(rcmail.get_label('markasjunk.markasjunk'));
    }

    return props;
});
EOL;

        $rcmail->output->add_script($script, 'docready');
    }

    public function spam(&$uids, $mbox)
    {
        // Treat message as spam...
    }

    public function ham(&$uids, $mbox)
    {
        // Treat message as ham...
    }
}
PKtc�\��d��#markasjunk/drivers/sa_blacklist.phpnu�[���<?php

/**
 * SpamAssassin Blacklist driver
 *
 * @version 2.0
 * @requires SAUserPrefs plugin
 *
 * @author Philip Weir
 *
 * Copyright (C) 2010-2014 Philip Weir
 *
 * This driver is part of the MarkASJunk plugin for Roundcube.
 *
 * 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 3 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 Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk_sa_blacklist
{
    private $sa_user;
    private $sa_table;
    private $sa_username_field;
    private $sa_preference_field;
    private $sa_value_field;

    public function spam($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_list($uids, true);
    }

    public function ham($uids, $src_mbox, $dst_mbox)
    {
        $this->_do_list($uids, false);
    }

    private function _do_list($uids, $spam)
    {
        $rcube = rcube::get_instance();
        $this->sa_user             = $rcube->config->get('sauserprefs_userid', "%u");
        $this->sa_table            = $rcube->config->get('sauserprefs_sql_table_name');
        $this->sa_username_field   = $rcube->config->get('sauserprefs_sql_username_field');
        $this->sa_preference_field = $rcube->config->get('sauserprefs_sql_preference_field');
        $this->sa_value_field      = $rcube->config->get('sauserprefs_sql_value_field');

        // SAv4 compatibility
        $blocklist_pref_name       = $rcube->config->get('sauserprefs_sav4', false) ? "blocklist_from" : "blacklist_from";
        $welcomelist_pref_name     = $rcube->config->get('sauserprefs_sav4', false) ? "welcomelist_from" : "whitelist_from";

        $identity = $rcube->user->get_identity();
        $identity = $identity['email'];

        $this->sa_user = str_replace('%u', $_SESSION['username'], $this->sa_user);
        $this->sa_user = str_replace('%l', $rcube->user->get_username('local'), $this->sa_user);
        $this->sa_user = str_replace('%d', $rcube->user->get_username('domain'), $this->sa_user);
        $this->sa_user = str_replace('%i', $identity, $this->sa_user);

        $config_file = $rcube->config->get('markasjunk_sauserprefs_config');
        $debug       = $rcube->config->get('markasjunk_debug');

        if (is_file($config_file) && !$rcube->config->load_from_file($config_file)) {
            rcube::raise_error([
                    'code' => 527, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Failed to load config from $config_file"
                ], true, false
            );

            return false;
        }

        $db = rcube_db::factory($rcube->config->get('sauserprefs_db_dsnw'), $rcube->config->get('sauserprefs_db_dsnr'), $rcube->config->get('sauserprefs_db_persistent'));
        $db->set_debug((bool) $rcube->config->get('sql_debug'));
        $db->db_connect('w');

        // check DB connections and exit on failure
        if ($err_str = $db->is_error()) {
            rcube::raise_error([
                    'code' => 603,
                    'type' => 'db',
                    'message' => $err_str
                ], false, true
            );
        }

        foreach ($uids as $uid) {
            $message = new rcube_message($uid);
            $email   = $message->sender['mailto'];

            // skip invalid emails
            if (!rcube_utils::check_email($email, false)) {
                continue;
            }

            if ($spam) {
                // delete any welcomelisting for this address
                $db->query(
                    "DELETE FROM `{$this->sa_table}` WHERE `{$this->sa_username_field}` = ? "
                        . "AND `{$this->sa_preference_field}` = ? AND `{$this->sa_value_field}` = ?",
                    $this->sa_user,
                    $welcomelist_pref_name,
                    $email
                );

                // check address is not already blocklisted
                $sql_result = $db->query(
                    "SELECT `value` FROM `{$this->sa_table}` WHERE `{$this->sa_username_field}` = ? "
                        . "AND `{$this->sa_preference_field}` = ? AND `{$this->sa_value_field}` = ?",
                    $this->sa_user,
                    $blocklist_pref_name,
                    $email
                );

                if (!$db->fetch_array($sql_result)) {
                    $db->query(
                        "INSERT INTO `{$this->sa_table}` (`{$this->sa_username_field}`, `{$this->sa_preference_field}`, `{$this->sa_value_field}`)"
                            . " VALUES (?, ?, ?)",
                        $this->sa_user,
                        $blocklist_pref_name,
                        $email
                    );

                    if ($debug) {
                        rcube::write_log('markasjunk', $this->sa_user . ' blocklist ' . $email);
                    }
                }
            }
            else {
                // delete any blocklisting for this address
                $db->query(
                    "DELETE FROM `{$this->sa_table}` WHERE `{$this->sa_username_field}` = ? AND "
                        . "`{$this->sa_preference_field}` = ? AND `{$this->sa_value_field}` = ?",
                    $this->sa_user,
                    $blocklist_pref_name,
                    $email
                );

                // check address is not already welcomelisted
                $sql_result = $db->query(
                    "SELECT `value` FROM `{$this->sa_table}` WHERE `{$this->sa_username_field}` = ? "
                        . "AND `{$this->sa_preference_field}` = ? AND `{$this->sa_value_field}` = ?",
                    $this->sa_user,
                    $welcomelist_pref_name,
                    $email
                );

                if (!$db->fetch_array($sql_result)) {
                    $db->query(
                        "INSERT INTO `{$this->sa_table}` (`{$this->sa_username_field}`, `{$this->sa_preference_field}`, `{$this->sa_value_field}`)"
                            . " VALUES (?, ?, ?)",
                        $this->sa_user,
                        $welcomelist_pref_name,
                        $email);

                    if ($debug) {
                        rcube::write_log('markasjunk', $this->sa_user . ' welcomelist ' . $email);
                    }
                }
            }
        }
    }
}
PKtc�\�%[uu!markasjunk/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Това писмо е Спам';
$labels['asjunk'] = 'Като Спам';
$labels['markasjunk'] = 'Маркирай като Спам';
$labels['buttonnotjunk'] = 'Това писмо не е Спам';
$labels['asnotjunk'] = 'Като не Спам';
$labels['markasnotjunk'] = 'Маркирай като не Спам';
$labels['notjunk'] = 'Не е Спам';
$messages['reportedasjunk'] = 'Писмото е маркирано като Спам успешно';
$messages['reportedasnotjunk'] = 'Писмото е маркирано като не Спам успешно';
PKtc�\Wi���!markasjunk/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels = [];
$labels['buttonjunk'] = 'This message is junk';
$labels['asjunk'] = 'As junk';
$labels['markasjunk'] = 'Mark as junk';
$labels['buttonnotjunk'] = 'This message is not junk';
$labels['asnotjunk'] = 'As not junk';
$labels['markasnotjunk'] = 'Mark as not junk';
$labels['notjunk'] = 'Not junk';

$messages = [];
$messages['reportedasjunk'] = 'Successfully reported as junk';
$messages['reportedasnotjunk'] = 'Successfully reported as not junk';
PKtc�\������!markasjunk/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Tämä viesti on roskapostia';
$labels['asjunk'] = 'Roskapostina';
$labels['markasjunk'] = 'Merkitse roskapostiksi';
$labels['buttonnotjunk'] = 'Tämä viesti ei ole roskapostia';
$labels['asnotjunk'] = 'Ei roskapostina';
$labels['markasnotjunk'] = 'Poista roskaposti-merkintä';
$labels['notjunk'] = 'Ei roskaposti';
$messages['reportedasjunk'] = 'Merkittiin roskapostiksi';
$messages['reportedasnotjunk'] = 'Roskaposti-merkintä poistettiin';
PKtc�\|��%!markasjunk/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Denne meldingen er søppelpost';
$labels['asjunk'] = 'Som søppelpost';
$labels['markasjunk'] = 'Merk som søppelpost';
$labels['buttonnotjunk'] = 'Denne meldingen er ikke søppelpost';
$labels['asnotjunk'] = 'Som ikke-søppelpost';
$labels['markasnotjunk'] = 'Merk som ikke søppelpost';
$labels['notjunk'] = 'Ikke søppelpost';
$messages['reportedasjunk'] = 'Rapportering av søppelpost var vellykket';
$messages['reportedasnotjunk'] = 'Rapportering av ikke-søppelpost var vellykket';
PKtc�\{vp		!markasjunk/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Ky mesazh është hedhurinë';
$labels['asjunk'] = 'Si hedhurinë';
$labels['markasjunk'] = 'Vëri shenjë si hedhurinë';
$labels['buttonnotjunk'] = 'Ky mesazh s’është hedhurinë';
$labels['asnotjunk'] = 'Si jo hedhurinë';
$labels['markasnotjunk'] = 'Vëri shenjë si jo hedhurinë';
$labels['notjunk'] = 'Jo hedhurinë';
$messages['reportedasjunk'] = 'U raportua me sukses si hedhurinë';
$messages['reportedasnotjunk'] = 'U raportua me sukses si jo hedhurinë';
PKtc�\m����!markasjunk/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'See kiri on rämpspost';
$labels['asjunk'] = 'Kui rämpspost';
$labels['markasjunk'] = 'Märgi rämpspostiks';
$labels['buttonnotjunk'] = 'See kiri ei ole rämpspost';
$labels['asnotjunk'] = 'Kui mitte rämpspost';
$labels['markasnotjunk'] = 'Märgi mitte rämpspostiks';
$labels['notjunk'] = 'Pole rämpspost';
$messages['reportedasjunk'] = 'Edukalt teatatud kui räpspost';
$messages['reportedasnotjunk'] = 'Edukalt teatatud kui mitte räpspost';
PKtc�\^����!markasjunk/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Mezu hau zaborra da';
$labels['asjunk'] = 'Zaborra moduan';
$labels['markasjunk'] = 'Markatu zaborra moduan';
$labels['buttonnotjunk'] = 'Mezu hau ez da zaborra';
$labels['asnotjunk'] = 'Ez zaborra moduan';
$labels['markasnotjunk'] = 'Markatu ez zaborra moduan';
$labels['notjunk'] = 'Ez da zaborra';
$messages['reportedasjunk'] = 'Zabor gisa informatu da';
$messages['reportedasnotjunk'] = 'Ez zaborra gisa informatu da';
PKtc�\�l�,,!markasjunk/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Bu istenmeyen bir ileti';
$labels['asjunk'] = 'İstenmeyen olarak';
$labels['markasjunk'] = 'İstenmeyen olarak işaretle';
$labels['buttonnotjunk'] = 'Bu istenmeyen bir ileti değil';
$labels['asnotjunk'] = 'İstenmeyen değil olarak';
$labels['markasnotjunk'] = 'İstenmeyen değil olarak işaretle';
$labels['notjunk'] = 'İstenmeyen e-posta değil';
$messages['reportedasjunk'] = 'İstenmeyen e-posta olduğu bildirildi';
$messages['reportedasnotjunk'] = 'İstenmeyen e-posta olmadığı bildirildi';
PKtc�\�\���!markasjunk/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Este mensaje es spam';
$labels['asjunk'] = 'Es spam';
$labels['markasjunk'] = 'Marcar como spam';
$labels['buttonnotjunk'] = 'Este mensaje no es spam';
$labels['asnotjunk'] = 'No es spam';
$labels['markasnotjunk'] = 'Marcar como no spam';
$labels['notjunk'] = 'No es spam';
$messages['reportedasjunk'] = 'Reportado como spam exitosamente';
$messages['reportedasnotjunk'] = 'Marcado como no spam exitosamente';
PKtc�\T��%GGmarkasjunk/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Ev peyam nebaş e';
PKtc�\��K_��!markasjunk/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Esta mensagem é lixo';
$labels['asjunk'] = 'Como lixo';
$labels['markasjunk'] = 'Marcar como lixo';
$labels['buttonnotjunk'] = 'Esta mensagem não é lixo';
$labels['asnotjunk'] = 'Como não lixo';
$labels['markasnotjunk'] = 'Marcar como não lixo';
$labels['notjunk'] = 'Não é lixo';
$messages['reportedasjunk'] = 'Reportado como lixo com sucesso';
$messages['reportedasnotjunk'] = 'Reportado como não lixo com sucesso';
PKtc�\7�d���!markasjunk/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Šis ziņojums ir mēstule';
$labels['asjunk'] = 'Kā mēstuli';
$labels['markasjunk'] = 'Atzīmēt kā mēstuli';
$labels['buttonnotjunk'] = 'Šis ziņojums nav mēstule';
$labels['asnotjunk'] = 'Ne kā mēstuli';
$labels['markasnotjunk'] = 'Atzīmēt kā nemēstuli';
$labels['notjunk'] = 'Nav mēstule';
$messages['reportedasjunk'] = 'Veiksmīgi noziņots kā mēstule';
$messages['reportedasnotjunk'] = 'Veiksmīgi noziņots kā nemēstule';
PKtc�\lX�}<<!markasjunk/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Táto správa je nevyžiadaná';
$labels['asjunk'] = 'Ako nevyžiadané';
$labels['markasjunk'] = 'Označiť ako nevyžiadané';
$labels['buttonnotjunk'] = 'Táto správa nie je nevyžiadaná';
$labels['asnotjunk'] = 'Ako užitočné/vyžiadané';
$labels['markasnotjunk'] = 'Označiť ako užitočné/vyžiadané';
$labels['notjunk'] = 'Nie je nevyžiadané';
$messages['reportedasjunk'] = 'Úspešné nahlásené ako nevyžiadané';
$messages['reportedasnotjunk'] = 'Úspešne nahlásené ako užitočné/vyžiadané';
PKtc�\B���,,!markasjunk/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Tato zpráva je nevyžádaná';
$labels['asjunk'] = 'Jako nevyžádanou poštu';
$labels['markasjunk'] = 'Označit jako nevyžádanou poštu';
$labels['buttonnotjunk'] = 'Tato zpráva není nevyžádaná';
$labels['asnotjunk'] = 'Jako vyžádanou poštu';
$labels['markasnotjunk'] = 'Označit jako vyžádanou poštu';
$labels['notjunk'] = 'Vyžádaná pošta';
$messages['reportedasjunk'] = 'Nahlášeno jako nevyžádaná pošta';
$messages['reportedasnotjunk'] = 'Nahlášeno jako vyžádaná pošta';
PKtc�\ۙb&��!markasjunk/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Diese Nachricht ist Spam';
$labels['asjunk'] = 'Als Spam';
$labels['markasjunk'] = 'Als Spam markieren';
$labels['buttonnotjunk'] = 'Diese Nachricht ist kein Spam';
$labels['asnotjunk'] = 'als kein Spam';
$labels['markasnotjunk'] = 'Als kein Spam markieren';
$labels['notjunk'] = 'Kein Spam';
$messages['reportedasjunk'] = 'Erfolgreich als Spam gemeldet';
$messages['reportedasnotjunk'] = 'Erfolgreich als kein Spam gemeldet';
PKtc�\�����!markasjunk/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = '這是垃圾郵件';
$labels['asjunk'] = '為垃圾郵件';
$labels['markasjunk'] = '標示為垃圾郵件';
$labels['buttonnotjunk'] = '這不是垃圾郵件';
$labels['asnotjunk'] = '為非垃圾郵件';
$labels['markasnotjunk'] = '標示為非垃圾郵件';
$labels['notjunk'] = '非垃圾郵件';
$messages['reportedasjunk'] = '已回報為垃圾郵件';
$messages['reportedasnotjunk'] = '已回報為非垃圾郵件';
PKtc�\�R�*��!markasjunk/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Aquest missatge és brossa';
$labels['asjunk'] = 'Com a brossa';
$labels['markasjunk'] = 'Marca-ho com a brossa';
$labels['buttonnotjunk'] = 'Aquest missatge no és brossa';
$labels['asnotjunk'] = 'Com a no brossa';
$labels['markasnotjunk'] = 'Marca-ho com a no brossa';
$labels['notjunk'] = 'No brossa';
$messages['reportedasjunk'] = 'S\'ha informat correctament com a brossa';
$messages['reportedasnotjunk'] = 'S\'ha informat correctament com a no brossa';
PKtc�\�ė�DD!markasjunk/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Это сообщение спам';
$labels['asjunk'] = 'Как спам';
$labels['markasjunk'] = 'Пометить как спам';
$labels['buttonnotjunk'] = 'Это сообщение не спам';
$labels['asnotjunk'] = 'Как не спам';
$labels['markasnotjunk'] = 'Пометить как не спам';
$labels['notjunk'] = 'Не спам';
$messages['reportedasjunk'] = 'Успешно помечено как спам';
$messages['reportedasnotjunk'] = 'Успешно помечено как не спам';
PKtc�\ˏT�!markasjunk/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Þessi skilaboð eru ruslpóstur';
$labels['asjunk'] = 'Sem ruslpóstur';
$labels['markasjunk'] = 'Merkja sem ruslpóst';
$labels['buttonnotjunk'] = 'Þessi skilaboð eru ekki ruslpóstur';
$labels['asnotjunk'] = 'Sem ekki-ruslpóstur';
$labels['markasnotjunk'] = 'Merkja sem ekki-ruslpóst';
$labels['notjunk'] = 'Ekki ruslpóstur';
$messages['reportedasjunk'] = 'Tókst að tilkynna sem ruslpóst';
$messages['reportedasnotjunk'] = 'Tókst að tilkynna sem ekki-ruslpóst';
PKtc�\�0�:��!markasjunk/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'هذه الرسالة غير مهمة';
$labels['asjunk'] = 'كغير مهم';
$labels['markasjunk'] = 'وضع علامة على أنه غير مرغوب فيه';
$labels['buttonnotjunk'] = 'هذه الرسالة ليست غير مهمة';
$labels['asnotjunk'] = 'ليس وهمي';
$labels['markasnotjunk'] = 'ضع علامة ليست غير مهمة';
$labels['notjunk'] = 'ليس وهمي';
$messages['reportedasjunk'] = 'تم الإبلاغ عن أنه غير هام بنجاح';
$messages['reportedasnotjunk'] = 'تم الإبلاغ عن أنه ليس بريدًا غير مهم بنجاح';
PKtc�\��
]]!markasjunk/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/


$messages['reportedasjunk'] = 'Sukses dilaporkan sebagai sampah';
PKtc�\_"�4��!markasjunk/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Ez az üzenet kéretlen';
$labels['asjunk'] = 'Kéretlenként';
$labels['markasjunk'] = 'Kéretlennek jelölés';
$labels['buttonnotjunk'] = 'Ez az üzenet nem kéretlen';
$labels['asnotjunk'] = 'Nem kéretlenként';
$labels['markasnotjunk'] = 'Nem kéretlennek jelölés';
$labels['notjunk'] = 'Nem kéretlen';
$messages['reportedasjunk'] = 'Sikeresen kéretlennek jelentve';
$messages['reportedasnotjunk'] = 'Sikeresen nem kéretlennek jelentve';
PKtc�\*7((!markasjunk/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Ce courriel est indésirable';
$labels['asjunk'] = 'Comme indésirable';
$labels['markasjunk'] = 'Marquer comme indésirable';
$labels['buttonnotjunk'] = 'Ce courriel est acceptable';
$labels['asnotjunk'] = 'Comme acceptable';
$labels['markasnotjunk'] = 'Marquer comme acceptable';
$labels['notjunk'] = 'Acceptable';
$messages['reportedasjunk'] = 'Signalé avec succès comme indésirable';
$messages['reportedasnotjunk'] = 'Signalé avec succès comme acceptable';
PKtc�\���[[!markasjunk/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/


$messages['reportedasjunk'] = 'Uspješno prijavljeno kao Junk';
PKtc�\�7����!markasjunk/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Wiadomość jest spamem.';
$labels['asjunk'] = 'Jako spam';
$labels['markasjunk'] = 'Oznacz jako spam';
$labels['buttonnotjunk'] = 'Wiadomość nie jest spamem';
$labels['asnotjunk'] = 'Jako nie-spam';
$labels['markasnotjunk'] = 'Oznacz jako nie-spam';
$labels['notjunk'] = 'Nie-spam';
$messages['reportedasjunk'] = 'Pomyślnie oznaczono jako spam';
$messages['reportedasnotjunk'] = 'Pomyślnie oznaczono jako nie spam';
PKtc�\��K44!markasjunk/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'このメッセージは迷惑メール';
$labels['asjunk'] = '迷惑メール';
$labels['markasjunk'] = '迷惑メールとしてマーク';
$labels['buttonnotjunk'] = 'このメッセージは迷惑メールではない';
$labels['asnotjunk'] = '非迷惑メール';
$labels['markasnotjunk'] = '迷惑メールでないとマーク';
$labels['notjunk'] = '非迷惑メール';
$messages['reportedasjunk'] = '迷惑メールとして報告';
$messages['reportedasnotjunk'] = '非迷惑メールとして報告';
PKtc�\�
 �77!markasjunk/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'הודעה זו היא דואר זבל';
$labels['asjunk'] = 'יש לתייג כזבל';
$labels['markasjunk'] = 'יש לסמן כזבל';
$labels['buttonnotjunk'] = 'הודעה זו אינה זבל';
$labels['asnotjunk'] = 'יש לתייג כהודעה שאינה זבל';
$labels['markasnotjunk'] = 'יש לסמן שאינה זבל';
$labels['notjunk'] = 'לא זבל';
$messages['reportedasjunk'] = 'סומנה בהצלחה כזבל';
$messages['reportedasnotjunk'] = 'סומנה בהצלחה שאינה זבל';
PKtc�\v�z�!markasjunk/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Is bruscar é an teachtaireacht sin';
$labels['asjunk'] = 'Mar bhruscar';
$labels['markasjunk'] = 'Rianaigh mar bhruscar í';
$labels['buttonnotjunk'] = 'Ní bruscar é an teachtaireacht sin';
$labels['asnotjunk'] = 'Nach bruscar é';
$labels['markasnotjunk'] = 'Rianaigh nach bruscar é';
$labels['notjunk'] = 'Ní bruscar í';
$messages['reportedasjunk'] = 'Tuairiscíodh go rathúil gur bruscar í';
$messages['reportedasnotjunk'] = 'Tuairiscíodh go rathúil nach bruscar í';
PKtc�\T.�a��!markasjunk/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Denne meddelelse er spam';
$labels['asjunk'] = 'Som spam';
$labels['markasjunk'] = 'Marker som spam';
$labels['buttonnotjunk'] = 'Denne besked er ikke spam';
$labels['asnotjunk'] = 'Som ikke spam';
$labels['markasnotjunk'] = 'Marker som ikke spam';
$labels['notjunk'] = 'Ikke spam';
$messages['reportedasjunk'] = 'Succesfuldt rapporteret som spam';
$messages['reportedasnotjunk'] = 'Succesfuldt rapporteret som ikke spam
 ';
PKtc�\�����markasjunk/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/


$messages['reportedasjunk'] = 'تم الإبلاغ عنه كبريد غير مرغوب فيه بنجاح';
PKtc�\"�����!markasjunk/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Diese Nachricht ist Spam';
$labels['asjunk'] = 'Als Spam';
$labels['markasjunk'] = 'als SPAM markieren';
$labels['buttonnotjunk'] = 'Diese Nachricht ist kein Spam';
$labels['asnotjunk'] = 'als kein Spam';
$labels['markasnotjunk'] = 'Markierung Spam entfernen';
$labels['notjunk'] = 'Kein Spam';
$messages['reportedasjunk'] = 'Erfolgreich als SPAM gemeldet';
$messages['reportedasnotjunk'] = 'Erfolgreich als kein SPAM gemeldet';
PKtc�\/b�h��!markasjunk/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Meddelandet är skräp';
$labels['asjunk'] = 'Skräp';
$labels['markasjunk'] = 'Markera som skräp';
$labels['buttonnotjunk'] = 'Meddelandet är inte skräp';
$labels['asnotjunk'] = 'Inte skräp';
$labels['markasnotjunk'] = 'Markera som inte skräp';
$labels['notjunk'] = 'Inte skräp';
$messages['reportedasjunk'] = 'Framgångsrikt rapporterat som skräp';
$messages['reportedasnotjunk'] = 'Framgångsrikt rapporterat som inte skräp';
PKtc�\M_v���markasjunk/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'بۇ خەت بولسا ئەخلەت';
$labels['asjunk'] = 'ئەخلەت سۈپىتىدە';
$labels['markasjunk'] = 'ئەخلەت بەلگىسىنى قۇيۇش';
$labels['buttonnotjunk'] = 'بۇ خەت ئەخلەت ئەمەس';
$labels['asnotjunk'] = 'ئەخلەت ئەمەس سۈپىتىدە';
$labels['markasnotjunk'] = 'ئەخلەت ئەمەس بەلگىسىنى قۇيۇش';
$labels['notjunk'] = 'ئەخلەت ئەمەس';
$messages['reportedasjunk'] = 'ئەخلەت سۈپىتىدە مۇۋاپىقىيەتلىك دوكىلات قىلىندى';
$messages['reportedasnotjunk'] = 'ئەخلەت ئەمەسلىكى مۇۋاپىقىيەتلىك دوكىلات قىلىندى';
PKtc�\���H��!markasjunk/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = '이 메시지를 스팸으로 처리';
$labels['asjunk'] = '스팸 처리';
$labels['markasjunk'] = '스팸으로 표시';
$labels['buttonnotjunk'] = '이 메시지는 정상임';
$labels['asnotjunk'] = '정상 처리';
$labels['markasnotjunk'] = '정상으로 표시';
$labels['notjunk'] = '정상';
$messages['reportedasjunk'] = '스팸 메일로 성공적으로 보고함';
$messages['reportedasnotjunk'] = '정상 메일로 성공적으로 보고함';
PKtc�\[G
�!markasjunk/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Questo messaggio è indesiderato';
$labels['asjunk'] = 'Come indesiderato';
$labels['markasjunk'] = 'Contrassegna come indesiderato';
$labels['buttonnotjunk'] = 'Questo messaggio è accettabile';
$labels['asnotjunk'] = 'Come accettabile';
$labels['markasnotjunk'] = 'Contrassegna come accettabile';
$labels['notjunk'] = 'Accettabile';
$messages['reportedasjunk'] = 'Segnalato con successo come indesiderato';
$messages['reportedasnotjunk'] = 'Segnalato con successo come accettabile';
PKtc�\܉���!markasjunk/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Marcar como Spam';
$labels['asjunk'] = 'Es spam';
$labels['markasjunk'] = 'Marcar como Spam';
$labels['buttonnotjunk'] = 'Este mensaje no es spam';
$labels['asnotjunk'] = 'No es spam';
$labels['markasnotjunk'] = 'Marcado como no spam';
$labels['notjunk'] = 'No es spam';
$messages['reportedasjunk'] = 'Reportado como SPAM, correctamente';
$messages['reportedasnotjunk'] = 'Mensaje movido a la bandeja de entrada';
PKtc�\����!markasjunk/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Dit bericht is spam';
$labels['asjunk'] = 'Als spam';
$labels['markasjunk'] = 'Markeer als spam';
$labels['buttonnotjunk'] = 'Dit bericht is geen spam';
$labels['asnotjunk'] = 'Als niet spam';
$labels['markasnotjunk'] = 'Markeer als niet spam';
$labels['notjunk'] = 'Niet spam';
$messages['reportedasjunk'] = 'Succesvol gerapporteerd als spam';
$messages['reportedasnotjunk'] = 'Succesvol gerapporteerd als niet spam';
PKtc�\#���!markasjunk/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Mae\'r neges hwn yn sbwriel';
$labels['asjunk'] = 'Fel sbwriel';
$labels['markasjunk'] = 'Nodi fel sbwriel';
$labels['buttonnotjunk'] = 'Nid yw\'r neges hwn yn sbwriel';
$labels['asnotjunk'] = 'Fel nid sbwriel';
$labels['markasnotjunk'] = 'Nodi fel nid sbwriel';
$labels['notjunk'] = 'Nid sbwriel';
$messages['reportedasjunk'] = 'Adroddwyd yn llwyddiannus fel sbwriel';
$messages['reportedasnotjunk'] = 'Adroddwyd yn llwyddiannus fel nid sbwriel';
PKtc�\9����!markasjunk/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'This message is spam';
$labels['asjunk'] = 'As spam';
$labels['markasjunk'] = 'Mark as spam';
$labels['buttonnotjunk'] = 'This message is not spam';
$labels['asnotjunk'] = 'As not spam';
$labels['markasnotjunk'] = 'Mark as not spam';
$labels['notjunk'] = 'Not spam';
$messages['reportedasjunk'] = 'Successfully reported as spam';
$messages['reportedasnotjunk'] = 'Successfully reported as not spam';
PKtc�\N�J�!markasjunk/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Šis laiškas yra brukalas';
$labels['asjunk'] = 'Kaip brukalą';
$labels['markasjunk'] = 'Žymėti kaip brukalą';
$labels['buttonnotjunk'] = 'Šis laiškas nėra brukalas';
$labels['asnotjunk'] = 'Kaip ne brukalą';
$labels['markasnotjunk'] = 'Žymėti kaip ne brukalą';
$labels['notjunk'] = 'Ne brukalas';
$messages['reportedasjunk'] = 'Sėkmingai pranešta, jog laiškas yra brukalas';
$messages['reportedasnotjunk'] = 'Sėkmingai pranešta, jog laiškas nėra brukalas';
PKtc�\�����!markasjunk/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Esta mensagem é lixo';
$labels['asjunk'] = 'Como lixo';
$labels['markasjunk'] = 'Marcar como lixo';
$labels['buttonnotjunk'] = 'Esta mensagem não é lixo';
$labels['asnotjunk'] = 'Como não lixo';
$labels['markasnotjunk'] = 'Marcar como não sendo lixo';
$labels['notjunk'] = 'Não é lixo';
$messages['reportedasjunk'] = 'Reportada com sucesso como lixo';
$messages['reportedasnotjunk'] = 'Reportada com sucesso como não sendo lixo';
PKtc�\��$��!markasjunk/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Mark-As-Junk plugin        |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-markasjunk/
*/

$labels['buttonjunk'] = 'Αυτό το μήνυμα είναι ανεπιθύμητο';
$labels['asjunk'] = 'Ως ανεπιθύμητο';
$labels['markasjunk'] = 'Σημείωση ως ανεπιθύμητο';
$labels['buttonnotjunk'] = 'Αυτό το μήνυμα δεν είναι ανεπιθύμητο';
$labels['asnotjunk'] = 'Ως μη ανεπιθύμητο';
$labels['markasnotjunk'] = 'Σημείωση ως μη ανεπιθύμητο';
$labels['notjunk'] = 'Μη ανεπιθύμητο';
$messages['reportedasjunk'] = 'Αναφέρθηκε ως ανεπιθύμητο με επιτυχία';
$messages['reportedasnotjunk'] = 'Αναφέρθηκε ως μη Ανεπιθύμητο με επιτυχία';
PKtc�\G��1�1markasjunk/markasjunk.phpnu�[���<?php

/**
 * MarkAsJunk
 *
 * A plugin that adds a new button to the mailbox toolbar
 * to mark the selected messages as Junk and move them to the Junk folder
 * or to move messages in the Junk folder to the inbox - moving only the
 * attachment if it is a Spamassassin spam report email
 *
 * @author Philip Weir
 * @author Thomas Bruederli
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Philip Weir
 *
 * This program is a Roundcube (https://roundcube.net) plugin.
 * For more information see README.md.
 * For configuration see config.inc.php.dist.
 *
 * 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 3 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 Roundcube. If not, see https://www.gnu.org/licenses/.
 */
class markasjunk extends rcube_plugin
{
    public $task = 'mail';

    private $rcube;
    private $spam_mbox;
    private $ham_mbox;
    private $driver;
    private $flags   = [
        'JUNK'    => 'Junk',
        'NONJUNK' => 'NonJunk'
    ];


    /**
     * Plugin initialization
     */
    public function init()
    {
        $this->register_action('plugin.markasjunk.junk', [$this, 'mark_message']);
        $this->register_action('plugin.markasjunk.not_junk', [$this, 'mark_message']);

        $this->rcube = rcube::get_instance();
        $this->load_config();
        $this->_load_host_config();

        // Host exceptions
        $hosts = $this->rcube->config->get('markasjunk_allowed_hosts');
        if (!empty($hosts) && !in_array($_SESSION['storage_host'], (array) $hosts)) {
            return;
        }

        $this->ham_mbox  = $this->rcube->config->get('markasjunk_ham_mbox', 'INBOX');
        $this->spam_mbox = $this->rcube->config->get('markasjunk_spam_mbox', $this->rcube->config->get('junk_mbox'));
        $toolbar         = $this->rcube->config->get('markasjunk_toolbar', true);
        $this->_init_flags();

        if ($this->rcube->action == '' || $this->rcube->action == 'show') {
            $this->include_script('markasjunk.js');
            $this->add_texts('localization', true);
            $this->include_stylesheet($this->local_skin_path() . '/markasjunk.css');

            if ($toolbar) {
                // add the buttons to the main toolbar
                $this->add_button([
                        'command'    => 'plugin.markasjunk.junk',
                        'type'       => 'link',
                        'class'      => 'button buttonPas junk disabled',
                        'classact'   => 'button junk',
                        'classsel'   => 'button junk pressed',
                        'title'      => 'markasjunk.buttonjunk',
                        'innerclass' => 'inner',
                        'label'      => 'junk'
                    ], 'toolbar');

                $this->add_button([
                        'command'    => 'plugin.markasjunk.not_junk',
                        'type'       => 'link',
                        'class'      => 'button buttonPas notjunk disabled',
                        'classact'   => 'button notjunk',
                        'classsel'   => 'button notjunk pressed',
                        'title'      => 'markasjunk.buttonnotjunk',
                        'innerclass' => 'inner',
                        'label'      => 'markasjunk.notjunk'
                    ], 'toolbar');
            }
            else {
                // add the buttons to the mark message menu
                $this->add_button([
                        'command'    => 'plugin.markasjunk.junk',
                        'type'       => 'link-menuitem',
                        'label'      => 'markasjunk.asjunk',
                        'id'         => 'markasjunk',
                        'class'      => 'icon junk disabled',
                        'classact'   => 'icon junk active',
                        'innerclass' => 'icon junk'
                    ], 'markmenu');

                $this->add_button([
                        'command'    => 'plugin.markasjunk.not_junk',
                        'type'       => 'link-menuitem',
                        'label'      => 'markasjunk.asnotjunk',
                        'id'         => 'markasnotjunk',
                        'class'      => 'icon notjunk disabled',
                        'classact'   => 'icon notjunk active',
                        'innerclass' => 'icon notjunk'
                    ], 'markmenu');
            }

            // add markasjunk folder settings to the env for JS
            $this->rcube->output->set_env('markasjunk_ham_mailbox', $this->ham_mbox);
            $this->rcube->output->set_env('markasjunk_spam_mailbox', $this->spam_mbox);
            $this->rcube->output->set_env('markasjunk_move_spam', $this->rcube->config->get('markasjunk_move_spam', false));
            $this->rcube->output->set_env('markasjunk_move_ham', $this->rcube->config->get('markasjunk_move_ham', false));
            $this->rcube->output->set_env('markasjunk_permanently_remove', $this->rcube->config->get('markasjunk_permanently_remove', false));
            $this->rcube->output->set_env('markasjunk_spam_only', $this->rcube->config->get('markasjunk_spam_only', false));
        }

        // init learning driver
        $this->_init_driver();
    }

    public function mark_message()
    {
        $this->add_texts('localization');

        $is_spam    = $this->rcube->action == 'plugin.markasjunk.junk';
        $uids       = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
        $mbox_name  = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST);
        $messageset = rcmail::get_uids($uids, $mbox_name, $multifolder);
        $dest_mbox  = $is_spam ? $this->spam_mbox : $this->ham_mbox;

        // special case when select all is used, uid is '*', and not in multi folder mode and we are using a driver
        // rcmail::get_uids does not handle this
        if ($uids == '*' && !$multifolder && is_object($this->driver)) {
            $storage      = $this->rcube->get_storage();
            $result_index = $storage->index($mbox_name);
            $messageset   = [$mbox_name => $result_index->get()];
        }

        $result = $is_spam ? $this->_spam($messageset, $dest_mbox) : $this->_ham($messageset, $dest_mbox);
        if ($result) {
            if ($dest_mbox && ($mbox_name !== $dest_mbox || $multifolder)) {
                $this->rcube->output->command('markasjunk_move', $dest_mbox, $this->_messageset_to_uids($messageset, $multifolder));
            }
            else {
                $this->rcube->output->command('command', 'list', $mbox_name);
            }

            $this->rcube->output->command('display_message', $this->gettext($is_spam ? 'reportedasjunk' : 'reportedasnotjunk'), 'confirmation');
        }

        $this->rcube->output->send();
    }

    public function set_flags($p)
    {
        if (!empty($p['message_flags'])) {
            $p['message_flags'] = array_merge((array) $p['message_flags'], $this->flags);
        }
        else {
            $p['message_flags'] = $this->flags;
        }

        return $p;
    }

    private function _spam(&$messageset, $dest_mbox = null)
    {
        $storage = $this->rcube->get_storage();
        $result  = true;

        foreach ($messageset as $source_mbox => &$uids) {
            $storage->set_folder($source_mbox);

            $result = $this->_call_driver('spam', $uids, $source_mbox, $dest_mbox);

            // abort function of the driver says so
            if (!$result) {
                break;
            }

            if ($this->rcube->config->get('markasjunk_read_spam', false)) {
                $storage->set_flag($uids, 'SEEN', $source_mbox);
            }

            if (array_key_exists('JUNK', $this->flags)) {
                $storage->set_flag($uids, 'JUNK', $source_mbox);
            }

            if (array_key_exists('NONJUNK', $this->flags)) {
                $storage->unset_flag($uids, 'NONJUNK', $source_mbox);
            }
        }

        return $result;
    }

    private function _ham(&$messageset, $dest_mbox = null)
    {
        $storage = $this->rcube->get_storage();
        $result  = true;

        foreach ($messageset as $source_mbox => &$uids) {
            $storage->set_folder($source_mbox);

            $result = $this->_call_driver('ham', $uids, $source_mbox, $dest_mbox);

            // abort function of the driver says so
            if (!$result) {
                break;
            }

            if ($this->rcube->config->get('markasjunk_unread_ham', false)) {
                $storage->unset_flag($uids, 'SEEN', $source_mbox);
            }

            if (array_key_exists('JUNK', $this->flags)) {
                $storage->unset_flag($uids, 'JUNK', $source_mbox);
            }

            if (array_key_exists('NONJUNK', $this->flags)) {
                $storage->set_flag($uids, 'NONJUNK', $source_mbox);
            }
        }

        return $result;
    }

    private function _call_driver($action, &$uids = null, $source_mbox = null, $dest_mbox = null)
    {
        // already initialized
        if (!is_object($this->driver)) {
            return true;
        }

        if ($action == 'spam') {
            $this->driver->spam($uids, $source_mbox, $dest_mbox);
        }
        elseif ($action == 'ham') {
            $this->driver->ham($uids, $source_mbox, $dest_mbox);
        }

        return empty($this->driver->is_error);
    }

    private function _messageset_to_uids($messageset, $multifolder)
    {
        $a_uids = [];

        foreach ($messageset as $mbox => $uids) {
            if (is_array($uids)) {
                foreach ($uids as $uid) {
                    $a_uids[] = $multifolder ? $uid . '-' . $mbox : $uid;
                }
            }
        }

        return $a_uids;
    }

    private function _load_host_config()
    {
        $configs = $this->rcube->config->get('markasjunk_host_config');
        if (empty($configs) || !array_key_exists($_SESSION['storage_host'], (array) $configs)) {
            return;
        }

        $file = $configs[$_SESSION['storage_host']];
        $this->load_config($file);
    }

    private function _init_flags()
    {
        $spam_flag = $this->rcube->config->get('markasjunk_spam_flag');
        $ham_flag  = $this->rcube->config->get('markasjunk_ham_flag');

        if ($spam_flag === false) {
            unset($this->flags['JUNK']);
        }
        elseif (!empty($spam_flag)) {
            $this->flags['JUNK'] = $spam_flag;
        }

        if ($ham_flag === false) {
            unset($this->flags['NONJUNK']);
        }
        elseif (!empty($ham_flag)) {
            $this->flags['NONJUNK'] = $ham_flag;
        }

        if (count($this->flags) > 0) {
            // register the ham/spam flags with the core
            $this->add_hook('storage_init', [$this, 'set_flags']);
        }
    }

    private function _init_driver()
    {
        $driver_name = $this->rcube->config->get('markasjunk_learning_driver');

        if (empty($driver_name)) {
            return;
        }

        $driver = $this->home . "/drivers/$driver_name.php";
        $class  = "markasjunk_$driver_name";

        if (!is_readable($driver)) {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "markasjunk plugin: Unable to open driver file $driver"
                ], true, false
            );
        }

        include_once $driver;

        if (!class_exists($class, false) || !method_exists($class, 'spam') || !method_exists($class, 'ham')) {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "markasjunk plugin: Broken driver: $driver"
                ], true, false
            );
        }

        // call the relevant function from the driver
        $this->driver = new $class();

        // method_exists check here for backwards compatibility
        if (method_exists($this->driver, 'init')) {
            $this->driver->init();
        }
    }
}
PKtc�\#3J#��markasjunk/markasjunk.jsnu�[���/**
 * Mark-as-Junk plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 * Copyright (C) Philip Weir
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

rcube_webmail.prototype.markasjunk_mark = function(is_spam) {
    var uids = this.env.uid ? [this.env.uid] : this.message_list.get_selection();
    if (!uids)
        return;

    var lock = this.set_busy(true, 'loading');
    this.http_post('plugin.markasjunk.' + (is_spam ? 'junk' : 'not_junk'), this.selection_post_data({_uid: uids}), lock);
}

rcube_webmail.prototype.markasjunk_move = function(mbox, uids) {
    var prev_uid = this.env.uid;

    if (this.message_list && uids.length == 1 && !this.message_list.in_selection(uids[0]))
        this.env.uid = uids[0];

    if (mbox)
        this.move_messages(mbox);
    else if (this.env.markasjunk_permanently_remove == true)
        this.permanently_remove_messages();
    else
        this.delete_messages();

    this.env.uid = prev_uid;
}

rcube_webmail.prototype.markasjunk_toggle_button = function() {
    var spamobj = $('a.junk'),
        hamobj = $('a.notjunk'),
        disp = {spam: true, ham: true};

    if (this.env.markasjunk_spam_only) {
        disp.ham = false;
    }
    else if (!this.is_multifolder_listing() && this.env.markasjunk_spam_mailbox) {
        if (this.env.mailbox != this.env.markasjunk_spam_mailbox)
            disp.ham = false;
        else
            disp.spam = false;
    }

    // if only 1 button is visible make sure its the last one (for styling)
    // allow for multiple instances of the buttons, eg toolbar and contextmenu
    $.each(spamobj, function(i) {
        var cur_spamobj = spamobj.eq(i),
            cur_hamobj = hamobj.eq(i),
            cur_index = spamobj.eq(i).index();

        if (cur_spamobj.parent('li').length > 0) {
            cur_spamobj = cur_spamobj.parent();
            cur_hamobj = cur_hamobj.parent();
        }

        var evt_rtn = rcmail.triggerEvent('markasjunk-update', {objs: {spamobj: cur_spamobj, hamobj: cur_hamobj}, disp: disp});
        if (evt_rtn && evt_rtn.abort)
            return;

        disp = evt_rtn ? evt_rtn.disp : disp;

        disp.spam ? cur_spamobj.show() : cur_spamobj.hide();
        disp.ham ? cur_hamobj.show() : cur_hamobj.hide();

        if (disp.spam && !disp.ham) {
            if (cur_index < cur_hamobj.index()) {
                cur_spamobj.insertAfter(cur_hamobj);
            }
        }
        else if (cur_index > cur_hamobj.index()) {
            cur_hamobj.insertAfter(cur_spamobj);
        }
    });
}

rcube_webmail.prototype.markasjunk_is_spam_mbox = function() {
    return !this.is_multifolder_listing() && this.env.mailbox == this.env.markasjunk_spam_mailbox;
}

if (window.rcmail) {
    rcmail.addEventListener('init', function() {
        // register command (directly enable in message view mode)
        rcmail.register_command('plugin.markasjunk.junk', function() { rcmail.markasjunk_mark(true); }, !rcmail.markasjunk_is_spam_mbox() && rcmail.env.uid);
        rcmail.register_command('plugin.markasjunk.not_junk', function() { rcmail.markasjunk_mark(false); }, rcmail.env.uid);

        if (rcmail.message_list) {
            rcmail.message_list.addEventListener('select', function(list) {
                rcmail.enable_command('plugin.markasjunk.junk', !rcmail.markasjunk_is_spam_mbox() && list.get_selection(false).length > 0);
                rcmail.enable_command('plugin.markasjunk.not_junk', list.get_selection(false).length > 0);
            });
        }

        // make sure the correct icon is displayed even when there is no listupdate event
        rcmail.markasjunk_toggle_button();
    });

    rcmail.addEventListener('listupdate', function() { rcmail.markasjunk_toggle_button(); });

    rcmail.addEventListener('beforemove', function(mbox) {
        if (mbox && typeof mbox === 'object') {
            mbox = mbox.id;
        }

        if (!mbox) {
            return;
        }

        var is_spam = null;

        // check if destination mbox equals junk box (and we're not already in the junk box)
        if (rcmail.env.markasjunk_move_spam && mbox == rcmail.env.markasjunk_spam_mailbox && mbox != rcmail.env.mailbox)
            is_spam = true;
        // or if destination mbox equals ham box and we are in the junk box
        else if (rcmail.env.markasjunk_move_ham && mbox == rcmail.env.markasjunk_ham_mailbox && rcmail.env.mailbox == rcmail.env.markasjunk_spam_mailbox)
            is_spam = false;

        if (is_spam !== null) {
            rcmail.markasjunk_mark(is_spam);
            return false;
        }
    });
}
PKtc�\����� � markasjunk/config.inc.php.distnu�[���<?php

// Learning driver
// Use an external process such as sa-learn to learn from spam/ham messages. Default: null.
// Please see the README for more information
$config['markasjunk_learning_driver'] = null;

// Ham mailbox
// Mailbox messages should be moved to when they are marked as ham. null = INBOX
// set to FALSE to disable message moving
$config['markasjunk_ham_mbox'] = null;

// Spam mailbox
// Mailbox messages should be moved to when they are marked as spam.
// null = the mailbox assigned as the spam folder in Roundcube settings
// set to FALSE to disable message moving
$config['markasjunk_spam_mbox'] = null;

// Mark messages as read when reporting them as spam
$config['markasjunk_read_spam'] = false;

// Mark messages as unread when reporting them as ham
$config['markasjunk_unread_ham'] = false;

// Add flag to messages marked as spam (flag will be removed when marking as ham)
// If you do not want to use message flags set this to false
$config['markasjunk_spam_flag'] = 'Junk';

// Add flag to messages marked as ham (flag will be removed when marking as spam)
// If you do not want to use message flags set this to false
$config['markasjunk_ham_flag'] = 'NonJunk';

// Write output from spam/ham commands to the log for debug
$config['markasjunk_debug'] = false;

// The mark as spam/ham icon can either be displayed on the toolbar or as part of the mark messages menu.
// Set to False to use Mark menu instead of the toolbar. Default: true.
$config['markasjunk_toolbar'] = true;

// Learn any message moved to the spam mailbox as spam (not just when the button is pressed)
$config['markasjunk_move_spam'] = false;

// Learn any message moved from the spam mailbox to the ham mailbox as ham (not just when the button is pressed)
$config['markasjunk_move_ham'] = false;

// Some drivers create new copies of the target message(s), in this case the original message(s) will be deleted
// Rather than deleting the message(s) (moving to Trash) setting this option true will cause the original message(s) to be permanently removed
$config['markasjunk_permanently_remove'] = false;

// Display only a mark as spam button
$config['markasjunk_spam_only'] = false;

// Activate markasjunk for selected mail hosts only. If this is not set all mail hosts are allowed.
// Example: $config['markasjunk_allowed_hosts'] = ['mail1.domain.tld', 'mail2.domain.tld'];
$config['markasjunk_allowed_hosts'] = null;

// Load specific config for different mail hosts
// Example: $config['markasjunk_host_config'] = [
//    'mail1.domain.tld' => 'mail1_config.inc.php',
//    'mail2.domain.tld' => 'mail2_config.inc.php',
// ];
$config['markasjunk_host_config'] = null;

// cmd_learn Driver options
// ------------------------
// The command used to learn that a message is spam
// The command can contain the following macros that will be expanded as follows:
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username (if the username is an email address)
//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
//      %i is replaced with the email address from the user's default identity
//      %s is replaced with the email address the message is from
//      %f is replaced with the path to the message file
//      %h:<header name> is replaced with the content of that header from the message (lower case) eg: %h:x-dspam-signature
// If you do not want to run the command set this to null
$config['markasjunk_spam_cmd'] = null;

// The command used to learn that a message is ham
// The command can contain the following macros that will be expanded as follows:
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username (if the username is an email address)
//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
//      %i is replaced with the email address from the user's default identity
//      %s is replaced with the email address the message is from
//      %f is replaced with the path to the message file
//      %h:<header name> is replaced with the content of that header from the message (lower case) eg: %h:x-dspam-signature
// If you do not want to run the command set this to null
$config['markasjunk_ham_cmd'] = null;

// dir_learn Driver options
// ------------------------
// The full path of the directory used to store spam (must be writable by webserver)
$config['markasjunk_spam_dir'] = null;

// The full path of the directory used to store ham (must be writable by webserver)
$config['markasjunk_ham_dir'] = null;

// The filename prefix
// The filename can contain the following macros that will be expanded as follows:
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username (if the username is an email address)
//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
//      %t is replaced with the type of message (spam/ham)
$config['markasjunk_filename'] = null;

// email_learn Driver options
// --------------------------
// The email address that spam messages will be sent to
// The address can contain the following macros that will be expanded as follows:
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username (if the username is an email address)
//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
//      %i is replaced with the email address from the user's default identity
// If you do not want to send an email set this to null
$config['markasjunk_email_spam'] = null;

// The email address that ham messages will be sent to
// The address can contain the following macros that will be expanded as follows:
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username (if the username is an email address)
//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
//      %i is replaced with the email address from the user's default identity
// If you do not want to send an email set this to null
$config['markasjunk_email_ham'] = null;

// Should the spam/ham message be sent as an attachment
$config['markasjunk_email_attach'] = true;

// The email subject (when sending as attachment)
// The subject can contain the following macros that will be expanded as follows:
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username (if the username is an email address)
//      %d is replaced with the domain part of the username (if the username is an email address or default mail domain if not)
//      %t is replaced with the type of message (spam/ham)
$config['markasjunk_email_subject'] = 'learn this message as %t';

// sa_blacklist Driver options
// ---------------------------
// Path to SAUserPrefs config file
$config['markasjunk_sauserprefs_config'] = '../sauserprefs/config.inc.php';

// amavis_blacklist Driver options
// ---------------------------
// Path to amacube config file
$config['markasjunk_amacube_config'] = '../amacube/config.inc.php';

// edit_headers Driver options
// ---------------------------
// Patterns to match and replace headers for spam messages
// Replacement method uses preg_replace - http://www.php.net/manual/function.preg-replace.php
// WARNING: Be sure to match the entire header line, including the name of the header, also use ^ and $ and the 'm' flag
// see the README for an example
// TEST CAREFULLY BEFORE USE ON REAL MESSAGES
$config['markasjunk_spam_patterns'] = [
    'patterns'     => [],
    'replacements' => []
];

// Patterns to match and replace headers for spam messages
// Replacement method uses preg_replace - http://www.php.net/manual/function.preg-replace.php
// WARNING: Be sure to match the entire header line, including the name of the header, also use ^ and $ and the 'm' flag
// see the README for an example
// TEST CAREFULLY BEFORE USE ON REAL MESSAGES
$config['markasjunk_ham_patterns'] = [
    'patterns'     => [],
    'replacements' => []
];
PKtc�\�j-��markasjunk/markasjunk.min.jsnu�[���/**
 * Mark-as-Junk plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 * Copyright (C) Philip Weir
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
rcube_webmail.prototype.markasjunk_mark=function(a){var n,e=this.env.uid?[this.env.uid]:this.message_list.get_selection();e&&(n=this.set_busy(!0,"loading"),this.http_post("plugin.markasjunk."+(a?"junk":"not_junk"),this.selection_post_data({_uid:e}),n))},rcube_webmail.prototype.markasjunk_move=function(a,n){var e=this.env.uid;this.message_list&&1==n.length&&!this.message_list.in_selection(n[0])&&(this.env.uid=n[0]),a?this.move_messages(a):1==this.env.markasjunk_permanently_remove?this.permanently_remove_messages():this.delete_messages(),this.env.uid=e},rcube_webmail.prototype.markasjunk_toggle_button=function(){var m=$("a.junk"),s=$("a.notjunk"),t={spam:!0,ham:!0};this.env.markasjunk_spam_only?t.ham=!1:!this.is_multifolder_listing()&&this.env.markasjunk_spam_mailbox&&(this.env.mailbox!=this.env.markasjunk_spam_mailbox?t.ham=!1:t.spam=!1),$.each(m,function(a){var n=m.eq(a),e=s.eq(a),a=m.eq(a).index(),i=(0<n.parent("li").length&&(n=n.parent(),e=e.parent()),rcmail.triggerEvent("markasjunk-update",{objs:{spamobj:n,hamobj:e},disp:t}));i&&i.abort||((t=i?i.disp:t).spam?n.show():n.hide(),t.ham?e.show():e.hide(),t.spam&&!t.ham?a<e.index()&&n.insertAfter(e):a>e.index()&&e.insertAfter(n))})},rcube_webmail.prototype.markasjunk_is_spam_mbox=function(){return!this.is_multifolder_listing()&&this.env.mailbox==this.env.markasjunk_spam_mailbox},window.rcmail&&(rcmail.addEventListener("init",function(){rcmail.register_command("plugin.markasjunk.junk",function(){rcmail.markasjunk_mark(!0)},!rcmail.markasjunk_is_spam_mbox()&&rcmail.env.uid),rcmail.register_command("plugin.markasjunk.not_junk",function(){rcmail.markasjunk_mark(!1)},rcmail.env.uid),rcmail.message_list&&rcmail.message_list.addEventListener("select",function(a){rcmail.enable_command("plugin.markasjunk.junk",!rcmail.markasjunk_is_spam_mbox()&&0<a.get_selection(!1).length),rcmail.enable_command("plugin.markasjunk.not_junk",0<a.get_selection(!1).length)}),rcmail.markasjunk_toggle_button()}),rcmail.addEventListener("listupdate",function(){rcmail.markasjunk_toggle_button()}),rcmail.addEventListener("beforemove",function(a){var n;if(a=a&&"object"==typeof a?a.id:a)return n=null,rcmail.env.markasjunk_move_spam&&a==rcmail.env.markasjunk_spam_mailbox&&a!=rcmail.env.mailbox?n=!0:rcmail.env.markasjunk_move_ham&&a==rcmail.env.markasjunk_ham_mailbox&&rcmail.env.mailbox==rcmail.env.markasjunk_spam_mailbox&&(n=!1),null!==n?(rcmail.markasjunk_mark(n),!1):void 0}));
PKtc�\��_@markasjunk/README.mdnu�[���Roundcube Webmail MarkAsJunk Plugin
===================================
This plugin adds "mark as spam" or "mark as not spam" button to the message
menu.

When not in the Junk mailbox:
  Messages are moved into the Junk mailbox and marked as read

When in the Junk mailbox:
  The buttons are changed to "mark as not spam" or "this message is not spam"
  and the message is moved to the Inbox


License
-------

This plugin is released under the [GNU General Public License Version 3+][gpl].

Even if skins might contain some programming work, they are not considered
as a linked part of the plugin and therefore skins DO NOT fall under the
provisions of the GPL license. See the README file located in the core skins
folder for details on the skin license.


Configuration
-------------

The default config file is plugins/markasjunk/config.inc.php.dist
Rename this to plugins/markasjunk/config.inc.php

All config parameters are optional.


The Learning Driver
-------------------

The learning driver allows you to perform additional processing on each message
marked as spam/ham. A driver must contain a class named markasjunk_{driver
file name}. The class must contain 3 functions:

**spam:** This function should take 2 arguments: an array of UIDs of message(s)
being marked as spam, the name of the mailbox containing those messages

**ham:** This function should take 2 arguments: an array of UIDs of message(s)
being marked as ham, the name of the mailbox containing those messages

**init:** Optional, this function should take 0 arguments. eg: allows drivers
to add JS to the page to control which of the spam/ham options are displayed.
The `jsevents` driver is available to show how to use the JS events.

Several drivers are provided by default they are:

**cmd_learn:** This driver calls an external command (for example salearn) to
process the message

**dir_learn:** This driver places a copy of the message in a predefined folder,
for example to allow for processing later

**email_learn:** This driver emails the message either as an attachment or
directly to a set address. This driver requires Roundcube 1.4 or above.

**sa_blacklist:** This driver adds the sender address of a spam message to the
users blacklist (or whitelist of ham messages) Requires SAUserPrefs plugin

**amavis_blacklist:** This driver adds the sender address of a spam message to
the users blacklist (or whitelist of ham messages) Requires Amacube plugin.
Driver by Der-Jan

**sa_detach:** If the message is a Spamassassin spam report with the original
email attached then this is detached and saved in the Inbox, the spam report is
deleted

**edit_headers:** Edit the message headers. Headers are edited using
preg_replace.

**WARNING:** Be sure to match the entire header line, including the name of the
header, and include the ^ and $ and test carefully before use on real messages.
This driver alters the message source


Running multiple drivers
------------------------

**WARNING:** This is very dangerous please always test carefully. Run multiple
drivers at your own risk! It may be safer to create one driver that does
everything you want.

It is possible to run multiple drivers when marking a message as spam/ham. For
example running sa_blacklist followed by cmd_learn or edit_headers and
cmd_learn. An [example multi-driver][multidriver] is available. This is a
starting point only, it requires modification for individual cases.


Spam learning commands
----------------------

Spamassassin:

```sa-learn --spam --username=%u %f``` or
```sa-learn --spam --prefs-file=/var/mail/%d/%l/.spamassassin/user_prefs %f```


Ham learning commands
---------------------

Spamassassin:

```sa-learn --ham --username=%u %f``` or
```sa-learn --ham --prefs-file=/var/mail/%d/%l/.spamassassin/user_prefs %f```


edit_headers example config
---------------------------

**WARNING:** These are simple examples of how to configure the driver options,
use at your own risk

```php
$config['markasjunk_spam_patterns'] = array(
  'patterns'     => array('/^(Subject:\s*)(.*)$/m'),
  'replacements' => array('$1[SPAM] $2')
);
```

```php
$config['markasjunk_ham_patterns'] = array(
  'patterns'     => array('/^(Subject:\s*)\[SPAM\](.*)$/m'),
  'replacements' => array('$1$2')
);
```

[gpl]: https://www.gnu.org/licenses/gpl.html
[multidriver]: https://gist.github.com/johndoh/8173505
PKtc�\��˺KK"subscriptions_option/composer.jsonnu�[���{
    "name": "roundcube/subscriptions_option",
    "type": "roundcube-plugin",
    "description": "A plugin which can enable or disable the use of imap subscriptions. It includes a toggle on the settings page under \"Server Settings\". The preference can also be locked.",
    "license": "GPL-3.0-or-later",
    "version": "1.4",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Ziba Scott",
            "email": "ziba@umich.edu",
            "role": "Developer"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKtc�\���]]+subscriptions_option/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = '使用 IMAP 订阅';
PKtc�\���}}+subscriptions_option/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Выкарыстоўваць IMAP-падпіскі';
PKtc�\|���ww+subscriptions_option/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Използвай IMAP абонаменти';
PKtc�\򬁝aa+subscriptions_option/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Use IMAP Subscriptions';
PKtc�\�-�aa+subscriptions_option/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Käytä IMAP-tilauksia';
PKtc�\O��aa+subscriptions_option/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Bruk IMAP-abonnementer';
PKtc�\V���__+subscriptions_option/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Përdor Pajtime IMAP';
PKtc�\��/``+subscriptions_option/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Kasuta IMAP tellimusi';
PKtc�\��Ycc+subscriptions_option/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Erabili IMAP harpidetzak';
PKtc�\;�4jj+subscriptions_option/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP abonelikleri kullanılsın';
PKtc�\�)�#ll+subscriptions_option/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar suscripción a carpetas IMAP';
PKtc�\�V��jj(subscriptions_option/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Abonetiyên IMAPê bi kar bîne';
PKtc�\"�tvv+subscriptions_option/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar função de inscrição em pastas IMAP';
PKtc�\0��ss+subscriptions_option/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Izmantot IMAP abonēšanas iestatījumus';
PKtc�\�iqee+subscriptions_option/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Použiť prihlásenia IMAP';
PKtc�\�ݻ�oo+subscriptions_option/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Používat odebírání IMAP složek';
PKtc�\N3�+subscriptions_option/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Використовувати IMAP Підписки';
PKtc�\�>�aa+subscriptions_option/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Brûk IMAP Ynskriuwing';
PKtc�\�պ2ii+subscriptions_option/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Nur abonnierte Ordner anzeigen';
PKtc�\_q
�bb,subscriptions_option/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar suscripciones IMAP';
PKtc�\�"ۛdd(subscriptions_option/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP obunadan foydalanish';
PKtc�\r�
��(subscriptions_option/localization/es.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | plugins/subscriptions_option/localization/<lang>.inc                  |
 |                                                                       |
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/
$labels['useimapsubscriptions']  = 'Usar suscripciones IMAP';
?>
PKtc�\���+subscriptions_option/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Օգտագործել IMAP-ի բաժանորդագրությունները';
PKtc�\򬁝aa+subscriptions_option/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Use IMAP Subscriptions';
PKtc�\H�`]]+subscriptions_option/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = '使用 IMAP 訂閱';
PKtc�\=JS�hh+subscriptions_option/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Fes servir Subscripcions IMAP';
PKtc�\��/�cc(subscriptions_option/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar subscriptiones IMAP';
PKtc�\�M�Oaa+subscriptions_option/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Koristi IMAP pretplate';
PKtc�\�#�yy+subscriptions_option/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Использовать IMAP подписки';
PKtc�\�8��nn+subscriptions_option/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'استفاده از عضویت IMAP';
PKtc�\2�}a__+subscriptions_option/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Nota IMAP-áskriftir';
PKtc�\��Nmm+subscriptions_option/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Đăng ký dùng cách thức IMAP';
PKtc�\q뾹��+subscriptions_option/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'ใช้ IMAP การสมัครสมาชิก';
PKtc�\�T��mm+subscriptions_option/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'استخدم اشتراكات IMAP';
PKtc�\��b�ii+subscriptions_option/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP göndərişi istifadə et';
PKtc�\	�-8aa+subscriptions_option/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Gunakan Langganan IMAP';
PKtc�\�e5�kk+subscriptions_option/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP előfizetések használata.';
PKtc�\uw��bb+subscriptions_option/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Utilizare abonări IMAP';
PKtc�\U53�[[(subscriptions_option/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Uzi IMAP-abonojn';
PKtc�\{nD�hh+subscriptions_option/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Utiliser les abonnements IMAP';
PKtc�\�M�Oaa+subscriptions_option/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Koristi IMAP pretplate';
PKtc�\1\X�cc+subscriptions_option/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Używaj subskrypcji IMAP';
PKtc�\���hh+subscriptions_option/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP 購読リストを使う';
PKtc�\�@�__+subscriptions_option/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Bruk IMAP-abonnement';
PKtc�\Dz�wbb)subscriptions_option/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar soscripciones IMAP';
PKtc�\��uu+subscriptions_option/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Користи ИМАП претплате';
PKtc�\��]ee+subscriptions_option/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP-Abonnementer benotzen';
PKtc�\]����+subscriptions_option/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'از ثبت نام های IMAP استفاده کنید';
PKuc�\Hɽ�ee(subscriptions_option/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Arverañ koumanantoù IMAP';
PKuc�\����tt+subscriptions_option/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Употреби IMAP претплата ';
PKuc�\�b$9tt+subscriptions_option/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'ប្រើ​ការ​ជាង IMAP';
PKuc�\8�n�qq+subscriptions_option/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP захиалга хэрэглэх';
PKuc�\G�gvv+subscriptions_option/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'שימוש ברישום לתיקיות IMAP';
PKuc�\Qx�khh+subscriptions_option/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Bain feidhm as siúntais IMAP';
PKuc�\�PNaa+subscriptions_option/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Brug IMAP abonnementer';
PKuc�\xy$�bb+subscriptions_option/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Uporabi IMAP-naročnino';
PKuc�\
?�Sxx(subscriptions_option/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'أستخدم الإشتراكات عبر IMAP';
PKuc�\�պ2ii+subscriptions_option/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Nur abonnierte Ordner anzeigen';
PKuc�\�ƪ�gg+subscriptions_option/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Använd IMAP-prenumerationer';
PKuc�\q�D{{(subscriptions_option/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP مۇشتەرىلىكىنى ئىشلىتىش';
PKuc�\�cj�]]+subscriptions_option/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP 구독 사용';
PKuc�\���ubb+subscriptions_option/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar subscricións IMAP';
PKuc�\c�~�bb+subscriptions_option/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usa sottoscrizioni IMAP';
PKuc�\_q
�bb+subscriptions_option/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Usar suscripciones IMAP';
PKuc�\$>��+subscriptions_option/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'IMAP വരിസംഖ്യകൾ ഉപയോഗിക്കുക';
PKuc�\ꁟ�dd+subscriptions_option/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Gebruik IMAP-abonneringen';
PKuc�\:_�Ghh+subscriptions_option/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Defnyddio tanysgrifiadau IMAP';
PKuc�\򬁝aa+subscriptions_option/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Use IMAP Subscriptions';
PKuc�\Ր�d``+subscriptions_option/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Brúka IMAP tekningar';
PKuc�\�(��dd+subscriptions_option/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Naudoti IMAP prenumeratas';
PKuc�\
NC�aa+subscriptions_option/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Use subscrições IMAP';
PKuc�\���F+subscriptions_option/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Subscriptions plugin       |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-subscriptions_option/
*/

$labels['useimapsubscriptions']  = 'Χρησιμοποιήστε IMAP Συνδρομές';
PKuc�\se��-subscriptions_option/subscriptions_option.phpnu�[���<?php

/**
 * Subscription Options
 *
 * A plugin which can enable or disable the use of imap subscriptions.
 * It includes a toggle on the settings page under "Server Settings".
 * The preference can also be locked
 *
 * Add it to the plugins list in config.inc.php to enable the user option
 * The user option can be hidden and set globally by adding 'use_subscriptions'
 * to the 'dont_override' configure line:
 * $config['dont_override'] = ['use_subscriptions'];
 * and then set the global preference
 * $config['use_subscriptions'] = true; // or false
 *
 * Roundcube caches folder lists.  When a user changes this option or visits
 * their folder list, this cache is refreshed.  If the option is on the
 * 'dont_override' list and the global option has changed, don't expect
 * to see the change until the folder list cache is refreshed.
 *
 * @author Ziba Scott
 * @license GNU GPLv3+
 */
class subscriptions_option extends rcube_plugin
{
    public $task = 'mail|settings';

    /**
     * Plugin initialization
     */
    function init()
    {
        $dont_override = rcmail::get_instance()->config->get('dont_override', []);

        if (!in_array('use_subscriptions', $dont_override)) {
            $this->add_hook('preferences_list', [$this, 'prefs_list']);
            $this->add_hook('preferences_save', [$this, 'prefs_save']);
        }

        $this->add_hook('storage_folders', [$this, 'mailboxes_list']);
        $this->add_hook('folders_list', [$this, 'folders_list']);
    }

    /**
     * Hook to inject plugin-specific user settings
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function prefs_list($args)
    {
        if ($args['section'] == 'server') {
            $this->add_texts('localization/', false);
            $use_subscriptions = rcmail::get_instance()->config->get('use_subscriptions', true);
            $field_id = 'rcmfd_use_subscriptions';
            $checkbox = new html_checkbox(['name' => '_use_subscriptions', 'id' => $field_id, 'value' => 1]);

            $args['blocks']['main']['options']['use_subscriptions'] = [
                'title'   => html::label($field_id, rcube::Q($this->gettext('useimapsubscriptions'))),
                'content' => $checkbox->show($use_subscriptions ? 1 : 0),
            ];
        }

        return $args;
    }

    /**
     * Hook to save plugin-specific user settings
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function prefs_save($args)
    {
        if ($args['section'] == 'server') {
            $rcmail = rcmail::get_instance();
            $use_subscriptions = $rcmail->config->get('use_subscriptions', true);

            $args['prefs']['use_subscriptions'] = isset($_POST['_use_subscriptions']);

            // if the use_subscriptions preference changes, flush the folder cache
            if (
                ($use_subscriptions && !isset($_POST['_use_subscriptions']))
                || (!$use_subscriptions && isset($_POST['_use_subscriptions']))
            ) {
                $storage = $rcmail->get_storage();
                $storage->clear_cache('mailboxes');
            }
        }

        return $args;
    }

    function mailboxes_list($args)
    {
        $rcmail = rcmail::get_instance();

        if (!$rcmail->config->get('use_subscriptions', true)) {
            $storage = $rcmail->get_storage();

            if ($folders = $storage->list_folders_direct($args['root'], $args['name'])) {
                $folders = array_filter($folders, function($folder) use ($storage) {
                    $attrs = $storage->folder_attributes($folder);
                    return !in_array_nocase('\\Noselect', $attrs);
                });

                $args['folders'] = $folders;
            }
        }

        return $args;
    }

    function folders_list($args)
    {
        $rcmail = rcmail::get_instance();

        if (!$rcmail->config->get('use_subscriptions', true)) {
            foreach ($args['list'] as $idx => $data) {
                $args['list'][$idx]['content'] = preg_replace('/<input [^>]+>/', '', $data['content']);
            }
        }

        return $args;
    }
}
PKuc�\�r`a##vcard_attachments/composer.jsonnu�[���{
    "name": "roundcube/vcard_attachments",
    "type": "roundcube-plugin",
    "description": "Detects vCard attachments and allows to add them to address book. Also allows to attach vCards of your contacts to composed messages",
    "license": "GPL-3.0-or-later",
    "version": "4.2",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKuc�\�A�,,(vcard_attachments/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = '添加 vCard 至地址簿中';
$labels['vcardsavefailed'] = '无法保存 vCard';
$labels['attachvcard'] = '附加 vCard';
$labels['vcardattached'] = '已附加 vCard 文件';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = '转发 ';
PKuc�\�!=���(vcard_attachments/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Дадаць vCard у адрасную кнігу';
$labels['vcardsavefailed'] = 'Немагчыма захаваць vCard';
PKuc�\��09��(vcard_attachments/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Добавяне на vCard към адресната книга';
$labels['vcardsavefailed'] = 'Невъзможен запис на vCard';
$labels['attachvcard'] = 'Прикачване на визитка (vCard)';
$labels['vcardattached'] = 'Прикачен vCard файл.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Препращане на vCard';
$labels['contactsattached'] = 'Към това писмо са прикачени $num контакта.';
$labels['importedsuccessfully'] = 'Успешно импортиране на контактите в адресната книга.';
PKuc�\N>S���(vcard_attachments/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Add vCard to addressbook';
$labels['vcardsavefailed'] = 'Unable to save vCard';
$labels['attachvcard'] = 'Attach vCard';
$labels['vcardattached'] = 'vCard file attached.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Forward vCard';
$labels['contactsattached'] = 'There are $num contacts attached to this message.';
$labels['importedsuccessfully'] = 'Contact(s) imported successfully to the address book.';
PKuc�\��YUEE(vcard_attachments/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Lisää vCard osoitekirjaan';
$labels['vcardsavefailed'] = 'vCardin tallennus epäonnistui';
$labels['attachvcard'] = 'Liitä vCard';
$labels['vcardattached'] = 'vCard-tiedosto lisätty.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Edelleenohjaa vCard';
PKuc�\���CC(vcard_attachments/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Legg til vCard i adresseboken';
$labels['vcardsavefailed'] = 'Ikke i stand til å lagre vCard';
$labels['attachvcard'] = 'Legg til vCard';
$labels['vcardattached'] = 'vCard fil er vedlagt';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Videresend vCard';
PKuc�\��;(vcard_attachments/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Shtoje vCard-in te libër adresash';
$labels['vcardsavefailed'] = 'S’arrihet të ruhet vCard-i';
$labels['attachvcard'] = 'Bashkëngjitni vCard';
$labels['vcardattached'] = 'Kartela vCard u bashkëngjit.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Përcille vCard-in';
$labels['contactsattached'] = 'Ka $num kontakte bashkëngjitur këtij mesazhi.';
$labels['importedsuccessfully'] = 'Kontakti(ets) u importua me sukses te libri i adresave.';
PKuc�\J�(vcard_attachments/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Lisa vCard aadressiraamatusse';
$labels['vcardsavefailed'] = 'vCard salvestamine nurjus';
$labels['vcardattached'] = 'vCard fail on lisatud.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Edasta vCard';
PKuc�\�����(vcard_attachments/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Gehitu vCard helbide-liburura';
$labels['vcardsavefailed'] = 'Ezin da vCard gorde';
$labels['attachvcard'] = 'Erantsi vCard';
$labels['vcardattached'] = 'vCard fitxategia erantsia';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Birbidali vCard';
$labels['contactsattached'] = 'Badira $num kontaktu mezu honi erantsita';
$labels['importedsuccessfully'] = 'Kontaktua(k) behar bezala inportatu d(ir)a helbide-liburura';
PKuc�\�z��(vcard_attachments/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Adres defterine vCard ekle';
$labels['vcardsavefailed'] = 'vCard kaydedilemedi';
$labels['attachvcard'] = 'vCard ekle';
$labels['vcardattached'] = 'vCard dosyası eklendi.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'vCard dosyasını ilet';
$labels['contactsattached'] = 'Bu iletiye eklenmiş $num kişi var.';
$labels['importedsuccessfully'] = 'Kişi(ler) adres defteri içine aktarıldı.';
PKuc�\t@��(vcard_attachments/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Agregar vCard a la libreta de direcciones';
$labels['vcardsavefailed'] = 'Imposible guardar vCard';
$labels['attachvcard'] = 'Adjuntar vCard';
$labels['vcardattached'] = 'Adjunto archivo vCard.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Reenviar vCard';
$labels['contactsattached'] = 'Existen $num contactos adjuntos a este mensaje.';
$labels['importedsuccessfully'] = 'Contacto(s) agregado(s) correctamente a la libreta de direcciones.';
PKuc�\S8N���%vcard_attachments/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCardê tevî deftera navnîşanan bike';
$labels['vcardsavefailed'] = 'Tomarkirina vCard betal bike';
PKuc�\�$��(vcard_attachments/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Adicionar o vCard ao Catálogo de Endereços';
$labels['vcardsavefailed'] = 'Impossível salvar o vCard';
$labels['attachvcard'] = 'Anexar vCard';
$labels['vcardattached'] = 'vCard anexado.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Encaminhar vCard';
$labels['contactsattached'] = 'Existem $num contatos anexados a esta mensagem. ';
$labels['importedsuccessfully'] = 'Contato(s) importado(s) com sucesso para o livro de endereços.';
PKuc�\�ͫb��(vcard_attachments/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Pievienot vizītkarti adrešu grāmatai';
$labels['vcardsavefailed'] = 'Nevarēja saglabāt vizītkarti';
$labels['attachvcard'] = 'Pievienot vCard';
$labels['vcardattached'] = 'vCard fails pievienots.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Pārsūtīt vCard';
$labels['contactsattached'] = 'Šim ziņojumam ir pievienoti $num kontakti.';
$labels['importedsuccessfully'] = 'Kontakti veiksmīgi ieimportēti adrešu grāmatā.';
PKuc�\�J��(vcard_attachments/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Pridať vizitku vCard do adresára';
$labels['vcardsavefailed'] = 'Vizitku vCard nemožno uložiť';
$labels['attachvcard'] = 'Pripojiť vizitku vCard';
$labels['vcardattached'] = 'Súbor vCard bol pripojený.';
$labels['vcard'] = 'Vizitka vCard';
$labels['forwardvcard'] = 'Preposlať vCard';
$labels['contactsattached'] = 'K tejto správe sú pripojené kontakty v počte: $num.';
$labels['importedsuccessfully'] = 'Kontakty boli úspešne importované do adresára.';
PKuc�\�?5��(vcard_attachments/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Přidat vCard do adresáře';
$labels['vcardsavefailed'] = 'Nelze uložit vCard';
$labels['attachvcard'] = 'Připojit vCard';
$labels['vcardattached'] = 'vCard soubor připojen.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Přeposlat vCard';
$labels['contactsattached'] = 'K této zprávě je připojeno $num kontaktů.';
$labels['importedsuccessfully'] = 'Kontakty byly naimportovány do adresáře.';
PKuc�\��N���(vcard_attachments/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Додати vCard до контактів';
$labels['vcardsavefailed'] = 'Не вдалось зберегти vCard';
PKuc�\E�f��(vcard_attachments/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCard oan adresboek tafoegje';
$labels['vcardsavefailed'] = 'Koe vCard net bewarje';
$labels['attachvcard'] = 'vCard taheakje';
$labels['vcard'] = 'vCard';
PKuc�\8(��

(vcard_attachments/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Kontakt im Adressbuch speichern';
$labels['vcardsavefailed'] = 'Der Kontakt konnte nicht gespeichert werden';
$labels['attachvcard'] = 'Als vCard anhängen';
$labels['vcardattached'] = 'vCard-Datei angehängt.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Kontakt weiterleiten';
$labels['contactsattached'] = 'Es sind $num Kontakte an diese Nachricht angehängt.';
$labels['importedsuccessfully'] = 'Kontakt(e) erfolgreich in das Adressbuch importiert.';
PKuc�\��8-��)vcard_attachments/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Agregar vCard a la libreta de direcciones';
$labels['vcardsavefailed'] = 'No se puede guardar la vCard';
PKuc�\J����%vcard_attachments/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCardni manzillar kitobiga qo‘shing';
$labels['vcardsavefailed'] = 'vCardni saqlash amalga oshirilmadi';
$labels['attachvcard'] = 'vCard ni biriktirish';
$labels['vcard'] = 'vCard';
PKuc�\ġ����(vcard_attachments/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Ավելացնել vCard-ը հասցեագրքում';
$labels['vcardsavefailed'] = 'vCard-ի պահպանումը ձախողվեց';
PKuc�\���j��(vcard_attachments/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Add vCard to addressbook';
$labels['vcardsavefailed'] = 'Unable to save vCard';
PKuc�\�_�I11(vcard_attachments/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = '將 vCard 加入通訊錄';
$labels['vcardsavefailed'] = '無法儲存 vCard';
$labels['attachvcard'] = '附上 vCard';
$labels['vcardattached'] = '已附上 vCard 檔案。';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = '轉寄 vCard';
PKuc�\��c

(vcard_attachments/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Afegeix la vCard a la llibreta d\'adreces';
$labels['vcardsavefailed'] = 'No s\'ha pogut desar la vCard';
$labels['attachvcard'] = 'Adjunta la vCard';
$labels['vcardattached'] = 'Fitxer vCard adjunt.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Reenvia vCard';
$labels['contactsattached'] = 'Hi ha $num contactes adjunts a aquest missatge.';
$labels['importedsuccessfully'] = 'El(s) contacte(s) s\'ha(n) importat correctament a la llibreta d\'adreces.';
PKuc�\�)z��%vcard_attachments/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Adder le vCard al adressario';
$labels['vcardsavefailed'] = 'Impossibile salveguardar le vCard';
$labels['attachvcard'] = 'Attachar vCard';
$labels['vcard'] = 'vCard';
PKuc�\��QK��(vcard_attachments/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Dodaj vCard u adresar';
$labels['vcardsavefailed'] = 'Nije moguće sačuvati vCard';
PKuc�\o��3__(vcard_attachments/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Добавить в контакты';
$labels['vcardsavefailed'] = 'Не удалось сохранить vCard';
$labels['attachvcard'] = 'Вложить vCard';
$labels['vcardattached'] = 'Вложенный vCard';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Переслать vCard';
$labels['contactsattached'] = 'К этому сообщению прикреплено $num контактов.';
$labels['importedsuccessfully'] = 'Контакт(ы) успешно импортирован(ы) в адресную книгу.';
PKuc�\����(vcard_attachments/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'افزودن vCard به دفترچه نشانی';
$labels['vcardsavefailed'] = 'ناتوان در ذخیره vCard';
PKuc�\蹃t��(vcard_attachments/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Bæta vCard í nafnaskrá';
$labels['vcardsavefailed'] = 'Tekst ekki að vista vCard';
$labels['attachvcard'] = 'Hengja við vCard';
$labels['vcardattached'] = 'vCard-skrá í viðhengi.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Áframsenda vCard';
$labels['contactsattached'] = 'Það eru $num tengiliðir tengdir þessum skilaboðum.';
$labels['importedsuccessfully'] = 'Tókst að flytja tengiliði inn í nafnaskrána.';
PKuc�\�j���(vcard_attachments/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Thêm vCard vào sổ địa chỉ';
$labels['vcardsavefailed'] = 'Không thể lưu vCard';
PKuc�\��a���(vcard_attachments/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Add vCard to addressbook';
$labels['vcardsavefailed'] = 'Unable to save vCard';
$labels['attachvcard'] = 'Attach vCard';
$labels['vcard'] = 'vCard';
PKuc�\�k J��(vcard_attachments/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'إضافة صيغة vCard إلى دفتر العناوين';
$labels['vcardsavefailed'] = 'غير قادر على الحفظ بصيغة vCard';
$labels['attachvcard'] = 'إرفاق vCard';
$labels['vcardattached'] = 'تم إرفاق ملف vCard.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'إعادة توجيه vCard';
$labels['contactsattached'] = 'هناك $num من جهات الاتصال المرفقة بهذه الرسالة.';
$labels['importedsuccessfully'] = 'تم استيراد جهة (جهات) الاتصال بنجاح إلى دفتر العناوين.';
PKuc�\f�j��(vcard_attachments/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCard-ı kontakta daxil et';
$labels['vcardsavefailed'] = 'vCard-ı saxlamaq alınmadı';
PKuc�\Z����(vcard_attachments/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Tambahkan vCard ke buku alamat';
$labels['vcardsavefailed'] = 'Tidak dapat menyimpan vCard';
$labels['attachvcard'] = 'Lampirkan vCard';
$labels['vcard'] = 'vCard';
PKuc�\��X��(vcard_attachments/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCard hozzáadása a címjegyzékhez';
$labels['vcardsavefailed'] = 'A vCard mentése nem lehetséges';
$labels['attachvcard'] = 'vCard csatolása';
$labels['vcardattached'] = 'vCard csatolva.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'vCard továbbítása';
$labels['contactsattached'] = 'Az üzenethez $num kapcsolat tartozik.';
$labels['importedsuccessfully'] = 'A kapcsolat(ok) sikeresen importálodtak a címjegyzékbe.';
PKuc�\Q�#��(vcard_attachments/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Adaugă vCard la agendă';
$labels['vcardsavefailed'] = 'Nu pot salva vCard';
$labels['attachvcard'] = 'Atașează vCard';
$labels['vcard'] = 'vCard';
PKuc�\��}ό�%vcard_attachments/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Aldoni vCard al adresaro';
$labels['vcardsavefailed'] = 'vCard ne konserveblas';
PKuc�\�e�1(vcard_attachments/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Ajouter la vCard au carnet d’adresses';
$labels['vcardsavefailed'] = 'Impossible d’enregistrer la vCard';
$labels['attachvcard'] = 'Joindre la vCard';
$labels['vcardattached'] = 'Le fichier vCard a été joint.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Transférer la vCard';
$labels['contactsattached'] = '$num contacts sont joints à ce message.';
$labels['importedsuccessfully'] = 'Les contacts ont été importés avec succès au carnet d’adresses.';
PKuc�\��88(vcard_attachments/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Dodaj vCard u imenik';
$labels['vcardsavefailed'] = 'Ne mogu pohraniti vCard';
$labels['attachvcard'] = 'Priloži vCard';
$labels['vcardattached'] = 'vCard datoteka priložena.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Proslijedi vCard';
PKuc�\c��(vcard_attachments/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Dodaj wizytówkę (vCard) do kontaktów';
$labels['vcardsavefailed'] = 'Nie można zapisać wizytówki (vCard)';
$labels['attachvcard'] = 'Dołącz plik vCard';
$labels['vcardattached'] = 'Załączono plik vCard.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Prześlij vCard.';
$labels['contactsattached'] = 'Ta wiadomość posiada $num załączone kontakty.';
$labels['importedsuccessfully'] = 'Kontakt(y) zostały zaimportowane do książki adresowej.';
PKuc�\�}�(vcard_attachments/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'व्हीकार्ड पत्ते नोंदवहीत समाविष्ट करा';
$labels['vcardsavefailed'] = 'व्हीकार्ड जतन करण्यास असमर्थ';
PKuc�\@w�2(vcard_attachments/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCardをアドレス帳に追加';
$labels['vcardsavefailed'] = 'vCardを保存できませんでした。';
$labels['attachvcard'] = 'vCardを添付';
$labels['vcardattached'] = 'vCardが添付。';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'vCardを転送';
$labels['contactsattached'] = 'このメッセージには、$num 個の連絡先が添付してあります。';
$labels['importedsuccessfully'] = 'アドレス帳に連絡先を取り込みました。';
PKuc�\:�(vcard_attachments/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Legg til vCard i adresseboka';
$labels['vcardsavefailed'] = 'Klarte ikkje lagra vCard';
PKuc�\I�;F��&vcard_attachments/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Amestar vCard a la llibreta de direiciones';
$labels['vcardsavefailed'] = 'Nun pue guardase la vCard';
PKuc�\���A��(vcard_attachments/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Додај в-картицу у адресар';
$labels['vcardsavefailed'] = 'Не могу да сачувам в-картицу';
PKuc�\N�I��(vcard_attachments/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCard an d\'Adressbuch setzen';
$labels['vcardsavefailed'] = 'vCard kann net gespäichert ginn';
PKuc�\����%vcard_attachments/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Ouzhpennañ ar vCard d\'ar c\'harned chomlec\'hioù';
$labels['vcardsavefailed'] = 'N\'haller ket enrollañ ar vCard';
PKuc�\�O���(vcard_attachments/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Додади виртуелна бизнис картичка во адресната книга ';
$labels['vcardsavefailed'] = 'Не може да се сочува виртуелна бизнис картичка';
$labels['attachvcard'] = 'Прикачи виртуелна бизнис картичка';
$labels['vcard'] = 'Виртуелна бизнис картичка';
PKuc�\R����(vcard_attachments/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'បន្ថែម vCard ទៅ​សៀវភៅ​អាសយដ្ឋាន';
$labels['vcardsavefailed'] = 'មិន​អាច​រក្សាទុក vCard';
PKuc�\��}��(vcard_attachments/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Хаягийн дэвтэрт vCard нэмэх';
$labels['vcardsavefailed'] = 'vCard хадгалж чадахгүй байна';
PKuc�\/0A���(vcard_attachments/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'הוספת כרטיס ביקור בפורמט vCard לספר הכתובות';
$labels['vcardsavefailed'] = 'לא ניתן לשמור את כרטיס הביקור  vCard';
$labels['attachvcard'] = 'צרפ/י קובץ חתימה (vCard)';
$labels['vcardattached'] = 'צורף קובץ vCard';
$labels['vcard'] = 'קובץ חתימה (vCard)';
$labels['forwardvcard'] = 'העברה של כרטיס ביקור';
$labels['contactsattached'] = 'להודעה זו קשורים num$ אנשי קשר';
$labels['importedsuccessfully'] = 'אנשי קשר יובאו בהצלחה לפנקס הכתובות';
PKuc�\�n!�hh(vcard_attachments/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Cuir vCard leis an leabhar seoltaí';
$labels['vcardsavefailed'] = 'Ní féidir an vCard a chur i dtaisce';
$labels['attachvcard'] = 'Ceangail vCard leis';
$labels['vcardattached'] = 'Tá comhad vCard ceangailte leis.';
$labels['vcard'] = 'vCárta';
$labels['forwardvcard'] = 'Cuir vCard ar aghaidh';
PKuc�\���??(vcard_attachments/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Tilføj vCard til adressebogen';
$labels['vcardsavefailed'] = 'Kan ikke gemme dette vCard';
$labels['attachvcard'] = 'Tilføj vCard';
$labels['vcardattached'] = 'vCard fil vedhæftet.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Videresend vCard';
PKuc�\��`7��(vcard_attachments/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Dodaj vCard med Stike.';
$labels['vcardsavefailed'] = 'Stika vCard ni bilo mogoče shraniti.';
$labels['attachvcard'] = 'Pripni vCard';
$labels['vcard'] = 'vCard';
PKuc�\�k݇�%vcard_attachments/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'إضافة vCard إلى دفتر العناوين';
$labels['vcardsavefailed'] = 'غير قادر على حفظ بصيغة vCard';
$labels['attachvcard'] = 'إرفاق vCard';
$labels['vcardattached'] = 'تم إرفاق ملف بطاقة vCard.';
$labels['vcard'] = 'بطاقة vCard';
$labels['forwardvcard'] = 'تحويل vCard';
PKuc�\.�����(vcard_attachments/localization/si_LK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'vCard පත ලිපින පොතට එක් කරන්න';
$labels['vcardsavefailed'] = 'vCard පත සුරැකීම අසාර්ථකයි';
PKuc�\L��WW(vcard_attachments/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Kontakt im Adressbuch speichern';
$labels['vcardsavefailed'] = 'Der Kontakt konnte nicht gespeichert werden';
$labels['attachvcard'] = 'vCard anhängen';
$labels['vcardattached'] = 'vCard-Datei angehängt.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'vCard weiterleiten';
PKuc�\&��$��(vcard_attachments/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Lägg till vCard i adressbok';
$labels['vcardsavefailed'] = 'Kunde inte spara vCard';
$labels['attachvcard'] = 'Bifoga vCard';
$labels['vcardattached'] = 'vCard-fil bifogad.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Skicka vidare vCard';
$labels['contactsattached'] = 'Meddelandet har $num bifogade kontakter.';
$labels['importedsuccessfully'] = 'Importen av kontakter till adressboken lyckades.';
PKuc�\����%vcard_attachments/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'ۋكارتىسىنى ئادىرىس دەپتىرىگە قۇشۇش';
$labels['vcardsavefailed'] = 'ۋكارتىسىنى ساقلىغىلى بولمىدى';
$labels['attachvcard'] = 'ۋكارتىسى قىستۇرۇش';
$labels['vcardattached'] = 'ۋكارتىسى ھۆججىتى قىستۇرۇلدى.';
$labels['vcard'] = 'ۋكارتىسى';
$labels['forwardvcard'] = 'ۋكارتىسىنى يەتكۈزۈش';
$labels['contactsattached'] = 'بۇ خەتكە num$ تۇنۇش قىستۇرۇلدى.';
$labels['importedsuccessfully'] = 'تۇنۇش(لار) ئادىرىس دەپتىرىگە مۇۋاپىقىيەتلىك كىرگۈزۈلدى.';
PKuc�\��?(vcard_attachments/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = '주소록에 vCard 추가';
$labels['vcardsavefailed'] = 'vCard를 저장할 수 없음';
$labels['attachvcard'] = 'vCard 첨부';
$labels['vcardattached'] = 'vCard 파일을 첨부했습니다.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'vCard 전달';
$labels['contactsattached'] = '이 메시지에 첨부된 $num개의 연락처가 있습니다.';
$labels['importedsuccessfully'] = '연락처를 주소록에 성공적으로 가져왔습니다.';
PKuc�\�����(vcard_attachments/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Engadir vCard á Axenda de enderezos';
$labels['vcardsavefailed'] = 'Non foi posíbel gardar a vCard';
PKuc�\�P����(vcard_attachments/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Aggiungi vCard alla rubrica';
$labels['vcardsavefailed'] = 'Impossibile salvare vCard';
$labels['attachvcard'] = 'Allega vCard';
$labels['vcardattached'] = 'File vCard allegato.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Inoltra vCard';
$labels['contactsattached'] = 'Ci sono $num contatti allegati a questo messaggio.';
$labels['importedsuccessfully'] = 'Contatto/i importato/i correttamente nella rubrica.';
PKuc�\�KK�(vcard_attachments/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Añadir tarjeta vCard a la libreta de direcciones';
$labels['vcardsavefailed'] = 'No se pudo guardar la tarjeta vCard';
$labels['attachvcard'] = 'Adjuntar vCard';
$labels['vcardattached'] = 'Adjunto archivo vCard.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Reenviar vCard';
$labels['contactsattached'] = 'Existen $num contactos adjuntos a este mensaje.';
$labels['importedsuccessfully'] = 'Contacto(s) agregados correctamente a la libreta de direcciones.';
PKuc�\e2��88(vcard_attachments/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'വിലാസപുസ്തകത്തിലേക്ക് വികാര്‍ഡ് ചേര്‍ക്കുക';
$labels['vcardsavefailed'] = 'വികാര്‍ഡ് ചേര്‍ക്കാന്‍ പറ്റിയില്ല';
PKuc�\T���(vcard_attachments/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Voeg vCard toe aan adresboek';
$labels['vcardsavefailed'] = 'Kan vCard niet opslaan';
$labels['attachvcard'] = 'vCard toevoegen';
$labels['vcardattached'] = 'vCard bijgevoegd';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'vCard doorsturen';
$labels['importedsuccessfully'] = 'Contact(en) succesvol geïmporteerd naar het adresboek.';
PKuc�\��AG��(vcard_attachments/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Ychwanegu vCard i\'r llyfr cyfeiriadau';
$labels['vcardsavefailed'] = 'Methwyd cadw\'r vCard';
$labels['attachvcard'] = 'Atodi vCard';
$labels['vcardattached'] = 'Atodwyd ffeil vCard';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Danfon vCard ymlaen';
$labels['contactsattached'] = 'Mae $num cyswllt ynghlwm a\'r neges hon.';
$labels['importedsuccessfully'] = 'Cyswllt/cysylltiadau wedi ei mewnforio i\'r llyfr cyfeiriadau yn llwyddiannus.';
PKuc�\�ʒ��(vcard_attachments/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Add vCard to addressbook';
$labels['vcardsavefailed'] = 'Unable to save vCard';
$labels['attachvcard'] = 'Attach vCard';
$labels['vcardattached'] = 'vCard file attached.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Forward vCard';
$labels['contactsattached'] = 'There are $num contacts attached to this message.';
$labels['importedsuccessfully'] = 'Contact(s) imported successfully';
PKuc�\\�8Y@@(vcard_attachments/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Legg vCard til búðstaðar savn';
$labels['vcardsavefailed'] = 'Kann ikki goyma vCard';
$labels['attachvcard'] = 'Viðlegg vCard';
$labels['vcardattached'] = 'vCard fíla viðløgd';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Send vCard víðari';
PKuc�\���__(vcard_attachments/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Įtraukti vizitinę kortelę į adresų knygą';
$labels['vcardsavefailed'] = 'Įrašyti vizitinės kortelės nepavyko';
$labels['attachvcard'] = 'Pridėti vCard';
$labels['vcardattached'] = 'vCard failas pridėtas.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Persiųsti vCard';
PKuc�\~^Z

(vcard_attachments/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Adicionar o vCard ao Livro de Endereços';
$labels['vcardsavefailed'] = 'Não foi possível guardar o vCard';
$labels['attachvcard'] = 'Anexar vCard';
$labels['vcardattached'] = 'Ficheiro vCard anexado.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Reencaminhar vCard';
$labels['contactsattached'] = 'Existem $num contactos anexados a esta mensagem. ';
$labels['importedsuccessfully'] = 'Contacto(s) importado(s) com sucesso para o livro de endereços.';
PKuc�\!����(vcard_attachments/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Vcard Attachments plugin   |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-vcard_attachments/
*/

$labels['addvcardmsg'] = 'Προσθήκη vCard στο βιβλίο διευθύνσεων';
$labels['vcardsavefailed'] = 'Δεν είναι δυνατή η αποθήκευση του vCard';
$labels['attachvcard'] = 'Επισύναψη vCard';
$labels['vcardattached'] = 'Το αρχείο vCard επισυναφθηκε.';
$labels['vcard'] = 'vCard';
$labels['forwardvcard'] = 'Προώθηση vCard';
$labels['contactsattached'] = '$num επαφές επισυνάπτονται σε αυτό το μήνυμα.';
$labels['importedsuccessfully'] = 'Η εισαγωγή επαφών ολοκληρώθηκε με επιτυχία.';
PKuc�\�5�=�� vcard_attachments/vcardattach.jsnu�[���/**
 * vcard_attachments plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

function plugin_vcard_import(mime_id)
{
  if (!mime_id) {
    var content = [];

    $.each(rcmail.env.vcards, function (id, contact) {
      var chbox = $('<input>').attr({type: 'checkbox', value: id, checked: true, 'class': 'pretty-checkbox'}),
        label = $('<label>').text(' ' + contact);

      content.push($('<div>').append(label.prepend(chbox)));
    });

    var dialog,
      action = function(e, a) {
        var contacts = []

        dialog.find('input:checked').each(function() {
          contacts.push(this.value);
        });

        if (contacts.length) {
          plugin_vcard_import(contacts.join());
          return true; // close the dialog
        }
      },
      props = {
        button: 'import',
        height: content.length > 4 ? 250 : 100
      };

    dialog = rcmail.simple_dialog(content, 'vcard_attachments.addvcardmsg', action, props);

    return false;
  }

  rcmail.http_post(
    'plugin.savevcard',
    { _uid: rcmail.env.uid, _mbox: rcmail.env.mailbox, _part: mime_id },
    rcmail.set_busy(true, 'loading')
  );

  return false;
}

function plugin_vcard_insertrow(data)
{
  if (data.row.ctype.match(/^(text\/vcard|text\/x-vcard|text\/directory)$/i)) {
    $(data.row.obj).find('.attachment > .attachment').addClass('vcard');
  }
}

function plugin_vcard_attach()
{
  var id, n, contacts = [],
    ts = new Date().getTime(),
    args = {_uploadid: ts, _id: rcmail.env.compose_id || null},
    selection = rcmail.contact_list.get_selection();

  for (n=0; n < selection.length; n++) {
    if (rcmail.env.task == 'addressbook') {
      id = selection[n];
      contacts.push(rcmail.env.source + '-' + id + '-0');
    }
    else {
      id = selection[n];
      if (id && id.charAt(0) != 'E' && rcmail.env.contactdata[id])
        contacts.push(id);
    }
  }

  if (!contacts.length)
    return false;

  args._uri = 'vcard://' + contacts.join(',');

  if (rcmail.env.task == 'addressbook') {
      args._attach_vcard = 1;
      rcmail.open_compose_step(args);
  }
  else {
    // add to attachments list
    if (!rcmail.add2attachment_list(ts, {name: '', html: rcmail.get_label('attaching'), classname: 'uploading', complete: false}))
      rcmail.file_upload_id = rcmail.set_busy(true, 'attaching');

    rcmail.http_post('upload', args);
  }
}

window.rcmail && rcmail.addEventListener('init', function(evt) {
  if (rcmail.gui_objects.messagelist)
    rcmail.addEventListener('insertrow', function(data, evt) { plugin_vcard_insertrow(data); });

  if ((rcmail.env.action == 'compose' || (rcmail.env.task == 'addressbook' && rcmail.env.action == '')) && rcmail.gui_objects.contactslist) {
    if (rcmail.env.action == 'compose') {
      rcmail.env.compose_commands.push('attach-vcard');

      // Elastic: add "Attach vCard" button to the attachments widget
      if (window.UI && UI.recipient_selector) {
        var button, form = $('#compose-attachments > div');
        button = $('<button class="btn btn-secondary attach vcard">')
          .attr({type: 'button', tabindex: $('button,input', form).first().attr('tabindex') || 0})
          .text(rcmail.gettext('vcard_attachments.attachvcard'))
          .appendTo(form)
          .click(function() {
            UI.recipient_selector('', {
              title: 'vcard_attachments.attachvcard',
              button: 'vcard_attachments.attachvcard',
              button_class: 'attach',
              focus: button,
              multiselect: false,
              action: function() { rcmail.command('attach-vcard'); }
            });
          });
      }
    }

    rcmail.register_command('attach-vcard', function() { plugin_vcard_attach(); });
    rcmail.contact_list.addEventListener('select', function(list) {
      // TODO: support attaching more than one at once
      var selection = list.get_selection();
      rcmail.enable_command('attach-vcard', selection.length == 1 && selection[0].charAt(0) != 'E');
    });
  }
});
PKuc�\ϰ��7�7'vcard_attachments/vcard_attachments.phpnu�[���<?php

/**
 * Detects VCard attachments and show a button to add them to address book
 * Adds possibility to attach a contact vcard to mail messages
 *
 * @license GNU GPLv3+
 * @author Thomas Bruederli, Aleksander Machniak
 */
class vcard_attachments extends rcube_plugin
{
    public $task = 'mail|addressbook';

    private $abook;
    private $message;
    private $vcard_parts  = [];
    private $vcard_bodies = [];

    /**
     * Plugin initialization
     */
    function init()
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->task == 'addressbook') {
            $this->add_texts('localization', !$rcmail->output->ajax_call);
            $this->include_stylesheet($this->local_skin_path() . '/style.css');
            $this->include_script('vcardattach.js');
            $this->add_button([
                    'type'     => 'link-menuitem',
                    'label'    => 'vcard_attachments.forwardvcard',
                    'command'  => 'attach-vcard',
                    'class'    => 'icon vcard',
                    'classact' => 'icon vcard active',
                    'innerclass' => 'icon vcard',
                ],
                'contactmenu'
            );
        }
        else {
            if ($rcmail->action == 'show' || $rcmail->action == 'preview') {
                $this->add_hook('message_load', [$this, 'message_load']);
                $this->add_hook('message_objects', [$this, 'message_objects']);
                $this->add_hook('template_object_messagebody', [$this, 'html_output']);
            }
            else if ($rcmail->action == 'upload') {
                $this->add_hook('attachment_from_uri', [$this, 'attach_vcard']);
            }
            else if ($rcmail->action == 'compose' && !$rcmail->output->framed) {
                $this->add_texts('localization', true);
                $this->include_stylesheet($this->local_skin_path() . '/style.css');
                $this->include_script('vcardattach.js');
                $this->add_button([
                        'type'     => 'link',
                        'label'    => 'vcard_attachments.vcard',
                        'command'  => 'attach-vcard',
                        'class'    => 'listbutton vcard disabled',
                        'classact' => 'listbutton vcard',
                        'title'    => 'vcard_attachments.attachvcard',
                        'innerclass' => 'inner',
                    ],
                    'compose-contacts-toolbar'
                );

                $this->add_hook('message_compose', [$this, 'message_compose']);
            }
            else if (!$rcmail->output->framed && (!$rcmail->action || $rcmail->action == 'list')) {
                $this->include_stylesheet($this->local_skin_path() . '/style.css');
                $this->include_script('vcardattach.js');
            }
        }

        $this->register_action('plugin.savevcard', [$this, 'save_vcard']);
    }

    /**
     * Check message bodies and attachments for vcards
     */
    function message_load($p)
    {
        $this->message = $p['object'];

        // handle attachments vcard attachments
        foreach ((array) $this->message->attachments as $attachment) {
            if ($this->is_vcard($attachment)) {
                $this->vcard_parts[] = $attachment->mime_id;
            }
        }
        // the same with message bodies
        foreach ((array) $this->message->parts as $part) {
            if ($this->is_vcard($part)) {
                $this->vcard_parts[]  = $part->mime_id;
                $this->vcard_bodies[] = $part->mime_id;
            }
        }

        if ($this->vcard_parts) {
            $this->add_texts('localization');
        }
    }

    /**
     * This callback function adds a box above the message content
     * if there is a vcard attachment available
     */
    function message_objects($p)
    {
        $rcmail   = rcmail::get_instance();
        $contacts = [];

        foreach ($this->vcard_parts as $part) {
            $vcards = rcube_vcard::import($this->message->get_part_content($part, null, true));

            foreach ($vcards as $idx => $vcard) {
                // skip invalid vCards
                if (empty($vcard->email) || empty($vcard->email[0])) {
                    continue;
                }

                $contacts["$part:$idx"] = "{$vcard->displayname} <{$vcard->email[0]}>";
            }
        }

        if (!empty($contacts)) {
            $attr = [
                'title' => $this->gettext('addvcardmsg'),
                'class' => 'import btn-sm',
            ];

            if (count($contacts) == 1) {
                $display         = array_first($contacts);
                $attr['onclick'] = "return plugin_vcard_import('" . rcube::JQ(key($contacts)) . "')";
            }
            else {
                $display         = $this->gettext(['name' => 'contactsattached', 'vars' => ['num' => count($contacts)]]);
                $attr['onclick'] = "return plugin_vcard_import()";

                $rcmail->output->set_env('vcards', $contacts);
                $rcmail->output->add_label('vcard_attachments.addvcardmsg', 'import');
            }

            // add box below the message body
            $p['content'][] = html::p(
                ['class' => 'vcardattachment aligned-buttons boxinformation'],
                html::span(null, rcube::Q($display)) . html::tag('button', $attr, rcube::Q($rcmail->gettext('import')))
            );

            $this->include_script('vcardattach.js');
            $this->include_stylesheet($this->local_skin_path() . '/style.css');
        }

        return $p;
    }

    /**
     * This callback function adds a vCard to the message when attached from the Address book
     */
    function message_compose($p)
    {
        if (
            rcube_utils::get_input_string('_attach_vcard', rcube_utils::INPUT_GET) == '1'
            && ($uri = rcube_utils::get_input_string('_uri', rcube_utils::INPUT_GET))
        ) {
            if ($attachment = $this->attach_vcard(['compose_id' => $p['id'], 'uri' => $uri])) {
                $p['attachments'][] = $attachment;
            };
        }

        return $p;
    }

    /**
     * This callback function removes message part's content
     * for parts that are vcards
     */
    function html_output($p)
    {
        foreach ($this->vcard_parts as $part) {
            // remove part's body
            if (in_array($part, $this->vcard_bodies)) {
                $p['content'] = '';
            }
        }

        return $p;
    }

    /**
     * Handler for request action
     */
    function save_vcard()
    {
        $this->add_texts('localization');

        $uid     = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_POST);
        $mbox    = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST);
        $mime_id = rcube_utils::get_input_string('_part', rcube_utils::INPUT_POST);

        $rcmail  = rcmail::get_instance();
        $message = new rcube_message($uid, $mbox);
        $vcards  = [];
        $errors  = 0;

        if (!empty($message->headers) && $mime_id) {
            $index = [];

            foreach (explode(',', $mime_id) as $id) {
                list($part_id, $card_id) = rcube_utils::explode(':', $id);
                if (!isset($index[$part_id])) {
                    $index[$part_id] = [];
                }
                $index[$part_id][] = $card_id;
            }

            foreach ($index as $part_id => $mime_ids) {
                $part = $message->get_part_content($part_id, null, true);

                if (!empty($part) && ($part_vcards = rcube_vcard::import($part))) {
                    foreach ($mime_ids as $id) {
                        if (!empty($part_vcards[$id])
                            && ($vcard = $part_vcards[$id])
                            && !empty($vcard->email)
                            && !empty($vcard->email[0])
                        ) {
                            $vcards[] = $vcard;
                        }
                    }
                }
            }
        }

        $CONTACTS = $this->get_address_book();

        foreach ($vcards as $vcard) {
            $email   = $vcard->email[0];
            $contact = $vcard->get_assoc();
            $valid   = true;

            // skip entries without an e-mail address or invalid
            if (empty($email) || !$CONTACTS->validate($contact, true)) {
                $valid = false;
            }
            else {
                // We're using UTF8 internally
                $email = rcube_utils::idn_to_utf8($email);

                // compare e-mail address
                $existing = $CONTACTS->search('email', $email, 1, false);

                // compare display name
                if (!$existing->count && !empty($vcard->displayname)) {
                    $existing = $CONTACTS->search('name', $vcard->displayname, 1, false);
                }

                if ($existing->count) {
                    // $rcmail->output->command('display_message', $this->gettext('contactexists'), 'warning');
                    $valid = false;
                }
            }

            if ($valid) {
                $plugin = $rcmail->plugins->exec_hook('contact_create', ['record' => $contact, 'source' => null]);
                $contact = $plugin['record'];

                if (!$plugin['abort'] && $CONTACTS->insert($contact)) {
                    // do nothing
                }
                else {
                    $errors++;
                }
            }
        }

        if ($errors || empty($vcards)) {
            $rcmail->output->command('display_message', $this->gettext('vcardsavefailed'), 'error');
        }
        else {
            $rcmail->output->command('display_message', $this->gettext('importedsuccessfully'), 'confirmation');
        }

        $rcmail->output->send();
    }

    /**
     * Checks if specified message part is a vcard data
     *
     * @param rcube_message_part $part Part object
     *
     * @return bool True if part is of type vcard
     */
    private static function is_vcard($part)
    {
        return (
            // Content-Type: text/vcard;
            $part->mimetype == 'text/vcard' ||
            // Content-Type: text/x-vcard;
            $part->mimetype == 'text/x-vcard' ||
            // Content-Type: text/directory; profile=vCard;
            ($part->mimetype == 'text/directory' && (
                    (!empty($part->ctype_parameters['profile']) && strtolower($part->ctype_parameters['profile']) == 'vcard')
            // Content-Type: text/directory; (with filename=*.vcf)
                    || (!empty($part->filename) && preg_match('/\.vcf$/i', $part->filename))
                )
            )
        );
    }

    /**
     * Getter for default (writable) addressbook
     */
    private function get_address_book()
    {
        if (!empty($this->abook)) {
            return $this->abook;
        }

        $rcmail = rcmail::get_instance();

        // Get configured addressbook
        $CONTACTS = $rcmail->get_address_book(rcube_addressbook::TYPE_DEFAULT, true);

        // Get first writeable addressbook if the configured doesn't exist
        // This can happen when user deleted the addressbook (e.g. Kolab folder)
        if (!is_object($CONTACTS)) {
            $source   = reset($rcmail->get_address_sources(true));
            $CONTACTS = $rcmail->get_address_book($source['id'], true);
        }

        return $this->abook = $CONTACTS;
    }

    /**
     * Attaches a contact vcard to composed mail
     */
    public function attach_vcard($args)
    {
        if (preg_match('|^vcard://(.+)$|', $args['uri'], $m)) {
            list($source, $cid, $email) = explode('-', $m[1]);

            $vcard = $this->get_contact_vcard($source, $cid, $filename);

            if ($vcard) {
                $params = [
                    'filename' => $filename,
                    'mimetype' => 'text/vcard',
                ];

                $args['attachment'] = rcmail_action_mail_compose::save_attachment($vcard, null, $args['compose_id'], $params);
            }
        }

        return $args;
    }

    /**
     * Get vcard data for specified contact
     */
    private function get_contact_vcard($source, $cid, &$filename = null)
    {
        $rcmail  = rcmail::get_instance();
        $source  = $rcmail->get_address_book($source);
        $contact = $source->get_record($cid, true);

        if ($contact) {
            $fieldmap = $source ? $source->vcard_map : null;

            if (empty($contact['vcard'])) {
                $vcard = new rcube_vcard('', RCUBE_CHARSET, false, $fieldmap);
                $vcard->reset();

                foreach ($contact as $key => $values) {
                    list($field, $section) = rcube_utils::explode(':', $key);
                    $section = strtoupper($section ?? '');
                    // avoid unwanted casting of DateTime objects to an array
                    // (same as in rcube_contacts::convert_save_data())
                    if (is_object($values) && is_a($values, 'DateTime')) {
                        $values = [$values];
                    }

                    foreach ((array) $values as $value) {
                        if (is_array($value) || is_a($value, 'DateTime') || @strlen($value)) {
                            $vcard->set($field, $value, $section);
                        }
                    }
                }

                $contact['vcard'] = $vcard->export();
            }

            $name     = rcube_addressbook::compose_list_name($contact);
            $filename = (self::parse_filename($name) ?: 'contact') . '.vcf';

            // fix folding and end-of-line chars
            $vcard = preg_replace('/\r|\n\s+/', '', $contact['vcard']);
            $vcard = preg_replace('/\n/', rcube_vcard::$eol, $vcard);

            return rcube_vcard::rfc2425_fold($vcard) . rcube_vcard::$eol;
        }
    }

    /**
     * Helper function to convert contact name into filename
     */
    static private function parse_filename($str)
    {
        $str = preg_replace('/[\t\n\r\0\x0B:\/]+\s*/', ' ', $str);

        return trim($str, " ./_");
    }
}
PKuc�\o��8$vcard_attachments/vcardattach.min.jsnu�[���/**
 * vcard_attachments plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function plugin_vcard_import(t){var c,e;return t?rcmail.http_post("plugin.savevcard",{_uid:rcmail.env.uid,_mbox:rcmail.env.mailbox,_part:t},rcmail.set_busy(!0,"loading")):(c=[],$.each(rcmail.env.vcards,function(t,a){t=$("<input>").attr({type:"checkbox",value:t,checked:!0,class:"pretty-checkbox"}),a=$("<label>").text(" "+a);c.push($("<div>").append(a.prepend(t)))}),e=rcmail.simple_dialog(c,"vcard_attachments.addvcardmsg",function(t,a){var c=[];if(e.find("input:checked").each(function(){c.push(this.value)}),c.length)return plugin_vcard_import(c.join()),!0},{button:"import",height:4<c.length?250:100})),!1}function plugin_vcard_insertrow(t){t.row.ctype.match(/^(text\/vcard|text\/x-vcard|text\/directory)$/i)&&$(t.row.obj).find(".attachment > .attachment").addClass("vcard")}function plugin_vcard_attach(){for(var t,a=[],c=(new Date).getTime(),e={_uploadid:c,_id:rcmail.env.compose_id||null},i=rcmail.contact_list.get_selection(),n=0;n<i.length;n++)"addressbook"==rcmail.env.task?(t=i[n],a.push(rcmail.env.source+"-"+t+"-0")):(t=i[n])&&"E"!=t.charAt(0)&&rcmail.env.contactdata[t]&&a.push(t);if(!a.length)return!1;e._uri="vcard://"+a.join(","),"addressbook"==rcmail.env.task?(e._attach_vcard=1,rcmail.open_compose_step(e)):(rcmail.add2attachment_list(c,{name:"",html:rcmail.get_label("attaching"),classname:"uploading",complete:!1})||(rcmail.file_upload_id=rcmail.set_busy(!0,"attaching")),rcmail.http_post("upload",e))}window.rcmail&&rcmail.addEventListener("init",function(t){var a,c;rcmail.gui_objects.messagelist&&rcmail.addEventListener("insertrow",function(t,a){plugin_vcard_insertrow(t)}),("compose"==rcmail.env.action||"addressbook"==rcmail.env.task&&""==rcmail.env.action)&&rcmail.gui_objects.contactslist&&("compose"==rcmail.env.action&&(rcmail.env.compose_commands.push("attach-vcard"),window.UI)&&UI.recipient_selector&&(a=$("#compose-attachments > div"),c=$('<button class="btn btn-secondary attach vcard">').attr({type:"button",tabindex:$("button,input",a).first().attr("tabindex")||0}).text(rcmail.gettext("vcard_attachments.attachvcard")).appendTo(a).click(function(){UI.recipient_selector("",{title:"vcard_attachments.attachvcard",button:"vcard_attachments.attachvcard",button_class:"attach",focus:c,multiselect:!1,action:function(){rcmail.command("attach-vcard")}})})),rcmail.register_command("attach-vcard",function(){plugin_vcard_attach()}),rcmail.contact_list.addEventListener("select",function(t){t=t.get_selection();rcmail.enable_command("attach-vcard",1==t.length&&"E"!=t[0].charAt(0))}))});
PKuc�\� �fi5i5zipdownload/zipdownload.phpnu�[���<?php

/**
 * ZipDownload
 *
 * Plugin to allow the download of all message attachments in one zip file
 * and also download of many messages in one go.
 *
 * @requires php_zip extension (including ZipArchive class)
 *
 * @author Philip Weir
 * @author Thomas Bruderli
 * @author Aleksander Machniak
 */
class zipdownload extends rcube_plugin
{
    public $task = 'mail';

    private $charset       = 'ASCII';
    private $names         = [];
    private $default_limit = '50MB';

    // RFC4155: mbox date format
    const MBOX_DATE_FORMAT = 'D M d H:i:s Y';

    /**
     * Plugin initialization
     */
    public function init()
    {
        // check requirements first
        if (!class_exists('ZipArchive', false)) {
            rcmail::raise_error([
                    'code'    => 520,
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                    'message' => "php-zip extension is required for the zipdownload plugin"
                ], true, false
            );
            return;
        }

        $rcmail = rcmail::get_instance();

        $this->load_config();
        $this->charset = $rcmail->config->get('zipdownload_charset', RCUBE_CHARSET);

        if ($rcmail->config->get('zipdownload_attachments', 1) > -1 && ($rcmail->action == 'show' || $rcmail->action == 'preview')) {
            $this->add_texts('localization');
            $this->add_hook('template_object_messageattachments', [$this, 'attachment_ziplink']);
        }

        $this->register_action('plugin.zipdownload.attachments', [$this, 'download_attachments']);
        $this->register_action('plugin.zipdownload.messages', [$this, 'download_messages']);

        if (!$rcmail->action && $rcmail->config->get('zipdownload_selection', $this->default_limit)) {
            $this->add_texts('localization');
            $this->download_menu();
        }
    }

    /**
     * Place a link/button after attachments listing to trigger download
     */
    public function attachment_ziplink($p)
    {
        $rcmail = rcmail::get_instance();

        // only show the link if there is more than the configured number of attachments
        if (substr_count($p['content'], '<li') > $rcmail->config->get('zipdownload_attachments', 1)) {
            $href = $rcmail->url([
                    '_action' => 'plugin.zipdownload.attachments',
                    '_mbox'   => $rcmail->output->get_env('mailbox'),
                    '_uid'    => $rcmail->output->get_env('uid'),
                ],
                false, false, true
            );

            // append the link to the attachments list
            $p['content'] .= html::a(
                ['href' => $href, 'class' => 'button zipdownload'],
                rcube::Q($this->gettext('downloadall'))
            );

            $this->include_stylesheet($this->local_skin_path() . '/zipdownload.css');
        }

        return $p;
    }

    /**
     * Adds download options menu to the page
     */
    public function download_menu()
    {
        $this->include_script('zipdownload.js');
        $this->add_label('download');

        $rcmail  = rcmail::get_instance();
        $menu    = [];
        $ul_attr = [
            'role' => 'menu',
            'aria-labelledby' => 'aria-label-zipdownloadmenu',
            'class' => 'toolbarmenu menu',
        ];

        foreach (['eml', 'mbox', 'maildir'] as $type) {
            $menu[] = html::tag('li', null, $rcmail->output->button([
                    'command'  => "download-$type",
                    'label'    => "zipdownload.download$type",
                    'class'    => "download $type disabled",
                    'classact' => "download $type active",
                    'type'     => 'link',
                ])
            );
        }

        $rcmail->output->add_footer(
            html::div(['id' => 'zipdownload-menu', 'class' => 'popupmenu', 'aria-hidden' => 'true'],
                html::tag('h2', ['class' => 'voice', 'id' => 'aria-label-zipdownloadmenu'], "Message Download Options Menu")
                . html::tag('ul', $ul_attr, implode('', $menu))
            )
        );
    }

    /**
     * Handler for attachment download action
     */
    public function download_attachments()
    {
        $rcmail = rcmail::get_instance();

        // require CSRF protected request
        $rcmail->request_security_check(rcube_utils::INPUT_GET);

        $tmpfname  = rcube_utils::temp_filename('zipdownload');
        $tempfiles = [$tmpfname];
        $message   = new rcube_message(rcube_utils::get_input_string('_uid', rcube_utils::INPUT_GET));

        // open zip file
        $zip = new ZipArchive();
        $zip->open($tmpfname, ZIPARCHIVE::OVERWRITE);

        foreach ($message->attachments as $part) {
            $pid       = $part->mime_id;
            $part      = $message->mime_parts[$pid];
            $disp_name = $this->_create_displayname($part);

            $tmpfn       = rcube_utils::temp_filename('zipattach');
            $tmpfp       = fopen($tmpfn, 'w');
            $tempfiles[] = $tmpfn;

            $message->get_part_body($part->mime_id, false, 0, $tmpfp);
            $zip->addFile($tmpfn, $disp_name);
            fclose($tmpfp);
        }

        $zip->close();

        $filename = ($this->_filename_from_subject($message->subject) ?: 'attachments') . '.zip';

        $this->_deliver_zipfile($tmpfname, $filename);

        // delete temporary files from disk
        foreach ($tempfiles as $tmpfn) {
            unlink($tmpfn);
        }

        exit;
    }

    /**
     * Handler for message download action
     */
    public function download_messages()
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->config->get('zipdownload_selection', $this->default_limit)) {
            $messageset = rcmail::get_uids(null, null, $multi, rcube_utils::INPUT_POST);
            if (count($messageset)) {
                $this->_download_messages($messageset);
            }
        }
    }

    /**
     * Create and get display name of attachment part to add on zip file
     *
     * @param rcube_message_part $part Part of attachment on message
     *
     * @return string Display name of attachment part
     */
    private function _create_displayname($part)
    {
        $rcmail   = rcmail::get_instance();
        $filename = $part->filename;

        if ($filename === null || $filename === '') {
            $ext      = array_first((array) rcube_mime::get_mime_extensions($part->mimetype));
            $filename = $rcmail->gettext('messagepart') . ' ' . $part->mime_id;
            if ($ext) {
                $filename .= '.' . $ext;
            }
        }

        $displayname = $this->_convert_filename($filename);

        /**
         * Adding a number before dot of extension on a name of file with same name on zip
         * Ext: attach(1).txt on attach filename that has a attach.txt filename on same zip
         */
        if (isset($this->names[$displayname])) {
            list($filename, $ext) = preg_split("/\.(?=[^\.]*$)/", $displayname);
            $displayname = $filename . '(' . ($this->names[$displayname]++) . ').' . $ext;
            $this->names[$displayname] = 1;
        }
        else {
            $this->names[$displayname] = 1;
        }

        return $displayname;
    }

    /**
     * Helper method to packs all the given messages into a zip archive
     *
     * @param array $messageset List of message UIDs to download
     */
    private function _download_messages($messageset)
    {
        $this->add_texts('localization');

        $rcmail    = rcmail::get_instance();
        $imap      = $rcmail->get_storage();
        $mode      = rcube_utils::get_input_string('_mode', rcube_utils::INPUT_POST);
        $limit     = $rcmail->config->get('zipdownload_selection', $this->default_limit);
        $limit     = $limit !== true ? parse_bytes($limit) : -1;
        $delimiter = $imap->get_hierarchy_delimiter();
        $tmpfname  = rcube_utils::temp_filename('zipdownload');
        $tempfiles = [$tmpfname];
        $folders   = count($messageset) > 1;
        $timezone  = new DateTimeZone('UTC');
        $messages  = [];
        $size      = 0;

        // collect messages metadata (and check size limit)
        foreach ($messageset as $mbox => $uids) {
            $imap->set_folder($mbox);

            if ($uids === '*') {
                $index = $imap->index($mbox, null, null, true);
                $uids  = $index->get();
            }

            foreach ($uids as $uid) {
                $headers = $imap->get_message_headers($uid);

                if ($mode == 'mbox') {
                    // Sender address
                    $from = rcube_mime::decode_address_list($headers->from, null, true, $headers->charset, true);
                    $from = array_shift($from);
                    $from = preg_replace('/\s/', '-', $from);

                    // Received (internal) date
                    $date = rcube_utils::anytodatetime($headers->internaldate, $timezone);
                    if ($date) {
                        $date = $date->format(self::MBOX_DATE_FORMAT);
                    }

                    // Mbox format header (RFC4155)
                    $header = sprintf("From %s %s\r\n",
                        $from ?: 'MAILER-DAEMON',
                        $date ?: ''
                    );

                    $messages[$uid . ':' . $mbox] = $header;
                }
                else { // maildir
                    $subject = rcube_mime::decode_header($headers->subject, $headers->charset);
                    $subject = $this->_filename_from_subject(mb_substr($subject, 0, 16));
                    $subject = $this->_convert_filename($subject);

                    $path      = $folders ? str_replace($delimiter, '/', $mbox) . '/' : '';
                    $disp_name = $path . $uid . ($subject ? " $subject" : '') . '.eml';

                    $messages[$uid . ':' . $mbox] = $disp_name;
                }

                $size += $headers->size;

                if ($limit > 0 && $size > $limit) {
                    unlink($tmpfname);

                    $msg = $this->gettext([
                            'name' => 'sizelimiterror',
                            'vars' => ['$size' => rcmail_action::show_bytes($limit)]
                    ]);

                    $rcmail->output->show_message($msg, 'error');
                    $rcmail->output->send('iframe');
                    exit;
                }
            }
        }

        if ($mode == 'mbox') {
            $tmpfp = fopen($tmpfname . '.mbox', 'w');
            if (!$tmpfp) {
                exit;
            }
        }

        // open zip file
        $zip = new ZipArchive();
        $zip->open($tmpfname, ZIPARCHIVE::OVERWRITE);

        foreach ($messages as $key => $value) {
            list($uid, $mbox) = explode(':', $key, 2);
            $imap->set_folder($mbox);

            if (!empty($tmpfp)) {
                fwrite($tmpfp, $value);

                // Use stream filter to quote "From " in the message body
                stream_filter_register('mbox_filter', 'zipdownload_mbox_filter');
                $filter = stream_filter_append($tmpfp, 'mbox_filter');
                $imap->get_raw_body($uid, $tmpfp);
                stream_filter_remove($filter);
                fwrite($tmpfp, "\r\n");
            }
            else { // maildir
                $tmpfn = rcube_utils::temp_filename('zipmessage');
                $fp = fopen($tmpfn, 'w');
                $imap->get_raw_body($uid, $fp);
                $tempfiles[] = $tmpfn;
                fclose($fp);
                $zip->addFile($tmpfn, $value);
            }
        }

        $filename = $folders ? 'messages' : $imap->get_folder();

        if (!empty($tmpfp)) {
            $tempfiles[] = $tmpfname . '.mbox';
            fclose($tmpfp);
            $zip->addFile($tmpfname . '.mbox', $filename . '.mbox');
        }

        $zip->close();

        $this->_deliver_zipfile($tmpfname, $filename . '.zip');

        // delete temporary files from disk
        foreach ($tempfiles as $tmpfn) {
            unlink($tmpfn);
        }

        exit;
    }

    /**
     * Helper method to send the zip archive to the browser
     */
    private function _deliver_zipfile($tmpfname, $filename)
    {
        $rcmail = rcmail::get_instance();

        $rcmail->output->download_headers($filename, ['length' => filesize($tmpfname)]);

        readfile($tmpfname);
    }

    /**
     * Helper function to convert filenames to the configured charset
     */
    private function _convert_filename($str)
    {
        $str = strtr($str, [':' => '', '/' => '-']);

        return rcube_charset::convert($str, RCUBE_CHARSET, $this->charset);
    }

    /**
     * Helper function to convert message subject into filename
     */
    private function _filename_from_subject($str)
    {
        $str = preg_replace('/[\t\n\r\0\x0B]+\s*/', ' ', $str);

        return trim($str, " ./_");
    }
}

class zipdownload_mbox_filter extends php_user_filter
{
    #[ReturnTypeWillChange]
    public function filter($in, $out, &$consumed, $closing)
    {
        while ($bucket = stream_bucket_make_writeable($in)) {
            // messages are read line by line
            if (preg_match('/^>*From /', $bucket->data)) {
                $bucket->data     = '>' . $bucket->data;
                $bucket->datalen += 1;
            }

            $consumed += $bucket->datalen;
            stream_bucket_append($out, $bucket);
        }

        return PSFS_PASS_ON;
    }
}
PKuc�\�9^z��zipdownload/composer.jsonnu�[���{
    "name": "roundcube/zipdownload",
    "type": "roundcube-plugin",
    "description": "Adds an option to download all attachments to a message in one zip file, when a message has multiple attachments. Also allows the download of a selection of messages in one zip file. Supports mbox and maildir format.",
    "license": "GPL-3.0-or-later",
    "version": "3.4",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3",
        "ext-zip": "*"
    }
}
PKuc�\�]�wOO"zipdownload/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = '下载全部附件';
$labels['download'] = '下载...';
$labels['downloadmbox'] = 'Mbox 格式 (.zip)';
$labels['downloadmaildir'] = 'Maildir 格式 (.zip)';
$labels['downloademl'] = '源代码 (.eml)';
$labels['sizelimiterror'] = '选中消息的总大小超过了限制 ($size)';
PKuc�\N��@@"zipdownload/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Спампаваць усе далучэнні';
$labels['download'] = 'Сцягнуць...';
$labels['downloadmbox'] = 'Фармат mbox (.zip)';
$labels['downloadmaildir'] = 'Фармат maildir (.zip)';
$labels['downloademl'] = 'Выточны файл (.eml)';
PKuc�\� �r��"zipdownload/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Изтегляне на всички прикачени файлове';
$labels['download'] = 'Изтегляне...';
$labels['downloadmbox'] = 'Mbox формат (.zip)';
$labels['downloadmaildir'] = 'Maildir формат (.zip)';
$labels['downloademl'] = 'Изходен код (.eml)';
$labels['sizelimiterror'] = 'Общият размер на избраните писма надхвърля лимита от ($size)';
PKuc�\MnM^^"zipdownload/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Download all attachments';
$labels['download'] = 'Download...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
$labels['sizelimiterror'] = 'Total size of selected messages exceeds the limit ($size)';
PKuc�\��[["zipdownload/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Lataa kaikki liitteet';
$labels['download'] = 'Lataa...';
$labels['downloadmbox'] = 'Mbox-muoto (.zip)';
$labels['downloadmaildir'] = 'Maildir-muoto (.zip)';
$labels['downloademl'] = 'Lähde (.eml)';
$labels['sizelimiterror'] = 'Valitsemiesi viestien yhteiskoko ylittää rajoituksen ($size)';
PKuc�\iB�Knn"zipdownload/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Last ned alle vedlegg';
$labels['download'] = 'Nedlaste...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Kildekode (.eml)';
$labels['sizelimiterror'] = 'Den totale størrelsen av de markerte meldingene overgår grensen ($size)';
PKuc�\�iu~~"zipdownload/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Shkarkoji krejt bashkëngjitjet';
$labels['download'] = 'Shkarkoni…';
$labels['downloadmbox'] = 'Në format Mbox (.zip)';
$labels['downloadmaildir'] = 'Në format Maildir (.zip)';
$labels['downloademl'] = 'Burim (.eml)';
$labels['sizelimiterror'] = 'Madhësia gjithsej e mesazheve të përzgjedhur e tejkalon kufirin ($size)';
PKuc�\�A�"zipdownload/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Laadi alla kõik manused';
$labels['download'] = 'lae arvutisse';
$labels['downloadmbox'] = 'Mbox vorming (.zip)';
$labels['downloadmaildir'] = 'Maildir vorming (.zip)';
$labels['downloademl'] = 'Lähtetekst (.eml)';
PKuc�\�u$��"zipdownload/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'داگرتنی هەموو هاوپێچەکان';
$labels['download'] = 'داگرتن...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
$labels['sizelimiterror'] = 'کۆی قەبارەی پەیامە هەڵبژێردراوەکان لە سنوورەکە تێپەڕیووە ($size)';
PKuc�\�%��gg"zipdownload/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Deskargatu eranskin guztiak';
$labels['download'] = 'Deskargatu...';
$labels['downloadmbox'] = 'Mbox formatua (.zip)';
$labels['downloadmaildir'] = 'Maildir formatua (.zip)';
$labels['downloademl'] = 'Iturburua (.eml)';
$labels['sizelimiterror'] = 'Hautatutako  mezuen tamainak muga ($size) gainditu du.';
PKuc�\oנ2nn"zipdownload/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Tüm ek dosyaları indir';
$labels['download'] = 'İndir...';
$labels['downloadmbox'] = 'Mbox biçimi (.zip)';
$labels['downloadmaildir'] = 'Maildir biçimi (.zip)';
$labels['downloademl'] = 'Kaynak (.eml)';
$labels['sizelimiterror'] = 'Seçilmiş iletilerin toplam boyutu belirtilen sınırı aşıyor ($size)';
PKuc�\»�hh"zipdownload/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descargar Todo';
$labels['download'] = 'Descargar...';
$labels['downloadmbox'] = 'Formato Mbox (.zip)';
$labels['downloadmaildir'] = 'Formato Maildir (.zip)';
$labels['downloademl'] = 'Original (.eml)';
$labels['sizelimiterror'] = 'El tamaño total de los mensajes seleccionados supera el límite ($size)';
PKuc�\���zipdownload/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Hemû pêvekan daxîne';
$labels['download'] = 'Daxîne...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Çavkanî (.eml)';
PKuc�\���bb"zipdownload/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Baixar todos os anexos';
$labels['download'] = 'Baixar...';
$labels['downloadmbox'] = 'Formato mbox (.zip)';
$labels['downloadmaildir'] = 'Formato maildir (.zip)';
$labels['downloademl'] = 'Fonte (.eml)';
$labels['sizelimiterror'] = 'Tamanho total das mensagens selecionadas excede o limite ($size)';
PKuc�\R���zz"zipdownload/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Lejupielādēt visus pielikumus';
$labels['download'] = 'Lejupielādē...';
$labels['downloadmbox'] = 'Mbox formāts(.zip)';
$labels['downloadmaildir'] = 'Maildir formāts (.zip)';
$labels['downloademl'] = 'Izejas avots (.eml)';
$labels['sizelimiterror'] = 'Kopējais atzīmēto ziņojumu lielums pārsniedz limitu ($size)';
PKuc�\=��gg"zipdownload/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Stiahnuť všetky prílohy';
$labels['download'] = 'Stiahnuť...';
$labels['downloadmbox'] = 'Formát Mbox (.zip)';
$labels['downloadmaildir'] = 'Formát Maildir (.zip)';
$labels['downloademl'] = 'Zdroj (.eml)';
$labels['sizelimiterror'] = 'Celková veľkosť vybraných správ prekračuje limit ($size)';
PKuc�\��9f__"zipdownload/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Stáhnout všechny přílohy';
$labels['download'] = 'Stáhnout...';
$labels['downloadmbox'] = 'Formát mbox (.zip)';
$labels['downloadmaildir'] = 'Formát maildir (.zip)';
$labels['downloademl'] = 'Zdroj (.eml)';
$labels['sizelimiterror'] = 'Velikost vybraných zpráv byla překročena ($size)';
PKuc�\�U�AA"zipdownload/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Завантажити всі вкладення';
$labels['download'] = 'Завантаження…';
$labels['downloadmbox'] = 'Формат Mbox (.zip)';
$labels['downloadmaildir'] = 'Формат Maildir (.zip)';
$labels['downloademl'] = 'Джерело (.eml)';
PKuc�\w�k�"zipdownload/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Alle taheaksels ynlade';
$labels['download'] = 'Ynlade...';
$labels['downloadmbox'] = 'Mbox formaat (.zip)';
$labels['downloadmaildir'] = 'Maildir formaat (.zip)';
$labels['downloademl'] = 'Boarne (.eml)';
PKuc�\���ww"zipdownload/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Alle Anhänge herunterladen';
$labels['download'] = 'Download...';
$labels['downloadmbox'] = 'Mbox Format (.zip)';
$labels['downloadmaildir'] = 'Maildir Format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
$labels['sizelimiterror'] = 'Die gesamte Grösse der ausgewählten Nachrichten übersteigt das Limit ($size)';
PKuc�\���#zipdownload/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descargar todos los archivos adjuntos';
$labels['download'] = 'Descargando...';
$labels['downloadmbox'] = 'Formato mbox (.zip)';
$labels['downloadmaildir'] = 'Formato maildir (.zip)';
$labels['downloademl'] = 'Fuente (.eml)';
PKuc�\�MI�zipdownload/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Barcha ilovalarni ko‘chirib olish';
$labels['download'] = 'Ko‘chirish...';
$labels['downloadmbox'] = 'Mbox formati (.zip)';
$labels['downloadmaildir'] = 'Maildir formati (.zip)';
$labels['downloademl'] = 'Manba (.eml)';
PKuc�\��mm"zipdownload/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Ներբեռնել բոլո կցված նիշքերը';
PKuc�\�,"zipdownload/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Download all attachments';
$labels['download'] = 'Download...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
PKuc�\�
G�LL"zipdownload/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = '下載所有附件';
$labels['download'] = '下載...';
$labels['downloadmbox'] = 'Mbox 格式 (.zip)';
$labels['downloadmaildir'] = 'Maildir 格式 (.zip)';
$labels['downloademl'] = '原始格式 (.eml)';
$labels['sizelimiterror'] = '所選郵件總大小超過限制 ($size)';
PKuc�\��#ess"zipdownload/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descarrega tots els adjunts';
$labels['download'] = 'Descarrega...';
$labels['downloadmbox'] = 'Format mbox (.zip)';
$labels['downloadmaildir'] = 'Format maildir (.zip)';
$labels['downloademl'] = 'Codi font (.eml)';
$labels['sizelimiterror'] = 'La mida total dels missatges seleccionats sobrepassa el límit ($size)';
PKuc�\W�B.oozipdownload/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Discargar tote le attachamentos';
$labels['download'] = 'Discargar...';
$labels['downloadmbox'] = 'Formato Mbox (.zip)';
$labels['downloadmaildir'] = 'Formato Maildir (.zip)';
$labels['downloademl'] = 'Fonte (.eml)';
$labels['sizelimiterror'] = 'Le dimension total del messages seligite excede le limite ($size)';
PKuc�\�3�"zipdownload/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Preuzmi sve priloge';
$labels['download'] = 'Preuzmi...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Izvorno (.eml)';
PKuc�\)R����"zipdownload/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Загрузить все вложения';
$labels['download'] = 'Загрузка...';
$labels['downloadmbox'] = 'Формат Mbox (.zip)';
$labels['downloadmaildir'] = 'Формат Maildir (.zip)';
$labels['downloademl'] = 'Исходный формат (.eml)';
$labels['sizelimiterror'] = 'Общий размер выбранных сообщений превышает лимит ($size)';
PKuc�\�z�"zipdownload/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'بارگیری همه پیوست‌ها';
$labels['download'] = 'بارگیری';
$labels['downloadmbox'] = 'قالب Mbox (.zip)';
$labels['downloadmaildir'] = 'قالب Maildir (.zip)';
$labels['downloademl'] = 'منبع (.eml)';
PKuc�\po]Jtt"zipdownload/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Niðurhala öllum viðhengjum';
$labels['download'] = 'Hlaða niður...';
$labels['downloadmbox'] = 'Mbox snið (.zip)';
$labels['downloadmaildir'] = 'Maildir snið (.zip)';
$labels['downloademl'] = 'Upprunalegt (.eml)';
$labels['sizelimiterror'] = 'Heildarstærð valinna skilaboða fer fram yfir ($size) takmörkin';
PKuc�\T���--"zipdownload/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Tải tất cả tệp tin đính kèm';
$labels['download'] = 'Tải xuống...';
$labels['downloadmbox'] = 'Định dạng mbox (.zip)';
$labels['downloadmaildir'] = 'Định dạng Maildir (.zip)';
$labels['downloademl'] = 'Mã nguồn (.eml)';
PKuc�\�CFM00"zipdownload/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'ดาวน์โหลดทุกไฟล์';
$labels['download'] = 'ดาวน์โหลด...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
PKuc�\��ٻ��"zipdownload/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'تحميل جميع المرفقات';
$labels['download'] = 'تحميل...';
$labels['downloadmbox'] = 'تنسيق Mbox (.zip)';
$labels['downloadmaildir'] = 'تنسيق Maildir (.zip)';
$labels['downloademl'] = 'المصدر (.eml)';
$labels['sizelimiterror'] = 'إجمالي حجم الرسائل المحددة يتجاوز الحد ($size)';
PKuc�\�Q�QQ"zipdownload/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Bütün qoşmaları endir';
PKuc�\j@K��"zipdownload/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Unduh semua lampiran';
$labels['download'] = 'Unduh...';
$labels['downloadmbox'] = 'Format Mbox (.zip)';
$labels['downloadmaildir'] = 'Format Maildir (.zip)';
$labels['downloademl'] = 'Sumber (.eml)';
PKuc�\_S��}}"zipdownload/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Összes csatolmány letöltése';
$labels['download'] = 'Letöltés...';
$labels['downloadmbox'] = 'Mbox formátum (.zip)';
$labels['downloadmaildir'] = 'Maildir formátum (.zip)';
$labels['downloademl'] = 'Forrás (.eml)';
$labels['sizelimiterror'] = 'A kiválasztott üzenetek mérete meghaladta a maximum méretet ($size) ';
PKuc�\Ry�q"zipdownload/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descarcă toate atașamentele';
$labels['download'] = 'Descarcă...';
$labels['downloadmbox'] = 'Format Mbox (.zip)';
$labels['downloadmaildir'] = 'Format Maildir (.zip)';
$labels['downloademl'] = 'Sursă (.eml)';
PKuc�\���TTzipdownload/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Elŝuti ĉiujn kunsendaĵojn';
PKuc�\W=a���"zipdownload/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Télécharger toutes les pièces jointes';
$labels['download'] = 'Télécharger…';
$labels['downloadmbox'] = 'Format mbox (.zip)';
$labels['downloadmaildir'] = 'Format maildir (.zip)';
$labels['downloademl'] = 'Source (.eml)';
$labels['sizelimiterror'] = 'La taille totale des courriels sélectionnés dépasse la limite ($size)';
PKuc�\k��"zipdownload/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Preuzmi sve privitke';
$labels['download'] = 'Preuzmi...';
$labels['downloadmbox'] = 'Mbox datoteka (.zip)';
$labels['downloadmaildir'] = 'Maildir datoteka (.zip)';
$labels['downloademl'] = 'Izvor (.eml)';
PKuc�\�/vv"zipdownload/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Pobierz wszystkie jako ZIP';
$labels['download'] = 'Pobierz...';
$labels['downloadmbox'] = 'Format mbox (.zip)';
$labels['downloadmaildir'] = 'Format maildir (.zip)';
$labels['downloademl'] = 'Źródło wiadomości (.eml)';
$labels['sizelimiterror'] = 'Całkowity rozmiar wybranych wiadomości przekracza limit ($size)';
PKuc�\�o���"zipdownload/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'すべての添付ファイルをダウンロード';
$labels['download'] = 'ダウンロード...';
$labels['downloadmbox'] = 'mbox形式(.zip)';
$labels['downloadmaildir'] = 'Maildir形式(.zip)';
$labels['downloademl'] = 'ソース(.eml)';
$labels['sizelimiterror'] = '選択したメッセージのサイズの合計が制限($size)を超過します。';
PKuc�\�6�hMM"zipdownload/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Last ned alle vedlegg';
PKuc�\[A� zipdownload/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descargar tolos axuntos';
$labels['download'] = 'Descargar...';
$labels['downloadmbox'] = 'Formatu Mbox (.zip)';
$labels['downloadmaildir'] = 'Formatu Maildir (.zip)';
$labels['downloademl'] = 'Fonte (.eml)';
PKuc�\��Ӛ11"zipdownload/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Преузми све прилоге';
$labels['download'] = 'Преузимање...';
$labels['downloadmbox'] = 'Mbox формат (.zip)';
$labels['downloadmaildir'] = 'Maildir формат (.zip)';
$labels['downloademl'] = 'Изворно (.eml)';
PKuc�\3;��"zipdownload/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'All d\'Unhäng eroflueden';
$labels['download'] = 'Eroflueden...';
$labels['downloadmbox'] = 'Mbox-Format (.zip)';
$labels['downloadmaildir'] = 'Maildir-Format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
PKuc�\�>��__"zipdownload/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'بارگزاری همه ضمیمه ها';
PKuc�\��bzipdownload/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Pellgargañ an holl stagadennoù';
$labels['download'] = 'Pellgargañ…';
$labels['downloadmbox'] = 'Mentrezh Mbox (.zip)';
$labels['downloadmaildir'] = 'Mentrezh Maildir (.zip)';
$labels['downloademl'] = 'Tarzh (.eml)';
PKuc�\�
�,,"zipdownload/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Симни ги сите прикачувања ';
$labels['download'] = 'Симни...';
$labels['downloadmbox'] = 'Mbox формат(.zip)';
$labels['downloadmaildir'] = 'Maildir формат(.zip)';
$labels['downloademl'] = 'Извор(.eml)';
PKuc�\��|���"zipdownload/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'ទាញ​យក​ឯកសារ​ភ្ជាប់​ទាំងអស់';
PKuc�\��UU"zipdownload/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Бүх хавсралтыг татах';
$labels['download'] = 'Татаж авах...';
$labels['downloadmbox'] = 'Хайрцагны формат (.zip)';
$labels['downloadmaildir'] = 'Мэйлийн хавтасны формат (.zip)';
$labels['downloademl'] = 'Эх код (.eml)';
PKuc�\�X'��"zipdownload/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'להוריד את כל הצרופות';
$labels['download'] = 'מוריד כעת...';
$labels['downloadmbox'] = 'פורמט Mbox  &rlm;(zip.)';
$labels['downloadmaildir'] = 'פורמט Maildir  &rlm;(zip.)';
$labels['downloademl'] = 'מקור (eml.)';
$labels['sizelimiterror'] = 'הגודל הכולל של ההודעות שנבחרו עולה על הכמות שהוגדרה בסך ($size)';
PKuc�\�6��"zipdownload/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Íosluchtaigh gach ceangaltán';
$labels['download'] = 'Íosluchtaigh...';
$labels['downloadmbox'] = 'Formáid Mbox (.zip)';
$labels['downloadmaildir'] = 'Formáid maildir (.zip)';
$labels['downloademl'] = 'Foinse (.eml)';
$labels['sizelimiterror'] = 'Sáraíonn méid iomlán na dteachtaireachtaí roghnaithe an teorainn ($size)';
PKuc�\��nn"zipdownload/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Download alle som .zip-fil';
$labels['download'] = 'Download...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Kilde (.eml)';
$labels['sizelimiterror'] = 'Den totale størrelse af de valgte beskeder overskrider grænsen ($size)';
PKuc�\O\V���"zipdownload/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Prenesi vse priponke';
$labels['download'] = 'Prenesi...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Vir (.eml)';
PKuc�\���2!!zipdownload/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'تنزيل كل المرفقات';
$labels['download'] = 'التنزيل جار …';
$labels['downloadmbox'] = 'نسق Mbox (.zip)';
$labels['downloadmaildir'] = 'نسق Maildir (.zip)';
$labels['downloademl'] = 'المصدر (.eml)';
PKuc�\C�]"zipdownload/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Alle Anhänge herunterladen';
$labels['download'] = 'Herunterladen...';
$labels['downloadmbox'] = 'Mbox-Format (.zip)';
$labels['downloadmaildir'] = 'Maildir-Format (.zip)';
$labels['downloademl'] = 'Quelltext (.eml)';
$labels['sizelimiterror'] = 'Die gesamte Größe der ausgewählten Nachrichten übersteigt das Limit ($size)';
PKuc�\;�@zee"zipdownload/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Hämta alla bifogade filer';
$labels['download'] = 'Hämta...';
$labels['downloadmbox'] = 'Format Mbox (.zip)';
$labels['downloadmaildir'] = 'Format Maildir (.zip)';
$labels['downloademl'] = 'Källkod (.eml)';
$labels['sizelimiterror'] = 'Sammanlagd storlek på valda meddelanden är för stor ($size)';
PKuc�\=Ը���zipdownload/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'بارلىق قىستۇرمىلارنى چۈشۈرۈش';
$labels['download'] = 'چۈشۈرۈش...';
$labels['downloadmbox'] = 'خەت ساندۇقى فورماتى (.zip)';
$labels['downloadmaildir'] = 'خەت مۇندەرىجىسى فورماتى (.زىپ)';
$labels['downloademl'] = 'مەنبە (eml.)';
$labels['sizelimiterror'] = 'تاللانغان خەتلەرنىڭ جەمئىي چوڭلۇقى چەكتىن (size$) ئېشىپ كەتتى';
PKuc�\�󫲆�"zipdownload/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = '모든 첨부파일을 다운로드';
$labels['download'] = '다운로드...';
$labels['downloadmbox'] = 'Mbox 형식 (.zip)';
$labels['downloadmaildir'] = 'Maildir 형식 (.zip)';
$labels['downloademl'] = '소스 (.eml)';
$labels['sizelimiterror'] = '선택한 메시지의 전체 크기가 최대 크기인 ($size)을(를) 초과함';
PKuc�\R��"zipdownload/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descargar todos os adxuntos';
$labels['download'] = 'Descargar';
$labels['downloadmbox'] = 'En formato mbox (.zip)';
$labels['downloadmaildir'] = 'En formato maildir (.zip)';
$labels['downloademl'] = 'Código fonte (.eml)';
PKuc�\��xpp"zipdownload/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Scarica tutti gli allegati';
$labels['download'] = 'Scarica...';
$labels['downloadmbox'] = 'Formato mbox (.zip)';
$labels['downloadmaildir'] = 'Formato maildir (.zip)';
$labels['downloademl'] = 'Sorgente (.eml)';
$labels['sizelimiterror'] = 'La dimensione totale dei messaggi selezionati supera il limite ($size)';
PKuc�\��ztt"zipdownload/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Descargar todos los adjuntos';
$labels['download'] = 'Descargar...';
$labels['downloadmbox'] = 'Formato mbox (.zip)';
$labels['downloadmaildir'] = 'Formato maildir (.zip)';
$labels['downloademl'] = 'Fuente (.eml)';
$labels['sizelimiterror'] = 'El tamaño total de los mensajes seleccionados supera el límite ($size)';
PKuc�\)>�s��"zipdownload/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'എല്ലാ അറ്റാച്ച്മെന്റുകളും ഡൗൺലോഡ് ചെയ്യുക';
$labels['download'] = 'ഡൗൺലോഡ്...';
$labels['downloadmbox'] = 'എംബോക്സ് രീതി (.zip)';
$labels['downloadmaildir'] = 'മെയിൽഡിർ രീതി (.zip)';
$labels['downloademl'] = 'സ്രോതസ്സ് (.eml)';
PKuc�\���nn"zipdownload/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Alle bijlagen downloaden';
$labels['download'] = 'Download...';
$labels['downloadmbox'] = 'Mbox-formaat (.zip)';
$labels['downloadmaildir'] = 'Maildir-formaat (.zip)';
$labels['downloademl'] = 'Bron (.eml)';
$labels['sizelimiterror'] = 'Totale grootte van geselecteerde berichten is groter dan de limit ($size)';
PKuc�\{��Ttt"zipdownload/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Lawrlwytho\'r holl atodiadau';
$labels['download'] = 'Lawrlwytho...';
$labels['downloadmbox'] = 'Fformat mbox (.zip)';
$labels['downloadmaildir'] = 'Fformat maildir (.zip)';
$labels['downloademl'] = 'Ffynhonnell (.eml)';
$labels['sizelimiterror'] = 'Cyfanswm maint yr holl negeseuon sy\'n fwy na\'r cyfyngiad ($size)';
PKuc�\MnM^^"zipdownload/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Download all attachments';
$labels['download'] = 'Download...';
$labels['downloadmbox'] = 'Mbox format (.zip)';
$labels['downloadmaildir'] = 'Maildir format (.zip)';
$labels['downloademl'] = 'Source (.eml)';
$labels['sizelimiterror'] = 'Total size of selected messages exceeds the limit ($size)';
PKuc�\�����"zipdownload/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Heinta allar viðheftingar';
$labels['download'] = 'Heinta...';
$labels['downloadmbox'] = 'Mbox týpa (.zip)';
$labels['downloadmaildir'] = 'Teldupost mappu format (.zip)';
$labels['downloademl'] = 'Kelda (.eml)';
$labels['sizelimiterror'] = 'Tann samlaða støddin av tí valgda boðnum, er stórri enn stórst loyvdu boð stødd ($size)';
PKuc�\zW!�ff"zipdownload/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Atsisiųsti visus priedus';
$labels['download'] = 'Parsisiųsti...';
$labels['downloadmbox'] = 'Mbox formatas (.zip)';
$labels['downloadmaildir'] = 'Maildir formatas (.zip)';
$labels['downloademl'] = 'Kodas (.eml)';
$labels['sizelimiterror'] = 'Bendras pasirinktų laiškų dydis viršija ribą ($size)';
PKuc�\8�ss"zipdownload/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Transferir todos os anexos';
$labels['download'] = 'Transferir...';
$labels['downloadmbox'] = 'Formato Mbox (.zip)';
$labels['downloadmaildir'] = 'Formato Maildir (.zip)';
$labels['downloademl'] = 'Original (.eml)';
$labels['sizelimiterror'] = 'O tamanho total das mensagens seleccionadas excede o limite de ($size)';
PKuc�\�)>���"zipdownload/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Zipdownload plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-zipdownload/
*/

$labels['downloadall'] = 'Λήψη όλων των συνημμένων';
$labels['download'] = 'Λήψη...';
$labels['downloadmbox'] = 'Μορφή mbox (.zip)';
$labels['downloadmaildir'] = 'Μορφή maildir (.zip)';
$labels['downloademl'] = 'Πηγή (.eml)';
$labels['sizelimiterror'] = 'Το συνολικό μέγαθος των επιλεγμένων μηνυμάτων υπερβαίνει το όριο ($size)';
PKuc�\żҪaazipdownload/config.inc.php.distnu�[���<?php

/**
 * ZipDownload configuration file
 */

// Zip attachments
// Only show the link when there are more than this many attachments
// -1 to prevent downloading of attachments as zip
$config['zipdownload_attachments'] = 1;

// Zip selection of mail messages
// This option enables downloading of multiple messages as one zip archive.
// The number or string value specifies maximum total size of all messages
// in the archive (not the size of the archive itself).
$config['zipdownload_selection'] = '50MB';

// Charset to use for filenames inside the zip
$config['zipdownload_charset'] = 'ISO-8859-1';
PKuc�\�M��^	^	zipdownload/zipdownload.min.jsnu�[���/**
 * ZipDownload plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function rcmail_zipdownload(a){var i,e,n,l;"eml"==a?(e=rcmail.get_single_uid(),rcmail.goto_url("viewsource",rcmail.params_from_uid(e,{_save:1}),!1,!0)):rcmail.message_list&&1<rcmail.message_list.get_selection().length&&(i=[],e=rcmail.selection_post_data(),l="zipdownload-"+(new Date).getTime(),n=$("<iframe>").attr({name:l,style:"display:none"}),l=$("<form>").attr({target:l,style:"display: none",method:"post",action:rcmail.url("mail/plugin.zipdownload.messages")}),e._mode=a,e._token=rcmail.env.request_token,$.each(e,function(a,e){if("object"==typeof e&&1<e.length)for(var n=0;n<e.length;n++)i.push($("<input>").attr({type:"hidden",name:a+"[]",value:e[n]}));else i.push($("<input>").attr({type:"hidden",name:a,value:e}))}),n.appendTo(document.body),l.append(i).appendTo(document.body).submit())}function rcmail_zipdownload_menu(a){var e=rcmail.message_list.get_selection().length;return rcmail.enable_command("download-eml",1==e),rcmail.enable_command("download-mbox","download-maildir",1<e),rcmail.command("menu-open","zipdownload-menu",a&&a.target?a.target:rcmail.env.download_link,a),!1}window.rcmail&&rcmail.addEventListener("init",function(a){rcmail.register_command("download-eml",function(){rcmail_zipdownload("eml")}),rcmail.register_command("download-mbox",function(){rcmail_zipdownload("mbox")}),rcmail.register_command("download-maildir",function(){rcmail_zipdownload("maildir")}),rcmail.message_list&&rcmail.message_list.addEventListener("select",function(a){a=a.get_selection().length;rcmail.enable_command("download",0<a)}),rcmail.addEventListener("beforedownload",rcmail_zipdownload_menu),$.each(rcmail.buttons.download||[],function(){var a=$("#"+this.id),e=$("span",a);e.length||(e=$("<span>"),a.html("").append(e)),a.attr("aria-haspopup","true"),e.text(rcmail.get_label("zipdownload.download")),rcmail.env.download_link=a})});
PKuc�\l�-ZZzipdownload/zipdownload.jsnu�[���/**
 * ZipDownload plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

window.rcmail && rcmail.addEventListener('init', function(evt) {
    // register additional actions
    rcmail.register_command('download-eml', function() { rcmail_zipdownload('eml'); });
    rcmail.register_command('download-mbox', function() { rcmail_zipdownload('mbox'); });
    rcmail.register_command('download-maildir', function() { rcmail_zipdownload('maildir'); });

    // commands status
    rcmail.message_list && rcmail.message_list.addEventListener('select', function(list) {
        var selected = list.get_selection().length;

        rcmail.enable_command('download', selected > 0);
    });

    // hook before default download action
    rcmail.addEventListener('beforedownload', rcmail_zipdownload_menu);

    // find and modify default download link/button
    $.each(rcmail.buttons['download'] || [], function() {
        var link = $('#' + this.id),
            span = $('span', link);

        if (!span.length) {
            span = $('<span>');
            link.html('').append(span);
        }

        link.attr('aria-haspopup', 'true');

        span.text(rcmail.get_label('zipdownload.download'));
        rcmail.env.download_link = link;
    });
});


function rcmail_zipdownload(mode)
{
    // default .eml download of single message
    if (mode == 'eml') {
        var uid = rcmail.get_single_uid();
        rcmail.goto_url('viewsource', rcmail.params_from_uid(uid, {_save: 1}), false, true);
        return;
    }

    // multi-message download, use hidden form to POST selection
    if (rcmail.message_list && rcmail.message_list.get_selection().length > 1) {
        var inputs = [],
            post = rcmail.selection_post_data(),
            id = 'zipdownload-' + new Date().getTime(),
            iframe = $('<iframe>').attr({name: id, style: 'display:none'}),
            form = $('<form>').attr({
                    target: id,
                    style: 'display: none',
                    method: 'post',
                    action: rcmail.url('mail/plugin.zipdownload.messages')
                });

        post._mode = mode;
        post._token = rcmail.env.request_token;

        $.each(post, function(k, v) {
            if (typeof v == 'object' && v.length > 1) {
              for (var j=0; j < v.length; j++)
                  inputs.push($('<input>').attr({type: 'hidden', name: k+'[]', value: v[j]}));
            }
            else {
                inputs.push($('<input>').attr({type: 'hidden', name: k, value: v}));
            }
        });

        iframe.appendTo(document.body);
        form.append(inputs).appendTo(document.body).submit();
    }
}

// display download options menu
function rcmail_zipdownload_menu(e)
{
    // Menu option status
    var selected = rcmail.message_list.get_selection().length;
    rcmail.enable_command('download-eml', selected == 1);
    rcmail.enable_command('download-mbox', 'download-maildir', selected > 1);

    // show (sub)menu for download selection
    rcmail.command('menu-open', 'zipdownload-menu', e && e.target ? e.target : rcmail.env.download_link, e);

    // abort default download action
    return false;
}
PKuc�\6�q�zipdownload/READMEnu�[���Roundcube Webmail ZipDownload
=============================
This plugin adds an option to download all attachments to a message in one zip
file, when a message has multiple attachments. The plugin also allows the
download of a selection of messages in 1 zip file.

Requirements
============
* php_zip extension (including ZipArchive class)
  Either install it via PECL or for PHP >= 5.2 compile with --enable-zip option

License
=======
This plugin is released under the GNU General Public License Version 3
or later (http://www.gnu.org/licenses/gpl.html).

Even if skins might contain some programming work, they are not considered
as a linked part of the plugin and therefore skins DO NOT fall under the
provisions of the GPL license. See the README file located in the core skins
folder for details on the skin license.

Install
=======
* Place this plugin folder into plugins directory of Roundcube
* Add zipdownload to $config['plugins'] in your Roundcube config

NB: When downloading the plugin from GitHub you will need to create a
directory called zipdownload and place the files in there, ignoring the
root directory in the downloaded archive

Config
======
The default config file is plugins/zipdownload/config.inc.php.dist
Rename this to plugins/zipdownload/config.inc.phpPKuc�\\��==identity_select/composer.jsonnu�[���{
    "name": "roundcube/identity_select",
    "type": "roundcube-plugin",
    "description": "On reply to a message user identity selection is based on\n\t\tcontent of standard headers like From, To, Cc and Return-Path.\n\t\tHere you can add header(s) set by your SMTP server (e.g.\n\t\tDelivered-To, Envelope-To, X-Envelope-To, X-RCPT-TO) to make\n\t\tidentity selection more accurate.",
    "license": "GPL-3.0-or-later",
    "version": "1.1",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKuc�\#�8HH#identity_select/identity_select.phpnu�[���<?php

/**
 * Identity selection based on additional message headers.
 *
 * On reply to a message user identity selection is based on
 * content of standard headers i.e. From, To, Cc and Return-Path.
 * Here you can add header(s) set by your SMTP server (e.g.
 * Delivered-To, Envelope-To, X-Envelope-To, X-RCPT-TO) to make
 * identity selection more accurate.
 *
 * Enable the plugin in config.inc.php and add your desired headers:
 *   $config['identity_select_headers'] = ['Delivered-To'];
 *
 * Note: 'Received' header is also supported, but has bigger impact
 *       on performance, as it's body is potentially much bigger
 *       than other headers used by Roundcube
 *
 * @author Aleksander Machniak <alec@alec.pl>
 * @license GNU GPLv3+
 */
class identity_select extends rcube_plugin
{
    public $task = 'mail';


    function init()
    {
        $this->add_hook('identity_select', [$this, 'select']);
        $this->add_hook('storage_init', [$this, 'storage_init']);
    }

    /**
     * Adds additional headers to supported headers list
     */
    function storage_init($p)
    {
        $rcmail = rcmail::get_instance();

        if ($add_headers = (array) $rcmail->config->get('identity_select_headers', [])) {
            $add_headers = strtoupper(join(' ', $add_headers));

            if (isset($p['fetch_headers'])) {
                $p['fetch_headers'] .= ' ' . $add_headers;
            }
            else {
                $p['fetch_headers'] = $add_headers;
            }
        }

        return $p;
    }

    /**
     * Identity selection
     */
    function select($p)
    {
        if ($p['selected'] !== null || empty($p['message']->headers)) {
            return $p;
        }

        $rcmail = rcmail::get_instance();

        foreach ((array) $rcmail->config->get('identity_select_headers', []) as $header) {
            if ($emails = $this->get_email_from_header($p['message'], $header)) {
                foreach ($p['identities'] as $idx => $ident) {
                    if (in_array($ident['email_ascii'], $emails)) {
                        $p['selected'] = $idx;
                        break 2;
                    }
                }
            }
        }

        return $p;
    }

    /**
     * Extract email address from specified message header
     */
    protected function get_email_from_header($message, $header)
    {
        $value = $message->headers->get($header, false);

        if (strtolower($header) == 'received') {
            // find first email address in all Received headers
            $email = null;
            foreach ((array) $value as $entry) {
                if (preg_match('/[\s\t]+for[\s\t]+<([^>]+)>/', $entry, $matches)) {
                    $email = $matches[1];
                    break;
                }
            }

            $value = $email;
        }

        return (array) $value;
    }
}
PKuc�\��j** password/helpers/chgsaslpasswd.cnu�[���#include <stdio.h>
#include <unistd.h>

// set the UID this script will run as (cyrus user)
#define UID 96
// set the path to saslpasswd or saslpasswd2
#define CMD "/usr/sbin/saslpasswd2"

/* INSTALLING:
  gcc -o chgsaslpasswd chgsaslpasswd.c
  chown cyrus.apache chgsaslpasswd
  strip chgsaslpasswd
  chmod 4550 chgsaslpasswd
*/

main(int argc, char *argv[])
{
  int rc,cc;

  cc = setuid(UID);
  rc = execvp(CMD, argv);
  if ((rc != 0) || (cc != 0))
  {
    fprintf(stderr, "__ %s:  failed %d  %d\n", argv[0], rc, cc);
    return 1;
  }

  return 0;
}
PKuc�\������password/helpers/passwd-expectnu�[���#
# This scripts changes a password on the local system or a remote host.
# Connections to the remote (this can also be localhost) are made by ssh, rsh,
# telnet or rlogin.

# @author  Gaudenz Steinlin <gaudenz@soziologie.ch>

# For sudo support alter sudoers (using visudo) so that it contains the
# following information (replace 'apache' if your webserver runs under another
# user):
# -----
# # Needed for Horde's passwd module
# Runas_Alias     REGULARUSERS = ALL, !root
# apache ALL=(REGULARUSERS) NOPASSWD:/usr/bin/passwd
# -----

# @stdin              The username, oldpassword, newpassword (in this order)
#                     will be taken from stdin
# @param -prompt      regexp for the shell prompt
# @param -password    regexp password prompt
# @param -oldpassword regexp for the old password
# @param -newpassword regexp for the new password
# @param -verify      regexp for verifying the password
# @param -success     regexp for success changing the password
# @param -login       regexp for the telnet prompt for the loginname
# @param -host        hostname to be connected
# @param -timeout     timeout for each step
# @param -log         file for writing error messages
# @param -output      file for logging the output
# @param -telnet      use telnet
# @param -ssh         use ssh (default)
# @param -rlogin      use rlogin
# @param -slogin      use slogin
# @param -sudo        use sudo
# @param -program     command for changing passwords
#
# @return             0 on success, 1 on failure
#


# default values
set host               "localhost"
set login              "ssh"
set program            "passwd"
set prompt_string      "(%|\\\$|>)"
set fingerprint_string "The authenticity of host.* can't be established.*\n(RSA|ECDSA) key fingerprint is.*\nAre you sure you want to continue connecting.*"
set password_string    "(P|p)assword.*"
set oldpassword_string "((O|o)ld|login|\\\(current\\\) UNIX) (P|p)assword.*"
set newpassword_string "(N|n)ew.* (P|p)assword.*"
set badoldpassword_string "(Authentication token manipulation error).*"
set badpassword_string "((passwd|BAD PASSWORD).*|(passwd|Bad:).*\r)"
set verify_string      "((R|r)e-*enter.*(P|p)assword|Retype new( UNIX)? password|(V|v)erification|(V|v)erify|(A|a)gain).*"
set success_string     "((P|p)assword.* changed|successfully)"
set login_string       "(((L|l)ogin|(U|u)sername).*)"
set timeout            20
set log                "/tmp/passwd.out"
set output             false
set output_file        "/tmp/passwd.log"

# read input from stdin
fconfigure stdin -blocking 1

gets stdin user
gets stdin password(old)
gets stdin password(new)

# alternative: read input from command line
#if {$argc < 3} {
#    send_user "Too few arguments: Usage $argv0 username oldpass newpass"
#    exit 1
#}
#set user [lindex $argv 0]
#set password(old) [lindex $argv 1]
#set password(new) [lindex $argv 2]

# no output to the user
log_user 0

# read in other options
for {set i 0} {$i<$argc} {incr i} {
    set arg [lindex $argv $i]
    switch -- $arg "-prompt" {
        incr i
        set prompt_string [lindex $argv $i]
        continue
    } "-password" {
        incr i
        set password_string [lindex $argv $i]
        continue
    } "-oldpassword" {
        incr i
        set oldpassword_string [lindex $argv $i]
        continue
    } "-newpassword" {
        incr i
        set newpassword_string [lindex $argv $i]
        continue
    } "-verify" {
        incr i
        set verify_string [lindex $argv $i]
        continue
    } "-success" {
        incr i
        set success_string [lindex $argv $i]
        continue
    } "-login" {
        incr i
        set login_string [lindex $argv $i]
        continue
    } "-host" {
        incr i
        set host [lindex $argv $i]
        continue
    } "-timeout" {
        incr i
        set timeout [lindex $argv $i]
        continue
    } "-log" {
        incr i
        set log [lindex $argv $i]
        continue
    } "-output" {
        incr i
        set output_file [lindex $argv $i]
        set output true
        continue
    } "-telnet" {
        set login "telnet"
        continue
    } "-ssh" {
        set login "ssh"
        continue
    } "-ssh-exec" {
        set login "ssh-exec"
        continue
    } "-rlogin" {
        set login "rlogin"
        continue
    } "-slogin" {
        set login "slogin"
        continue
    } "-sudo" {
        set login "sudo"
        continue
    } "-program" {
        incr i
        set program [lindex $argv $i]
        continue
    }
}

# log session
if {$output} {
   log_file $output_file
}

set err [open $log "w" "0600"]

# start remote session
if {[string match $login "rlogin"]} {
   set pid [spawn rlogin $host -l $user]
} elseif {[string match $login "slogin"]} {
   set pid [spawn slogin $host -l $user]
} elseif {[string match $login "ssh"]} {
   set pid [spawn ssh $host -l $user]
} elseif {[string match $login "ssh-exec"]} {
   set pid [spawn ssh $host -l $user $program]
} elseif {[string match $login "sudo"]} {
   set pid [spawn sudo -u $user $program]
} elseif {[string match $login "telnet"]} {
   set pid [spawn telnet $host]
   expect -re $login_string {
     sleep .5
     send "$user\r"
   }
} else {
   puts $err "Invalid login mode. Valid modes: rlogin, slogin, ssh, telnet, sudo\n"
   close $err
   exit 1
}

set old_password_notentered true

if {![string match $login "sudo"]} {
  # log in
  expect {
    -re $fingerprint_string {sleep .5
                             send yes\r
                             exp_continue}
    -re $password_string    {sleep .5
                             send $password(old)\r}
    timeout                 {puts $err "Could not login to system (no password prompt)\n"
                             close $err
                             exit 1}
  }

  # start password changing program
  expect {
    -re $prompt_string      {sleep .5
                             send $program\r}
    # The following is for when passwd is the login shell or ssh-exec is used
    -re $oldpassword_string {sleep .5
                             send $password(old)\r
                             set old_password_notentered false}
    timeout                 {puts $err  "Could not login to system (bad old password?)\n"
                             close $err
                             exit 1}
  }
}

# send old password
if {$old_password_notentered} {
  expect {
    -re $oldpassword_string {sleep .5
                             send $password(old)\r}
    timeout                 {puts $err "Could not start passwd program (no old password prompt)\n"
                             close $err
                             exit 1}
  }
}

# send new password
expect {
  -re $newpassword_string {sleep .5
                           send $password(new)\r}
  -re $badoldpassword_string {puts $err "Old password is incorrect\n"
                           close $err
                           exit 1}
  timeout                 {puts "Could not change password (bad old password?)\n"
                           close $err
                           exit 1}
}

# send new password again
expect {
  -re $badpassword_string {puts $err "$expect_out(0,string)"
                           close $err
                           send \003
                           sleep .5
                           exit 1}
  -re $verify_string      {sleep .5
                           send $password(new)\r}
  timeout                 {puts $err "New password not valid (too short, bad password, too similar, ...)\n"
                           close $err
                           send \003
                           sleep .5
                           exit 1}
}

# check response
expect {
  -re $success_string {sleep .5
                       send exit\r}
  -re $badpassword_string {puts $err "$expect_out(0,string)"
                           close $err
                           exit 1}
  timeout             {puts $err "Could not change password.\n"
                       close $err
                       exit 1}
}

# exit successfully
expect {
  eof {close $err
       exit 0}
}
close $err
PKuc�\Rx �Y
Y
$password/helpers/change_ldap_pass.plnu�[���#!/usr/bin/perl
=pod
Script to change the LDAP password using the set_password method
to proper setting the password policy attributes
author: Zbigniew Szmyd (zbigniew.szmyd@linseco.pl)
version 1.0 2016-02-22
=cut

use Net::LDAP;
use Net::LDAP::Extension::SetPassword;
use URI;
use utf8;
binmode(STDOUT, ':utf8');

my %PAR = ();
if (my $param = shift @ARGV){
    print "Password change in LDAP\n\n";
    print "Run script without any parameter and pass the following data:\n";
    print "URI\nbaseDN\nFilter\nbindDN\nbindPW\nLogin\nuserPass\nnewPass\nCAfile\n";
    exit;
}

foreach my $param ('uri','base','filter','binddn','bindpw','user','pass','new_pass','ca'){
    $PAR{$param} = <>;
    $PAR{$param} =~ s/\r|\n//g;
}

my @servers = split (/\s+/, $PAR{'uri'});
my $active_server = 0;

my $ldap;
while ((my $server = shift @servers) && !($active_server)) {
    my $ldap_uri = URI->new($server);
    if ($ldap_uri->secure) {
        $ldap = Net::LDAP->new($ldap_uri->as_string,
            version => 3,
            verify  => 'require',
            sslversion => 'tlsv1',
            cafile  => $PAR{'ca'});
    } else {
        $ldap = Net::LDAP->new($ldap_uri->as_string, version => 3);
    }
    $active_server = 1 if ($ldap);
}

if ($active_server) {
    my $mesg = $ldap->bind($PAR{'binddn'}, password => $PAR{'bindpw'});
    if ($mesg->code != 0) {
        print "Cannot login: ". $mesg->error;
    } else {
        # Wyszukanie users wg filtra
        $PAR{'filter'} =~ s/\%login/$PAR{'user'}/;
        my @search_args = (
            base => $PAR{'base'},
            scope  => 'sub',
            filter => $PAR{'filter'},
            attrs  => ['1.1'],
        );
        my $result = $ldap->search(@search_args);
        if ($result->code) {
            print $result->error;
        } else {
            my $count = $result->count;
            if ($count == 1) {
                my @users = $result->entries;
                my $dn = $users[0]->dn();
                $result = $ldap->bind($dn, password => $PAR{'pass'});
                if ($result->code){
                    print $result->error;
                } else {
                    $result = $ldap->set_password(newpasswd => $PAR{'new_pass'});
                    if ($result->code) {
                        print $result->error;
                    } else {
                        print "OK";
                    }
                }
            } else {
                print "User not found in LDAP\n" if $count == 0;
                print "Found $count users\n";
            }
        }
    }
    $ldap->unbind();
} else {
    print "Cannot connect to any server";
}
PKuc�\����&password/helpers/chgvirtualminpasswd.cnu�[���#include <stdio.h>
#include <unistd.h>

// set the UID this script will run as (root user)
#define UID 0
#define CMD "/usr/sbin/virtualmin"

/* INSTALLING:
  gcc -o chgvirtualminpasswd chgvirtualminpasswd.c
  chown root.apache chgvirtualminpasswd
  strip chgvirtualminpasswd
  chmod 4550 chgvirtualminpasswd
*/

main(int argc, char *argv[])
{
  int rc,cc;

  cc = setuid(UID);
  rc = execvp(CMD, argv);
  if ((rc != 0) || (cc != 0))
  {
    fprintf(stderr, "__ %s:  failed %d  %d\n", argv[0], rc, cc);
    return 1;
  }

  return 0;
}
PKuc�\��3!password/helpers/chgdbmailusers.cnu�[���#include <stdio.h>
#include <unistd.h>

// set the UID this script will run as (root user)
#define UID 0
#define CMD "/usr/sbin/dbmail-users"

/* INSTALLING:
  gcc -o chgdbmailusers chgdbmailusers.c
  chown root.apache chgdbmailusers
  strip chgdbmailusers
  chmod 4550 chgdbmailusers
*/

main(int argc, char *argv[])
{
  int rc, cc;

  cc = setuid(UID);
  rc = execvp(CMD, argv);

  if ((rc != 0) || (cc != 0))
  {
    fprintf(stderr, "__ %s:  failed %d  %d\n", argv[0], rc, cc);
    return 1;
  }

  return 0;
}
PKuc�\u1���"password/helpers/chpass-wrapper.pynu�[���#!/usr/bin/env python

import sys
import pwd
import subprocess

BLACKLIST = (
    # add blacklisted users here
    #'user1',
)

try:
    username, password = sys.stdin.readline().split(':', 1)
except ValueError:
    sys.exit('Malformed input')

try:
    user = pwd.getpwnam(username)
except KeyError:
    sys.exit('No such user: %s' % username)

if user.pw_uid < 1000:
    sys.exit('Changing the password for user id < 1000 is forbidden')

if username in BLACKLIST:
    sys.exit('Changing password for user %s is forbidden (user blacklisted)' %
             username)

handle = subprocess.Popen('/usr/sbin/chpasswd', stdin = subprocess.PIPE, universal_newlines = True)
handle.communicate('%s:%s' % (username, password))

sys.exit(handle.returncode)
PKuc�\�B�y��password/composer.jsonnu�[���{
    "name": "roundcube/password",
    "type": "roundcube-plugin",
    "description": "Password Change for Roundcube. Plugin adds a possibility to change user password using many methods (drivers) via Settings/Password tab.",
    "license": "GPL-3.0-or-later",
    "version": "5.3",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKuc�\oOᬊ�password/password.min.jsnu�[���/**
 * Password plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
window.rcmail&&rcmail.addEventListener("init",function(a){rcmail.env.password_disabled?($("#password-form input").prop("disabled",!0),rcmail.reload(178e3)):(rcmail.register_command("plugin.password-save",function(){var a=rcube_find_object("_curpasswd"),r=rcube_find_object("_newpasswd"),s=rcube_find_object("_confpasswd");a&&""==a.value?rcmail.alert_dialog(rcmail.get_label("nocurpassword","password"),function(){return a.focus(),!0}):r&&""==r.value?rcmail.alert_dialog(rcmail.get_label("nopassword","password"),function(){return r.focus(),!0}):s&&""==s.value?rcmail.alert_dialog(rcmail.get_label("nopassword","password"),function(){return s.focus(),!0}):r&&s&&r.value!=s.value?rcmail.alert_dialog(rcmail.get_label("passwordinconsistency","password"),function(){return r.focus(),!0}):rcmail.gui_objects.passform.submit()},!0),$("input:not(:hidden)").first().focus())});
PKuc�\�����password/password.jsnu�[���/**
 * Password plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

window.rcmail && rcmail.addEventListener('init', function(evt) {
    if (rcmail.env.password_disabled) {
        $('#password-form input').prop('disabled', true);
        // reload page after ca. 3 minutes
        rcmail.reload(3 * 60 * 1000 - 2000);
        return;
    }

    // register command handler
    rcmail.register_command('plugin.password-save', function() {
        var input_curpasswd = rcube_find_object('_curpasswd'),
            input_newpasswd = rcube_find_object('_newpasswd'),
            input_confpasswd = rcube_find_object('_confpasswd');

      if (input_curpasswd && input_curpasswd.value == '') {
          rcmail.alert_dialog(rcmail.get_label('nocurpassword', 'password'), function() {
              input_curpasswd.focus();
              return true;
            });
      }
      else if (input_newpasswd && input_newpasswd.value == '') {
          rcmail.alert_dialog(rcmail.get_label('nopassword', 'password'), function() {
              input_newpasswd.focus();
              return true;
            });
      }
      else if (input_confpasswd && input_confpasswd.value == '') {
          rcmail.alert_dialog(rcmail.get_label('nopassword', 'password'), function() {
              input_confpasswd.focus();
              return true;
            });
      }
      else if (input_newpasswd && input_confpasswd && input_newpasswd.value != input_confpasswd.value) {
          rcmail.alert_dialog(rcmail.get_label('passwordinconsistency', 'password'), function() {
              input_newpasswd.focus();
              return true;
            });
      }
      else {
          rcmail.gui_objects.passform.submit();
      }
    }, true);

    $('input:not(:hidden)').first().focus();
});
PKuc�\\���
�
!password/drivers/ldap_ppolicy.phpnu�[���<?php

/**
 * ldap_ppolicy driver
 *
 * Driver that adds functionality to change the user password via
 * the 'change_ldap_pass.pl' command respecting password policy (history) in LDAP.
 *
 * @version 1.0
 * @author Zbigniew Szmyd <zbigniew.szmyd@linseco.pl>
 */

class rcube_ldap_ppolicy_password
{
    protected $debug = false;

    public function save($currpass, $newpass, $username)
    {
        $rcmail = rcmail::get_instance();
        $this->debug = $rcmail->config->get('ldap_debug');

        $cmd    = $rcmail->config->get('password_ldap_ppolicy_cmd');
        $uri    = $rcmail->config->get('password_ldap_ppolicy_uri');
        $baseDN = $rcmail->config->get('password_ldap_ppolicy_basedn');
        $filter = $rcmail->config->get('password_ldap_ppolicy_search_filter');
        $bindDN = $rcmail->config->get('password_ldap_ppolicy_searchDN');
        $bindPW = $rcmail->config->get('password_ldap_ppolicy_searchPW');
        $cafile = $rcmail->config->get('password_ldap_ppolicy_cafile');

        $log_dir = $rcmail->config->get('log_dir');

        if (empty($log_dir)) {
            $log_dir = RCUBE_INSTALL_PATH . 'logs';
        }

        $descriptorspec = [
            0 => ["pipe", "r"], // stdin is a pipe that the child will read from
            1 => ["pipe", "w"], // stdout is a pipe that the child will write to
            2 => ["pipe", "w"]  // stderr is a pipe that the child will write to
        ];

        $cmd = 'plugins/password/helpers/'. $cmd;

        $this->_debug('Policy request: ' . json_encode([
            'user'   => $username,
            'cmd'    => $cmd,
            'uri'    => $uri,
            'baseDN' => $baseDN,
            'filter' => $filter,
        ]));

        $process = proc_open($cmd, $descriptorspec, $pipes);

        if ($process) {
            // $pipes now looks like this:
            // 0 => writeable handle connected to child stdin
            // 1 => readable handle connected to child stdout
            // Any error output will be appended to /tmp/error-output.txt

            fwrite($pipes[0], $uri."\n");
            fwrite($pipes[0], $baseDN."\n");
            fwrite($pipes[0], $filter."\n");
            fwrite($pipes[0], $bindDN."\n");
            fwrite($pipes[0], $bindPW."\n");
            fwrite($pipes[0], $username."\n");
            fwrite($pipes[0], $currpass."\n");
            fwrite($pipes[0], $newpass."\n");
            fwrite($pipes[0], $cafile);

            $result = trim(stream_get_contents($pipes[1]));
            $stderr = trim(stream_get_contents($pipes[2]));

            fclose($pipes[0]);
            fclose($pipes[1]);
            fclose($pipes[2]);
            proc_close($process);

            $this->_debug('Policy result: ' . $result);

            switch ($result) {
            case "OK":
                return PASSWORD_SUCCESS;
            case "Password is in history of old passwords":
                return  PASSWORD_IN_HISTORY;
            case "Cannot connect to any server":
                return PASSWORD_CONNECT_ERROR;
            default:
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Failed to execute command: $cmd. Output: $result. Error: $stderr"
                    ], true, false);
            }
        }

        return PASSWORD_ERROR;
    }

    private function _debug($str)
    {
        if ($this->debug) {
            rcube::write_log('ldap', $str);
        }
    }
}
PKuc�\�:�A

password/drivers/miab.phpnu�[���<?php

/**
 * Mail-in-a-Box Driver
 *
 * Driver that adds functionality to change the user password via the
 * API endpoint of Mail-in-a-Box (https://mailinabox.email/).
 *
 * For installation instructions please read the README file. It requires
 * following parameters in configuration:
 *
 * - password_miab_username - name of the admin user used to access api
 * - password_miab_password - password of the admin user used to access api
 * - password_miab_url - the url to the control panel of Mail-in-a-Box
 *
 * @version 1.0
 * @author Alexey Shtokalo <alexey@shtokalo.net>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_miab_password
{
    public function save($currpass, $newpass, $username)
    {
        $config = rcmail::get_instance()->config;
        $host   = rtrim($config->get('password_miab_url'), '/') . '/mail/users/password';

        try {
            $client = password::get_http_client();

            $request = [
                'form_params' => [
                    'email'    => $username,
                    'password' => $newpass,
                ],
                'auth' => [
                    $config->get('password_miab_user') ?: $username,
                    $config->get('password_miab_pass') ?: $currpass,
                ],
            ];

            $response = $client->post($host, $request);

            if (
                $response->getStatusCode() == 200
                && trim($result = $response->getBody()) === 'OK'
            ) {
                return PASSWORD_SUCCESS;
            }
        }
        catch (Exception $e) {
            $result = $e->getMessage();
        }

        rcube::raise_error([
                'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                'message' => "Password plugin: Unable to change password. $result",
            ],
            true, false
        );

        return PASSWORD_ERROR;
    }
}
PKuc�\5#�L	L	password/drivers/tinycp.phpnu�[���<?php
/**
 * TinyCP driver
 *
 * Enable the password driver in Roundcube (https://roundcube.net/) for the
 * TinyCP Lightweight Linux Control Panel (https://tinycp.com/).
 * See README for instructions, Connector Required.
 *
 * @version 1.2
 * @author Ricky Mendoza (HelloWorld@rickymendoza.dev)
 * 
 * Copyright (C) 2020 Ricky Mendoza
 *
 * 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 3 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, see <https://www.gnu.org/licenses/>.
 */

class rcube_tinycp_password
{
    public function save($currpass, $newpass, $username)
    {
        require_once 'TinyCPConnector.php';

        $tinycp_host   = rcmail::get_instance()->config->get('password_tinycp_host');
        $tinycp_port   = rcmail::get_instance()->config->get('password_tinycp_port');
        $tinycp_user   = rcmail::get_instance()->config->get('password_tinycp_user');
        $tinycp_pass   = rcmail::get_instance()->config->get('password_tinycp_pass');
        $error_message = '';

        if ($tinycp_host && $tinycp_port && $tinycp_user && $tinycp_pass) {
            try {
                $tcp = new TinyCPConnector($tinycp_host, $tinycp_port);
                $tcp->Auth($tinycp_user, $tinycp_pass);
                $tcp->mail___mailserver___email_pass_change2($username, $newpass);
            }
            catch (Exception $e) {
                $error_message = $e->getMessage();
            }
        }
        else {
            $error_message = "Missing configuration value(s). ";
        }

        if ($error_message) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password driver: $error_message",
                ],
                true, false
            );

            return PASSWORD_ERROR;
        }

        return PASSWORD_SUCCESS;
    }
}
PKuc�\V�6Hxxpassword/drivers/pwned.phpnu�[���<?php

/**
 * Have I Been Pwned Password Strength Driver
 *
 * Driver to check passwords using HIBP:
 * https://haveibeenpwned.com/Passwords
 *
 * This driver will return a strength of:
 *     3: if the password WAS NOT found in HIBP
 *     1: if the password WAS found in HIBP
 *     2: if there was an ERROR retrieving data.
 *
 * To use this driver, configure (in ../config.inc.php):
 *
 * $config['password_strength_driver'] = 'pwned';
 * $config['password_minimum_score'] = 3;
 *
 * Set the minimum score to 3 if you want to make sure that all
 * passwords are successfully checked against HIBP (recommended).
 *
 * Set it to 2 if you still want to accept passwords in case a
 * HIBP check fails for some (technical) reason.
 *
 * Setting the minimum score to 1 or less effectively renders
 * the checks useless, as all passwords would be accepted.
 * Setting it to 4 or more will effectively reject all passwords.
 *
 * This driver will only return a maximum score of 3 because not
 * being listed in HIBP does not necessarily mean that the
 * password is a good one. It is therefore recommended to also
 * configure a minimum length for the password.
 *
 * Background reading (don't worry, your passwords are not sent anywhere):
 * https://www.troyhunt.com/ive-just-launched-pwned-passwords-version-2/#cloudflareprivacyandkanonymity
 *
 * @version 1.0
 * @author Christoph Langguth
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_pwned_password
{
    // API URL. Note: the trailing slash is mandatory.
    const API_URL = 'https://api.pwnedpasswords.com/range/';

    // See https://www.troyhunt.com/enhancing-pwned-passwords-privacy-with-padding/
    const ENHANCED_PRIVACY_CURL = 1;

    // Score constants, these directly correspond to the score that is returned.
    const SCORE_LISTED = 1;
    const SCORE_ERROR = 2;
    const SCORE_NOT_LISTED = 3;

    /**
     * Rule description.
     *
     * @return array human-readable description of the check rule.
     */
    function strength_rules()
    {
        $rc = rcmail::get_instance();
        $href = 'https://haveibeenpwned.com/Passwords';

        return [$rc->gettext(['name' => 'password.pwned_mustnotbedisclosed', 'vars' => ['href' => $href]])];
    }

    /**
     * Password strength check.
     * Return values:
     *     1 - if password is definitely compromised.
     *     2 - if status for password can't be determined (network failures etc.)
     *     3 - if password is not publicly known to be compromised.
     *
     * @param string $passwd Password
     *
     * @return array password score (1 to 3) and (optional) reason message
     */
    function check_strength($passwd)
    {
        $score   = $this->check_pwned($passwd);
        $message = null;

        if ($score !== self::SCORE_NOT_LISTED) {
            $rc = rcmail::get_instance();
            if ($score === self::SCORE_LISTED) {
                $message = $rc->gettext('password.pwned_isdisclosed');
            }
            else {
                $message = $rc->gettext('password.pwned_fetcherror');
            }
        }

        return [$score, $message];
    }

    /**
     * Check password using HIBP.
     *
     * @param string $passwd
     *
     * @return int score, one of the SCORE_* constants (between 1 and 3).
     */
    function check_pwned($passwd)
    {
        // initialize with error score
        $result = self::SCORE_ERROR;

        if (!$this->can_retrieve()) {
            // Log the fact that we cannot check because of configuration error.
            rcube::raise_error("Need curl or allow_url_fopen to check password strength with 'pwned'", true, true);
        }
        else {
            list($prefix, $suffix) = $this->hash_split($passwd);

            $suffixes = $this->retrieve_suffixes(self::API_URL . $prefix);

            if ($suffixes) {
                $result = $this->check_suffix_in_list($suffix, $suffixes);
            }
        }

        return $result;
    }

    function hash_split($passwd)
    {
        $hash   = strtolower(sha1($passwd));
        $prefix = substr($hash, 0, 5);
        $suffix = substr($hash, 5);

        return [$prefix, $suffix];
    }

    function can_retrieve()
    {
        return $this->can_curl() || $this->can_fopen();
    }

    function can_curl()
    {
        return function_exists('curl_init');
    }

    function can_fopen()
    {
        return ini_get('allow_url_fopen');
    }

    function retrieve_suffixes($url)
    {
        if ($this->can_curl()) {
            return $this->retrieve_curl($url);
        }
        else {
            return $this->retrieve_fopen($url);
        }
    }

    function retrieve_curl($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        if (self::ENHANCED_PRIVACY_CURL == 1) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, ['Add-Padding: true']);
        }
        $output = curl_exec($ch);
        curl_close($ch);

        return $output;
    }

    function retrieve_fopen($url)
    {
        $output = '';
        $ch = fopen($url, 'r');
        while (!feof($ch)) {
            $output .= fgets($ch);
        }
        fclose($ch);

        return $output;
    }

    function check_suffix_in_list($candidate, $list)
    {
        // initialize to error in case there are no lines at all
        $result = self::SCORE_ERROR;

        foreach (preg_split('/[\r\n]+/', $list) as $line) {
            $line = strtolower($line);

            if (preg_match('/^([0-9a-f]{35}):(\d+)$/', $line, $matches)) {
                if ($matches[2] > 0 && $matches[1] === $candidate) {
                    // more than 0 occurrences, and suffix matches
                    // -> password is compromised
                    return self::SCORE_LISTED;
                }

                // valid line, not matching the current password
                $result = self::SCORE_NOT_LISTED;
            }
            else {
                // invalid line
                return self::SCORE_ERROR;
            }
        }

        return $result;
    }
}
PKuc�\���|�	�	password/drivers/smb.phpnu�[���<?php

/**
 * smb Driver
 *
 * Driver that adds functionality to change the systems user password via
 * the 'smbpasswd' command.
 *
 * For installation instructions please read the README file.
 *
 * @version 2.0
 * @author Andy Theuninck <gohanman@gmail.com)
 *
 * Based on chpasswd roundcubemail password driver by
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk)
 * and smbpasswd horde passwd driver by
 * @author  Rene Lund Jensen <Rene@lundjensen.net>
 *
 * Configuration settings:
 * password_smb_host    => samba host (default: localhost)
 * password_smb_cmd => smbpasswd binary (default: /usr/bin/smbpasswd)
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_smb_password
{

    public function save($currpass, $newpass, $username)
    {
        $host     = rcmail::get_instance()->config->get('password_smb_host', 'localhost');
        $bin      = rcmail::get_instance()->config->get('password_smb_cmd', '/usr/bin/smbpasswd');
        $host     = rcube_utils::parse_host($host);
        $tmpfile  = tempnam(sys_get_temp_dir(), 'smb');
        $cmd      = $bin . ' -r ' . escapeshellarg($host) . ' -s -U ' . escapeshellarg($username) . ' > ' . $tmpfile . ' 2>&1';
        $handle   = @popen($cmd, 'w');

        fwrite($handle, $currpass."\n");
        fwrite($handle, $newpass."\n");
        fwrite($handle, $newpass."\n");
        @pclose($handle);
        $res = file($tmpfile);
        unlink($tmpfile);

        if (strstr($res[count($res) - 1], 'Password changed for user') !== false) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $cmd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKuc�\��Ƨoopassword/drivers/ldap_exop.phpnu�[���<?php

/**
 * LDAP - Password Modify Extended Operation Driver
 *
 * Driver for passwords stored in LDAP
 * This driver is based on Simple LDAP Password Driver, but uses
 * Password Modify Extended Operation
 * PHP >= 7.2 required
 *
 * @version 1.0
 * @author Peter Kubica <peter@kubica.ch>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

require_once __DIR__ . '/ldap_simple.php';

class rcube_ldap_exop_password extends rcube_ldap_simple_password
{
    function save($curpass, $passwd)
    {
        if (!function_exists('ldap_exop_passwd')) {
            rcube::raise_error([
                    'code' => 100, 'type' => 'ldap',
                    'file' => __FILE__, 'line' => __LINE__,
                    'message' => "ldap_exop_passwd not supported"
                ],
                true
            );

            return PASSWORD_ERROR;
        }

        // Connect and bind
        $ret = $this->connect($curpass);
        if ($ret !== true) {
            return $ret;
        }

        if (!ldap_exop_passwd($this->conn, $this->user, $curpass, $passwd)) {
            $this->_debug("S: ".ldap_error($this->conn));

            $errno = ldap_errno($this->conn);

            ldap_unbind($this->conn);

            if ($errno == 0x13) {
                return PASSWORD_CONSTRAINT_VIOLATION;
            }

            return PASSWORD_CONNECT_ERROR;
        }

        $this->_debug("S: OK");

        // All done, no error
        ldap_unbind($this->conn);

        return PASSWORD_SUCCESS;
    }
}
PKvc�\�Kr�++password/drivers/plesk.phpnu�[���<?php

/**
 * Roundcube Password Driver for Plesk-RPC.
 *
 * This driver changes a E-Mail-Password via Plesk-RPC
 * Deps: PHP-Curl, SimpleXML
 *
 * @author     Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
 * @copyright  Adfinis SyGroup AG, 2014
 *
 * Config needed:
 * $config['password_plesk_host']     = '10.0.0.5';
 * $config['password_plesk_user']     = 'admin';
 * $config['password_plesk_pass']     = 'pass';
 * $config['password_plesk_rpc_port'] = 8443;
 * $config['password_plesk_rpc_path'] = enterprise/control/agent.php;
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

/**
 * Roundcube Password Driver Class
 *
 * See {ROUNDCUBE_ROOT}/plugins/password/README for API description
 *
 * @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
 */
class rcube_plesk_password
{
    /**
     * This method is called from roundcube to change the password
     *
     * roundcube already validated the old password so we just need to change it at this point
     *
     * @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
     * @param string $currpass Current password
     * @param string $newpass  New password
     * @return int PASSWORD_SUCCESS|PASSWORD_ERROR
     */
    function save($currpass, $newpass, $username)
    {
        // get config
        $rcmail = rcmail::get_instance();
        $host   = $rcmail->config->get('password_plesk_host');
        $user   = $rcmail->config->get('password_plesk_user');
        $pass   = $rcmail->config->get('password_plesk_pass');
        $port   = $rcmail->config->get('password_plesk_rpc_port');
        $path   = $rcmail->config->get('password_plesk_rpc_path');

        // create plesk-object
        $plesk = new plesk_rpc;
        $plesk->init($host, $port, $path, $user, $pass);

        // try to change password and return the status
        $result = $plesk->change_mailbox_password($username, $newpass);
        //$plesk->destroy();

        if ($result == "ok") {
            return PASSWORD_SUCCESS;
        } elseif (is_array($result)) {
            return $result;
        }

        return PASSWORD_ERROR;
    }
}


/**
 * Plesk RPC-Class
 *
 * Striped down version of Plesk-RPC-Class
 * Just functions for changing mail-passwords included
 *
 * Documentation of Plesk RPC-API: http://download1.parallels.com/Plesk/PP11/11.0/Doc/en-US/online/plesk-api-rpc/
 *
 * @author Cyrill von Wattenwyl <cyrill.vonwattenwyl@adfinis-sygroup.ch>
 */
class plesk_rpc
{
    protected $old_version = false;
    protected $curl;

    /**
     * init plesk-rpc via curl
     *
     * @param string $host plesk host
     * @param string $port plesk rpc port
     * @param string $path plesk rpc path
     * @param string $user plesk user
     * @param string $user plesk password
     * @returns void
     */
    function init($host, $port, $path, $user, $pass)
    {
        $headers = [
            sprintf("HTTP_AUTH_LOGIN: %s", $user),
            sprintf("HTTP_AUTH_PASSWD: %s", $pass),
            "Content-Type: text/xml"
        ];

        $url        = sprintf("https://%s:%s/%s", $host, $port, $path);
        $this->curl = curl_init();

        curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT , 5);
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST , 0);
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER , false);
        curl_setopt($this->curl, CURLOPT_HTTPHEADER     , $headers);
        curl_setopt($this->curl, CURLOPT_URL            , $url);
    }

    /**
     * send a request to the plesk
     *
     * @param string $packet XML-Packet to send to Plesk
     *
     * @returns string Response body
     */
    function send_request($packet)
    {
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($this->curl, CURLOPT_POSTFIELDS, $packet);
        $result = curl_exec($this->curl);

        return $result && strpos($result, '<?xml') === 0 ? $result : null;
    }

    /**
     * close curl
     */
    function destroy()
    {
        curl_close($this->curl);
    }

    /**
     * Get all hosting-information of a domain
     *
     * @param string $domain domain-name
     * @returns object SimpleXML object
     */
    function domain_info($domain)
    {
        // build xml
        $request = new SimpleXMLElement("<packet></packet>");
        $site    = $request->addChild("site");
        $get     = $site->addChild("get");
        $filter  = $get->addChild("filter");

        $filter->addChild("name", utf8_encode($domain));
        $dataset = $get->addChild("dataset");

        $dataset->addChild("hosting");
        $packet = $request->asXML();
        $xml    = null;

        // send the request and make it to simple-xml-object
        if ($res = $this->send_request($packet)) {
            $xml = new SimpleXMLElement($res);
        }

        // Old Plesk versions require version attribute, add it and try again
        if ($xml && $xml->site->get->result->status == 'error' && $xml->site->get->result->errcode == 1017) {
            $request->addAttribute("version", "1.6.3.0");
            $packet = $request->asXML();

            $this->old_version = true;

            // send the request and make it to simple-xml-object
            if ($res = $this->send_request($packet)) {
                $xml = new SimpleXMLElement($res);
            }
        }

        return $xml;
    }

    /**
     * Get psa-id of a domain
     *
     * @param string $domain domain-name
     *
     * @returns int Domain ID
     */
    function get_domain_id($domain)
    {
        if ($xml = $this->domain_info($domain)) {
            return intval($xml->site->get->result->id);
        }
    }

    /**
     * Change Password of a mailbox
     *
     * @param string $mailbox full email-address (user@domain.tld)
     * @param string $newpass new password of mailbox
     *
     * @returns bool
     */
    function change_mailbox_password($mailbox, $newpass)
    {
        list($user, $domain) = explode("@", $mailbox);
        $domain_id = $this->get_domain_id($domain);

        // if domain cannot be resolved to an id, do not continue
        if (!$domain_id) {
            return false;
        }

        // build xml-packet
        $request = new SimpleXMLElement("<packet></packet>");
        $mail    = $request->addChild("mail");
        $update  = $mail->addChild("update");
        $add     = $update->addChild("set");
        $filter  = $add->addChild("filter");
        $filter->addChild("site-id", $domain_id);

        $mailname = $filter->addChild("mailname");
        $mailname->addChild("name", $user);

        $password = $mailname->addChild("password");
        $password->addChild("value", $newpass);
        $password->addChild("type", "plain");

        if ($this->old_version) {
            $request->addAttribute("version", "1.6.3.0");
        }

        $packet = $request->asXML();

        // send the request to plesk
        if ($res = $this->send_request($packet)) {
            $xml = new SimpleXMLElement($res);
            $res = strval($xml->mail->update->set->result->status);

            if ($res != "ok") {
                $res = [
                    'code' => PASSWORD_ERROR,
                    'message' => strval($xml->mail->update->set->result->errtext)
                ];
            }

            return $res;
        }

        return false;
    }
}
PKvc�\ _�]��password/drivers/vpopmaild.phpnu�[���<?php

/**
 * vpopmail Password Driver
 *
 * Driver to change passwords via vpopmaild
 *
 * @version 2.0
 * @author Johannes Hessellund
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_vpopmaild_password
{
    function save($curpass, $passwd, $username)
    {
        $rcmail    = rcmail::get_instance();
        $vpopmaild = new Net_Socket();
        $host      = $rcmail->config->get('password_vpopmaild_host');
        $port      = $rcmail->config->get('password_vpopmaild_port');

        $result = $vpopmaild->connect($host, $port, null);
        if (is_a($result, 'PEAR_Error')) {
            return PASSWORD_CONNECT_ERROR;
        }

        $vpopmaild->setTimeout($rcmail->config->get('password_vpopmaild_timeout'),0);

        $result = $vpopmaild->readLine();
        if(!preg_match('/^\+OK/', $result)) {
            $vpopmaild->disconnect();
            return PASSWORD_CONNECT_ERROR;
        }

        $vpopmaild->writeLine("slogin ". $username . " " . $curpass);
        $result = $vpopmaild->readLine();

        if(!preg_match('/^\+OK/', $result) ) {
            $vpopmaild->writeLine("quit");
            $vpopmaild->disconnect();
            return PASSWORD_ERROR;
        }

        $vpopmaild->writeLine("mod_user ". $username);
        $vpopmaild->writeLine("clear_text_password ". $passwd);
        $vpopmaild->writeLine(".");
        $result = $vpopmaild->readLine();
        $vpopmaild->writeLine("quit");
        $vpopmaild->disconnect();

        if (!preg_match('/^\+OK/', $result)) {
            return PASSWORD_ERROR;
        }

        return PASSWORD_SUCCESS;
    }
}
PKvc�\`��Q$Q$ password/drivers/ldap_simple.phpnu�[���<?php

/**
 * Simple LDAP Password Driver
 *
 * Driver for passwords stored in LDAP
 * This driver is based on Edouard's LDAP Password Driver, but does not
 * require PEAR's Net_LDAP2 to be installed
 *
 * @version 2.1
 * @author Wout Decre <wout@canodus.be>
 * @author Aleksander Machniak <machniak@kolabsys.com>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_ldap_simple_password
{
    protected $debug = false;
    protected $user;
    protected $conn;


    public function save($curpass, $passwd)
    {
        $rcmail = rcmail::get_instance();

        $lchattr      = $rcmail->config->get('password_ldap_lchattr');
        $pwattr       = $rcmail->config->get('password_ldap_pwattr', 'userPassword');
        $smbpwattr    = $rcmail->config->get('password_ldap_samba_pwattr');
        $smblchattr   = $rcmail->config->get('password_ldap_samba_lchattr');
        $samba        = $rcmail->config->get('password_ldap_samba');
        $pass_mode    = $rcmail->config->get('password_ldap_encodage', 'md5-crypt');
        $crypted_pass = password::hash_password($passwd, $pass_mode);

        // Support password_ldap_samba option for backward compat.
        if ($samba && !$smbpwattr) {
            $smbpwattr  = 'sambaNTPassword';
            $smblchattr = 'sambaPwdLastSet';
        }

        // Crypt new password
        if (!$crypted_pass) {
            return PASSWORD_CRYPT_ERROR;
        }

        // Crypt new Samba password
        if ($smbpwattr && !($samba_pass = password::hash_password($passwd, 'samba'))) {
            return PASSWORD_CRYPT_ERROR;
        }

        // Connect and bind
        $ret = $this->connect($curpass);
        if ($ret !== true) {
            return $ret;
        }

        $entry[$pwattr] = $crypted_pass;

        // Update PasswordLastChange Attribute if desired
        if ($lchattr) {
            $entry[$lchattr] = (int)(time() / 86400);
        }

        // Update Samba password
        if ($smbpwattr) {
            $entry[$smbpwattr] = $samba_pass;
        }

        // Update Samba password last change
        if ($smblchattr) {
            $entry[$smblchattr] = time();
        }

        $this->_debug("C: Modify {$this->user}: " . print_r($entry, true));

        if (!ldap_modify($this->conn, $this->user, $entry)) {
            $this->_debug("S: ".ldap_error($this->conn));

            $errno = ldap_errno($this->conn);

            ldap_unbind($this->conn);

            if ($errno == 0x13) {
                return PASSWORD_CONSTRAINT_VIOLATION;
            }

            return PASSWORD_CONNECT_ERROR;
        }

        $this->_debug("S: OK");

        // All done, no error
        ldap_unbind($this->conn);

        return PASSWORD_SUCCESS;
    }

    /**
     * Connect and bind to LDAP server
     */
    function connect($curpass)
    {
        $rcmail = rcmail::get_instance();

        $this->debug = $rcmail->config->get('ldap_debug');
        $ldap_host   = $rcmail->config->get('password_ldap_host', 'localhost');
        $ldap_port   = $rcmail->config->get('password_ldap_port', '389');
        $ldap_uri    = $this->_host2uri($ldap_host, $ldap_port);

        $this->_debug("C: Connect [{$ldap_uri}]");

        // Connect
        if (!($ds = ldap_connect($ldap_uri))) {
            $this->_debug("S: NOT OK");

            rcube::raise_error([
                    'code' => 100, 'type' => 'ldap',
                    'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Could not connect to LDAP server"
                ],
                true
            );

            return PASSWORD_CONNECT_ERROR;
        }

        $this->_debug("S: OK");

        // Set protocol version
        ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION,
            $rcmail->config->get('password_ldap_version', '3'));

        // Start TLS
        if ($rcmail->config->get('password_ldap_starttls')) {
            if (!ldap_start_tls($ds)) {
                ldap_unbind($ds);
                return PASSWORD_CONNECT_ERROR;
            }
        }

        // other plugins might want to modify user DN
        $plugin = $rcmail->plugins->exec_hook('password_ldap_bind',
            ['user_dn' => '', 'conn' => $ds]
        );

        // Build user DN
        if (!empty($plugin['user_dn'])) {
            $user_dn = $plugin['user_dn'];
        }
        else if ($user_dn = $rcmail->config->get('password_ldap_userDN_mask')) {
            $user_dn = self::substitute_vars($user_dn);
        }
        else {
            $user_dn = $this->search_userdn($rcmail, $ds);
        }

        if (empty($user_dn)) {
            ldap_unbind($ds);
            return PASSWORD_CONNECT_ERROR;
        }

        // Connection method
        switch ($rcmail->config->get('password_ldap_method')) {
        case 'admin':
            $binddn = $rcmail->config->get('password_ldap_adminDN');
            $bindpw = $rcmail->config->get('password_ldap_adminPW');
            break;
        case 'user':
        default:
            $binddn = $user_dn;
            $bindpw = $curpass;
            break;
        }

        $this->_debug("C: Bind $binddn, pass: **** [" . strlen($bindpw) . "]");

        // Bind
        if (!ldap_bind($ds, $binddn, $bindpw)) {
            $this->_debug("S: ".ldap_error($ds));

            ldap_unbind($ds);

            return PASSWORD_CONNECT_ERROR;
        }

        $this->_debug("S: OK");

        $this->conn = $ds;
        $this->user = $user_dn;

        return true;
    }

    /**
     * Bind with searchDN and searchPW and search for the user's DN
     * Use search_base and search_filter defined in config file
     * Return the found DN
     */
    function search_userdn($rcmail, $ds)
    {
        $search_user   = $rcmail->config->get('password_ldap_searchDN');
        $search_pass   = $rcmail->config->get('password_ldap_searchPW');
        $search_base   = $rcmail->config->get('password_ldap_search_base');
        $search_filter = $rcmail->config->get('password_ldap_search_filter');

        if (empty($search_filter)) {
            return false;
        }

        $this->_debug("C: Bind " . ($search_user ? $search_user : '[anonymous]'));

        // Bind
        if (!ldap_bind($ds, $search_user, $search_pass)) {
            $this->_debug("S: ".ldap_error($ds));
            return false;
        }

        $this->_debug("S: OK");

        $search_base   = self::substitute_vars($search_base);
        $search_filter = self::substitute_vars($search_filter);

        $this->_debug("C: Search $search_base for $search_filter");

        // Search for the DN
        if (!($sr = ldap_search($ds, $search_base, $search_filter))) {
            $this->_debug("S: ".ldap_error($ds));
            return false;
        }

        $found = ldap_count_entries($ds, $sr);

        $this->_debug("S: OK [found $found records]");

        // If no or more entries were found, return false
        if ($found != 1) {
            return false;
        }

        return ldap_get_dn($ds, ldap_first_entry($ds, $sr));
    }

    /**
     * Substitute %login, %name, %domain, %dc in $str
     * See plugin config for details
     */
    public static function substitute_vars($str)
    {
        $str = str_replace('%login', $_SESSION['username'], $str);
        $str = str_replace('%l', $_SESSION['username'], $str);

        $parts = explode('@', $_SESSION['username']);

        if (count($parts) == 2) {
            $dc = 'dc='.strtr($parts[1], ['.' => ',dc=']); // hierarchal domain string

            $str = str_replace('%name', $parts[0], $str);
            $str = str_replace('%n', $parts[0], $str);
            $str = str_replace('%dc', $dc, $str);
            $str = str_replace('%domain', $parts[1], $str);
            $str = str_replace('%d', $parts[1], $str);
        }
        else if (count($parts) == 1) {
            $str = str_replace('%name', $parts[0], $str);
            $str = str_replace('%n', $parts[0], $str);
        }

        return $str;
    }

    /**
     * Prints debug info to the log
     */
    protected function _debug($str)
    {
        if ($this->debug) {
            rcube::write_log('ldap', $str);
        }
    }

    /**
     * Convert LDAP host/port into URI
     */
    private static function _host2uri($host, $port = null)
    {
        if (stripos($host, 'ldapi://') === 0) {
            return $host;
        }

        if (strpos($host, '://') === false) {
            $host = ($port == 636 ? 'ldaps' : 'ldap') . '://' . $host;
        }

        if ($port && !preg_match('/:[0-9]+$/', $host)) {
            $host .= ':' . $port;
        }

        return $host;
    }
}
PKvc�\�f���	�	password/drivers/mailcow.phpnu�[���<?php

/**
 * Mailcow Password Driver
 *
 * @version 1.0
 * @author Lukas "Hexaris" Matula <hexaris@gbely.net>
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 *
 * It is necessary to set the following variables in plugin/password/config.inc.php
 * $config['password_driver'] = 'mailcow';
 * $config['password_mailcow_api_host'] = '';
 * $config['password_mailcow_api_token'] = '';
  */

class rcube_mailcow_password
{
    function save($curpass, $passwd, $username)
    {
        $rcmail = rcmail::get_instance();

        $host  = $rcmail->config->get('password_mailcow_api_host');
        $token = $rcmail->config->get('password_mailcow_api_token');

        try {
            $client = password::get_http_client();

            $headers = [
                'X-API-Key' => $token,
                'accept'    => 'application/json'
            ];

            $cowdata = [
                'attr' => [
                    'password'  => $passwd,
                    'password2' => $passwd
                ],
                'items' => [ $username ]
            ];

            if (!strpos($host, '://')) {
                $host = "https://{$host}";
            }

            $response = $client->post("{$host}/api/v1/edit/mailbox", [
                'headers' => $headers,
                'json'    => $cowdata
            ]);

            $cowreply = json_decode($response->getBody(),true);

            if ($cowreply[0]['type'] == 'success') {
                return PASSWORD_SUCCESS;
            }

            return PASSWORD_ERROR;
        }
        catch (Exception $e) {
            $result = $e->getMessage();
        }

        rcube::raise_error([
                'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                'message' => "Password plugin: Problem with Mailcow API: $result",
            ],
            true, false
        );

        return PASSWORD_CONNECT_ERROR;
    }
}
PKvc�\��;;password/drivers/chpasswd.phpnu�[���<?php

/**
 * chpasswd driver
 *
 * Driver that adds functionality to change the systems user password via
 * the 'chpasswd' command.
 *
 * For installation instructions please read the README file.
 *
 * @version 2.0
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_chpasswd_password
{
    public function save($currpass, $newpass, $username)
    {
        $cmd = rcmail::get_instance()->config->get('password_chpasswd_cmd');

        $handle = popen($cmd, "w");
        fwrite($handle, "$username:$newpass\n");

        if (pclose($handle) == 0) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $cmd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKvc�\��(?--password/drivers/zxcvbn.phpnu�[���<?php

/**
 * Zxcvb Password Strength Driver
 *
 * Driver to check password strength using Zxcvbn-PHP
 *
 * @version 0.1
 * @author Philip Weir
 *
 * Copyright (C) Philip Weir
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_zxcvbn_password
{
    function strength_rules()
    {
        $rcmail = rcmail::get_instance();
        $rules  = [
            $rcmail->gettext('password.passwordnoseq'),
            $rcmail->gettext('password.passwordnocommon'),
        ];

        return $rules;
    }

    /**
     * Password strength check
     *
     * @param string $passwd Password
     *
     * @return array Score (1 to 5) and Reason
     */
    function check_strength($passwd)
    {
        if (!class_exists('ZxcvbnPhp\Zxcvbn')) {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: Zxcvbn library not found."
                ], true, false
            );

            return;
        }

        $zxcvbn   = new ZxcvbnPhp\Zxcvbn();
        $strength = $zxcvbn->passwordStrength($passwd);

        return [$strength['score'] + 1, $strength['feedback']['warning']];
    }
}
PKvc�\Ɋ�&((password/drivers/ximss.phpnu�[���<?php
/**
 * Communigate driver for the Password Plugin for Roundcube 
 *
 * Tested with Communigate Pro 5.1.2
 *
 * Configuration options:
 *   password_ximss_host - Host name of Communigate server
 *   password_ximss_port - XIMSS port on Communigate server
 *
 * References:
 *   http://www.communigate.com/WebGuide/XMLAPI.html
 *
 * @version 2.0
 * @author Erik Meitner <erik wanderings.us>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_ximss_password
{
    function save($pass, $newpass, $username)
    {
        $rcmail = rcmail::get_instance();

        $host = $rcmail->config->get('password_ximss_host');
        $port = $rcmail->config->get('password_ximss_port');
        $sock = stream_socket_client("tcp://$host:$port", $errno, $errstr, 30);

        if ($sock === false) {
            return PASSWORD_CONNECT_ERROR;
        }

        // send all requests at once(pipelined)
        fwrite($sock, '<login id="A001" authData="'.$username.'" password="'.$pass.'" />'."\0");
        fwrite($sock, '<passwordModify id="A002" oldPassword="'.$pass.'" newPassword="'.$newpass.'"  />'."\0");
        fwrite($sock, '<bye id="A003" />'."\0");

  //example responses
  //  <session id="A001" urlID="4815-vN2Txjkggy7gjHRD10jw" userName="user@example.com"/>\0
  //  <response id="A001"/>\0
  //  <response id="A002"/>\0
  //  <response id="A003"/>\0
  // or an error:
  //  <response id="A001" errorText="incorrect password or account name" errorNum="515"/>\0

        $responseblob = '';
        while (!feof($sock)) {
            $responseblob .= fgets($sock, 1024);
        }

        fclose($sock);

        foreach (explode( "\0", $responseblob) as $response) {
            $resp = simplexml_load_string("<xml>".$response."</xml>");
            $id = $resp && !empty($resp->response[0]['id']) ? $resp->response[0]['id'] : null;

            if ($id == 'A001') {
                if (isset($resp->response[0]['errorNum'])) {
                    return PASSWORD_CONNECT_ERROR;
                }
            }
            else if ($id == 'A002') {
                if (isset($resp->response[0]['errorNum'])) {
                    return PASSWORD_ERROR;
                }
            }
            else if ($id == 'A003') {
                if (isset($resp->response[0]['errorNum'])) {
                    // There was a problem during logout (This is probably harmless)
                }
            }
        }

        return PASSWORD_SUCCESS;
    }
}
PKvc�\`��V
V
password/drivers/virtualmin.phpnu�[���<?php

/**
 * Virtualmin Password Driver
 *
 * Driver that adds functionality to change the users Virtualmin password.
 * The code is derived from the Squirrelmail "Change Cyrus/SASL Password" Plugin
 * by Thomas Bruederli.
 *
 * It only works with virtualmin on the same host where Roundcube runs
 * and requires shell access and gcc in order to compile the binary.
 *
 * @version 3.0
 * @author Martijn de Munnik
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_virtualmin_password
{
    function save($currpass, $newpass, $username)
    {
        $curdir   = RCUBE_PLUGINS_DIR . 'password/helpers';
        $username = escapeshellarg($username);

        // Get the domain using virtualmin CLI:
        exec("$curdir/chgvirtualminpasswd list-domains --mail-user $username --name-only", $output_domain, $returnvalue);

        if ($returnvalue == 0 && count($output_domain) == 1) {
            $domain = trim($output_domain[0]);
        }
        else {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: Unable to execute $curdir/chgvirtualminpasswd "
                        . "or domain for mail-user '$username' not known to Virtualmin"
                ], true, false
            );

            return PASSWORD_ERROR;
        }

        $domain  = escapeshellarg($domain);
        $newpass = escapeshellarg($newpass);

        exec("$curdir/chgvirtualminpasswd modify-user --domain $domain --user $username --pass $newpass", $output, $returnvalue);

        if ($returnvalue == 0) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $curdir/chgvirtualminpasswd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKvc�\	�d��password/drivers/cpanel.phpnu�[���<?php

/**
 * cPanel Password Driver
 *
 * It uses Cpanel's Webmail UAPI to change the users password.
 *
 * This driver has been tested successfully with Digital Pacific hosting.
 *
 * @author Maikel Linke <maikel@email.org.au>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_cpanel_password
{
    /**
     * Changes the user's password. It is called by password.php.
     * See "Driver API" README and password.php for the interface details.
     *
     * @param string $curpas  Current (old) password
     * @param string $newpass New password
     *
     * @return int|array Error code or assoc array with 'code' and 'message', see
     *                   "Driver API" README and password.php
     */
    public function save($curpas, $newpass)
    {
        $url     = self::url();
        $user    = password::username();
        $userpwd = "$user:$curpas";
        $data    = [
            'email'    => password::username('%l'),
            'password' => $newpass
        ];

        $response = $this->curl_auth_post($userpwd, $url, $data);

        return self::decode_response($response);
    }

    /**
     * Provides the UAPI URL of the Email::passwd_pop function.
     *
     * @return string HTTPS URL
     */
    public static function url()
    {
        $config       = rcmail::get_instance()->config;
        $storage_host = $_SESSION['storage_host'];

        $host = $config->get('password_cpanel_host', $storage_host);
        $port = $config->get('password_cpanel_port', 2096);

        return "https://$host:$port/execute/Email/passwd_pop";
    }

    /**
     * Converts a UAPI response to a password driver response.
     *
     * @param string $response JSON response by the Cpanel UAPI
     *
     * @return mixed Response code or array, see <code>save</code>
     */
    public static function decode_response($response)
    {
        if (!$response) {
            return PASSWORD_CONNECT_ERROR;
        }

        // $result should be `null` or `stdClass` object
        $result = json_decode($response);

        // The UAPI may return HTML instead of JSON on missing authentication
        if ($result && isset($result->status) && $result->status === 1) {
            return PASSWORD_SUCCESS;
        }

        if ($result && !empty($result->errors) && is_array($result->errors)) {
            return [
                'code'    => PASSWORD_ERROR,
                'message' => $result->errors[0],
            ];
        }

        return PASSWORD_ERROR;
    }

    /**
     * Post data to the given URL using basic authentication.
     *
     * Example:
     *
     * <code>
     * curl_auth_post('john:Secr3t', 'https://example.org', [
     *     'param' => 'value',
     *     'param' => 'value'
     * ]);
     * </code>
     *
     * @param string $userpwd  User name and password separated by a colon
     *                         <code>:</code>
     * @param string $url      The URL to post data to
     * @param array  $postdata The data to post
     *
     * @return string|false The body of the reply, False on error
     */
    private function curl_auth_post($userpwd, $url, $postdata)
    {
        $ch = curl_init();
        $postfields = http_build_query($postdata, '', '&');

        // see http://php.net/manual/en/function.curl-setopt.php
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_BUFFERSIZE, 131072);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
        curl_setopt($ch, CURLOPT_USERPWD, $userpwd);

        $result = curl_exec($ch);
        $error  = curl_error($ch);
        curl_close($ch);

        if ($result === false) {
            rcube::raise_error("curl error: $error", true, false);
        }

        return $result;
    }
}
PKvc�\TU���password/drivers/ldap.phpnu�[���<?php

/**
 * LDAP Password Driver
 *
 * Driver for passwords stored in LDAP
 * This driver use the PEAR Net_LDAP2 class (http://pear.php.net/package/Net_LDAP2).
 *
 * @version 2.0
 * @author Edouard MOREAU <edouard.moreau@ensma.fr>
 *
 * method hashPassword based on code from the phpLDAPadmin development team (http://phpldapadmin.sourceforge.net/).
 * method randomSalt based on code from the phpLDAPadmin development team (http://phpldapadmin.sourceforge.net/).
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_ldap_password
{
    public function save($curpass, $passwd)
    {
        $rcmail = rcmail::get_instance();
        require_once 'Net/LDAP2.php';
        require_once __DIR__ . '/ldap_simple.php';

        // Building user DN
        if ($userDN = $rcmail->config->get('password_ldap_userDN_mask')) {
            $userDN = rcube_ldap_simple_password::substitute_vars($userDN);
        }
        else {
            $userDN = $this->search_userdn($rcmail);
        }

        if (empty($userDN)) {
            return PASSWORD_CONNECT_ERROR;
        }

        // Connection Method
        switch ($rcmail->config->get('password_ldap_method')) {
            case 'admin':
                $binddn = $rcmail->config->get('password_ldap_adminDN');
                $bindpw = $rcmail->config->get('password_ldap_adminPW');
                break;
            case 'user':
            default:
                $binddn = $userDN;
                $bindpw = $curpass;
                break;
        }

        // Configuration array
        $ldapConfig = [
            'binddn'    => $binddn,
            'bindpw'    => $bindpw,
            'basedn'    => $rcmail->config->get('password_ldap_basedn'),
            'host'      => $rcmail->config->get('password_ldap_host', 'localhost'),
            'port'      => $rcmail->config->get('password_ldap_port', '389'),
            'starttls'  => $rcmail->config->get('password_ldap_starttls'),
            'version'   => $rcmail->config->get('password_ldap_version', '3'),
        ];

        // Connecting using the configuration array
        $ldap = Net_LDAP2::connect($ldapConfig);

        // Checking for connection error
        if (is_a($ldap, 'PEAR_Error')) {
            return PASSWORD_CONNECT_ERROR;
        }

        $force        = $rcmail->config->get('password_ldap_force_replace', true);
        $pwattr       = $rcmail->config->get('password_ldap_pwattr', 'userPassword');
        $lchattr      = $rcmail->config->get('password_ldap_lchattr');
        $smbpwattr    = $rcmail->config->get('password_ldap_samba_pwattr');
        $smblchattr   = $rcmail->config->get('password_ldap_samba_lchattr');
        $samba        = $rcmail->config->get('password_ldap_samba');
        $encodage     = $rcmail->config->get('password_ldap_encodage', 'md5-crypt');

        // Support multiple userPassword values where desired.
        // multiple encodings can be specified separated by '+' (e.g. "cram-md5+ssha")
        $encodages    = explode('+', $encodage);
        $crypted_pass = [];

        foreach ($encodages as $enc) {
            if ($cpw = password::hash_password($passwd, $enc)) {
                $crypted_pass[] = $cpw;
            }
        }

        // Support password_ldap_samba option for backward compat.
        if ($samba && !$smbpwattr) {
            $smbpwattr  = 'sambaNTPassword';
            $smblchattr = 'sambaPwdLastSet';
        }

        // Crypt new password
        if (empty($crypted_pass)) {
            return PASSWORD_CRYPT_ERROR;
        }

        // Crypt new samba password
        if ($smbpwattr && !($samba_pass = password::hash_password($passwd, 'samba'))) {
            return PASSWORD_CRYPT_ERROR;
        }

        // Writing new crypted password to LDAP
        $userEntry = $ldap->getEntry($userDN);
        if (Net_LDAP2::isError($userEntry)) {
            return PASSWORD_CONNECT_ERROR;
        }

        if (!$userEntry->replace([$pwattr => $crypted_pass], $force)) {
            return PASSWORD_CONNECT_ERROR;
        }

        // Updating PasswordLastChange Attribute if desired
        if ($lchattr) {
            $current_day = (int) (time() / 86400);
            if (!$userEntry->replace([$lchattr => $current_day], $force)) {
                return PASSWORD_CONNECT_ERROR;
            }
        }

        // Update Samba password and last change fields
        if ($smbpwattr) {
            $userEntry->replace([$smbpwattr => $samba_pass], $force);
        }
        // Update Samba password last change field
        if ($smblchattr) {
            $userEntry->replace([$smblchattr => time()], $force);
        }

        if (Net_LDAP2::isError($userEntry->update())) {
            return PASSWORD_CONNECT_ERROR;
        }

        // All done, no error
        return PASSWORD_SUCCESS;
    }

    /**
     * Bind with searchDN and searchPW and search for the user's DN.
     * Use search_base and search_filter defined in config file.
     * Return the found DN.
     */
    function search_userdn($rcmail)
    {
        $binddn = $rcmail->config->get('password_ldap_searchDN');
        $bindpw = $rcmail->config->get('password_ldap_searchPW');

        $ldapConfig = [
            'basedn'    => $rcmail->config->get('password_ldap_basedn'),
            'host'      => $rcmail->config->get('password_ldap_host', 'localhost'),
            'port'      => $rcmail->config->get('password_ldap_port', '389'),
            'starttls'  => $rcmail->config->get('password_ldap_starttls'),
            'version'   => $rcmail->config->get('password_ldap_version', '3'),
        ];

        // allow anonymous searches
        if (!empty($binddn)) {
            $ldapConfig['binddn'] = $binddn;
            $ldapConfig['bindpw'] = $bindpw;
        }

        $ldap = Net_LDAP2::connect($ldapConfig);

        if (is_a($ldap, 'PEAR_Error')) {
            return '';
        }

        $base   = rcube_ldap_simple_password::substitute_vars($rcmail->config->get('password_ldap_search_base'));
        $filter = rcube_ldap_simple_password::substitute_vars($rcmail->config->get('password_ldap_search_filter'));
        $options = [
            'scope' => 'sub',
            'attributes' => [],
        ];

        $result = $ldap->search($base, $filter, $options);

        if (is_a($result, 'PEAR_Error') || ($result->count() != 1)) {
            $ldap->done();
            return '';
        }

        $userDN = $result->current()->dn();
        $ldap->done();

        return $userDN;
    }
}
PKvc�\n����password/drivers/gearman.phpnu�[���<?php

/**
 * Gearman Password Driver
 *
 * Payload is json string containing username, oldPassword and newPassword
 * Return value is a json string saying result: true if success.
 *
 * @version 1.0
 * @author Mohammad Anwari <mdamt@mdamt.net>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_gearman_password
{
    function save($currpass, $newpass, $username)
    {
        if (extension_loaded('gearman')) {
            $rcmail  = rcmail::get_instance();
            $payload = [
                'username'    => $username,
                'oldPassword' => $currpass,
                'newPassword' => $newpass,
            ];

            $gmc = new GearmanClient();
            $gmc->addServer($rcmail->config->get('password_gearman_host', 'localhost'));

            $result  = $gmc->doNormal('setPassword', json_encode($payload));
            $success = json_decode($result);

            if ($success && $success->result == 1) {
                return PASSWORD_SUCCESS;
            }

            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: Gearman authentication failed for user $username"
                ], true, false
            );
        }
        else {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: PECL Gearman module not loaded"
                ], true, false
            );
        }

        return PASSWORD_ERROR;
    }
}
PKvc�\��/��4�4 password/drivers/directadmin.phpnu�[���<?php

/**
 * DirectAdmin Password Driver
 *
 * Driver to change passwords via DirectAdmin Control Panel
 *
 * @version 2.2
 * @author Victor Benincasa <vbenincasa @ gmail.com>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_directadmin_password
{
    public function save($curpass, $passwd)
    {
        $rcmail = rcmail::get_instance();
        $Socket = new HTTPSocket;

        $da_user    = $_SESSION['username'];
        $da_curpass = $curpass;
        $da_newpass = $passwd;
        $da_host    = $rcmail->config->get('password_directadmin_host');
        $da_port    = $rcmail->config->get('password_directadmin_port');

        if (strpos($da_user, '@') === false) {
            return ['code' => PASSWORD_ERROR, 'message' => 'Change the SYSTEM user password through control panel!'];
        }

        $da_host = str_replace('%h', $_SESSION['imap_host'], $da_host);
        $da_host = str_replace('%d', $rcmail->user->get_username('domain'), $da_host);

        $Socket->connect($da_host,$da_port); 
        $Socket->set_method('POST');
        $Socket->query('/CMD_CHANGE_EMAIL_PASSWORD', [
                'email'         => $da_user,
                'oldpassword'   => $da_curpass,
                'password1'     => $da_newpass,
                'password2'     => $da_newpass,
                'api'           => '1'
        ]);

        $response = $Socket->fetch_parsed_body();

        //DEBUG
        //rcube::console("Password Plugin: [USER: $da_user] [HOST: $da_host] - Response: [SOCKET: ".$Socket->result_status_code."] [DA ERROR: ".strip_tags($response['error'])."] [TEXT: ".$response[text]."]");

        if ($Socket->result_status_code != 200) {
            return ['code' => PASSWORD_CONNECT_ERROR, 'message' => $Socket->error[0]];
        }

        if ($response['error'] == 1) {
            return ['code' => PASSWORD_ERROR, 'message' => strip_tags($response['text'])];
        }

        return PASSWORD_SUCCESS;
    }
}


/**
 * Socket communication class.
 *
 * Originally designed for use with DirectAdmin's API, this class will fill any HTTP socket need.
 *
 * Very, very basic usage:
 *   $Socket = new HTTPSocket;
 *   echo $Socket->get('http://user:pass@somesite.com/somedir/some.file?query=string&this=that');
 *
 * @author Phi1 'l0rdphi1' Stier <l0rdphi1@liquenox.net>
 * @package HTTPSocket
 * @version 3.0.2
 */
class HTTPSocket
{
    var $version = '3.0.2';

    // all vars are private except $error, $query_cache, and $doFollowLocationHeader

    var $method = 'GET';

    var $remote_host;
    var $remote_port;
    var $remote_uname;
    var $remote_passwd;

    var $result;
    var $result_header;
    var $result_body;
    var $result_status_code;

    var $lastTransferSpeed;
    var $bind_host;
    var $error       = [];
    var $warn        = [];
    var $query_cache = [];
    var $doFollowLocationHeader = true;
    var $redirectURL;
    var $max_redirects = 5;
    var $ssl_setting_message = 'DirectAdmin appears to be using SSL. Change your script to connect to ssl://';
    var $extra_headers = [];

    /**
     * Create server "connection".
     *
     */
    function connect($host, $port = '')
    {
        if (!is_numeric($port)) {
            $port = 2222;
        }

        $this->remote_host = $host;
        $this->remote_port = $port;
    }

    function bind($ip = '')
    {
        if ($ip == '') {
            $ip = $_SERVER['SERVER_ADDR'];
        }

        $this->bind_host = $ip;
    }

    /**
     * Change the method being used to communicate.
     *
     * @param string|null $method request method. supports GET, POST, and HEAD. default is GET
     */
    function set_method($method = 'GET')
    {
        $this->method = strtoupper($method);
    }

    /**
     * Specify a username and password.
     *
     * @param string|null $uname  username. default is null
     * @param string|null $passwd password. default is null
     */
    function set_login($uname = '', $passwd = '')
    {
        if (strlen($uname) > 0) {
            $this->remote_uname = $uname;
        }

        if (strlen($passwd) > 0) {
            $this->remote_passwd = $passwd;
        }
    }

    /**
     * Query the server
     *
     * @param string       $request containing properly formatted server API. See DA API docs and examples. Http:// URLs O.K. too.
     * @param string|array $content query to pass to url
     */
    function query($request, $content = '')
    {
        $this->error = $this->warn = [];
        $this->result_status_code  = null;

        $is_ssl = false;

        // is our request a http:// ... ?
        if (preg_match('!^http://!i',$request) || preg_match('!^https://!i',$request)) {
            $location = parse_url($request);
            if (preg_match('!^https://!i',$request)) {
                $this->connect('https://'.$location['host'],$location['port']);
            }
            else {
                $this->connect('http://'.$location['host'],$location['port']);
            }

            $this->set_login($location['user'], $location['pass']);

            $request = $location['path'];
            
            if ($content == '') {
                $content = $location['query'];
            }

            if (strlen($request) < 1) {
                $request = '/';
            }
        }

        if (preg_match('!^ssl://!i', $this->remote_host)) {
            $this->remote_host = 'https://'.substr($this->remote_host, 6);
        }

        if (preg_match('!^tcp://!i', $this->remote_host)) {
            $this->remote_host = 'http://'.substr($this->remote_host, 6);
        }

        if (preg_match('!^https://!i', $this->remote_host)) {
            $is_ssl = true;
        }

        $array_headers = [
            'Host'       => $this->remote_port == 80 ? $this->remote_host : "$this->remote_host:$this->remote_port",
            'Accept'     => '*/*',
            'Connection' => 'Close'
        ];

        foreach ($this->extra_headers as $key => $value) {
            $array_headers[$key] = $value;
        }

        $this->result = $this->result_header = $this->result_body = '';

        // was content sent as an array? if so, turn it into a string
        if (is_array($content)) {
            $pairs = [];

            foreach ($content as $key => $value) {
                $pairs[] = "$key=".urlencode($value);
            }

            $content = join('&',$pairs);
            unset($pairs);
        }

        $OK = true;

        if ($this->method == 'GET') {
            $request .= '?'.$content;
        }

        $ch = curl_init($this->remote_host.':'.$this->remote_port.$request);

        if ($is_ssl) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //1
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //2
            //curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
        }

        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_USERAGENT, "HTTPSocket/$this->version");
        curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 100);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch, CURLOPT_HEADER, 1);

        curl_setopt($ch, CURLOPT_LOW_SPEED_LIMIT, 512);
        curl_setopt($ch, CURLOPT_LOW_SPEED_TIME, 120);

        // instance connection
        if ($this->bind_host) {
            curl_setopt($ch, CURLOPT_INTERFACE, $this->bind_host);
        }

        // if we have a username and password, add the header
        if (isset($this->remote_uname) && isset($this->remote_passwd)) {
            curl_setopt($ch, CURLOPT_USERPWD, $this->remote_uname.':'.$this->remote_passwd);
        }

        // for DA skins: if $this->remote_passwd is NULL, try to use the login key system
        if (isset($this->remote_uname) && $this->remote_passwd == NULL) {
            $array_headers['Cookie'] = "session={$_SERVER['SESSION_ID']}; key={$_SERVER['SESSION_KEY']}";
        }

        // if method is POST, add content length & type headers
        if ($this->method == 'POST') {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $content);

            //$array_headers['Content-type'] = 'application/x-www-form-urlencoded';
            $array_headers['Content-length'] = strlen($content);
        }

        curl_setopt($ch, CURLOPT_HTTPHEADER, $array_headers);

        if (!($this->result = curl_exec($ch))) {
            $this->error[] = curl_error($ch);
            $OK = false;
        }

        $header_size              = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
        $this->result_header      = substr($this->result, 0, $header_size);
        $this->result_body        = substr($this->result, $header_size);
        $this->result_status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $this->lastTransferSpeed  = curl_getinfo($ch, CURLINFO_SPEED_DOWNLOAD) / 1024;

        curl_close($ch);

        $this->query_cache[] = $this->remote_host.':'.$this->remote_port.$request;

        $headers = $this->fetch_header();

        // did we get the full file?
        if (!empty($headers['content-length']) && $headers['content-length'] != strlen($this->result_body)) {
            $this->result_status_code = 206;
        }

        // now, if we're being passed a location header, should we follow it?
        if ($this->doFollowLocationHeader) {
            //dont bother if we didn't even setup the script correctly
            if (isset($headers['x-use-https']) && $headers['x-use-https'] == 'yes') {
                die($this->ssl_setting_message);
            }

            if (isset($headers['location'])) {
                if ($this->max_redirects <= 0) {
                    die("Too many redirects on: ".$headers['location']);
                }

                $this->max_redirects--;
                $this->redirectURL = $headers['location'];
                $this->query($headers['location'], $content);
            }
        }
    }

    function getTransferSpeed()
    {
        return $this->lastTransferSpeed;
    }

    /**
     * The quick way to get a URL's content :)
     *
     * @param string $location URL
     * @param bool   $asArray  return as array? (like PHP's file() command)
     *
     * @return string result body
     */
    function get($location, $asArray = false)
    {
        $this->query($location);

        if ($this->get_status_code() == 200) {
            if ($asArray) {
                return preg_split("/\n/", $this->fetch_body());
            }

            return $this->fetch_body();
        }

        return false;
    }

    /**
     * Returns the last status code.
     * 200 = OK;
     * 403 = FORBIDDEN;
     * etc.
     *
     * @return int status code
     */
    function get_status_code()
    {
        return $this->result_status_code;
    }

    /**
     * Adds a header, sent with the next query.
     *
     * @param string $key   header name
     * @param string $value header value
     */
    function add_header($key, $value)
    {
        $this->extra_headers[$key] = $value;
    }

    /**
     * Clears any extra headers.
     *
     */
    function clear_headers()
    {
        $this->extra_headers = [];
    }

    /**
     * Return the result of a query.
     *
     * @return string result
     */
    function fetch_result()
    {
        return $this->result;
    }

    /**
     * Return the header of result (stuff before body).
     *
     * @param string $header (optional) header to return
     * @return array result header
     */
    function fetch_header($header = '')
    {
        $array_headers = preg_split("/\r\n/", $this->result_header);

        $array_return = [0 => $array_headers[0]];
        unset($array_headers[0]);

        foreach ($array_headers as $pair) {
            if ($pair == '' || $pair == "\r\n") continue;
            list($key,$value) = preg_split("/: /", $pair, 2);
            $array_return[strtolower($key)] = $value;
        }

        if ($header != '') {
            return $array_return[strtolower($header)];
        }

        return $array_return;
    }

    /**
     * Return the body of result (stuff after header).
     *
     * @return string result body
     */
    function fetch_body()
    {
        return $this->result_body;
    }

    /**
     * Return parsed body in array format.
     *
     * @return array result parsed
     */
    function fetch_parsed_body()
    {
        parse_str($this->result_body, $x);
        return $x;
    }

    /**
     * Set a specific message on how to change the SSL setting, in the event that it's not set correctly.
     */
    function set_ssl_setting_message($str)
    {
        $this->ssl_setting_message = $str;
    }
}
PKvc�\���password/drivers/dbmail.phpnu�[���<?php

/**
 * DBMail Password Driver
 *
 * Driver that adds functionality to change the users DBMail password.
 * The code is derived from the Squirrelmail "Change SASL Password" Plugin
 * by Galen Johnson.
 *
 * It only works with dbmail-users on the same host where Roundcube runs
 * and requires shell access and gcc in order to compile the binary.
 *
 * For installation instructions please read the README file.
 *
 * @version 1.0
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_dbmail_password
{
    function save($currpass, $newpass, $username)
    {
        $curdir   = RCUBE_PLUGINS_DIR . 'password/helpers';
        $username = escapeshellarg($username);
        $password = escapeshellarg($newpass);
        $args     = rcmail::get_instance()->config->get('password_dbmail_args', '');
        $command  = "$curdir/chgdbmailusers -c $username -w $password $args";

        exec($command, $output, $return_value);

        if ($return_value == 0) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $curdir/chgdbmailusers"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKvc�\�;_

'password/drivers/dovecot_passwdfile.phpnu�[���<?php

/**
 * Dovecot passwdfile Password Driver
 *
 * Driver that adds functionality to change the passwords in dovecot v2 passwd-file files.
 * The code is derived from the Plugin examples by The Roundcube Dev Team
 *
 * On vanilla dovecot v2 environments, use the correct values for these config settings, too:
 *
 * $config['password_dovecot_passwdfile_path']: The path of your dovecot passwd-file '/path/to/filename'
 * $config['password_dovecotpw']: Full path and 'pw' command of doveadm binary - like '/usr/local/bin/doveadm pw'
 * $config['password_dovecotpw_method']: Dovecot hashing algo (http://wiki2.dovecot.org/Authentication/PasswordSchemes)
 * $config['password_dovecotpw_with_method']: True if you want the hashing algo as prefix in your passwd-file
 *
 * @version 1.1
 *
 * Copyright (C) 2017, hostNET Medien GmbH, www.hostnet.de
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_dovecot_passwdfile_password
{
    public function save($currpass, $newpass, $username)
    {
        $rcmail       = rcmail::get_instance();
        $mailuserfile = $rcmail->config->get('password_dovecot_passwdfile_path') ?: '/etc/mail/imap.passwd';

        $password = password::hash_password($newpass);
        $username = escapeshellcmd($username); // FIXME: Do we need this?
        $content  = '';

        // read the entire mail user file
        $fp = fopen($mailuserfile, 'r');

        if (empty($fp)) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: Unable to read password file $mailuserfile."
                ],
                true, false
            );

            return PASSWORD_CONNECT_ERROR;
        }

        if (flock($fp, LOCK_EX)) {
            // Read the file and replace the user password
            while (($line = fgets($fp, 40960)) !== false) {
                if (strpos($line, "$username:") === 0) {
                    $pos  = strpos($line, ':', strlen("$username:") + 1);
                    $line = "$username:$password" . substr($line, $pos);
                }

                $content .= $line;
            }

            // Write back the entire file
            if (file_put_contents($mailuserfile, $content)) {
                flock($fp, LOCK_UN);
                fclose($fp);

                return PASSWORD_SUCCESS;
            }
        }

        fclose($fp);

        rcube::raise_error([
                'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                'message' => "Password plugin: Failed to save file $mailuserfile."
            ],
            true, false
        );

        return PASSWORD_ERROR;
    }
}
PKvc�\���password/drivers/sasl.phpnu�[���<?php

/**
 * SASL Password Driver
 *
 * Driver that adds functionality to change the users Cyrus/SASL password.
 * The code is derived from the Squirrelmail "Change SASL Password" Plugin
 * by Galen Johnson.
 *
 * It only works with saslpasswd2 on the same host where Roundcube runs
 * and requires shell access and gcc in order to compile the binary.
 *
 * For installation instructions please read the README file.
 *
 * @version 2.0
 * @author Thomas Bruederli
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_sasl_password
{
    function save($currpass, $newpass, $username)
    {
        $curdir   = RCUBE_PLUGINS_DIR . 'password/helpers';
        $username = escapeshellarg($username);
        $args     = rcmail::get_instance()->config->get('password_saslpasswd_args', '');

        if ($fh = popen("$curdir/chgsaslpasswd -p $args $username", 'w')) {
            fwrite($fh, $newpass."\n");
            $code = pclose($fh);

            if ($code == 0) {
                return PASSWORD_SUCCESS;
            }
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $curdir/chgsaslpasswd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKvc�\O�����password/drivers/pw_usermod.phpnu�[���<?php

/**
 * pw_usermod Driver
 *
 * Driver that adds functionality to change the systems user password via
 * the 'pw usermod' command.
 *
 * For installation instructions please read the README file.
 *
 * @version 2.0
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk>
 * @author Adamson Huang <adomputer@gmail.com>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_pw_usermod_password
{
    public function save($currpass, $newpass, $username)
    {
        $cmd = rcmail::get_instance()->config->get('password_pw_usermod_cmd', 'sudo /usr/sbin/pw usermod -h 0 -n');
        $cmd .= ' ' . escapeshellarg($username) . ' > /dev/null';

        $handle = popen($cmd, 'w');
        fwrite($handle, "$newpass\n");

        if (pclose($handle) == 0) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $cmd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKvc�\�S�
�
password/drivers/hmail.phpnu�[���<?php

/**
 * hMailserver password driver
 *
 * @version 2.0
 * @author Roland 'rosali' Liebl <myroundcube@mail4us.net>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_hmail_password
{
    public function save($curpass, $passwd, $username)
    {
        $rcmail = rcmail::get_instance();

        try {
            $remote = $rcmail->config->get('hmailserver_remote_dcom', false);
            if ($remote) {
                $obApp = new COM("hMailServer.Application", $rcmail->config->get('hmailserver_server'));
            }
            else {
                $obApp = new COM("hMailServer.Application");
            }
        }
        catch (Exception $e) {
            rcube::write_log('errors', "Plugin password (hmail driver): " . trim(strip_tags($e->getMessage())));
            rcube::write_log('errors', "Plugin password (hmail driver): This problem is often caused by DCOM permissions not being set.");

            return PASSWORD_ERROR;
        }

        if (strstr($username,'@')) {
            list(, $domain) = explode('@', $username);
        }
        else {
            $domain = $rcmail->config->get('username_domain',false);
            if (!$domain) {
                rcube::write_log('errors','Plugin password (hmail driver): $config[\'username_domain\'] is not defined.');
                return PASSWORD_ERROR;
            }
            $username = $username . "@" . $domain;
        }

        try {
            $obApp->Authenticate($username, $curpass);

            $obDomain  = $obApp->Domains->ItemByName($domain);
            $obAccount = $obDomain->Accounts->ItemByAddress($username);
            $obAccount->Password = $passwd;
            $obAccount->Save();

            return PASSWORD_SUCCESS;
        }
        catch (Exception $e) {
            rcube::write_log('errors', "Plugin password (hmail driver): " . trim(strip_tags($e->getMessage())));
            rcube::write_log('errors', "Plugin password (hmail driver): This problem is often caused by DCOM permissions not being set.");

            return PASSWORD_ERROR;
        }
    }
}
PKvc�\c��W�
�
"password/drivers/domainfactory.phpnu�[���<?php

/**
 * domainFACTORY Password Driver
 *
 * Driver to change passwords with the hosting provider domainFACTORY.
 * http://www.df.eu/
 *
 * @version 2.1
 * @author Till Krüss <me@tillkruess.com>
 * @link http://tillkruess.com/projects/roundcube/
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_domainfactory_password
{
    function save($curpass, $passwd, $username)
    {
        if ($ch = curl_init()) {
            // initial login
            curl_setopt_array($ch, [
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_URL        => 'https://ssl.df.eu/chmail.php',
                CURLOPT_POST       => true,
                CURLOPT_POSTFIELDS => http_build_query([
                    'login'  => $username,
                    'pwd'    => $curpass,
                    'action' => 'change'
                ])
            ]);

            if ($result = curl_exec($ch)) {
                // login successful, get token!
                $postfields = [
                    'pwd1'           => $passwd,
                    'pwd2'           => $passwd,
                    'action[update]' => 'Speichern'
                ];

                preg_match_all('~<input name="(.+?)" type="hidden" value="(.+?)">~i', $result, $fields);
                foreach ($fields[1] as $field_key => $field_name) {
                    $postfields[$field_name] = $fields[2][$field_key];
                }

                // change password
                $ch = curl_copy_handle($ch);
                curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields));
                if ($result = curl_exec($ch)) {
                    // has the password been changed?
                    if (strpos($result, 'Einstellungen erfolgreich') !== false) {
                        return PASSWORD_SUCCESS;
                    }

                    // show error message(s) if possible
                    if (strpos($result, '<div class="d-msg-text">') !== false) {
                        preg_match_all('#<div class="d-msg-text">(.*?)</div>#s', $result, $errors);
                        if (isset($errors[1])) {
                            $error_message = '';
                            foreach ($errors[1] as $error) {
                                $error_message .= trim(rcube_charset::convert($error, 'ISO-8859-15')).' ';
                            }
                            return ['code' => PASSWORD_ERROR, 'message' => $error_message];
                        }
                    }
                }
                else {
                    return PASSWORD_CONNECT_ERROR;
                }
            }
            else {
                return PASSWORD_CONNECT_ERROR;
            }
        }
        else {
            return PASSWORD_CONNECT_ERROR;
        }

        return PASSWORD_ERROR;
    }
}
PKvc�\֞{��password/drivers/modoboa.phpnu�[���<?php

/**
 * Modoboa Password Driver
 *
 * Payload is json string containing username, oldPassword and newPassword
 * Return value is a json string saying result: true if success.
 *
 * @version 1.0.1
 * @author stephane @actionweb.fr
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 *
 * The driver need modoboa core 1.10.6 or later 
 *
 * You need to define theses variables in plugin/password/config.inc.php
 *
 * $config['password_driver'] = 'modoboa'; // use modoboa as driver
 * $config['password_modoboa_api_token'] = ''; // put token number from Modoboa server
 * $config['password_minimum_length'] = 8; // select same number as in Modoboa server
 */

class rcube_modoboa_password
{
    function save($curpass, $passwd)
    {
        // Init config access
        $rcmail           = rcmail::get_instance();
        $ModoboaToken     = $rcmail->config->get('password_modoboa_api_token');
        $RoudCubeUsername = $_SESSION['username'];
        $IMAPhost         = $_SESSION['imap_host'];

        // Call GET to fetch values from modoboa server
        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_URL            => "https://" . $IMAPhost . "/api/v1/accounts/?search=" . urlencode($RoudCubeUsername),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING       => "",
            CURLOPT_MAXREDIRS      => 10,
            CURLOPT_TIMEOUT        => 30,
            CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST  => "GET",
            CURLOPT_HTTPHEADER     => [
                "Authorization: Token " . $ModoboaToken,
                "Cache-Control: no-cache",
                "Content-Type: application/json"
            ],
        ]);

        $response = curl_exec($curl);
        $err      = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return PASSWORD_CONNECT_ERROR;
        }

        // Decode json string
        $decoded = json_decode($response);

        if (!is_array($decoded)) {
            return PASSWORD_CONNECT_ERROR;
        }

        // Get user ID (pk)
        $userid = $decoded[0]->pk;

        // Encode json with new password
        $ret['username'] = $decoded[0]->username;
        $ret['mailbox']  = $decoded[0]->mailbox;
        $ret['role']     = $decoded[0]->role;
        $ret['password'] = $passwd; // new password
        $encoded         = json_encode($ret);

        // Call HTTP API Modoboa
        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_URL            => "https://" . $IMAPhost . "/api/v1/accounts/" . $userid . "/",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING       => "",
            CURLOPT_MAXREDIRS      => 10,
            CURLOPT_TIMEOUT        => 30,
            CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST  => "PUT",
            CURLOPT_POSTFIELDS     => "" . $encoded . "",
            CURLOPT_HTTPHEADER     => [
                "Authorization: Token " . $ModoboaToken,
                "Cache-Control: no-cache",
                "Content-Type: application/json"
            ],
        ]);

        $response = curl_exec($curl);
        $err      = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return PASSWORD_CONNECT_ERROR;
        }

        return PASSWORD_SUCCESS;
    }
}
PKvc�\ζ}LMMpassword/drivers/pam.phpnu�[���<?php

/**
 * PAM Password Driver
 *
 * @version 2.0
 * @author Aleksander Machniak
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_pam_password
{
    function save($currpass, $newpass, $username)
    {
        $error = '';

        if (extension_loaded('pam') || extension_loaded('pam_auth')) {
            if (pam_auth($username, $currpass, $error, false)) {
                if (pam_chpass($username, $currpass, $newpass)) {
                    return PASSWORD_SUCCESS;
                }
            }
            else {
                rcube::raise_error([
                        'code' => 600,
                        'file' => __FILE__,
                        'line' => __LINE__,
                        'message' => "Password plugin: PAM authentication failed for user $username: $error"
                    ], true, false
                );
            }
        }
        else {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: PECL-PAM module not loaded"
                ], true, false
            );
        }

        return PASSWORD_ERROR;
    }
}
PKvc�\�����password/drivers/httpapi.phpnu�[���<?php

/**
 * Roundcube password driver for generic HTTP APIs.
 *
 * This driver changes the e-mail password via any generic HTTP/HTTPS API.
 *
 * @author David Croft
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * Config variables:
 * $config['password_httpapi_url']         = 'https://passwordserver.example.org'; // required
 * $config['password_httpapi_method']      = 'POST'; // default
 * $config['password_httpapi_var_user']    = 'user'; // optional
 * $config['password_httpapi_var_curpass'] = 'curpass'; // optional
 * $config['password_httpapi_var_newpass'] = 'newpass'; // optional
 * $config['password_httpapi_expect']      = '/^ok$/i'; // optional
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_httpapi_password
{
    /**
     * This method is called from roundcube to change the password
     *
     * roundcube already validated the old password so we just need to change it at this point
     *
     * @param string $curpass  Current password
     * @param string $newpass  New password
     * @param string $username Login username
     *
     * @return int PASSWORD_SUCCESS|PASSWORD_ERROR|PASSWORD_CONNECT_ERROR
     */
    function save($curpass, $newpass, $username)
    {
        $rcmail = rcmail::get_instance();
        $client = password::get_http_client();

        // Get configuration with defaults
        $url         = $rcmail->config->get('password_httpapi_url');
        $method      = $rcmail->config->get('password_httpapi_method', 'POST');
        $var_user    = $rcmail->config->get('password_httpapi_var_user');
        $var_curpass = $rcmail->config->get('password_httpapi_var_curpass');
        $var_newpass = $rcmail->config->get('password_httpapi_var_newpass');
        $expect      = $rcmail->config->get('password_httpapi_expect');

        // Set the variables on the GET query string or POST vars
        $vars = [];

        if ($var_user) {
            $vars[$var_user] = $username;
        }

        if ($var_curpass) {
            $vars[$var_curpass] = $curpass;
        }

        if ($var_newpass) {
            $vars[$var_newpass] = $newpass;
        }

        $method = strtoupper($method);
        $params = [];

        if ($method == 'POST') {
            $params['form_params'] = $vars;
        }
        else if ($method == 'GET') {
            $params['query'] = $vars;
        }
        else {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: Invalid httpapi method",
                ],
                true, false
            );

            return PASSWORD_CONNECT_ERROR;
        }

        try {
            $response = $client->request($method, $url, $params);

            $response_code = $response->getStatusCode();
            $result        = $response->getBody();
        }
        catch (Exception $e) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: " . $e->getMessage()
                ],
                true, false
            );

            return PASSWORD_CONNECT_ERROR;
        }

        // Non-2xx response codes mean the password change failed
        if ($response_code < 200 || $response_code > 299) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: Unexpected response code {$response_code}: "
                        . substr($result, 0, 1024)
                ],
                true, false
            );

            return ($response_code == 404 || $response_code > 499) ? PASSWORD_CONNECT_ERROR : PASSWORD_ERROR;
        }

        // If configured, check the body of the response
        if ($expect && !preg_match($expect, $result)) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: Unexpected response body: " . substr($result, 0, 1024)
                ],
                true, false
            );

            return PASSWORD_ERROR;
        }

        return PASSWORD_SUCCESS;
    }
}
PKvc�\A�password/drivers/xmail.phpnu�[���<?php
/**
 * XMail Password Driver
 *
 * Driver for XMail password
 *
 * @version 2.0
 * @author Helio Cavichiolo Jr <helio@hcsistemas.com.br>
 *
 * Setup xmail_host, xmail_user, xmail_pass and xmail_port into
 * config.inc.php of password plugin as follows:
 *
 * $config['xmail_host'] = 'localhost';
 * $config['xmail_user'] = 'YourXmailControlUser';
 * $config['xmail_pass'] = 'YourXmailControlPass';
 * $config['xmail_port'] = 6017;
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_xmail_password
{
    function save($currpass, $newpass)
    {
        $rcmail = rcmail::get_instance();
        list($user, $domain) = explode('@', $_SESSION['username']);

        $xmail = new XMail;

        $xmail->hostname = $rcmail->config->get('xmail_host');
        $xmail->username = $rcmail->config->get('xmail_user');
        $xmail->password = $rcmail->config->get('xmail_pass');
        $xmail->port     = $rcmail->config->get('xmail_port');

        if (!$xmail->connect()) {
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: Unable to connect to mail server"
                ], true, false
            );

            return PASSWORD_CONNECT_ERROR;
        }

        if (!$xmail->send("userpasswd\t".$domain."\t".$user."\t".$newpass."\n")) {
            $xmail->close();
            rcube::raise_error([
                    'code' => 600,
                    'file' => __FILE__,
                    'line' => __LINE__,
                    'message' => "Password plugin: Unable to change password"
                ], true, false
            );

            return PASSWORD_ERROR;
        }

        $xmail->close();
        return PASSWORD_SUCCESS;
    }
}

class XMail {
    var $socket;
    var $hostname = 'localhost';
    var $username = 'xmail';
    var $password = '';
    var $port = 6017;

    function send($msg)
    {
        socket_write($this->socket,$msg);
        if (substr(socket_read($this->socket, 512, PHP_BINARY_READ),0,1) != "+") {
            return false;
        }
        return true;
    }

    function connect()
    {
        $this->socket = socket_create(AF_INET, SOCK_STREAM, 0);
        if ($this->socket < 0)
            return false;

        $result = socket_connect($this->socket, $this->hostname, $this->port);
        if ($result < 0) {
            socket_close($this->socket);
            return false;
        }

        if (substr(socket_read($this->socket, 512, PHP_BINARY_READ),0,1) != "+") {
            socket_close($this->socket);
            return false;
        }

        if (!$this->send("$this->username\t$this->password\n")) {
            socket_close($this->socket);
            return false;
        }
        return true;
    }

    function close()
    {
        $this->send("quit\n");
        socket_close($this->socket);
    }
}
PKvc�\^��,!!password/drivers/sql.phpnu�[���<?php

/**
 * SQL Password Driver
 *
 * Driver for passwords stored in SQL database
 *
 * @version 2.1
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */
class rcube_sql_password
{
    /**
     * Update current user password
     *
     * @param string $curpass Current password
     * @param string $passwd  New password
     *
     * @return int Result
     */
    function save($curpass, $passwd)
    {
        $rcmail = rcmail::get_instance();

        if (!($sql = $rcmail->config->get('password_query'))) {
            $sql = 'SELECT update_passwd(%P, %u)';
        }

        if ($dsn = $rcmail->config->get('password_db_dsn')) {
            $db = rcube_db::factory(self::parse_dsn($dsn), '', false);
            $db->set_debug((bool)$rcmail->config->get('sql_debug'));
        }
        else {
            $db = $rcmail->get_dbh();
        }

        if ($db->is_error()) {
            return PASSWORD_ERROR;
        }

        // new password - default hash method
        if (strpos($sql, '%P') !== false) {
            $password = password::hash_password($passwd);

            if ($password === false) {
                return PASSWORD_CRYPT_ERROR;
            }

            $sql = str_replace('%P',  $db->quote($password), $sql);
        }

        // old password - default hash method
        if (strpos($sql, '%O') !== false) {
            $password = password::hash_password($curpass);

            if ($password === false) {
                return PASSWORD_CRYPT_ERROR;
            }

            $sql = str_replace('%O',  $db->quote($password), $sql);
        }

        // Handle clear text passwords securely (#1487034)
        $sql_vars = [];
        if (preg_match_all('/%[p|o]/', $sql, $m)) {
            foreach ($m[0] as $var) {
                if ($var == '%p') {
                    $sql = preg_replace('/%p/', '?', $sql, 1);
                    $sql_vars[] = (string) $passwd;
                }
                else { // %o
                    $sql = preg_replace('/%o/', '?', $sql, 1);
                    $sql_vars[] = (string) $curpass;
                }
            }
        }

        $local_part  = $rcmail->user->get_username('local');
        $domain_part = $rcmail->user->get_username('domain');
        $username    = $_SESSION['username'];
        $host        = $_SESSION['imap_host'];

        // convert domains to/from punycode
        if ($rcmail->config->get('password_idn_ascii')) {
            $domain_part = rcube_utils::idn_to_ascii($domain_part);
            $username    = rcube_utils::idn_to_ascii($username);
            $host        = rcube_utils::idn_to_ascii($host);
        }
        else {
            $domain_part = rcube_utils::idn_to_utf8($domain_part);
            $username    = rcube_utils::idn_to_utf8($username);
            $host        = rcube_utils::idn_to_utf8($host);
        }

        // at least we should always have the local part
        $sql = str_replace('%l', $db->quote($local_part, 'text'), $sql);
        $sql = str_replace('%d', $db->quote($domain_part, 'text'), $sql);
        $sql = str_replace('%u', $db->quote($username, 'text'), $sql);
        $sql = str_replace('%h', $db->quote($host, 'text'), $sql);

        $res = $db->query($sql, $sql_vars);

        if (!$db->is_error()) {
            if (strtolower(substr(trim($sql),0,6)) == 'select') {
                if ($db->fetch_array($res)) {
                    return PASSWORD_SUCCESS;
                }
            }
            else {
                // Note: Don't be tempted to check affected_rows = 1. For some queries
                // (e.g. INSERT ... ON DUPLICATE KEY UPDATE) the result can be 2.
                if ($db->affected_rows($res) > 0) {
                    return PASSWORD_SUCCESS;
                }
            }
        }

        return PASSWORD_ERROR;
    }

    /**
     * Parse DSN string and replace host variables
     *
     * @param string $dsn DSN string
     *
     * @return string DSN string
     */
    protected static function parse_dsn($dsn)
    {
        if (strpos($dsn, '%')) {
            // parse DSN and replace variables in hostname
            $parsed = rcube_db::parse_dsn($dsn);
            $host   = rcube_utils::parse_host($parsed['hostspec']);

            // build back the DSN string
            if ($host != $parsed['hostspec']) {
                $dsn = str_replace('@' . $parsed['hostspec'], '@' . $host, $dsn);
            }
        }

        return $dsn;
    }
}
PKvc�\�bԙe
e
password/drivers/poppassd.phpnu�[���<?php

/**
 * Poppassd Password Driver
 *
 * Driver to change passwords via Poppassd/Courierpassd
 *
 * @version 2.0
 * @author Philip Weir
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_poppassd_password
{
    function format_error_result($code, $line)
    {
        if (preg_match('/^\d\d\d\s+(\S.*)\s*$/', $line, $matches)) {
            return ['code' => $code, 'message' => $matches[1]];
        }

        return $code;
    }

    function save($curpass, $passwd, $username)
    {
        $rcmail   = rcmail::get_instance();
        $poppassd = new Net_Socket();

        $port = $rcmail->config->get('password_pop_port', 106);
        $host = $rcmail->config->get('password_pop_host', 'localhost');
        $host = rcube_utils::parse_host($host);

        $result = $poppassd->connect($host, $port, null);

        if (is_a($result, 'PEAR_Error')) {
            return $this->format_error_result(PASSWORD_CONNECT_ERROR, $result->getMessage());
        }

        $result = $poppassd->readLine();

        if (!preg_match('/^2\d\d/', $result)) {
            $poppassd->disconnect();
            return $this->format_error_result(PASSWORD_ERROR, $result);
        }

        $poppassd->writeLine("user ". $username);
        $result = $poppassd->readLine();

        if (!preg_match('/^[23]\d\d/', $result)) {
            $poppassd->disconnect();
            return $this->format_error_result(PASSWORD_CONNECT_ERROR, $result);
        }

        $poppassd->writeLine("pass ". $curpass);
        $result = $poppassd->readLine();

        if (!preg_match('/^[23]\d\d/', $result)) {
            $poppassd->disconnect();
            return $this->format_error_result(PASSWORD_ERROR, $result);
        }

        $poppassd->writeLine("newpass ". $passwd);
        $result = $poppassd->readLine();
        $poppassd->disconnect();

        if (!preg_match('/^2\d\d/', $result)) {
            return $this->format_error_result(PASSWORD_ERROR, $result);
        }

        return PASSWORD_SUCCESS;
    }
}
PKvc�\���	�	password/drivers/expect.phpnu�[���<?php

/**
 * expect driver
 *
 * Driver that adds functionality to change the systems user password via
 * the 'expect' command.
 *
 * For installation instructions please read the README file.
 *
 * @version 2.0
 * @author Andy Theuninck <gohanman@gmail.com)
 *
 * Based on chpasswd roundcubemail password driver by
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk)
 * and expect horde passwd driver by
 * @author  Gaudenz Steinlin <gaudenz@soziologie.ch>
 *
 * Configuration settings:
 * password_expect_bin => location of expect (e.g. /usr/bin/expect)
 * password_expect_script => path to "password-expect" file
 * password_expect_params => arguments for the expect script
 *   see the password-expect file for details. This is probably
 *   a good starting default:
 *   -telnet -host localhost -output /tmp/passwd.log -log /tmp/passwd.log
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_expect_password
{
    public function save($currpass, $newpass, $username)
    {
        $rcmail   = rcmail::get_instance();
        $bin      = $rcmail->config->get('password_expect_bin');
        $script   = $rcmail->config->get('password_expect_script');
        $params   = $rcmail->config->get('password_expect_params');

        $cmd = $bin . ' -f ' . $script . ' -- ' . $params;
        $handle = popen($cmd, "w");
        fwrite($handle, "$username\n");
        fwrite($handle, "$currpass\n");
        fwrite($handle, "$newpass\n");

        if (pclose($handle) == 0) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $cmd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKvc�\iKyќ�password/drivers/kpasswd.phpnu�[���<?php

/**
 * kpasswd Driver
 *
 * Driver that adds functionality to change the systems user password via
 * the 'kpasswd' command.
 *
 * For installation instructions please read the README file.
 *
 * @version 1.0
 * @author Peter Allgeyer <peter.allgeyer@salzburgresearch.at>
 *
 * Based on chpasswd roundcubemail password driver by
 * @author Alex Cartwright <acartwright@mutinydesign.co.uk>
 */

class rcube_kpasswd_password
{
    public function save($currpass, $newpass, $username)
    {
        $bin = rcmail::get_instance()->config->get('password_kpasswd_cmd', '/usr/bin/kpasswd');
        $cmd = $bin . ' ' . escapeshellarg($username) . ' 2>&1';

        $handle = popen($cmd, "w");
        fwrite($handle, $currpass."\n");
        fwrite($handle, $newpass."\n");
        fwrite($handle, $newpass."\n");

        if (pclose($handle) == 0) {
            return PASSWORD_SUCCESS;
        }

        rcube::raise_error([
                'code' => 600,
                'file' => __FILE__,
                'line' => __LINE__,
                'message' => "Password plugin: Unable to execute $cmd"
            ], true, false
        );

        return PASSWORD_ERROR;
    }
}
PKvc�\ZT)r		password/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = '修改密码';
$labels['curpasswd']  = '当前密码:';
$labels['newpasswd']  = '新密码:';
$labels['confpasswd']  = '确认新密码:';
$messages['nopassword'] = '请输入新密码。';
$messages['nocurpassword'] = '请输入当前的密码。';
$messages['passwordincorrect'] = '当前密码不正确。';
$messages['passwordinconsistency'] = '两次输入的密码不一致,请重试。';
$messages['crypterror'] = '无法保存新密码,缺少加密功能。';
$messages['connecterror'] = '无法保存新密码,连接出错。';
$messages['internalerror'] = '无法保存新密码。';
$messages['passwordshort'] = '密码至少为 $length 位。';
$messages['passwordweak'] = '密码必须至少包含一个数字和一个标点符号。';
$messages['passwordforbidden'] = '密码包含禁止使用的字符。';
$messages['firstloginchange'] = '这是你第一次登录邮箱,请修改邮箱密码。';
$messages['disablednotice'] = '系统目前正在维护,密码修改功能无法使用。我们会很快回来,给您带来不便深表歉意。';
$messages['passwinhistory'] = '此密码以前使用过。';
$messages['samepasswd'] = '新密码不能与旧密码相同。';
$messages['passwdexpirewarning'] = '警告!您的密码即将过期,请在 $expirationdatetime 前更改。';
$messages['passwdexpired'] = '您的密码已过期,您现在必须更改!';
$messages['passwdconstraintviolation'] = '密码约束违规。密码可能太弱了。';
PKvc�\���password/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Змяніць пароль';
$labels['curpasswd']  = 'Бягучы пароль:';
$labels['newpasswd']  = 'Новы пароль:';
$labels['confpasswd']  = 'Паўтарыце новы пароль:';
$messages['nopassword'] = 'Увядзіце новы пароль.';
$messages['nocurpassword'] = 'Увядзіце бягучы пароль.';
$messages['passwordincorrect'] = 'Няслушны бягучы пароль.';
$messages['passwordinconsistency'] = 'Паролі не супадаюць. Паспрабуйце яшчэ раз.';
$messages['crypterror'] = 'Не ўдалося захаваць новы пароль. Бракуе функцыі шыфравання.';
$messages['connecterror'] = 'Не ўдалося захаваць новы пароль. Памылка злучэння.';
$messages['internalerror'] = 'Не ўдалося захаваць новы пароль.';
$messages['passwordshort'] = 'Пароль мусіць быць мінімум $length знакаў.';
$messages['passwordweak'] = 'Пароль мусіць утрымліваць мінімум адну лічбу і адзін знак пунктуацыі.';
$messages['passwordforbidden'] = 'Пароль утрымлівае забароненыя знакі.';
$messages['firstloginchange'] = 'Гэта ваш першы ўваход. Трэба змяніць пароль.';
PKvc�\�Y��password/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Промяна на парола';
$labels['curpasswd']  = 'Текуща парола:';
$labels['newpasswd']  = 'Нова парола:';
$labels['confpasswd']  = 'Повторно нова парола:';
$messages['nopassword'] = 'Моля въведете нова парола.';
$messages['nocurpassword'] = 'Моля въведете текущата парола.';
$messages['passwordincorrect'] = 'Невалидна текуща парола.';
$messages['passwordinconsistency'] = 'Паролите не съвпадат, опитайте отново.';
$messages['crypterror'] = 'Невъзможна промяна на паролата. Липсва PHP функция за криптиране.';
$messages['connecterror'] = 'Невъзможна промяна на паролата. Грешка при свързване със сървър.';
$messages['internalerror'] = 'Паролата не може да бъде променена.';
$messages['passwordshort'] = 'Паролата трябва да е дълга поне $length знака.';
$messages['passwordweak'] = 'Паролата трябва да включва поне една цифра и един препинателен знак.';
$messages['passwordtooweak'] = 'Паролата е твърде лесна.';
$messages['passwordnoseq'] = 'Паролата не трябва да бъде последователност като 123456 или QWERTY.';
$messages['passwordnocommon'] = 'Паролата не трябва да е често срещна дума или име.';
$messages['passwordforbidden'] = 'Паролата съдържа непозволени символи.';
$messages['firstloginchange'] = 'Влизате за първи път. Моля променете Вашата парола.';
$messages['disablednotice'] = 'Системата е в режим на поддръжка и не е възможна промяна на паролата. Всичко би трябвало да се нормализира съвсем скоро. Извиняваме са за причиненото неудобство.';
$messages['passwinhistory'] = 'Тази парола вече е била използвана.';
$messages['samepasswd'] = 'Новата парола трябва да е различна от старата парола.';
$messages['passwdexpirewarning'] = 'Внимание! Срокът на Вашата парола изтича съвсем скоро и е препоръчително да я смените преди $expirationdatetime.';
$messages['passwdexpired'] = 'Срокът на Вашата парола е изтекъл и трябва да я смените точно сега!';
$messages['passwdconstraintviolation'] = 'Нарушение на изискване за паролата. Вероятно паролата е твърде лесна.';
$messages['pwned_mustnotbedisclosed'] = 'Паролата не трябва да бъде <a href="$href" target="_blank">общоизвестна</a>.';
$messages['pwned_isdisclosed'] = 'Тази парола е общоизвестна.';
$messages['pwned_fetcherror'] = 'Неуспешна проверка на силата на паролата.';
PKvc�\�+��password/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Change password';
$labels['curpasswd']  = 'Current Password:';
$labels['newpasswd']  = 'New Password:';
$labels['confpasswd']  = 'Confirm New Password:';

$messages['nopassword'] = 'Please input new password.';
$messages['nocurpassword'] = 'Please input current password.';
$messages['passwordincorrect'] = 'Current password incorrect.';
$messages['passwordinconsistency'] = 'Passwords do not match, please try again.';
$messages['crypterror'] = 'Could not save new password. Encryption function missing.';
$messages['connecterror'] = 'Could not save new password. Connection error.';
$messages['internalerror'] = 'Could not save new password.';
$messages['passwordshort'] = 'Password must be at least $length characters long.';
$messages['passwordweak'] = 'Password must include at least one number and one punctuation character.';
$messages['passwordtooweak'] = 'Password too weak.';
$messages['passwordnoseq'] = 'Password should not be a sequence like 123456 or QWERTY.';
$messages['passwordnocommon'] = 'Password should not be a common word or name.';
$messages['passwordforbidden'] = 'Password contains forbidden characters.';
$messages['firstloginchange'] = 'This is your first login. Please change your password.';
$messages['disablednotice'] = 'The system is currently under maintenance and password change is not possible at the moment. Everything should be back to normal soon. We apologize for any inconvenience.';
$messages['passwinhistory'] = 'This password has already been used previously.';
$messages['samepasswd'] = 'New password have to be different from the old one.';
$messages['passwdexpirewarning'] = 'Warning! Your password will expire soon, change it before $expirationdatetime.';
$messages['passwdexpired'] = 'Your password has expired, you have to change it now!';
$messages['passwdconstraintviolation'] = 'Password constraint violation. Password probably too weak.';
$messages['pwned_mustnotbedisclosed'] = 'Password must not be <a href="$href" target="_blank">commonly known</a>.';
$messages['pwned_isdisclosed'] = 'This password is commonly known.';
$messages['pwned_fetcherror'] = 'Failed to verify the password strength.';
PKvc�\f�����password/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Vaihda salasana';
$labels['curpasswd']  = 'Nykyinen salasana:';
$labels['newpasswd']  = 'Uusi salasana:';
$labels['confpasswd']  = 'Vahvista uusi salasana:';
$messages['nopassword'] = 'Syötä uusi salasana.';
$messages['nocurpassword'] = 'Syötä nykyinen salasana.';
$messages['passwordincorrect'] = 'Nykyinen salasana on väärin.';
$messages['passwordinconsistency'] = 'Salasanat eivät täsmää, yritä uudelleen.';
$messages['crypterror'] = 'Uuden salasanan tallennus epäonnistui. Kryptausfunktio puuttuu.';
$messages['connecterror'] = 'Uuden salasanan tallennus epäonnistui. Yhteysongelma.';
$messages['internalerror'] = 'Uuden salasanan tallennus epäonnistui.';
$messages['passwordshort'] = 'Salasanassa täytyy olla vähintään $length merkkiä.';
$messages['passwordweak'] = 'Salasanan täytyy sisältää vähintään yksi numero ja yksi välimerkki.';
$messages['passwordtooweak'] = 'Salasana on liian heikko.';
$messages['passwordnoseq'] = 'Salasana ei saa olla yleinen ketju kuten 123456 tai QWERTY.';
$messages['passwordnocommon'] = 'Salasana ei saa olla yleinen sana tai nimi.';
$messages['passwordforbidden'] = 'Salasana sisältää virheellisiä merkkejä.';
$messages['firstloginchange'] = 'Tämä on ensimmäinen kirjautumiskertasi. Vaihda salasanasi.';
$messages['disablednotice'] = 'Järjestelmä on parhaillaan huoltotilassa, joten salasanaa ei voi vaihtaa juuri nyt. Pahoittelemme aiheutunutta vaivaa. Kaiken pitäisi olla pian käytettävissä normaaliin tapaan.';
$messages['passwinhistory'] = 'Tämä salasana on jo ollut käytössä aikaisemmin.';
$messages['samepasswd'] = 'Uuden salasanan pitää olla eri kuin vanha salasana.';
$messages['passwdexpirewarning'] = 'Varoitus! Salasanasi vanhenee pian, vaihda se ennen $expirationdatetime.';
$messages['passwdexpired'] = 'Salasanasi on vanhentunut ja se pitää vaihtaa nyt!';
$messages['passwdconstraintviolation'] = 'Salasanan rajoitevirhe. Salasana on todennäköisesti liian heikko.';
$messages['pwned_mustnotbedisclosed'] = 'Salasana ei saa olla <a href="$href" target="_blank">yleisesti tunnettu</a>.';
$messages['pwned_isdisclosed'] = 'Salasana on yleisesti tunnettu.';
$messages['pwned_fetcherror'] = 'Salasanan vahvuutta ei voitu varmistaa.';
PKvc�\m��BBpassword/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Bytt passord';
$labels['curpasswd']  = 'Nåværende passord:';
$labels['newpasswd']  = 'Nytt passord:';
$labels['confpasswd']  = 'Bekreft nytt passord';
$messages['nopassword'] = 'Vennligst skriv inn nytt passord';
$messages['nocurpassword'] = 'Vennligst skriv inn nåværende passord';
$messages['passwordincorrect'] = 'Nåværende passord er feil.';
$messages['passwordinconsistency'] = 'Passordene er ikke like, vennligst prøv igjen.';
$messages['crypterror'] = 'Kunne ikke lagre nytt passord. Krypteringsfunksjonen mangler.';
$messages['connecterror'] = 'Kunne ikke lagre nytt passord. Tilkoblingsfeil.';
$messages['internalerror'] = 'Kunne ikke lagre nytt passord';
$messages['passwordshort'] = 'Passordet må minimum inneholde $length tegn.';
$messages['passwordweak'] = 'Passordet må inneholde minst ett tall og ett tegnsettingssymbol.';
$messages['passwordtooweak'] = 'Passordet er for svakt.';
$messages['passwordnoseq'] = 'Passordet burde ikke være en setning slik som 123456 eller QWERTY.';
$messages['passwordnocommon'] = 'Passordet burde ikke være et ord eller navn.';
$messages['passwordforbidden'] = 'Passordet inneholder forbudte tegn.';
$messages['firstloginchange'] = 'Dette er din første innlogging. Vennligst bytt ditt passord.';
$messages['disablednotice'] = 'Systemet er under vedlikehold og man kan ikke endre passord for øyeblikket. Alt skal være tilbake til normalt snart. Vi beklager de ulempene dette måtte medføre.';
$messages['passwinhistory'] = 'Dette passordet er benyttet tidligere.';
$messages['samepasswd'] = 'Det nye passordet må være anderledes fra det gamle.';
$messages['passwdexpirewarning'] = 'Advarsel! Ditt passord løper snart ut, bytt det før $expirationdatetime.';
$messages['passwdexpired'] = 'Ditt passord har løpt ut, du må bytte det nå!';
$messages['passwdconstraintviolation'] = 'Brudd på passordbegrensning. Passordet er sannsynligvis for svakt.';
$messages['pwned_isdisclosed'] = 'Dette passordet er allment kjent.';
$messages['pwned_fetcherror'] = 'Feilet i verifiseringen av passordstyrke.';
PKvc�\�&��

password/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Ndryshoni fjalëkalimin';
$labels['curpasswd']  = 'Fjalëkalimi i Tanishëm';
$labels['newpasswd']  = 'Fjalëkalimi i Ri:';
$labels['confpasswd']  = 'Ripohoni Fjalëkalimin e Ri:';
$messages['nopassword'] = 'Ju lutemi, futni fjalëkalimin e ri.';
$messages['nocurpassword'] = 'Ju lutemi, futni fjalëkalimin e tanishëm.';
$messages['passwordincorrect'] = 'Fjalëkalimi i tanishëm është i pasaktë.';
$messages['passwordinconsistency'] = 'Fjalëkalimet nuk përputhen, ju lutemi, riprovoni.';
$messages['crypterror'] = 'S’u ruajt dot fjalëkalimi i ri. Mungon funksioni i Fshehtëzimit.';
$messages['connecterror'] = 'S’u ruajt dot fjalëkalimi i ri. Gabim lidhjeje.';
$messages['internalerror'] = 'S’u ruajt dot fjalëkalimi i ri.';
$messages['passwordshort'] = 'Fjalëkalimi duhet të jetë të paktën $length shenja i gjatë.';
$messages['passwordweak'] = 'Fjalëkalimi duhet të përmbajë të paktën një numër dhe një shenjë pikësimi.';
$messages['passwordtooweak'] = 'Fjalëkalim shumë i dobët.';
$messages['passwordnoseq'] = 'Fjalëkalimi s’duhet të jetë një sekuencë si, fjala vjen, 123456 apo QWERTY.';
$messages['passwordnocommon'] = 'Fjalëkalimi s’duhet të jetë një fjalë apo emër i rëndomtë.';
$messages['passwordforbidden'] = 'Fjalëkalimi përmban shenja të ndaluara.';
$messages['firstloginchange'] = 'Kjo është hyrja juaj e parë. Ju lutemi, ndryshoni fjalëkalimin tuaj.';
$messages['disablednotice'] = 'Sistemi është hëpërhë nën gjendje punimesh mirëmbajtjeje dhe ndryshimi i fjalëkalimit s’është i mundur në këtë çast. Gjithçka do të duhej të ish kthyer në gjendje normale shumë shpejt. Kërkojmë ndjesë për çfarëdo sikleti.';
$messages['passwinhistory'] = 'Ky fjalëkalim është përdorur një herë më parë.';
$messages['samepasswd'] = 'Fjalëkalimi i ri duhet të jetë i ndryshëm nga i vjetri.';
$messages['passwdexpirewarning'] = 'Kujdes! Fjalëkalimi juaj do të skadojë së shpejti, ndryshojeni para $expirationdatetime.';
$messages['passwdexpired'] = 'Fjalëkalimi juaj ka skaduar, lypset ta ndryshoni tani!';
$messages['passwdconstraintviolation'] = 'Cenim kufizimi fjalëkalimi. Mundet fjalëkalim shumë i dobët.';
$messages['pwned_mustnotbedisclosed'] = 'Fjalëkalimi s’duhet të jetë <a href="$href" target="_blank">gjë e ditur rëndom</a>.';
$messages['pwned_isdisclosed'] = 'Ky fjalëkalim është rëndom i njohur';
$messages['pwned_fetcherror'] = 'S’u arrit të verifikohej fortësia e fjalëkalimit.';
PKvc�\����password/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Muuda parooli';
$labels['curpasswd']  = 'Vana parool:';
$labels['newpasswd']  = 'Uus parool:';
$labels['confpasswd']  = 'Uus parool uuesti:';
$messages['nopassword'] = 'Palun sisesta uus parool.';
$messages['nocurpassword'] = 'Palun sisesta vana parool.';
$messages['passwordincorrect'] = 'Vana parool on vale.';
$messages['passwordinconsistency'] = 'Paroolid ei kattu, palun proovi uuesti.';
$messages['crypterror'] = 'Serveris ei ole parooli krüpteerimiseks vajalikku funktsiooni.';
$messages['connecterror'] = 'Parooli salvestamine nurjus. Ühenduse tõrge.';
$messages['internalerror'] = 'Uue parooli andmebaasi salvestamine nurjus.';
$messages['passwordshort'] = 'Parool peab olema vähemalt $length märki pikk.';
$messages['passwordweak'] = 'Parool peab sisaldama vähemalt üht numbrit ja märki.';
$messages['passwordtooweak'] = 'Parool on liiga nõrk.';
$messages['passwordforbidden'] = 'Parool sisaldab keelatud märki.';
$messages['firstloginchange'] = 'See on sinu esimene sisselogimine, palun muuda oma parooli.';
$messages['pwned_isdisclosed'] = 'Parool on liiga tavaline.';
$messages['pwned_fetcherror'] = 'Parooli tugevuse kontrollimine ebaõnnestus.';
PKvc�\1薎�password/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'گۆڕینی تێپەڕەوشە';
$labels['curpasswd']  = 'تێپەڕەوشەی ئێستا:';
$labels['newpasswd']  = 'تێپەڕەوشەی نوێ:';
$labels['confpasswd']  = 'پشتڕاستکردنەوەی تێپەڕەوشەی نوێ:';
$messages['nopassword'] = 'تکایە تێپەڕەوشەی نوێ بنووسە.';
$messages['nocurpassword'] = 'تکایە تێپەڕەوشەی ئێستا بنووسە.';
$messages['passwordincorrect'] = 'تێپەڕەوشەی ئێستا نادروستە.';
$messages['passwordinconsistency'] = 'تێپەڕەوشەکان هاویەک نین، تکایە دووبارە هەوڵبدەوە.';
$messages['connecterror'] = 'نەتوانرا تێپەڕەوشەی نوێ پاشەکەوت بکرێت. هەڵەی پەیوەندیکردن.';
$messages['internalerror'] = 'نەتوانرا تێپەڕەوشەی نوێ پاشەکەوت بکرێت.';
$messages['passwordforbidden'] = 'تێپەڕەوشە نووسەی ڕێپێنەدراوی تێدایە.';
$messages['firstloginchange'] = 'ئەمە یەکەم چوونەژوورەوەتە. تکایە تێپەڕەوشەکەت بگۆڕە.';
PKvc�\]��t��password/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Aldatu pasahitza';
$labels['curpasswd']  = 'Oraingo pasahitza:';
$labels['newpasswd']  = 'Pasahitz berria:';
$labels['confpasswd']  = 'Baieztatu pasahitz berria:';
$messages['nopassword'] = 'Sartu pasahitz berria.';
$messages['nocurpassword'] = 'Sartu oraingo pasahitza.';
$messages['passwordincorrect'] = 'Oraingo pasahitza ez da zuzena.';
$messages['passwordinconsistency'] = 'Pasahitz berria ez datoz bat, saiatu berriz.';
$messages['crypterror'] = 'Ezin izan da pasahitz berria gorde. Ez da zifratze funtziorik aurkitu.';
$messages['connecterror'] = 'Ezin izan da pasahitz berria gorde. Konexio arazoak egon dira.';
$messages['internalerror'] = 'Ezin izan da pasahitz berria gorde.';
$messages['passwordshort'] = 'Gutxienez $length karakteretakoa izan behar du pasahitzak.';
$messages['passwordweak'] = 'Gutxienez zenbaki bat eta puntuazio karaktere bat izan behar du pasahitzak.';
$messages['passwordtooweak'] = 'Pasahitz ahulegia';
$messages['passwordnoseq'] = 'Pasahitza ez luke horrelako sekuentzia izan behar: 123456 edo QWERTY';
$messages['passwordnocommon'] = 'Pasahitza ez luke hitz arrunta edo izen bat izan behar.';
$messages['passwordforbidden'] = 'Galarazitako karaktereak daude pasahitzean.';
$messages['firstloginchange'] = 'Zure lehenengo sarrera da. Pasahitza aldatu mesedez.';
$messages['disablednotice'] = 'Sistema mantentze lanetan dago eta oraintxe bertan ezin da pasahitzik aldatu. Laster denak bere onera itzuli beharko luke. Barkatu eragozpenenak.';
$messages['passwinhistory'] = 'Pasahitz hori aurretik erabili izan da.';
$messages['samepasswd'] = 'Pasahitz berria ezin da izan aurrekoaren berdina.';
$messages['passwdexpirewarning'] = 'Kontuz! Zure pasahitza laster iraungiko da, aldatu $expirationdatetime baino lehen.';
$messages['passwdexpired'] = 'Zure pasahitza iraungi da, aldatu behar duzu orain!';
$messages['passwdconstraintviolation'] = 'Pasahitzen murriztapen-bortxaketa. Seguru aski ahulegia da.';
$messages['pwned_mustnotbedisclosed'] = 'Pasahitza ez da <a href="$href" target="_blank">ezaguna</a> izan behar.';
$messages['pwned_isdisclosed'] = 'Pasahitz hori ezaguna da.';
$messages['pwned_fetcherror'] = 'Pasahitzaren sendotasunaren probak huts egin du.';
PKvc�\i���password/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Parola değiştirme';
$labels['curpasswd']  = 'Geçerli parola:';
$labels['newpasswd']  = 'Yeni parola:';
$labels['confpasswd']  = 'Yeni parola onayı:';
$messages['nopassword'] = 'Yeni parolayı yazın.';
$messages['nocurpassword'] = 'Geçerli parolayı yazın.';
$messages['passwordincorrect'] = 'Geçerli parolayı yanlış yazdınız.';
$messages['passwordinconsistency'] = 'Parola ile onayı aynı değil. Lütfen yeniden deneyin.';
$messages['crypterror'] = 'Yeni parola kaydedilemedi. Şifreleme işlevi bulunamadı.';
$messages['connecterror'] = 'Yeni parola kaydedilemedi. Bağlantı sorunu.';
$messages['internalerror'] = 'Yeni parola kaydedilemedi.';
$messages['passwordshort'] = 'Parola en az $length karakterden oluşmalı.';
$messages['passwordweak'] = 'Parola en az bir sayı ve bir noktalama işareti içermeli.';
$messages['passwordtooweak'] = 'Parola çok kolay.';
$messages['passwordnoseq'] = 'Parola 123456 ya da QWERTY gibi sıralamalardan oluşmamalıdır.';
$messages['passwordnocommon'] = 'Parola iyi bilinen bir sözcük ya da ad olmamalıdır.';
$messages['passwordforbidden'] = 'Parolada izin verilmeyen karakterler var.';
$messages['firstloginchange'] = 'İlk kez oturum açıyorsunuz. Parolanızı değiştirin.';
$messages['disablednotice'] = 'Sistem bakımda olduğundan parola değiştirilemez. Lütfen daha sonra yeniden deneyin. Verdiğimiz rahatsızlıktan dolayı özür dileriz.';
$messages['passwinhistory'] = 'Bu parola daha önce kullanılmış.';
$messages['samepasswd'] = 'Yeni parola eski paroladan farklı olmalıdır.';
$messages['passwdexpirewarning'] = 'Uyarı! Parolanızın kullanma süresi yakında dolacak. $expirationdatetime tarihinden önce değiştirin.';
$messages['passwdexpired'] = 'Parolanızın kullanma süresi dolmuş. Şimdi değiştirmelisiniz!';
$messages['passwdconstraintviolation'] = 'Parola istenilen karmaşıklıkta değil. Büyük olasılıkla oldukça kolay.';
$messages['pwned_mustnotbedisclosed'] = 'Parola <a href="$href" target="_blank">yaygın kullanılmıyor olmalı</a>.';
$messages['pwned_isdisclosed'] = 'Bu parola yaygın olarak kullanılıyor.';
$messages['pwned_fetcherror'] = 'Parola zorluğu denetlenemedi.';
PKvc�\"��v��password/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Cambiar contraseña';
$labels['curpasswd']  = 'Contraseña actual:';
$labels['newpasswd']  = 'Nueva contraseña:';
$labels['confpasswd']  = 'Confirmar contraseña:';
$messages['nopassword'] = 'Por favor ingresá una nueva contraseña.';
$messages['nocurpassword'] = 'Por favor ingresá la contraseña actual.';
$messages['passwordincorrect'] = 'Contraseña actual incorrecta.';
$messages['passwordinconsistency'] = 'Las contraseñas no coinciden, por favor intentalo de nuevo.';
$messages['crypterror'] = 'No se pudo guardar la contraseña nueva. Falta la función de cifrado.';
$messages['connecterror'] = 'No se pudo guardar la contraseña nueva. Error de conexión';
$messages['internalerror'] = 'No se pudo guardar la contraseña nueva.';
$messages['passwordshort'] = 'Tu contraseña debe tener una longitud mínima de $length.';
$messages['passwordweak'] = 'Tu nueva contraseña debe incluir al menos un número y un signo de puntuación.';
$messages['passwordtooweak'] = 'La contraseña es demasiado débil.';
$messages['passwordnoseq'] = 'La contraseña no debe ser una secuencia como 123456 o QWERTY.';
$messages['passwordnocommon'] = 'La contraseña no debe ser ni una palabra común ni un nombre.';
$messages['passwordforbidden'] = 'La contraseña contiene caracteres no válidos.';
$messages['firstloginchange'] = 'Este es tu primer inicio de sesión. Por favor, cambia tu contraseña.';
$messages['disablednotice'] = 'Actualmente el sistema se encuentra en mantenimiento y el cambio de contraseña no es posible en este momento. Todo debería volver a la normalidad pronto. Te pedimos disculpas por el inconveniente.';
$messages['passwinhistory'] = 'La contraseña ya ha sido usada con anterioridad.';
$messages['samepasswd'] = 'La nueva contraseña debe ser diferente de la anterior.';
$messages['passwdexpirewarning'] = '¡Advertencia! Tu contraseña vencerá pronto, cambiala antes del $expirationdatetime.';
$messages['passwdexpired'] = 'Tu contraseña expiró. ¡Tenés que cambiarla ahora!';
$messages['passwdconstraintviolation'] = 'Violación de restricción de contraseña. Probablemente tu contraseña es demasiado débil.';
$messages['pwned_mustnotbedisclosed'] = 'La constraseña no debe ser <a href="$href" target="_blank">comúnmente conocida</a>.';
$messages['pwned_isdisclosed'] = 'La contraseña es comúnmente conocida.';
$messages['pwned_fetcherror'] = 'No se pudo verificar la seguridad de la contraseña.';
PKvc�\%�1*password/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Şîfreyê biguherîne';
$labels['curpasswd']  = 'Şîfreya niha:';
$labels['newpasswd']  = 'Şîfreya nû:';
$labels['confpasswd']  = 'Şîfreya nû bipejirîne:';
$messages['nopassword'] = 'Şîfreya nû binivîse.';
$messages['nocurpassword'] = 'Şîfreya niha binivîse.';
$messages['passwordincorrect'] = 'Şîfreya niha xelet e.';
$messages['passwordinconsistency'] = 'Şîfre hevdu nagirin, dîsa biceribîne.';
$messages['crypterror'] = 'Şîfreya nû nehat tomarkirin. Fonksiyona şîfrekirinê hat jibîrkirin.';
$messages['connecterror'] = 'Şîfreya nû nehat tomarkirin. Çewtiya girêdanê.';
$messages['internalerror'] = 'Şîfre nehat tomarkirin.';
$messages['passwordshort'] = 'Divê şîfre ji $length karakteran kêmtir nebe.';
$messages['passwordweak'] = 'Divê di şîfreyê de herî kêm hejmarek û karakterekî xalbendiyê hebe.';
$messages['passwordtooweak'] = 'Şîfre pir hêsan e.';
$messages['passwordnoseq'] = 'Divê şîfre ne rêzek mîna 123456 an QWERTY be.';
$messages['passwordnocommon'] = 'Divê şîfre ne peyvek an navek hevpar be.';
$messages['passwordforbidden'] = 'Şîfre karakterên qedexe dihewîne.';
$messages['firstloginchange'] = 'Ev têketina te ya yekemîn e. Ji kerema xwe şîfreya xwe biguherîne.';
PKvc�\����password/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Alterar a senha';
$labels['curpasswd']  = 'Senha atual:';
$labels['newpasswd']  = 'Nova senha:';
$labels['confpasswd']  = 'Confirmar nova senha:';
$messages['nopassword'] = 'Por favor, informe a nova senha.';
$messages['nocurpassword'] = 'Por favor, informe a senha atual.';
$messages['passwordincorrect'] = 'Senha atual incorreta.';
$messages['passwordinconsistency'] = 'Senhas não combinam, por favor tente novamente.';
$messages['crypterror'] = 'Não foi possível gravar a nova senha. Função de criptografia ausente.';
$messages['connecterror'] = 'Não foi possível gravar a nova senha. Erro de conexão.';
$messages['internalerror'] = 'Não foi possível gravar a nova senha.';
$messages['passwordshort'] = 'A senha precisa ter ao menos $length caracteres.';
$messages['passwordweak'] = 'A senha precisa conter ao menos um número e um caractere de pontuação.';
$messages['passwordtooweak'] = 'Senha fraca demais.';
$messages['passwordnoseq'] = 'Senha não deve ser uma sequência como 123456 ou QWERTY.';
$messages['passwordnocommon'] = 'Senha não deve ser uma palavra comum ou nome.';
$messages['passwordforbidden'] = 'A senha contém caracteres proibidos.';
$messages['firstloginchange'] = 'Este é o seu primeiro acesso. Por favor altere sua senha.';
$messages['disablednotice'] = 'O sistema está em manutenção e a senha não pode ser alterada no momento. Tudo voltará ao normal em breve. Pedimos desculpas pelo inconveniente.';
$messages['passwinhistory'] = 'Esta senha já foi usada antes.';
$messages['samepasswd'] = 'A nova senha deve ser diferente da antiga.';
$messages['passwdexpirewarning'] = 'Atenção! Sua senha vai expirar em breve, altere ela antes de $expirationdatetime.';
$messages['passwdexpired'] = 'Sua senha expirou, você precisa alterá-la agora!';
$messages['passwdconstraintviolation'] = 'Restrição de senha violada. Senha provavelmente muito fraca.';
$messages['pwned_mustnotbedisclosed'] = 'A senha não deve ser <a href="$href" target="_blank">vulgarmente conhecida</a>.';
$messages['pwned_isdisclosed'] = 'Esta senha é vulgarmente conhecida.';
$messages['pwned_fetcherror'] = 'Falha ao verificar a força da senha.';
PKvc�\�xG��password/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Mainīt paroli';
$labels['curpasswd']  = 'Pašreizējā parole:';
$labels['newpasswd']  = 'Jaunā parole:';
$labels['confpasswd']  = 'Apstiprināt jauno paroli:';
$messages['nopassword'] = 'Lūdzu ievadiet jauno paroli.';
$messages['nocurpassword'] = 'Lūdzu ievadiet pašreizējo paroli.';
$messages['passwordincorrect'] = 'Pašreizējā parole nav pareiza.';
$messages['passwordinconsistency'] = 'Paroles nesakrīt. Lūdzu, ievadiet vēlreiz.';
$messages['crypterror'] = 'Nevarēja saglabāt jauno paroli. Trūkst kriptēšanas funkcijas.';
$messages['connecterror'] = 'Nevarēja saglabāt jauno paroli. Savienojuma kļūda.';
$messages['internalerror'] = 'Nevarēja saglabāt jauno paroli.';
$messages['passwordshort'] = 'Jaunajai parolei jābūt vismaz $length simbolu garai.';
$messages['passwordweak'] = 'Jaunajai parolei jāsatur vismaz viens cipars un speciālais simbols.';
$messages['passwordtooweak'] = 'Parole ir pārāk nedroša.';
$messages['passwordnoseq'] = 'Parolei nevajadzētu būt vienkāršai secībai kā, piemēram, 123456 vai QWERTY.';
$messages['passwordnocommon'] = 'Parolei nevajadzētu būt parastam vārdam vai nosaukumam.';
$messages['passwordforbidden'] = 'Parole satur neatļautus simbolus.';
$messages['firstloginchange'] = 'Jūs autorizējaties pirmo reizi. Lūdzu nomainite savu paroli.';
$messages['disablednotice'] = 'Sistēma uz doto brīdi atrodas apkopes režīmā un paroles maiņa nav iespējama. Lūdzu mēginiet vēlāk. Atvainojamies par sagādātajām neērtībām.';
$messages['passwinhistory'] = 'Šī parole agrāk jau ir tikusi izmantota.';
$messages['samepasswd'] = 'Jaunā parole nedrīkst būt tāda pati kā vecā.';
$messages['passwdexpirewarning'] = 'UZMANĪBU! Jūsu parolei drīz beigsies derīguma termiņš, lūdzu nomainiet to pirms $expirationdatetime.';
$messages['passwdexpired'] = 'Jūsu parolei ir beidzies derīguma termiņš un Jums tā tagad ir jānomaina.';
$messages['passwdconstraintviolation'] = 'Paroles veidošanas nosacījumu pārkāpums. Parole, iespējams, pārāk nedroša.';
$messages['pwned_isdisclosed'] = 'Šī ir vispārzināma parole.';
$messages['pwned_fetcherror'] = 'Neizdevās pārbaudīt paroles drošumu.';
PKvc�\����password/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Zmeniť heslo';
$labels['curpasswd']  = 'Aktuálne heslo:';
$labels['newpasswd']  = 'Nové heslo:';
$labels['confpasswd']  = 'Potvrďte nové heslo:';
$messages['nopassword'] = 'Prosím zadajte nové heslo.';
$messages['nocurpassword'] = 'Prosím zadajte aktuálne heslo.';
$messages['passwordincorrect'] = 'Aktuálne heslo je nesprávne.';
$messages['passwordinconsistency'] = 'Heslá nie sú rovnaké, skúste to znova.';
$messages['crypterror'] = 'Nové heslo nemožno uložiť. Chýba šifrovacia funkcia.';
$messages['connecterror'] = 'Nové heslo nemožno uložiť. Chyba spojenia.';
$messages['internalerror'] = 'Nové heslo nemožno uložiť.';
$messages['passwordshort'] = 'Heslo musí mať najmenej $length znakov.';
$messages['passwordweak'] = 'Heslo musí obsahovať aspoň jedno číslo a jedno interpunkčné znamienko.';
$messages['passwordtooweak'] = 'Heslo je príliš slabé.';
$messages['passwordnoseq'] = 'Heslo by nemalo byť takou sekvenciou, ako napr. 123456 alebo QWERTY.';
$messages['passwordnocommon'] = 'Bežné slovo alebo meno by nemalo byť heslom.';
$messages['passwordforbidden'] = 'Heslo obsahuje nepovolené znaky.';
$messages['firstloginchange'] = 'Prihlásili ste sa po prvýkrát. Prosím zmeňte si prístupové heslo.';
$messages['disablednotice'] = 'V systéme momentálne prebieha údržba a preto nie je teraz možné zmeniť heslo. Čoskoro by sa však situácia mala vrátiť do normálu. Ospravedlňujeme sa Vám za spôsobené nepríjemnosti.';
$messages['passwinhistory'] = 'Toto heslo už bolo predtým použité.';
$messages['samepasswd'] = 'Nové heslo by sa malo odlišovať od pôvodného hesla.';
$messages['passwdexpirewarning'] = 'Pozor! Platnosť Vášho hesla čoskoro vyprší, zmeňte ho pred $expirationdatetime.';
$messages['passwdexpired'] = 'Platnosť Vášho hesla vypršala, teraz ho musíte zmeniť!';
$messages['passwdconstraintviolation'] = 'Výnimka obmedzenia hesla. Heslo je pravdepodobne príliš ľahké.';
$messages['pwned_mustnotbedisclosed'] = 'Heslo nesmie byť <a href="$href" target="_blank">všeobecne a bežne známe</a>.';
$messages['pwned_isdisclosed'] = 'Toto heslo je všeobecne známe.';
$messages['pwned_fetcherror'] = 'Nepodarilo sa overiť silu hesla.';
PKvc�\N����password/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Změna hesla';
$labels['curpasswd']  = 'Aktuální heslo:';
$labels['newpasswd']  = 'Nové heslo:';
$labels['confpasswd']  = 'Nové heslo (pro kontrolu):';
$messages['nopassword'] = 'Prosím zadejte nové heslo.';
$messages['nocurpassword'] = 'Prosím zadejte aktuální heslo.';
$messages['passwordincorrect'] = 'Zadané aktuální heslo není správné.';
$messages['passwordinconsistency'] = 'Zadaná hesla se neshodují. Prosím zkuste to znovu.';
$messages['crypterror'] = 'Heslo se nepodařilo uložit. Chybí šifrovací funkce.';
$messages['connecterror'] = 'Heslo se nepodařilo uložit. Problém s připojením.';
$messages['internalerror'] = 'Heslo se nepodařilo uložit.';
$messages['passwordshort'] = 'Heslo musí mít alespoň $length znaků.';
$messages['passwordweak'] = 'Heslo musí obsahovat alespoň jedno číslo a jedno interpunkční znaménko.';
$messages['passwordtooweak'] = 'Heslo je příliš slabé.';
$messages['passwordnoseq'] = 'Heslo by nemělo být tvořeno posloupností znaků typu 123456 nebo QWERTY. ';
$messages['passwordnocommon'] = 'Heslo by nemělo být tvořeno běžným slovem či jménem.';
$messages['passwordforbidden'] = 'Heslo obsahuje nepovolené znaky.';
$messages['firstloginchange'] = 'Vaše první přihlášení, změňte si prosím heslo.';
$messages['disablednotice'] = 'Z důvodu údržby systému není momentálně možné změnit heslo. Za chvíli by mělo být vše v pořádku, omlouváme se za tuto nepříjemnost.';
$messages['passwinhistory'] = 'Toto heslo již bylo v minulosti použito.';
$messages['samepasswd'] = 'Nové heslo musí být odlišné od předchozího.';
$messages['passwdexpirewarning'] = 'Varování! Vaše heslo bude brzy zneplatněno, změňte ho před $expirationdatetime.';
$messages['passwdexpired'] = 'Vaše heslo bylo zneplatněno, musíte ho nyní změnit!';
$messages['passwdconstraintviolation'] = ' Nesplnění nutných pravidel pro heslo. Heslo je zrejmě příliš slabé.';
$messages['pwned_mustnotbedisclosed'] = 'Heslo nesmí být <a href="$href" target="_blank">běžně užívané</a>.';
$messages['pwned_isdisclosed'] = 'Heslo je běžně užívané.';
$messages['pwned_fetcherror'] = 'Síla hesla se nedá ověřit.';
PKvc�\9/K�password/localization/ti.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'ህልው መሕለፊ ቃል:';
$labels['newpasswd']  = 'ሓዱሽ መሕለፊ ቃል:';
$labels['confpasswd']  = 'መረጋገፂ ሓዱሽ መሕለፊ ቃል :';
$messages['nopassword'] = 'ሓዱሽ መሕለፊ ቃል አብዚ ይእቶ::';
$messages['nocurpassword'] = 'ህልው መሕለፊ ቃል ኣብዚ ይእቶ::';
$messages['passwordincorrect'] = 'ህልው መሕለፊ ቃል  ከምኡ ኣይኮነን::';
$messages['passwordinconsistency'] = 'መሕለፍቲ ቃላት ሓድ ኣይኮኑን ::ተውሳኺ ፈተነ የድሊ::';
$messages['crypterror'] = 'መመስጥሪ ፋንክሽን ስለዝሳእነ እቲ መሕለፊ ቃል ኣይተቐመጠን::';
$messages['connecterror'] = 'ናይ ርክብ ጸገም ስለዘሎ እቲ መሕለፊ ቃል ኣይተቐመጠን::';
$messages['internalerror'] = 'እቲ መሕለፊ ቃል ኣይተቐመጠን::';
$messages['passwordshort'] = 'ንውሓት መሕለፊ ቃል $length ፊዳላት ክኾን አለዎ::';
$messages['passwordweak'] = 'መሕለፊ ቃል እንተውሓደ ሓደ ኣሃዝን ሓደ ስርዓተ ነጥብን ከጠቓልል አለዎ::';
$messages['passwordforbidden'] = 'እቲ መሕለፊ ቃል ውጉዳት ፊዳላት አለውዎ::';
PKvc�\M�֋password/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Wijzig wachtwoord';
$labels['curpasswd']  = 'Huidig wachtwoord:';
$labels['newpasswd']  = 'Nieuw wachtwoord:';
$labels['confpasswd']  = 'Bevestig nieuw wachtwoord:';
$messages['nopassword'] = 'Voeg aub nieuw wachtwoord in.';
$messages['nocurpassword'] = 'Voeg aub huidig wachtwoord in.';
$messages['passwordincorrect'] = 'Huidig wachtwoord incorrect.';
$messages['passwordinconsistency'] = 'Wachtwoorden komen niet overeen, probeer nogmaals.';
$messages['crypterror'] = 'Nieuw wachtwoord niet bewaard. Encryptie-functie ontbreekt.';
$messages['connecterror'] = 'Nieuw wachtwoord niet bewaard. Verbindingsfout.';
$messages['internalerror'] = 'Nieuw wachtwoord niet bewaard.';
$messages['passwordshort'] = 'Wachtwoord moet ten minste $length tekens lang zijn.';
$messages['passwordweak'] = 'Wachtwoord moet ten minste één getal en één leesteken bevatten.';
$messages['passwordforbidden'] = 'Wachtwoord bevat ongeldige tekens.';
$messages['firstloginchange'] = 'Dit is uw eerste login. Gelieve uw wachtwoord te wijzigen.';
$messages['disablednotice'] = 'Het systeem is momenteel in onderhoud en het wijzigen van een wachtwoord is momenteel niet mogelijk. Alles zou binnenkort terug normaal moeten werken. We verontschuldigen ons voor het ongemak.';
PKvc�\�IԎoopassword/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Змінити пароль';
$labels['curpasswd']  = 'Поточний пароль:';
$labels['newpasswd']  = 'Новий пароль:';
$labels['confpasswd']  = 'Підтвердіть новий пароль:';
$messages['nopassword'] = 'Будь ласка, введіть новий пароль.';
$messages['nocurpassword'] = 'Будь ласка, введіть поточний пароль.';
$messages['passwordincorrect'] = 'Поточний пароль неправильний.';
$messages['passwordinconsistency'] = 'Паролі не збігаються, спробуйте ще раз.';
$messages['crypterror'] = 'Не вдалося зберегти новий пароль. Функція шифрування відсутня.';
$messages['connecterror'] = 'Не вдалося зберегти новий пароль. Помилка з\'єднання.';
$messages['internalerror'] = 'Не вдалося зберегти новий пароль.';
$messages['passwordshort'] = 'Пароль повинен бути не менше $length символів.';
$messages['passwordweak'] = 'Пароль повинен містити як мінімум одну цифру і один розділовий знак.';
$messages['passwordforbidden'] = 'Пароль містить заборонені символи.';
$messages['firstloginchange'] = 'Це Ваше перше входження в систему. Змініть, будь ласка, свій пароль.';
$messages['disablednotice'] = 'Система зараз в режимі обслуговування і змінити пароль наразі неможливо. Невдовзі все має вернутися в норму. Просимо вибачення за будь-які незручності.';
$messages['passwinhistory'] = 'Цей пароль вже використовувався раніше.';
$messages['samepasswd'] = 'Новий пароль повинен відрізнятися від старого.';
$messages['passwdexpirewarning'] = 'УВАГА! У вашого пароля закінчується термін, змінити його як омога скоріше до $expirationdatetime.';
$messages['passwdexpired'] = 'Ваш пароль закінчився, ви повинні змінити це зараз!';
PKvc�\��UO	O	password/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Wachtwurd feroarje';
$labels['curpasswd']  = 'Aktueel wachtwurd:';
$labels['newpasswd']  = 'Nij wachtwurd:';
$labels['confpasswd']  = 'Nij wachtwurd befêstigje:';
$messages['nopassword'] = 'Fier in nij wachtwurd yn.';
$messages['nocurpassword'] = 'Fier aktueel wachtwurd yn:';
$messages['passwordincorrect'] = 'Ferkeard aktueel wachtwurd.';
$messages['passwordinconsistency'] = 'Wachtwurden komme net oerien, besykje it nochris.';
$messages['crypterror'] = 'Koe nij wachtwurd net bewarje. Fersifering funksje ûntbrekt.';
$messages['connecterror'] = 'Koe nij wachtwurd net bewarje. Ferbining flater.';
$messages['internalerror'] = 'Koe nij wachtwurd net bewarje.';
$messages['passwordshort'] = 'Wachtwurd moat op syn minst $length tekens lang.';
$messages['passwordweak'] = 'Wachtwurd moat op syn minst ien nûmer en ien lêstekens karakter befetsje.';
$messages['passwordforbidden'] = 'Wachtwurd befettet ferbeane tekens.';
$messages['firstloginchange'] = 'Dit is jo earste oanmelding. Wizigje asjobleaft jo wachtwurd.';
$messages['disablednotice'] = 'It systeem is op dit stuit ûnder ûnderhâld en wachtwurd feroaring is net mooglik. Alles soe gau werom wêze moatte nei it normale. Sorry foar it ûngemak.';
$messages['passwinhistory'] = 'Dit wachtwurd is al earder brûkt.';
$messages['samepasswd'] = 'Nij wachtwurd moat oars wêze as it âlde.';
$messages['passwdexpirewarning'] = 'Warskôging! Jo wachtwurd sil ynkoarten ferrinne, feroarje it foar $expirationdatetime.';
$messages['passwdexpired'] = 'Jo wachtwurd is ferrûn, jo moatte it no feroarje!';
PKvc�\�����password/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Passwort ändern';
$labels['curpasswd']  = 'Aktuelles Passwort';
$labels['newpasswd']  = 'Neues Passwort';
$labels['confpasswd']  = 'Passwort Wiederholung';
$messages['nopassword'] = 'Bitte geben Sie ein neues Passwort ein';
$messages['nocurpassword'] = 'Bitte geben Sie Ihr aktuelles Passwort an';
$messages['passwordincorrect'] = 'Das aktuelle Passwort ist nicht korrekt';
$messages['passwordinconsistency'] = 'Das neue Passwort und dessen Wiederholung stimmen nicht überein';
$messages['crypterror'] = 'Neues Passwort nicht gespeichert: Verschlüsselungsfunktion fehlt';
$messages['connecterror'] = 'Neues Passwort nicht gespeichert: Verbindungsfehler';
$messages['internalerror'] = 'Neues Passwort nicht gespeichert';
$messages['passwordshort'] = 'Passwort muss mindestens $length Zeichen lang sein.';
$messages['passwordweak'] = 'Passwort muss mindestens eine Zahl und ein Sonderzeichen enthalten.';
$messages['passwordtooweak'] = 'Das Passwort ist zu schwach.';
$messages['passwordnoseq'] = 'Das Passwort sollte keine Sequenz wie 123456 oder QWERTZ sein.';
$messages['passwordnocommon'] = 'Passwort sollte kein allgemeines Wort oder Name sein.';
$messages['passwordforbidden'] = 'Passwort enthält unzulässige Zeichen.';
$messages['firstloginchange'] = 'Dies ist Ihre erste Anmeldung. Bitte ändern Sie Ihr Passwort.';
$messages['disablednotice'] = 'Das System befindet sich derzeit im Wartungszustand und eine Passwortänderung ist im Moment nicht möglich. Der normale Betrieb sollte bald wieder hergestellt sein. Wir bitten um Entschuldigung für die Unannehmlichkeiten.';
$messages['passwinhistory'] = 'Dieses Passwort wurde bereits einmal verwendet.';
$messages['samepasswd'] = 'Das neue Passwort muss sich von dem Alten unterscheiden.';
$messages['passwdexpirewarning'] = 'Achtung! Ihr Passwort läuft am $expirationdatetime ab. Ändern Sie es rechtzeitig.';
$messages['passwdexpired'] = 'Ihr Passwort ist abgelaufen, bitte ändern Sie es jetzt!';
$messages['passwdconstraintviolation'] = 'Passwortrichtlinien nicht erfüllt. Das Passwort ist wahrscheinlich zu schwach.';
$messages['pwned_mustnotbedisclosed'] = 'Das Passwort darf nicht <a href="$href" target="_blank">allgemein bekannt sein</a>.';
$messages['pwned_isdisclosed'] = 'Dieses Passwort ist allgemein bekannt.';
$messages['pwned_fetcherror'] = 'Die Überprüfung der Passwortstärke ist fehlgeschlagen.';
PKvc�\����(( password/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Cambiar contraseña';
$labels['curpasswd']  = 'Contraseña actual: ';
$labels['newpasswd']  = 'Contraseña nueva:';
$labels['confpasswd']  = 'Confirmar contraseña nueva:';
$messages['nopassword'] = 'Por favor, ingrese la nueva contraseña.';
$messages['nocurpassword'] = 'Por favor, ingrese la contraseña actual.';
$messages['passwordincorrect'] = 'Contraseña actual incorrecta.';
$messages['passwordinconsistency'] = 'Las contraseñas no coinciden, por favor intente nuevamente.';
$messages['crypterror'] = 'No se pudo guardar la nueva contraseña. No se encuentra la función de encriptación.';
$messages['connecterror'] = 'No se pudo guardar la nueva contraseña. Error de conexión.';
$messages['internalerror'] = 'No se pudo guardar la nueva contraseña.';
$messages['passwordshort'] = 'La contraseña debe tener al menos $length carácteres.';
$messages['passwordweak'] = 'La contraseña debe incluir por lo menos un número y un signo de puntuación.';
$messages['passwordtooweak'] = 'La contraseña es muy débil.';
$messages['passwordnoseq'] = 'La contraseña no puede ser una secuencia como 123456 or QWERTY.';
$messages['passwordnocommon'] = 'La contraseña no puede ser una palabra o nombre común.';
$messages['passwordforbidden'] = 'La contraseña contiene carácteres ilegales.';
$messages['firstloginchange'] = 'Esta es la primera vez que ingresa. Por favor cambie su contraseña.';
$messages['disablednotice'] = 'El sistema se encuentra en mantenimiento actualmente y el cambio de contraseña no es posible en este momento. Todo volverá a la normalidad pronto. Lamentamos los inconvenientes.';
$messages['passwinhistory'] = 'La contraseña ya ha sido usada previamente.';
$messages['samepasswd'] = 'La nueva contraseña tiene que ser diferente a la anterior.';
$messages['passwdexpirewarning'] = 'Alerta! Su contraseña expirará pronto, cambiela antes de $expirationdatetime.';
$messages['passwdexpired'] = 'Su contraseña ha expirado, tiene que cambiarla ahora!';
$messages['passwdconstraintviolation'] = 'Violación de restricción de contraseña. Probablemente la contraseña sea demasiado débil.';
$messages['pwned_isdisclosed'] = 'Esta contraseña es comúnmente conocida.';
$messages['pwned_fetcherror'] = 'No se pudo verificar la seguridad de la contraseña.';
PKvc�\�̷�

password/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Parolni almashtirish';
$labels['curpasswd']  = 'Hozirgi parol';
$labels['newpasswd']  = 'Yangi parol';
$labels['confpasswd']  = 'Yangi parolni tasdiqlash';
$messages['nopassword'] = 'Iltimos, yangi parolni kiriting';
$messages['nocurpassword'] = 'Iltimos, yangi parolni kiriting';
$messages['passwordincorrect'] = 'Hozirgi parol noto‘g‘ri yozildi';
$messages['passwordinconsistency'] = 'Parollar mos emas, qaytadan urinub ko‘ring';
$messages['crypterror'] = 'Yangi parol saqlanmadi. Shifrlash funksiyasi yoqilmagan';
$messages['connecterror'] = 'Yangi parol saqlanmadi. Ulanishda xatolik.';
$messages['internalerror'] = 'Yangi parol saqlanmadi.';
$messages['passwordshort'] = 'Parol uzunligi kamida $length simvol bo‘lishi kerak.';
$messages['passwordweak'] = 'Parol kamida bitta raqamga ega bo‘lishi va punktuatsiya simvollari mavjud bo‘lishi kerak.';
$messages['passwordforbidden'] = 'Parol tarkibida ruxsat etilmagan simvol mavjud';
$messages['firstloginchange'] = 'Bu sizning birinchi marta tizimga kirishingiz, iltimos parolingizni o‘zgartiring.';
$messages['disablednotice'] = 'Hozir tizimga xizmat ko‘rsatilmoqda va parolni o‘zgartirish funksiyasi hozirda amalda emas. Barchasi tezda o‘z normal holatiga qaytadi. Noqulayliklar uchun uzr.';
$messages['passwinhistory'] = 'Bu paroldan avval foydalanilgan.';
$messages['samepasswd'] = 'Yangi parol avvalgisidan farqlanishi lozim.';
$messages['passwdexpirewarning'] = 'Ogohlantirish! Sizning parolingiz muddati tugamoqda, bu $expirationdatetime muddatdan avval uni almashtiring.';
$messages['passwdexpired'] = 'Sizning parolingiz eskirdi, uni hoziroq o‘zgartiring.';
$messages['passwdconstraintviolation'] = 'Parol cheklovlari buzilgan, ehtimol parolingiz juda sodda.';
PKvc�\�֏c�
�
password/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Փոխել գաղտնաբառը';
$labels['curpasswd']  = 'Ներկա գաղտնաբառ`';
$labels['newpasswd']  = 'Նոր գաղտնաբառ`';
$labels['confpasswd']  = 'Կրկնեք նոր գաղտնաբառը`';
$messages['nopassword'] = 'Ներմուցեք նոր գաղտնաբառը։';
$messages['nocurpassword'] = 'Ներմուցեք առկա գաղտնաբառը։';
$messages['passwordincorrect'] = 'Առկա գաղտնաբառը սխալ է։';
$messages['passwordinconsistency'] = 'Նոր գաղտնաբառերը չեն համընկնում, կրկին փորձեք։';
$messages['crypterror'] = 'Նոր գաղտնաբառի պահպանումը ձախողվեց։ Բացակայում է գաղտնագրման ֆունկցիան։';
$messages['connecterror'] = 'Նոր գաղտնաբառի պահպանումը ձախողվեց։ Կապի սխալ։';
$messages['internalerror'] = 'Նոր գաղտնաբառի պահպանումը ձախողվեց։';
$messages['passwordshort'] = 'Գաղտնաբառերը պետք է լինեն առնվազն $length նիշ երկարությամբ։';
$messages['passwordweak'] = 'Գաղտնաբառերը պետք է պարունակեն առնվազն մեկ թիվ և մեկ կետադրական նիշ։';
$messages['passwordforbidden'] = 'Գաղտնաբառը պարունակում է արգելված նիշ։';
$messages['firstloginchange'] = 'Սա ձեր առաջին մուտքն է։ Խնդրում ենք փոխել գաղտնաբառը։';
$messages['disablednotice'] = 'Ներկա պահին համակարգը գտնվում է վերականգնման փուլում, և այս պահին գաղտնաբառը հնարավոր չէ փոխել: Ամեն ինչ շուտով կվերականգնվի: Խնդրում ենք Ձեր ներողամտությունը, պատճառված անհարմարության համար:';
PKvc�\�<���password/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Current Password:';
$labels['newpasswd']  = 'New Password:';
$labels['confpasswd']  = 'Confirm New Password:';
$messages['nopassword'] = 'Please input new password.';
$messages['nocurpassword'] = 'Please input current password.';
$messages['passwordincorrect'] = 'Current password incorrect.';
$messages['passwordinconsistency'] = 'Passwords do not match, please try again.';
$messages['crypterror'] = 'Could not save new password. Encryption function missing.';
$messages['connecterror'] = 'Could not save new password. Connection error.';
$messages['internalerror'] = 'Could not save new password.';
$messages['passwordshort'] = 'Password must be at least $length characters long.';
$messages['passwordweak'] = 'Password must include at least one number and one punctuation character.';
$messages['passwordforbidden'] = 'Password contains forbidden characters.';
PKvc�\�ǎ�	�	password/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = '更改密碼';
$labels['curpasswd']  = '目前的密碼:';
$labels['newpasswd']  = '新密碼';
$labels['confpasswd']  = '確認新密碼';
$messages['nopassword'] = '請輸入新密碼';
$messages['nocurpassword'] = '請輸入目前的密碼';
$messages['passwordincorrect'] = '目前的密碼錯誤';
$messages['passwordinconsistency'] = '密碼不相符,請重新輸入';
$messages['crypterror'] = '無法更新密碼:無加密機制';
$messages['connecterror'] = '無法更新密碼:連線失敗';
$messages['internalerror'] = '無法更新密碼';
$messages['passwordshort'] = '密碼至少需 $length 個字元';
$messages['passwordweak'] = '新密碼至少需含有一個數字與一個標點符號';
$messages['passwordtooweak'] = '密碼太差';
$messages['passwordnoseq'] = '密碼不應是連續的字串,例如 123456 或 QWERTY';
$messages['passwordnocommon'] = '密碼不應是常見的字詞或名稱';
$messages['passwordforbidden'] = '密碼含有禁用字元';
$messages['firstloginchange'] = '這是你第一次登入。請更改密碼。';
$messages['disablednotice'] = '系統正在進行保養工作,故此無法更改密碼。系統很快會回復正常。抱歉!';
$messages['passwinhistory'] = '此密碼之前已用過';
$messages['samepasswd'] = '新密碼要和舊的不同';
$messages['passwdexpirewarning'] = '警告!您的密碼很快會到期,請在 $expirationdatetime 之前更改';
$messages['passwdexpired'] = '您的密碼已到期,請馬上更改!';
$messages['passwdconstraintviolation'] = '違反密碼規限。密碼可能太弱了。';
$messages['pwned_isdisclosed'] = '此密碼為人所共知。';
$messages['pwned_fetcherror'] = '驗證密碼強度失敗。';
PKvc�\��۷��password/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Canvia la contrasenya';
$labels['curpasswd']  = 'Contrasenya actual:';
$labels['newpasswd']  = 'Nova contrasenya:';
$labels['confpasswd']  = 'Confirmeu la nova contrasenya:';
$messages['nopassword'] = 'Si us plau, introduïu la nova contrasenya.';
$messages['nocurpassword'] = 'Si us plau, introduïu la contrasenya actual.';
$messages['passwordincorrect'] = 'Contrasenya actual incorrecta.';
$messages['passwordinconsistency'] = 'La contrasenya nova no coincideix, torneu-ho a provar.';
$messages['crypterror'] = 'No s\'ha pogut desar la nova contrasenya. No existeix la funció d\'encriptació.';
$messages['connecterror'] = 'No s\'ha pogut desar la nova contrasenya. Error de connexió.';
$messages['internalerror'] = 'No s\'ha pogut desar la nova contrasenya.';
$messages['passwordshort'] = 'La nova contrasenya ha de tenir com a mínim $length caràcters.';
$messages['passwordweak'] = 'La nova contrasenya ha d\'incloure com a mínim un nombre i un caràcter de puntuació.';
$messages['passwordtooweak'] = 'La contrasenya és massa feble.';
$messages['passwordnoseq'] = 'La contrasenya no hauria de ser una seqüència com ara 123456 o QWERTY.';
$messages['passwordnocommon'] = 'La contrasenya no hauria de ser una paraula o un nom comú.';
$messages['passwordforbidden'] = 'La contrasenya conté caràcters no permesos.';
$messages['firstloginchange'] = 'Aquest és el vostre primer accés. Si us plau, canvieu-vos la contrasenya.';
$messages['disablednotice'] = 'El sistema és actualment sota manteniment i els canvis de contrasenya no són permesos en aquest moment. En breu tot tornarà a la normalitat. Us demanem disculpes pels inconvenients.';
$messages['passwinhistory'] = 'Aquesta contrasenya ja es va fer servir anteriorment.';
$messages['samepasswd'] = 'La nova contrasenya ha de ser diferent de l\'antiga.';
$messages['passwdexpirewarning'] = 'Compte!, la vostra contrasenya caducarà aviat. Canvieu-la abans de $expirationdatetime.';
$messages['passwdexpired'] = 'La vostra contrasenya ha caducat, l\'heu de canviar ara!';
$messages['passwdconstraintviolation'] = 'Violació de restricció de les contrasenyes. La contrasenya és probablement massa feble.';
$messages['pwned_mustnotbedisclosed'] = 'La contrasenya no pot ser&nbsp;<a href="$href" target="_blank">habitualment coneguda</a>.';
$messages['pwned_isdisclosed'] = 'Aquesta contrasenya és coneguda habitualment.';
$messages['pwned_fetcherror'] = 'No s\'ha pogut verificar la fortalesa de la contrasenya.';
PKvc�\կJsn
n
password/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Cambiar contrasigno';
$labels['curpasswd']  = 'Contrasigno actual:';
$labels['newpasswd']  = 'Nove contrasigno:';
$labels['confpasswd']  = 'Confirmar nove contrasigno:';
$messages['nopassword'] = 'Entra un nove contrasigno.';
$messages['nocurpassword'] = 'Entra le contrasigno actual.';
$messages['passwordincorrect'] = 'Le contrasigno actual es incorrecte.';
$messages['passwordinconsistency'] = 'Le contrasignos non es identic. Essaya lo de novo.';
$messages['crypterror'] = 'Impossibile salveguardar le nove contrasigno. Le function de cryptographia manca.';
$messages['connecterror'] = 'Impossibile salveguardar le nove contrasigno. Error de connexion.';
$messages['internalerror'] = 'Impossibile salveguardar le nove contrasigno.';
$messages['passwordshort'] = 'Le contrasigno debe haber al minus $length characteres.';
$messages['passwordweak'] = 'Le contrasigno debe includer al minus un numero e un character de punctuation.';
$messages['passwordforbidden'] = 'Le contrasigno contine characteres interdicte.';
$messages['firstloginchange'] = 'Iste es vostre prime session. Per favor, cambia vostre contrasigno.';
$messages['disablednotice'] = 'Le systema es sub mantenentia e non es possibile cambiar le contrasigno in iste momento. Le systema retornara al functionamento normal bentosto. Nos offere nostre excusas pro omne inconveniente.';
$messages['passwinhistory'] = 'Iste contrasigno jam esseva usate previemente.';
$messages['samepasswd'] = 'Un nove contrasigno debe esser differente del ancian.';
$messages['passwdexpirewarning'] = 'Attention! Vostre contrasigno expirara proximemente, cambia lo ante $expirationdatetime.';
$messages['passwdexpired'] = 'Vostre contrasigno ha expirate, vos debe cambiar lo ora!';
$messages['passwdconstraintviolation'] = 'Le contrasigno non satisface le requisitos. Probabilemente es troppo insecur.';
PKvc�\��4�NNpassword/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Promijeni šifru';
$labels['curpasswd']  = 'Trenutna šifra:';
$labels['newpasswd']  = 'Nova šifra:';
$labels['confpasswd']  = 'Potvrdite novu šifru:';
$messages['nopassword'] = 'Molimo vas da upišete novu šifru.';
$messages['nocurpassword'] = 'Molimo vas da upišete trenutnu šifru.';
$messages['passwordincorrect'] = 'Trenutna šifra je netačna.';
$messages['passwordinconsistency'] = 'Šifre se ne podudaraju, molimo vas da pokušate ponovo.';
$messages['crypterror'] = 'Nije moguće sačuvati šifre. Nedostaje funkcija za enkripciju.';
$messages['connecterror'] = 'Nije moguće sačuvati šifre. Greška u povezivanju.';
$messages['internalerror'] = 'Nije moguće sačuvati novu šifru.';
$messages['passwordshort'] = 'Šifra mora sadržavati barem $length znakova.';
$messages['passwordweak'] = 'Šifra mora imati barem jedan broj i jedan interpunkcijski znak.';
$messages['passwordforbidden'] = 'Šifra sadrži nedozvoljene znakove.';
$messages['firstloginchange'] = 'Ovo je vaša prva prijava. Molimo vas da promijenite vašu šifru.';
PKvc�\a�4F00password/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Изменить пароль';
$labels['curpasswd']  = 'Текущий пароль:';
$labels['newpasswd']  = 'Новый пароль:';
$labels['confpasswd']  = 'Подтвердите новый пароль:';
$messages['nopassword'] = 'Пожалуйста, введите новый пароль.';
$messages['nocurpassword'] = 'Пожалуйста, введите текущий пароль.';
$messages['passwordincorrect'] = 'Текущий пароль неверен.';
$messages['passwordinconsistency'] = 'Пароли не совпадают, попробуйте ещё раз, пожалуйста.';
$messages['crypterror'] = 'Не могу сохранить новый пароль. Отсутствует криптографическая функция.';
$messages['connecterror'] = 'Не могу сохранить новый пароль. Ошибка соединения.';
$messages['internalerror'] = 'Не могу сохранить новый пароль.';
$messages['passwordshort'] = 'Длина пароля должна быть как минимум $length символов.';
$messages['passwordweak'] = 'Пароль должен включать в себя как минимум одну цифру и один знак пунктуации.';
$messages['passwordtooweak'] = 'Пароль слишком простой.';
$messages['passwordnoseq'] = 'Пароль НЕ должен быть последовательностью, например,123456 или QWERTY.';
$messages['passwordnocommon'] = 'Пароль не должен быть простым словом или именем.';
$messages['passwordforbidden'] = 'Пароль содержит недопустимые символы.';
$messages['firstloginchange'] = 'Вы выполнили вход впервые. Измените ваш пароль.';
$messages['disablednotice'] = 'В настоящее время проводится обслуживание системы и изменение пароля не возможно в данный момент. Все должно вернуться в нормальное состояние в ближайшее время. Приносим свои извинения за причиненные неудобства.';
$messages['passwinhistory'] = 'Этот пароль уже использовался ранее.';
$messages['samepasswd'] = 'Новый пароль должен отличаться от старого.';
$messages['passwdexpirewarning'] = 'Внимание! Ваш пароль истекает в ближайшее время, измените его до $expirationdatetime.';
$messages['passwdexpired'] = 'Срок действия вашего пароля истек, вы должны изменить его сейчас!';
$messages['passwdconstraintviolation'] = 'Нарушение ограничения пароля. Вероятно, слишком слабый пароль.';
$messages['pwned_mustnotbedisclosed'] = 'Пароль не должен быть <a href="$href" target="_blank">commonly known</a>.';
$messages['pwned_isdisclosed'] = 'Этот пароль общеизвестен.';
$messages['pwned_fetcherror'] = 'Не удалось проверить стойкость пароля.';
PKvc�\6��s��password/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'تغییر گذرواژه';
$labels['curpasswd']  = 'گذرواژه فعلی:';
$labels['newpasswd']  = 'گذرواژه جدید:';
$labels['confpasswd']  = 'تایید گذرواژه جدید:';
$messages['nopassword'] = 'لطفا گذرواژه جدید را وارد نمایید.';
$messages['nocurpassword'] = ' لطفا گذرواژه فعلی را وارد نمایید.';
$messages['passwordincorrect'] = 'گذرواژه فعلی اشتباه است.';
$messages['passwordinconsistency'] = 'گذرواژه‌ها با هم مطابقت ندارند، دوباره سعی نمایید.';
$messages['crypterror'] = 'گذرواژه جدید نمی‌تواند ذخیره شود. نبود تابع رمزگذاری.';
$messages['connecterror'] = 'گذرواژه جدید نمی‌تواند ذخیره شود. خطای ارتباط.';
$messages['internalerror'] = 'گذرواژه جدید نتوانست ذخیره نشد.';
$messages['passwordshort'] = 'گذرواژه باید حداقل $length کاراکتر طول داشته باشد.';
$messages['passwordweak'] = 'گذرواژه باید شامل حداقل یک عدد و یک کاراکتر نشانه‌ای باشد.';
$messages['passwordforbidden'] = 'گذرواژه شامل کاراکترهای غیرمجاز است.';
$messages['firstloginchange'] = 'این اولین ورود شما است، لطفا گذرواژه خود را تغییر دهید.';
PKvc�\�L��vvpassword/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Breyta lykilorði';
$labels['curpasswd']  = 'Núverandi lykilorð:';
$labels['newpasswd']  = 'Nýtt lykilorð:';
$labels['confpasswd']  = 'Staðfesta nýtt lykilorð:';
$messages['nopassword'] = 'Settu inn nýtt lykilorð.';
$messages['nocurpassword'] = 'Settu inn núverandi lykilorð.';
$messages['passwordincorrect'] = 'Núverandi lykilorð er ekki rétt.';
$messages['passwordinconsistency'] = 'Lykilorðin samsvara ekki, reyndu aftur.';
$messages['crypterror'] = 'Gat ekki vistað nýtt lykilorð. Dulritunareiginleika vantar.';
$messages['connecterror'] = 'Gat ekki vistað nýtt lykilorð. Villa í tengingu.';
$messages['internalerror'] = 'Gat ekki vistað nýtt lykilorð.';
$messages['passwordshort'] = 'Lykilorð þarf að vera að minnsta kosti $length stafa langt.';
$messages['passwordweak'] = 'Lykilorð þarf að innihalda a.m.k. einn tölustaf og eitt greinamerki.';
$messages['passwordtooweak'] = 'Lykilorðið er of veikt.';
$messages['passwordnoseq'] = 'Lykilorð ætti ekki að vera runa á borð við 123456 eða QWERTY.';
$messages['passwordnocommon'] = 'Lykilorð ætti ekki að vera algengt orð eða nafn.';
$messages['passwordforbidden'] = 'Lykilorð inniheldur óleyfilega stafi.';
$messages['firstloginchange'] = 'Þetta er í fyrsta skipti sem þú skráir þig inn. Endilega breyttu lykilorðinu þínu.';
$messages['disablednotice'] = 'Kerfið er í viðhaldsfasa og því er ekki hægt að breyta lykilorðum sem stendur. Allt ætti að vera komið í samt lag innan stundar. Við biðjumst afsökunar á þeim óþægindum sem af þessu geta hlotist.';
$messages['passwinhistory'] = 'Þetta lykilorð hefur áður verið notað.';
$messages['samepasswd'] = 'Nýja lykilorðið verður að vera frábrugðið hinu gamla.';
$messages['passwdexpirewarning'] = 'Aðvörun! Lykilorðið þitt rennur út innan skamms, breyttu því fyrir $expirationdatetime.';
$messages['passwdexpired'] = 'Lykilorðið þitt er runnið út, þú verður að breyta því núna!';
$messages['passwdconstraintviolation'] = 'Lykilorðið rakst á skilyrði. Líklega er það of veikt.';
$messages['pwned_mustnotbedisclosed'] = 'Lykilorð má ekki vera <a href="$href" target="_blank">almennt þekkt</a>.';
$messages['pwned_isdisclosed'] = 'Þetta lykilorð er almennt þekkt.';
$messages['pwned_fetcherror'] = 'Mistókst að sannreyna styrk lykilorðsins.';
PKvc�\����password/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Mật khẩu hiện tại';
$labels['newpasswd']  = 'Mật khẩu mới:';
$labels['confpasswd']  = 'Xác nhận mật khẩu mới';
$messages['nopassword'] = 'Mời nhập mật khẩu mới';
$messages['nocurpassword'] = 'Mời nhập mật khẩu hiện tại';
$messages['passwordincorrect'] = 'Mật khẩu hiện thời không đúng';
$messages['passwordinconsistency'] = 'Mật khẩu không khớp, hãy thử lại';
$messages['crypterror'] = 'Không thể lưu mật khẩu mới. Thiếu chức năng mã hóa';
$messages['connecterror'] = 'Không thể lưu mật mã mới. Lổi kết nối';
$messages['internalerror'] = 'Không thể lưu mật khẩu mới';
$messages['passwordshort'] = 'Mật khẩu phải dài ít nhất $ ký tự';
$messages['passwordweak'] = 'Mật khẩu phải bao gồm ít nhất 1 con số và 1 ký tự dấu câu';
$messages['passwordforbidden'] = 'Mật khẩu bao gồm ký tự không hợp lệ';
PKvc�\0�2TTpassword/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'เปลี่ยนรหัสผ่าน';
$labels['curpasswd']  = 'รหัสผ่านปัจจุบัน';
$labels['newpasswd']  = 'รหัสผ่านใหม่';
$labels['confpasswd']  = 'ยืนยันรหัสผ่านใหม่';
$messages['nopassword'] = 'กรุณาใส่รหัสผ่านใหม่';
$messages['nocurpassword'] = 'กรุณาใส่รหัสผ่านปัจจุบัน';
$messages['passwordincorrect'] = 'รหัสผ่านปัจจุบันไม่ถูกต้อง';
$messages['passwordinconsistency'] = 'รหัสผ่านไม่ตรงกัน กรุณากรอกใหม่อีกครััง';
$messages['crypterror'] = 'ไม่สามารถบันทึกรหัสผ่านใหม่. ฟังก์ชั่นการเข้ารหัสขาดหายไป.';
$messages['connecterror'] = 'ไม่สามารถบันทึกรหัสผ่านใหม่. เชื่อมต่อผิดพลาด.';
$messages['internalerror'] = 'ไม่สามารถบันทึกรหัสผ่านใหม่.';
$messages['passwordshort'] = 'รหัสผ่านต้องมีอย่างน้อย $length ตัวอักษร.';
$messages['passwordweak'] = 'รหัสผ่านต้องมีอย่างน้อยหนึ่งตัวเลขและตัวอักษรวรรคตอนหนึ่ง';
$messages['passwordforbidden'] = 'รหัสผ่านมีอักขระต้องห้าม';
$messages['firstloginchange'] = 'นี่คือครั้งแรกในการเข้าระบบ กรุณาเปลี่ยนรหัสผ่านของคุณ';
$messages['disablednotice'] = 'ระบบขณะนี้อยู่ระหว่างการบำรุงรักษาและการเปลี่ยนรหัสผ่านเป็นไปไม่ได้ในขณะนี้ ทุกอย่างควรจะกลับมาเป็นปกติเร็ว ๆ นี้ เราต้องขออภัยในความไม่สะดวก.';
$messages['passwinhistory'] = 'รหัสผ่านนี้ได้ถูกนำมาใช้ก่อนหน้านี้';
$messages['samepasswd'] = 'รหัสผ่านใหม่จะต้องมีความแตกต่างจากเดิม';
$messages['passwdexpirewarning'] = 'คำเตือน! รหัสผ่านของคุณจะหมดอายุในเร็ว ๆ นี้ เปลี่ยนก่อน $expirationdatetime.';
$messages['passwdexpired'] = 'รหัสผ่านของคุณหมดอายุแล้วคุณมีการเปลี่ยนแปลงในขณะนี้!';
$messages['passwdconstraintviolation'] = 'รหัสมีความปลอดภัยต่ำ';
PKvc�\us�44password/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'تغيير كلمة المرور';
$labels['curpasswd']  = 'كلمة المرور الحالية';
$labels['newpasswd']  = 'كلمة المرور الجديدة';
$labels['confpasswd']  = 'تأكيد كلمة المرور الجديدة';
$messages['nopassword'] = 'من فضلك أدخل كلمة مرور جديدة';
$messages['nocurpassword'] = 'من فضلك أدخل كلمة المرور الحالية';
$messages['passwordincorrect'] = 'كلمة المرور الحالية غير صحيحة';
$messages['passwordinconsistency'] = 'كلمة المرور غير مطابقة, أعد المحاولة';
$messages['crypterror'] = 'تعذر حفظ كلمة المرور الجديدة. دالة التشفير مفقودة.';
$messages['connecterror'] = 'تعذر حفظ كلمة المرور الجديدة. خطأ في الإتصال';
$messages['internalerror'] = 'تعذر حفظ كلمة المرور الجديدة';
$messages['passwordshort'] = 'كلمة المرور يجب ان تحتوي على الاقل $length احرف.';
$messages['passwordweak'] = 'كلمة المرور يجب ان تتضمن على الاقل رقم و علامة ترميز.';
$messages['passwordtooweak'] = 'كلمة المرور ضعيفة';
$messages['passwordnoseq'] = 'يجب ألا تكون كلمة المرور تسلسلًا مثل 123456 أو QWERTY.';
$messages['passwordnocommon'] = 'يجب ألا تكون كلمة المرور كلمة أو اسمًا شائعًا.';
$messages['passwordforbidden'] = 'كلمة المرور تحتوي حروفاً ممنوعة';
$messages['firstloginchange'] = 'هذا هو تسجيل الدخول الأول الخاص بك. الرجاء تغيير كلمة المرور الخاصة بك.';
$messages['disablednotice'] = 'النظام قيد الصيانة حاليًا ولا يمكن تغيير كلمة المرور في الوقت الحالي. يجب أن يعود كل شيء إلى طبيعته قريبًا. نحن نعتذر عن أي شيء غير مناسب.';
$messages['passwinhistory'] = 'سبق استخدام كلمة المرور هذه من قبل.';
$messages['samepasswd'] = 'يجب أن تكون كلمة المرور الجديدة مختلفة عن القديمة.';
$messages['passwdexpirewarning'] = 'تحذير! ستنتهي صلاحية كلمة مرورك قريبًا ، قم بتغييرها قبل $expirationdatetime .';
$messages['passwdexpired'] = 'لقد انتهت صلاحية كلمة المرور الخاصة بك ، يجب عليك تغييرها الآن!';
$messages['passwdconstraintviolation'] = 'انتهاك قيود كلمة المرور. ربما تكون كلمة المرور ضعيفة للغاية.';
$messages['pwned_mustnotbedisclosed'] = 'يجب ألا تكون كلمة المرور &nbsp; <a href="https://haveibeenpwned.com/Passwords" target="_blank">معروفة بشكل عام</a>.';
$messages['pwned_isdisclosed'] = 'كلمة المرور هذه معروفة بشكل عام.';
$messages['pwned_fetcherror'] = 'فشل التحقق من قوة كلمة المرور.';
PKvc�\�~�

password/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Hal-hazırki şifrə:';
$labels['newpasswd']  = 'Yeni şifrə:';
$labels['confpasswd']  = 'Yeni şifrə: (təkrar)';
$messages['nopassword'] = 'Yeni şifrəni daxil edin.';
$messages['nocurpassword'] = 'Hal-hazırda istifadə etdiyiniz şifrəni daxil edin.';
$messages['passwordincorrect'] = 'Yalnış şifrə daxil etdiniz.';
$messages['passwordinconsistency'] = 'Yeni daxil etdiyiniz şifrələr bir-birinə uyğun deyildir.';
$messages['crypterror'] = 'Yeni şifrənin saxlanılması mümkün olmadı. Şifrələmə metodu tapılmadı.';
$messages['connecterror'] = 'Yeni şifrənin saxlanılması mümkün olmadı. Qoşulma səhvi.';
$messages['internalerror'] = 'Yeni şifrənin saxlanılması mümkün olmadı.';
$messages['passwordshort'] = 'Yeni şifrə $length simvoldan uzun olmalıdır.';
$messages['passwordweak'] = 'Şifrədə heç olmasa minimum bir rəqəm və simvol olmalıdır.';
$messages['passwordforbidden'] = 'Şifrədə icazə verilməyən simvollar vardır.';
PKvc�\�D�x	x	password/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Ubah sandi';
$labels['curpasswd']  = 'Sandi saat ini:';
$labels['newpasswd']  = 'Sandi Baru:';
$labels['confpasswd']  = 'Konfirmasi Sandi Baru:';
$messages['nopassword'] = 'Masukkan sandi baru.';
$messages['nocurpassword'] = 'Masukkan sandi saat ini.';
$messages['passwordincorrect'] = 'Sandi saat ini salah.';
$messages['passwordinconsistency'] = 'Sandi tidak cocok, harap coba lagi.';
$messages['crypterror'] = 'Tidak dapat menyimpan sandi baru. Fungsi enkripsi tidak ditemukan.';
$messages['connecterror'] = 'Tidak dapat menyimpan sandi baru. Koneksi error.';
$messages['internalerror'] = 'Tidak dapat menyimpan sandi baru.';
$messages['passwordshort'] = 'Panjang password minimal $length karakter';
$messages['passwordweak'] = 'Sandi harus menyertakan setidaknya satu angka dan satu tanda baca.';
$messages['passwordforbidden'] = 'Sandi mengandung karakter terlarang.';
$messages['firstloginchange'] = 'Ini login pertama Anda. Harap ubah sandi Anda.';
$messages['disablednotice'] = 'Sistem saat ini sedang dalam pemeliharaan dan perubahan sandi tidak mungkin saat ini. Semua mestinya segera kembali normal. Kami mohon maaf untuk ketidaknyamanan ini.';
$messages['passwinhistory'] = 'Kata sandi sudah pernah digunakan';
$messages['samepasswd'] = 'Kata sandi harus berbeda dengan yang sebelumnya';
$messages['passwdexpirewarning'] = 'Peringatan! Masa kata sandi segera berakhir, ganti sebelum $expirationdatetime.';
$messages['passwdexpired'] = 'Kata sandi kadaluarsa, harus diganti sekarang.';
$messages['passwdconstraintviolation'] = 'Kata sandi melanggar aturan. Mungkin kata sandi terlalu lemah.';
PKvc�\)�bVVpassword/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Jelszó módosítás';
$labels['curpasswd']  = 'Jelenlegi jelszó:';
$labels['newpasswd']  = 'Új jelszó:';
$labels['confpasswd']  = 'Új jelszó mégegyszer:';
$messages['nopassword'] = 'Kérjük adja meg az új jelszót.';
$messages['nocurpassword'] = 'Kérjük adja meg a jelenlegi jelszót.';
$messages['passwordincorrect'] = 'Érvénytelen a jelenlegi jelszó.';
$messages['passwordinconsistency'] = 'A beírt jelszavak nem azonosak. Próbálja újra.';
$messages['crypterror'] = 'Hiba történt a kérés feldolgozása során.';
$messages['connecterror'] = 'Az új jelszó mentése nem sikerült. Hiba a kapcsolatban';
$messages['internalerror'] = 'Hiba történt a kérés feldolgozása során.';
$messages['passwordshort'] = 'A jelszónak legalább $length karakter hosszúnak kell lennie.';
$messages['passwordweak'] = 'A jelszónak mindenképpen kell tartalmaznia egy számot és egy írásjelet.';
$messages['passwordtooweak'] = 'A jelszó túl gyenge.';
$messages['passwordnoseq'] = 'A jelszavak nem lehetnek olyan karaktereksorozatok mint például az 123456 vagy a QWERTY.';
$messages['passwordnocommon'] = 'A jelszó nem lehet egy általános szó vagy név.';
$messages['passwordforbidden'] = 'A jelszó tiltott karaktert is tartalmaz.';
$messages['firstloginchange'] = 'Ez az első belépésed. Változtass jelszót.';
$messages['disablednotice'] = 'A rendszer jelenleg karbantartás alatt van és a jelszó módosítás nem lehetséges ebben a pillanatban. Minden visszaáll normálisra hamarosan. A  kellemetlenségért elnézést kérünk.';
$messages['passwinhistory'] = 'A megadott jelszó volt már használva.';
$messages['samepasswd'] = 'Az új jelszó nem lehet azonos a régi jelszóval.';
$messages['passwdexpirewarning'] = 'Figyelem! A jelszavad hamarosan lejár, változtasd meg még $expirationdatetime elött.';
$messages['passwdexpired'] = 'A jelszavad lejárt, adj meg újat.';
$messages['passwdconstraintviolation'] = 'Jelszó szabály megsértése. A jelszó valószínűleg túl gyenge.';
$messages['pwned_mustnotbedisclosed'] = 'A jelszó nem lehet <a href="$href" target="_blank">általánosan használtként ismert</a>.';
$messages['pwned_isdisclosed'] = 'Ez a jelszó általánosan használtként ismert.';
$messages['pwned_fetcherror'] = 'Nem sikerült a jelszó erősségének ellenőrzése.';
PKvc�\�Z�9<
<
password/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Schimbă parola';
$labels['curpasswd']  = 'Parola curentă:';
$labels['newpasswd']  = 'Parola nouă:';
$labels['confpasswd']  = 'Confirmare parola nouă:';
$messages['nopassword'] = 'Te rog să introduci noua parolă.';
$messages['nocurpassword'] = 'Te rog să introduci parola curentă';
$messages['passwordincorrect'] = 'Parola curentă este incorectă.';
$messages['passwordinconsistency'] = 'Parolele nu se potrivesc, te rog să mai încerci';
$messages['crypterror'] = 'Nu am reușit să salvez noua parolă. Funcția de criptare lipsește.';
$messages['connecterror'] = 'Nu am reușit să salvez noua parolă. Eroare connexiune.';
$messages['internalerror'] = 'Nu am reușit să salvez noua parolă.';
$messages['passwordshort'] = 'Parola trebuie să aibă minim $length caractere.';
$messages['passwordweak'] = 'Parola trebuie să conțina cel puțin un număr si un semn de punctuație.';
$messages['passwordforbidden'] = 'Parola conține caractere nepermise.';
$messages['firstloginchange'] = 'Aceasta este prima autentificare. Te rugăm să schimbi parola.';
$messages['disablednotice'] = 'Sistemul este în prezent în curs de întreținere, iar schimbarea parolei nu este posibilă în acest moment. Totul ar trebui să revină la normal în curând. Ne cerem scuze pentru orice inconveniență.';
$messages['passwinhistory'] = 'Această parolă a fost folosită anterior.';
$messages['samepasswd'] = 'Parola nouă trebuie să fie diferită față de cea veche.';
$messages['passwdexpirewarning'] = 'Atenție! Parola dvs. va expira în curând, modificați-o înainte de $expirationdatetime.';
$messages['passwdexpired'] = 'Parola dvs. a expirat, trebuie să o schimbați acum!';
$messages['passwdconstraintviolation'] = 'Încălcare constrângere parolă. Parola probabil prea slabă.';
PKvc�\4Q���password/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Nuna pasvorto:';
$labels['newpasswd']  = 'Nova pasvorto:';
$labels['confpasswd']  = 'Konfirmi novan pasvorton:';
$messages['nopassword'] = 'Bonvole tajpu novan pasvorton.';
$messages['nocurpassword'] = 'Bonvole tajpu nunan pasvorton.';
$messages['passwordincorrect'] = 'Nuna pasvorto nekorekta.';
$messages['passwordinconsistency'] = 'Pasvortoj ne kongruas, bonvole provu denove.';
$messages['crypterror'] = 'Pasvorto ne konserveblas: funkcio de ĉifrado mankas.';
$messages['connecterror'] = 'Pasvorto ne konserveblas: eraro de konekto.';
$messages['internalerror'] = 'Nova pasvorto ne konserveblas.';
$messages['passwordshort'] = 'Pasvorto longu almenaŭ $length signojn.';
$messages['passwordweak'] = 'La pasvorto enhavu almenaŭ unu ciferon kaj unu interpunktan signon.';
$messages['passwordforbidden'] = 'La pasvorto enhavas malpermesitajn signojn.';
PKvc�\��uV
V
password/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Changer le mot de passe';
$labels['curpasswd']  = 'Mot de passe actuel :';
$labels['newpasswd']  = 'Nouveau mot de passe :';
$labels['confpasswd']  = 'Confirmer le nouveau mot de passe :';
$messages['nopassword'] = 'Veuillez saisir le nouveau mot de passe.';
$messages['nocurpassword'] = 'Veuillez saisir le mot de passe actuel.';
$messages['passwordincorrect'] = 'Le mot de passe actuel est erroné.';
$messages['passwordinconsistency'] = 'Les mots de passe ne correspondent pas, veuillez réessayer.';
$messages['crypterror'] = 'Impossible d’enregistrer le nouveau mot de passe. La fonction de chiffrement est manquante.';
$messages['connecterror'] = 'Impossible d’enregistrer le nouveau mot de passe. Erreur de connexion.';
$messages['internalerror'] = 'Impossible d’enregistrer le nouveau mot de passe.';
$messages['passwordshort'] = 'Le mot de passe doit comporter au moins $length caractères.';
$messages['passwordweak'] = 'Le mot de passe doit comporter au moins un chiffre et un signe de ponctuation.';
$messages['passwordtooweak'] = 'Le mot de passe est trop faible.';
$messages['passwordnoseq'] = 'Le mot de passe ne devrait pas être une séquence comme 123456, QWERTY ou AZERTY.';
$messages['passwordnocommon'] = 'Le mot de passe ne devrait pas être un nom commun ou un nom.';
$messages['passwordforbidden'] = 'Le mot de passe contient des caractères interdits.';
$messages['firstloginchange'] = 'Ceci est votre première connexion. Veuillez changer votre mot de passe.';
$messages['disablednotice'] = 'Le système est en cours de maintenance et les changements de mot de passe sont impossibles pour l’instant. Tout devrait redevenir normal sous peu. Nous regrettons tout inconvénient que cette situation pourrait occasionner.';
$messages['passwinhistory'] = 'Ce mot de passe a déjà été utilisé précédemment.';
$messages['samepasswd'] = 'Le nouveau mot de passe doit être différent de l’ancien.';
$messages['passwdexpirewarning'] = 'Avertissement ! Votre mot de passe arrivera prochainement à expiration. Changez-le avant le $expirationdatetime.';
$messages['passwdexpired'] = 'Votre mot de passe est expiré, vous devez le changer maintenant';
$messages['passwdconstraintviolation'] = 'Contrainte non respectée. Le mot de passe est probablement trop faible.';
$messages['pwned_mustnotbedisclosed'] = 'Le mot de passe ne doit pas être <a href="$href" target="_blank">notoire</a>.';
$messages['pwned_isdisclosed'] = 'Ce mot de passe est connu par ailleurs.';
$messages['pwned_fetcherror'] = 'Échec de vérification de la robustesse du mot de passe.';
PKvc�\!*�g;
;
password/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Promjena zaporke';
$labels['curpasswd']  = 'Važeća zaporka:';
$labels['newpasswd']  = 'Nova zaporka:';
$labels['confpasswd']  = 'Potvrda nove zaporke:';
$messages['nopassword'] = 'Molimo unesite novu zaporku.';
$messages['nocurpassword'] = 'Molimo unesite trenutnu zaporku.';
$messages['passwordincorrect'] = 'Trenutna zaporka je nevažeća.';
$messages['passwordinconsistency'] = 'Zaporke su različite, pokušajte ponovo.';
$messages['crypterror'] = 'Nemoguće promijeniti zaporku. Nedostaje enkripcijska funkcija.';
$messages['connecterror'] = 'Nemoguće promijeniti zaporku. Greška prilikom spajanja.';
$messages['internalerror'] = 'Nemoguće promijeniti zaporku.';
$messages['passwordshort'] = 'Zaporka mora sadržavati barem $length znakova.';
$messages['passwordweak'] = 'Zaporka mora sadržavati barem jednu znamenku i jedan interpunkcijski znak.';
$messages['passwordtooweak'] = 'Preslaba zaporka.';
$messages['passwordnoseq'] = 'Zaporka ne smije biti niz poput 123456 ili QWERTZ';
$messages['passwordnocommon'] = 'Zaporka ne bi smjela biti uobičajena riječ ili ime.';
$messages['passwordforbidden'] = 'Zaporka sadrži nedozvoljene znakove.';
$messages['firstloginchange'] = 'Ovo je vaša prva prijava u sustav. Molimo promijenite vašu zaporku.';
$messages['disablednotice'] = 'Sustav je trenutno u fazi održavanja i promjena zaporke trenutno nije moguća. Uskoro bi sve trebalo raditi ispravno. Ispričavamo se zbog neugodnosti.';
$messages['passwinhistory'] = 'Zaporka je bila prije u uporabi.';
$messages['samepasswd'] = 'Nova zaporka mora biti drukčija od stare.';
$messages['passwdexpirewarning'] = 'Upozorenje! Vaša će zaporka uskoro isteći, promijenite je prije $expirationdatetime.';
$messages['passwdexpired'] = 'Vaša je zaporka istekla, morate je odmah promijeniti!';
PKvc�\鑪��password/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Zmiana hasła';
$labels['curpasswd']  = 'Aktualne hasło:';
$labels['newpasswd']  = 'Nowe hasło:';
$labels['confpasswd']  = 'Potwierdź hasło:';
$messages['nopassword'] = 'Wprowadź nowe hasło.';
$messages['nocurpassword'] = 'Wprowadź aktualne hasło.';
$messages['passwordincorrect'] = 'Błędne aktualne hasło, spróbuj ponownie.';
$messages['passwordinconsistency'] = 'Hasła nie pasują, spróbuj ponownie.';
$messages['crypterror'] = 'Nie udało się zapisać nowego hasła. Brak funkcji kodującej.';
$messages['connecterror'] = 'Nie udało się zapisać nowego hasła. Błąd połączenia.';
$messages['internalerror'] = 'Nie udało się zapisać nowego hasła.';
$messages['passwordshort'] = 'Hasło musi posiadać co najmniej $length znaków.';
$messages['passwordweak'] = 'Hasło musi zawierać co najmniej jedną cyfrę i znak interpunkcyjny.';
$messages['passwordtooweak'] = 'Hasło jest zbyt słabe.';
$messages['passwordnoseq'] = 'Hasło nie powinno być sekwencją typu 123456 albo QWERTY.';
$messages['passwordnocommon'] = 'Hasło nie może być zwykłym słowem lub nazwą.';
$messages['passwordforbidden'] = 'Hasło zawiera niedozwolone znaki.';
$messages['firstloginchange'] = 'To jest twoje pierwsze logowanie. Proszę zmień hasło.';
$messages['disablednotice'] = 'System jest w trakcie konserwacji i zmiana hasła w tym momencie nie jest możliwa. Wszystko powinno wrócić do normy w niedługim czasie. Przepraszamy za wszelkie niedogodności';
$messages['passwinhistory'] = 'To hasło było już wcześniej użyte';
$messages['samepasswd'] = 'Nowe hasło musi być różne od poprzednich.';
$messages['passwdexpirewarning'] = 'Uwaga! Twoje hasło wkrótce wygaśnie, zmień je przed $expirationdatetime.';
$messages['passwdexpired'] = 'Twoje hasło wygasło, musisz je zmienić.';
$messages['passwdconstraintviolation'] = 'Naruszenie ograniczeń hasła. Prawdopodobnie jest zbyt słabe.';
$messages['pwned_mustnotbedisclosed'] = 'Hasło nie może być <a href="$href" target="_blank">powszechnie znane</a>.';
$messages['pwned_isdisclosed'] = 'To hasło jest powszechnie znane.';
$messages['pwned_fetcherror'] = 'Nie udało się zweryfikować siły hasła.';
PKvc�\F����password/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'パスワードの変更';
$labels['curpasswd']  = '現在のパスワード:';
$labels['newpasswd']  = '新しいパスワード:';
$labels['confpasswd']  = '新しいパスワード (確認):';
$messages['nopassword'] = '新しいパスワードを入力してください。';
$messages['nocurpassword'] = '現在のパスワードを入力してください。';
$messages['passwordincorrect'] = '現在のパスワードが間違っています。';
$messages['passwordinconsistency'] = 'パスワードが一致しません。もう一度やり直してください。';
$messages['crypterror'] = 'パスワードを保存できませんでした。暗号化関数がみあたりません。';
$messages['connecterror'] = '新しいパスワードを保存できませんでした。接続エラーです。';
$messages['internalerror'] = '新しいパスワードを保存できませんでした。';
$messages['passwordshort'] = 'パスワードは少なくとも $length 文字の長さが必要です。';
$messages['passwordweak'] = 'パスワードは少なくとも数字の 1 文字と記号の 1 文字を含んでいなければなりません。';
$messages['passwordtooweak'] = '弱すぎるパスワードです。';
$messages['passwordnoseq'] = 'パスワードは123456やQWERTYの様な連続にしてはなりません。';
$messages['passwordnocommon'] = 'パスワードはありふれた単語や名前にしてはなりません。';
$messages['passwordforbidden'] = 'パスワードに禁止された文字が含まれています。';
$messages['firstloginchange'] = 'これは初めてのログインです。パスワードを変更してください。';
$messages['disablednotice'] = 'このシステムは今は保守中で、現在のところパスワードの変更はできません。しばらくすれば、通常の状態に復帰するはずです。ご迷惑を掛けて申し訳ありません。';
$messages['passwinhistory'] = 'このパスワードは以前に使用しています。';
$messages['samepasswd'] = '新しいパスワードは以前のものと異なっていなければなりません。';
$messages['passwdexpirewarning'] = '警告!  パスワードの有効期限がすぐに切れます、$expirationdatetimeよりも前に変更してください。';
$messages['passwdexpired'] = 'パスワードの期限が切れています、今すぐ変更しなければなりません!';
$messages['passwdconstraintviolation'] = 'パスワードの制限に違反しました。おそらくパスワードがの強度が弱すぎます。';
$messages['pwned_mustnotbedisclosed'] = 'パスワードは<a href="$href" target="_blank">よく知られた言葉</a>であってはなりません。';
$messages['pwned_isdisclosed'] = 'このパスワードはよく知られた言葉です。';
$messages['pwned_fetcherror'] = 'パスワードの強度の検証に失敗しました。';
PKvc�\�|B��password/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Noverande passord:';
$labels['newpasswd']  = 'Nytt passord:';
$labels['confpasswd']  = 'Bekreft nytt passord';
$messages['nopassword'] = 'Venlegast skriv inn nytt passord.';
$messages['nocurpassword'] = 'Venlegast skriv inn noverande passord.';
$messages['passwordincorrect'] = 'Noverande passord er feil.';
$messages['passwordinconsistency'] = 'Passorda er ikkje like, venlegast prøv igjen.';
$messages['crypterror'] = 'Kunne ikkje lagre nytt passord. Krypteringsfunksjonen manglar.';
$messages['connecterror'] = 'Kunne ikkje lagre nytt passord. Tilkoblingsfeil.';
$messages['internalerror'] = 'Kunne ikkje lagre nytt passord.';
$messages['passwordshort'] = 'Passordet må minimum innehalde $length teikn.';
$messages['passwordweak'] = 'Passordet må innehalde minst eitt tal og eitt skilleteikn.';
$messages['passwordforbidden'] = 'Passordet inneheld forbodne teikn.';
PKvc�\����password/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Contraseña actual:';
$labels['newpasswd']  = 'Contraseña nueva:';
$labels['confpasswd']  = 'Confirmar contraseña:';
$messages['nopassword'] = 'Por favor, introduz una contraseña nueva.';
$messages['nocurpassword'] = 'Por favor, introduz la contraseña actual.';
$messages['passwordincorrect'] = 'La contraseña actual ye incorreuta.';
$messages['passwordinconsistency'] = 'Les contraseñes nun concasen. Por favor, inténtalo otra vegada.';
$messages['crypterror'] = 'Nun pudo guardase la contraseña nueva. Falta la función de cifráu.';
$messages['connecterror'] = 'Nun pudo guardase la contraseña nueva. Fallu de conexón.';
$messages['internalerror'] = 'Nun pudo guardase la contraseña nueva. ';
$messages['passwordshort'] = 'La contraseña tien de tener polo menos $length caráuteres.';
$messages['passwordweak'] = 'La contraseña tien de tener polo menos un númberu y un signu de puntuación.';
$messages['passwordforbidden'] = 'La contraseña contien caráuteres prohibíos.';
$messages['firstloginchange'] = 'Esti ye\'l to primer aniciu sesión. Por favor, camuda la to contraseña.';
PKvc�\�pH���password/localization/kab.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Beddel awal uffir';
$labels['curpasswd']  = 'Awal uffir amiran';
$labels['newpasswd']  = 'Awal uffir amaynut:';
$labels['confpasswd']  = 'Sentem awal uffir:';
PKvc�\�f=aapassword/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Измени лозинку';
$labels['curpasswd']  = 'Тренутна лозинка:';
$labels['newpasswd']  = 'Нова лозинка:';
$labels['confpasswd']  = 'Потврдите нову лозинку:';
$messages['nopassword'] = 'Унесите нову лозинку.';
$messages['nocurpassword'] = 'Унесите тренутну лозинку.';
$messages['passwordincorrect'] = 'Тренутна лозинка је нетачна.';
$messages['passwordinconsistency'] = 'Лозинке се не поклапају. Покушајте поново.';
$messages['crypterror'] = 'Није могуће сачувати нову лозинку. Недостаје функција за шифровање.';
$messages['connecterror'] = 'Није могуће сачувати нову лозинку. Грешка везе.';
$messages['internalerror'] = 'Није могуће сачувати нову лозинку.';
$messages['passwordshort'] = 'Лозинка мора имати најмање $length знакова.';
$messages['passwordweak'] = 'Лозинка мора да садржи најмање један број и један знак интерпункције.';
$messages['passwordforbidden'] = 'Лозинка садржи недозвољене знакове.';
$messages['firstloginchange'] = 'Ово је ваше прво пријављивање. Измените лозинку.';
$messages['disablednotice'] = 'Систем је тренутно у фази ремонта и измена лозинке за сада није могућа. Све ће се ускоро вратити у нормалу. Извињавамо се због неугодности.';
$messages['passwinhistory'] = 'Лозинка је раније већ коришћена.';
$messages['samepasswd'] = 'Нова лозинка се мора разликовати од старе.';
$messages['passwdexpirewarning'] = 'Упозорење! Ваша лозинка истиче ускоро. Промените је до $expirationdatetime.';
$messages['passwdexpired'] = 'Ваша лозинка је истекла. Морате је изменити одмах!';
$messages['passwdconstraintviolation'] = 'Лозинка не испуњава смернице. Вероватно је превише слаба.';
PKvc�\�X|		password/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'Aktuellt Passwuert:';
$labels['newpasswd']  = 'Neit Passwuert:';
$labels['confpasswd']  = 'Neit Passwuert bestätegen:';
$messages['nopassword'] = 'Gëff wann ech gelift en neit Passwuert an.';
$messages['nocurpassword'] = 'Gëff wann ech gelift dat aktuellt Passwuert an.';
$messages['passwordincorrect'] = 'Aktuellt Passwuert net korrekt.';
$messages['passwordinconsistency'] = 'D\'Passwierder passen net, probéier wann ech gelift nach eng Kéier.';
$messages['crypterror'] = 'Passwuert konnt net gespäichert ginn. Verschlësselungs-Funktioun feelt.';
$messages['connecterror'] = 'Passwuert konnt net gespäichert ginn. Connectiouns-Feeler.';
$messages['internalerror'] = 'Neit Passwuert konnt net gespäichert ginn.';
$messages['passwordshort'] = 'D\'Passwuert muss mindestens $length Zeeche laang sinn.';
$messages['passwordweak'] = 'D\'Passwuert muss mindestens eng Zuel an ee Sazzeechen enthalen.';
$messages['passwordforbidden'] = 'D\'Passwuert enthält verbueden Zeechen.';
PKvc�\R���BBpassword/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'رمز عبور کنونی';
$labels['newpasswd']  = 'رمز عبور جدید';
$labels['confpasswd']  = 'تایید رمز عبور جدید';
$messages['nopassword'] = 'لطفا رمز عبور جدیدی وارد کنید';
$messages['nocurpassword'] = 'لطفا رمز عبور کنونی را وارد کنید';
$messages['passwordincorrect'] = 'رمز عبور کنونی اشتباه است';
$messages['passwordinconsistency'] = 'رمزهای عبور با هم مطابقت ندارند، لطفا دوباره سعی کنید';
$messages['crypterror'] = 'امکان ذخیره رمز عبور جدید وجود ندارد. تابع رمزگذاری یافت نشد';
$messages['connecterror'] = 'امکان ذخیره رمز عبور جدید وجود ندارد. لطفا دوباره سعی کنید';
$messages['internalerror'] = 'امکان ذخیره رمز عبور جدید وجود ندارد';
$messages['passwordshort'] = 'طول رمز عبور می بایست حداقل به طول $length کاراکتر باشد';
$messages['passwordweak'] = 'رمز عبور می بایست دارای حداقل یک عدد و یک کاراکتر علامت گذاری باشد';
$messages['passwordforbidden'] = 'رمز عبور شامل کاراکترهای غیر مجاز است';
PKvc�\�~�[zzpassword/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Kemmañ ar ger-tremen';
$labels['curpasswd']  = 'Ger-tremen bremañ :';
$labels['newpasswd']  = 'Ger-tremen nevez :';
$labels['confpasswd']  = 'Kadarnaat ar ger-tremen :';
$messages['nopassword'] = 'Roit ur ger-tremen nevez, mar plij.';
$messages['nocurpassword'] = 'Roit ar ger-tremen red, mar plij.';
$messages['passwordincorrect'] = 'Direizh eo ar ger-tremen red.';
$messages['passwordinconsistency'] = 'Ar gerioù-tremen ne glotont ket an eil gant eben, roit anezhe en-dro.';
$messages['crypterror'] = 'N\'haller ket enrollañ ar ger-tremen nevez. Arc\'hwel enrinegañ o vank.';
$messages['connecterror'] = 'N\'haller ket enrollañ ar ger-tremen nevez. Fazi gant ar c\'hennask.';
$messages['internalerror'] = 'N\'haller ket enrollañ ar ger-tremen nevez.';
$messages['passwordshort'] = 'Ret eo d\'ar ger-tremen bezañ hiroc\'h eget $length arouezenn.';
$messages['passwordweak'] = 'En ho ker-tremen e tle bezañ ur sifr hag un arouezenn boentaouiñ da nebeutañ';
$messages['passwordforbidden'] = 'Arouezennoù difennet zo er ger-tremen.';
$messages['firstloginchange'] = 'Emaoc\'h o kennaskañ evit ar wezh kentañ. Kemmit ho ker-tremen mar plij.';
$messages['disablednotice'] = 'War drezalc\'h eo ar reizhiad evit ar mare ha n\'haller ket kemmañ gerioù-tremen. Pep tra a rankfe distreiñ d\'e stad orin a-benn nebeud. Digarezit ac\'hanomp.';
PKvc�\,�R3
3
password/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Променете лозинка';
$labels['curpasswd']  = 'Сегашна лозинка';
$labels['newpasswd']  = 'Нова лозинка';
$labels['confpasswd']  = 'Потврдете ја вашата лозинка';
$messages['nopassword'] = 'Ве молиме внесете нова лозинка';
$messages['nocurpassword'] = 'Ве молиме внесете ја вашата сегашна лозинка.';
$messages['passwordincorrect'] = 'Сегашната лозинка е неточна.';
$messages['passwordinconsistency'] = 'Лозинките не се совпаѓаат, ве молиме обидете се повторно.';
$messages['crypterror'] = 'Новата лозинка не е зачувана. функцијата за енкрипција недостига.';
$messages['connecterror'] = 'Сегашната лозинка неможе да се зачува. Грешка при поврзувањето. ';
$messages['internalerror'] = 'Сегашната лозинка неможе да се зачува.';
$messages['passwordshort'] = 'Лозинката мора да биде минимум $length карактери.';
$messages['passwordweak'] = 'Лозинката мора да содржи барем една бројка и еден интерпункциски знак.';
$messages['passwordforbidden'] = 'Лозинката содржи забранети карактери.';
$messages['firstloginchange'] = 'Ова е вашето последно логирање. Ве молиме променете ја вашата лозинка.';
$messages['disablednotice'] = 'Системот се ажурира и не е возможна промена на лозинка во моментов. Ве молиме обидете се покасно. Се извинуваме за непријатностите. ';
$messages['passwinhistory'] = 'Лозинката е предходно употребувана.';
$messages['samepasswd'] = 'Новата лозинка мора да биде различна од старата.';
$messages['passwdexpirewarning'] = 'Предупредување ! Вашата лозинка наскоро истекува, ве молиме изменете ја пред $expirationdatetime.';
$messages['passwdexpired'] = 'Вашата лозинка е истечена, морате да ја промените ! ';
$messages['passwdconstraintviolation'] = 'Пасвордот е наришен. Пасвордот веројатно е слаб';
PKvc�\E|T2��password/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['curpasswd']  = 'ពាក្យ​សម្ងាត់​បច្ចុប្បន្ន៖';
$labels['newpasswd']  = 'ពាក្យ​សម្ងាត់​ថ្មី៖';
$labels['confpasswd']  = 'បញ្ជាក់​ពាក្យ​សម្ងាត់​ថ្មី៖';
$messages['nopassword'] = 'សូម​បញ្ចូល​ពាក្យ​សម្ងាត់​ថ្មី។';
$messages['nocurpassword'] = 'សូម​បញ្ចូល​ពាក្យ​សម្ងាត់​បច្ចុប្បន្ន​ឲ្យ​បាន​ត្រូវ។';
$messages['passwordincorrect'] = 'ពាក្យ​សម្ងាត់​បច្ចុប្បន្ន​គឺ​មិន​ត្រូវ​ឡើយ។';
$messages['passwordinconsistency'] = 'ពាក្យ​សម្ងាត់​មិន​ត្រូវ​គ្នា​ទេ សូម​ព្យាយាម​ម្ដង​ទៀត។';
$messages['crypterror'] = 'មិន​អាច​រក្សា​ទុក​ពាក្យ​សម្ងាត់​ថ្មី​បាន​ទេ។ បាត់​មុខងារ​កូដនីយកម្ម។';
$messages['connecterror'] = 'មិន​អាច​រក្សា​ទុក​ពាក្យ​សម្ងាត់​ថ្មី​បាន​ទេ។ ការ​តភ្ជាប់​មាន​បញ្ហា។';
$messages['internalerror'] = 'មិន​អាច​រក្សា​ទុក​ពាក្យ​សម្ងាត់​ថ្មី​បាន​ទេ។';
$messages['passwordshort'] = 'ពាក្យ​សម្ងាត់​ត្រូវ​តែ​មាន​យ៉ាង​តិច $length តួ។';
$messages['passwordweak'] = 'ពាក្យ​សម្ងាត់​ត្រូវ​តែ​មាន​បញ្ចូល​យ៉ាង​ហោច​ណាស់​លេខ​មួយ​តួ និង​អក្សរ​សញ្ញា​មួយ​តួ។';
$messages['passwordforbidden'] = 'ពាក្យ​សម្ងាត់​មាន​អក្សរ​ដែល​ត្រូវហាម​ឃាត់។';
PKvc�\�Ȋ$	$	password/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Нууц үг солих';
$labels['curpasswd']  = 'Одоогийн нууц үг:';
$labels['newpasswd']  = 'Шинэ нууц үг:';
$labels['confpasswd']  = 'Шинэ нууц үгийг батлах';
$messages['nopassword'] = 'Шинэ нууц үгээ оруулна уу.';
$messages['nocurpassword'] = 'Одоогийн нууц үгээ оруулна уу.';
$messages['passwordincorrect'] = 'Одоогийн нууц үг таарахгүй байна.';
$messages['passwordinconsistency'] = 'Нууц үгнүүд хоорондоо таарахгүй байна, дахин оролдоно уу.';
$messages['crypterror'] = 'Шинэ нууц үгийг хадгалж чадсангүй. Шифрлэлтийн функц олдоогүй.';
$messages['connecterror'] = 'Шинэ нууц үгийг хадгалж чадсангүй. Холболтын алдаа.';
$messages['internalerror'] = 'Шинэ нууц үгийг хадгалж чадахгүй байна.';
$messages['passwordshort'] = 'Нууц үг хамгийн богинодоо $length урттай байх ёстой.';
$messages['passwordweak'] = 'Нууц үг дор хаяж нэг тоо ба нэг цэг, таслал зэрэг тэмдэгт агуулах ёстой.';
$messages['passwordforbidden'] = 'Нууц үг зөвшөөрөгдөөгүй тэмдэгт агуулж байна.';
$messages['firstloginchange'] = 'Энэ бол таны анхны нэвтрэлт. Нууц үгээ солино уу.';
PKvc�\�
��
�
password/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'שנה סיסמה';
$labels['curpasswd']  = 'סיסמה נוכחית:';
$labels['newpasswd']  = 'סיסמה חדשה:';
$labels['confpasswd']  = 'אימות הסיסמה החדשה:';
$messages['nopassword'] = 'נא להקליד סיסמה חדשה';
$messages['nocurpassword'] = 'נא להקיש הסיסמה הנוכחית';
$messages['passwordincorrect'] = 'הוקשה סיסמה נוכחית שגויה';
$messages['passwordinconsistency'] = 'הסיסמאות שהוקשו אינן תואמות, נא לנסות שנית.';
$messages['crypterror'] = 'לא נשמרה הסיסמה החדשה. חסר מנגנון הצפנה.';
$messages['connecterror'] = 'לא נשמרה הסיסמה החדשה. שגיאת תקשורת.';
$messages['internalerror'] = 'לא ניתן לשמור על הסיסמה החדשה.';
$messages['passwordshort'] = 'הסיסמה צריכה להיות לפחות בעלת $length תווים';
$messages['passwordweak'] = 'הסיסמה חייבת לכלול לפחות סיפרה אחת ולפחות סימן פיסוק אחד.';
$messages['passwordtooweak'] = 'הסיסמה חלשה מדי';
$messages['passwordnoseq'] = 'אסור שהסיסמה תהיה סדרה של תוים קשורים או בעלי משמעות כמו למשל 123456 או QUWERTY';
$messages['passwordnocommon'] = 'אסור שהסיסמה תהיה מילה נפוצה או שם/כינוי.';
$messages['passwordforbidden'] = 'הסיסמה מכילה תווים אסורים.';
$messages['firstloginchange'] = 'זוהי כניסתך הראשונה. אנא שנה את סיסמתך.';
$messages['disablednotice'] = 'לא ניתן לשנות סיסמה כעת כי המערכת התחזוקה.  המערכת תחזור בקרוב לפעולה רגילה. אנו מתנצלים על אי הנוחות.';
$messages['passwinhistory'] = 'הסיסמה היתה בשימוש מקודם';
$messages['samepasswd'] = 'הסיסמה החדשה צריכה להיות שונה מהישנה';
$messages['passwdexpirewarning'] = 'אזהרה! הסיסמה תפוג בקרוב. יש לשנותה לפני expirationdatetime$.';
$messages['passwdexpired'] = 'פג תוקפה של הסיסמה. יש לשנותה כעת!';
$messages['passwdconstraintviolation'] = 'סיסמה לא חוקית. כנראה חלשה מדי.';
$messages['pwned_mustnotbedisclosed'] = 'אסור שהסיסמה תהיה כזו שהרבה נוהגים להשתמש בה למשל תאריך לידה או 1234.';
$messages['pwned_isdisclosed'] = 'הרבה משתמשים נוהגים להשתמש בסיסמה זו';
$messages['pwned_fetcherror'] = 'לא ניתן לודא שחוזק הסיסמה תואם לנדרש';
PKvc�\~$�"��password/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Athraigh an focal faire';
$labels['curpasswd']  = 'An focal faire reatha:';
$labels['newpasswd']  = 'An focal faire nua:';
$labels['confpasswd']  = 'Deimhnigh an focal faire nua:';
$messages['nopassword'] = 'Cuir isteach focal faire nua.';
$messages['nocurpassword'] = 'Cuir isteach d\'fhocal faire reatha.';
$messages['passwordincorrect'] = 'Níl an focal faire reatha ceart.';
$messages['passwordinconsistency'] = 'Ní hionann na focail faire. Déan arís é.';
$messages['crypterror'] = 'Níorbh fhéidir an focal faire nua a chur i dtaisce. Tá an fheidhm chriptiúcháin in easnamh.';
$messages['connecterror'] = 'Níorbh fhéidir an focal faire nua a chur i dtaisce. Tharla earráid leis an gceangal.';
$messages['internalerror'] = 'Níorbh fhéidir an focal faire nua a chur i dtaisce.';
$messages['passwordshort'] = 'Ní mór $length gcarachtar ar a laghad a bheith sa bhfocal faire.';
$messages['passwordweak'] = 'Ní mór aon uimhir amháin agus aon chomhartha poncaíochta amháin a bheith sa bhfocal faire.';
$messages['passwordtooweak'] = 'Tá an focal faire rólag.';
$messages['passwordnoseq'] = 'Níor cheart don bhfocal faire a bheith ina sraith amhail 123456 nó QWERTY.';
$messages['passwordnocommon'] = 'Níor cheart focal nó ainm coitianta a roghnú mar fhocal faire.';
$messages['passwordforbidden'] = 'Tá carachtair nach gceadaítear san fhocal faire.';
$messages['firstloginchange'] = 'Is é seo an chéad uair duit síniú isteach. Athraigh d\'fhocal faire.';
$messages['disablednotice'] = 'Tá an córas á chothabháil faoi láthair agus ní féidir an focal faire a athrú ag an am seo. Ba cheart go mbeadh gach rud mar is gnách sula i bhfad. Is dona linn aon mhíchaoithiúlacht.';
$messages['passwinhistory'] = 'Baineadh feidhm as an bhfocal faire seo cheana.';
$messages['samepasswd'] = 'Ní mór don bhfocal faire nua bheith éagsúil ón seanfhocal faire.';
$messages['passwdexpirewarning'] = 'Rabhadh! Rachaidh d\'fhocal faire in éag go luath. Athraigh é roimh $expirationdatetime.';
$messages['passwdexpired'] = 'D\'éag d\'fhocal faire. Ní mór duit é a athrú anois!';
$messages['passwdconstraintviolation'] = 'Sárú ar na rialacha do na focail faire. Is dócha go bhfuil an focal faire rólag.';
$messages['pwned_isdisclosed'] = 'Tá fios ag an iomarca daoine ar an bhfocal faire sin.';
$messages['pwned_fetcherror'] = 'Theip ar an gcóras a fhíorú cé chomh láidir is atá an focal faire.';
PKvc�\�͌��password/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Ændre adgangskode ';
$labels['curpasswd']  = 'Nuværende adgangskode:';
$labels['newpasswd']  = 'Ny adgangskode:';
$labels['confpasswd']  = 'Bekræft ny adgangskode:';
$messages['nopassword'] = 'Indtast venligst en ny adgangskode.';
$messages['nocurpassword'] = 'Indtast venligst nuværende adgangskode.';
$messages['passwordincorrect'] = 'Nuværende adgangskode er forkert.';
$messages['passwordinconsistency'] = 'Adgangskoderne er ikke ens, prøv igen.';
$messages['crypterror'] = 'Kunne ikke gemme den nye adgangskode. Krypteringsfunktion mangler.';
$messages['connecterror'] = 'Kunne ikke gemme den nye adgangskode. Fejl ved forbindelsen.';
$messages['internalerror'] = 'Kunne ikke gemme den nye adgangskode.';
$messages['passwordshort'] = 'Adgangskoden skal være mindst $length tegn lang.';
$messages['passwordweak'] = 'Adgangskoden skal indeholde mindst et tal og et tegnsætningstegn (-.,)';
$messages['passwordtooweak'] = 'Adgangskoden er for svag';
$messages['passwordnoseq'] = 'Adgangskoden bør ikke være en række som 123456 eller QWERTY.';
$messages['passwordnocommon'] = 'Adgangskoden bør ikke være et almindeligt ord eller navn.';
$messages['passwordforbidden'] = 'Adgangskoden indeholder forbudte tegn.';
$messages['firstloginchange'] = 'Dette er første gang du logger ind, ændre venligst din adgangskode';
$messages['disablednotice'] = 'Systemet vedligeholdes i øjeblikket og det er pt. ikke muligt at skifte kodeord. Alt burde være oppe igen om lidt. Vi beklager ulejligheden. ';
$messages['passwinhistory'] = 'Kodeordet har tidligere været anvendt. ';
$messages['samepasswd'] = 'Det nye kodeord skal være forskelligt fra det gamle. ';
$messages['passwdexpirewarning'] = 'Advarsel, Dit kodeord udløber snart. Du skal ændre det før $expirationdatetime.';
$messages['passwdexpired'] = 'Dit kodeord er udløbet, du skal ændre det nu!';
$messages['passwdconstraintviolation'] = 'Password er i strid med reglerne. Det er sikkert for svagt.';
$messages['pwned_mustnotbedisclosed'] = 'Adgangskoden må ikke være <a href="$href" target="_blank">almindeligt brugt</a>.';
$messages['pwned_isdisclosed'] = 'Denne adgangskode er almindeligt brugt.';
$messages['pwned_fetcherror'] = 'Kunne ikke bekræfte adgangskodens styrken.';
PKvc�\�u?��	�	password/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Spremenjeno geslo';
$labels['curpasswd']  = 'Obstoječe geslo:';
$labels['newpasswd']  = 'Novo geslo:';
$labels['confpasswd']  = 'Potrdi novo geslo:';
$messages['nopassword'] = 'Vnesite novo geslo.';
$messages['nocurpassword'] = 'Vnesite obstoječe geslo.';
$messages['passwordincorrect'] = 'Obstoječe geslo ni veljavno.';
$messages['passwordinconsistency'] = 'Gesli se ne ujemata, poskusite znova.';
$messages['crypterror'] = 'Novega gesla ni bilo mogoče shraniti. Prišlo je do napake pri šifriranju.';
$messages['connecterror'] = 'Novega gesla ni bilo mogoče shraniti. Prišlo je do napake v povezavi.';
$messages['internalerror'] = 'Novega gesla ni bilo mogoče shraniti.';
$messages['passwordshort'] = 'Geslo mora vsebovati vsaj $length znakov';
$messages['passwordweak'] = 'Geslo mora vključevati vsaj eno številko in ločilo.';
$messages['passwordforbidden'] = 'Geslo vsebuje neveljavne znake.';
$messages['firstloginchange'] = 'To je vaša prva prijava. Spremenite začetno geslo.';
$messages['disablednotice'] = 'Sistem se trenutno posodablja, zato sprememba gesla v tem trenutku ni mogoča. Postopek bo mogoče opraviti v kratkem. Za nevšečnosti se opravičujemo.';
$messages['passwinhistory'] = 'To geslo ste v preteklosti že uporabili.';
$messages['samepasswd'] = 'Novo geslo se mora razlikovati od prejšnjega.';
$messages['passwdexpirewarning'] = 'Opozorilo! Vaše geslo bo kmalu poteklo, spremenite ga pred $expirationdatetime.';
$messages['passwdexpired'] = 'Vaše geslo je poteklo, spremenite ga!';
$messages['passwdconstraintviolation'] = 'Geslo ne ustreza zahtevam. Verjetno je prešibko.';
PKvc�\���\��password/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'تغيير كلمة المرور';
$labels['curpasswd']  = 'كلمة المرور الحالية:';
$labels['newpasswd']  = 'كلمة المرور الجديدة:';
$labels['confpasswd']  = 'تأكيد كلمة المرور الجديدة:';
$messages['nopassword'] = 'من فضلك أدخل كلمة المرور الجديدة.';
$messages['nocurpassword'] = 'من فضلك أدخل كلمة المرور الحالية.';
$messages['passwordincorrect'] = 'كلمة المرور الحالية غير صحيحة.';
$messages['passwordinconsistency'] = 'كلمة المرور غير مطابقة حاول مجددا';
$messages['crypterror'] = 'تعذر حفظ كلمة المرور الجديدة. وظيفة التشفير مفقودة.';
$messages['connecterror'] = 'تعذر حفظ كلمة المرور الجديدة. خطأ بالإتصال.';
$messages['internalerror'] = 'تعذر حفظ كلمة المرور الجديدة.';
$messages['passwordshort'] = 'كلمة المرور يجب على الأقل $length أحرف';
$messages['passwordweak'] = ' كلمة المرور يجب أن تتضمن رقم واحد على الأقل وحرف ترقيم واحد.';
$messages['passwordforbidden'] = 'كلمة المرور تحتوى على أحرف ممنوعة';
$messages['firstloginchange'] = 'لقد تم تسجيل دخولك لأول مرة، يُرجى تغيير كلمتك السرية.';
$messages['passwinhistory'] = 'لقد قُمت باستخدام هذه الكلمة السرية مِن قبل.';
$messages['samepasswd'] = 'يجب أن تكون كلمة السر الجديدة لا تُشابِه الكلمة القديمة.';
$messages['passwdexpirewarning'] = 'تنبيه ! إنّ مدة صلاحية كلمتك السرية سوف تنقضي قريبا، يُرجى تغييرها قبل $expirationdatetime.';
$messages['passwdexpired'] = 'لقد إنتهت مدة صلاحية كلمتك السرية، يجب عليك تغييرها الآن !';
$messages['passwdconstraintviolation'] = 'تحتوي كلمة المرور على خروقات. ربما كلمة المرور ضعيفة جدا.';
PKvc�\��f%%password/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Passwort ändern';
$labels['curpasswd']  = 'Aktuelles Passwort:';
$labels['newpasswd']  = 'Neues Passwort:';
$labels['confpasswd']  = 'Neues Passwort bestätigen:';
$messages['nopassword'] = 'Bitte geben Sie ein neues Passwort ein.';
$messages['nocurpassword'] = 'Bitte geben Sie Ihr aktuelles Passwort ein.';
$messages['passwordincorrect'] = 'Aktuelles Passwort ist falsch.';
$messages['passwordinconsistency'] = 'Passwörter stimmen nicht überein, bitte versuchen Sie es erneut.';
$messages['crypterror'] = 'Neues Passwort konnte nicht gespeichert werden. Verschlüsselungsfunktion fehlt.';
$messages['connecterror'] = 'Neues Passwort konnte nicht gespeichert werden. Verbindungsfehler.';
$messages['internalerror'] = 'Neues Passwort konnte nicht gespeichert werden.';
$messages['passwordshort'] = 'Passwort muss mindestens $length Zeichen lang sein.';
$messages['passwordweak'] = 'Passwort muss mindestens eine Zahl und ein Sonderzeichen enthalten.';
$messages['passwordtooweak'] = 'Das Passwort ist zu schwach.';
$messages['passwordnoseq'] = 'Das Passwort sollte keine Sequenz wie 123456 oder QWERTY sein.';
$messages['passwordnocommon'] = 'Passwort sollte kein allgemeines Wort oder Name sein.';
$messages['passwordforbidden'] = 'Passwort enthält unzulässige Zeichen.';
$messages['firstloginchange'] = 'Das ist Ihre erste Anmeldung. Bitte ändern Sie Ihr Passwort.';
$messages['disablednotice'] = 'Das System befindet sich derzeit im Wartungszustand und eine Passwortänderung ist im Moment nicht möglich. Alles sollte bald wieder normal sein. Wir bitten um Entschuldigung für die Unannehmlichkeiten.';
$messages['passwinhistory'] = 'Dieses Passwort wurde bereits zu einem früheren Zeitpunkt verwendet.';
$messages['samepasswd'] = 'Das neue Passwort muss sich von dem Alten unterscheiden.';
$messages['passwdexpirewarning'] = 'Achtung! Ihr Passwort läuft am $expirationdatetime ab. Ändern Sie es rechtzeitig.';
$messages['passwdexpired'] = 'Ihr Passwort ist abgelaufen, ändern Sie es jetzt!';
$messages['passwdconstraintviolation'] = 'Passwortbeschränkungsverletzung. Passwort wahrscheinlich zu schwach.';
$messages['pwned_isdisclosed'] = 'Dieses Passwort ist allgemein bekannt.';
$messages['pwned_fetcherror'] = 'Die Überprüfung der Passwortstärke ist fehlgeschlagen.';
PKvc�\�x<<password/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Ändra lösenord';
$labels['curpasswd']  = 'Nuvarande lösenord';
$labels['newpasswd']  = 'Nytt lösenord';
$labels['confpasswd']  = 'Bekräfta nytt lösenord';
$messages['nopassword'] = 'Ange nytt lösenord.';
$messages['nocurpassword'] = 'Ange nuvarande lösenord.';
$messages['passwordincorrect'] = 'Felaktigt nuvarande lösenord.';
$messages['passwordinconsistency'] = 'Bekräftelsen av lösenordet stämmer inte, försök igen.';
$messages['crypterror'] = 'Lösenordet kunde inte ändras. Krypteringsfunktionen saknas.';
$messages['connecterror'] = 'Lösenordet kunde inte ändras. Anslutningen misslyckades.';
$messages['internalerror'] = 'Lösenordet kunde inte ändras.';
$messages['passwordshort'] = 'Lösenordet måste vara minst $length tecken långt.';
$messages['passwordweak'] = 'Lösenordet måste innehålla minst en siffra och ett specialtecken.';
$messages['passwordtooweak'] = 'Lösenordet är inte tillräckligt bra.';
$messages['passwordnoseq'] = 'Lösenord bör aldrig vara sekvenser liknande 123456 eller QWERTY.';
$messages['passwordnocommon'] = 'Lösenord bör aldrig vara vanliga ord eller namn.';
$messages['passwordforbidden'] = 'Lösenordet innehåller otillåtna tecken.';
$messages['firstloginchange'] = 'Du loggar in för första gången. Vänligen ändra ditt lösenord.';
$messages['disablednotice'] = 'Underhåll av systemet pågår och därför kan lösenord inte ändras för tillfället. Allt ska fungera normalt igen så snart som möjligt. Ursäkta den eventuella olägenheten underhållet orsakar.';
$messages['passwinhistory'] = 'Lösenordet har redan använts tidigare.';
$messages['samepasswd'] = 'Lösenordet får inte vara samma som det gamla.';
$messages['passwdexpirewarning'] = 'Varning! Lösenordet blir snart ogiltigt, ändra det innan $expirationdatetime.';
$messages['passwdexpired'] = 'Lösenordet är ogiltigt, du måste ändra det nu!';
$messages['passwdconstraintviolation'] = 'Lösenordet uppfyller inte gällande kriterier. Lösenordet är troligtvis inte tillräckligt bra.';
$messages['pwned_mustnotbedisclosed'] = 'Lösenordet får inte vara <a href="$href" target="_blank">allmänt känt</a>.';
$messages['pwned_isdisclosed'] = 'Detta lösenord är allmänt känt.';
$messages['pwned_fetcherror'] = 'Det gick inte att verifiera lösenordsstyrkan.';
PKvc�\Xx�@@password/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'مەخپىي نۇمۇرنى ئۆزگەرتىش';
$labels['curpasswd']  = 'نۆۋەتتىكى مەخپىي نۇمۇر:';
$labels['newpasswd']  = 'يېڭى مەخپىي نۇمۇر:';
$labels['confpasswd']  = 'يېڭى مەخپىي نۇمۇرنى جەزىملەشتۈرۈش:';
$messages['nopassword'] = 'يېڭى مەخپىي نۇمۇرنى كىرگۈزۈڭ.';
$messages['nocurpassword'] = 'نۆۋەتتىكى مەخپىي نۇمۇرنى كىرگۈزۈڭ.';
$messages['passwordincorrect'] = 'نۆۋەتتىكى مەخپىي نۇمۇر خاتا.';
$messages['passwordinconsistency'] = 'مەخپىي نۇمۇرلار ماس كەلمىدى، قايتا سىناڭ.';
$messages['crypterror'] = 'يېڭى مەخپىي نۇمۇرنى ساقلىغىلى بولمىدى. شىفىرلاش فونكىسيەسى كەم.';
$messages['connecterror'] = 'يېڭى مەخپىي نۇمۇرنى ساقلىغىلى بولمىدى. ئۇلىنىش خاتالىقى.';
$messages['internalerror'] = 'يېڭى مەخپىي نۇمۇرنى ساقلىغىلى بولمىدى.';
$messages['passwordshort'] = 'مەخپىي نۇمۇر ئەڭ كەمدە length$ ھەرىپ ئۇزۇنلىقىدا بۇلىشى كېرەك.';
$messages['passwordweak'] = 'مەخپىي نۇمۇر ئەڭ كەمدە بىر سان ھەمدە بىر تىنىش بەلگىسىنى ئۆز-ئىچىگە ئېلىشى كېرەك.';
$messages['passwordtooweak'] = 'مەخپىي نۇمۇر بەك ئاجىز.';
$messages['passwordnoseq'] = 'مەخپىي نۇمۇر قاتار سان 123456 ياكى قاتار ھەرىپ ئا ب س د بولماسلىقى كېرەك.';
$messages['passwordnocommon'] = 'مەخپىي نۇمۇر كۆپ ئۇچىرايدىغان سۆز ياكى ئىسىم بولماسلىقى كېرەك.';
$messages['passwordforbidden'] = 'مەخپىي نۇمۇر مەنئىي قىلىنغان ھەرىپنى ئۆز-ئىچىگە ئالىدۇ.';
$messages['firstloginchange'] = 'بۇ سىزنىڭ تۇنجى كىرىشىڭىز. مەخپىي نۇمۇرىڭىزنى ئۆزگەرتىڭ.';
$messages['disablednotice'] = 'سېستىما نۆۋەتتە ئاسىرىلىۋاتىدۇ شۇڭا مەخپىي نۇمۇرنى ئۆزگەرتىش ھازىرچە مۇمكىن ئەمەس. ھەممە ئىقتىدار تېزلا ئەسلىگە قايتىدۇ. ھەرقانداق قولايسىزلىق ئۈچۈن سىزدىن كەچۈرۈم سورايمىز.';
$messages['passwinhistory'] = 'بۇ مەخپىي نۇمۇر ئىلگىرى ئىشلىتىپ بۇلۇنغان.';
$messages['samepasswd'] = 'يېڭى مەخپىي نۇمۇر كونا مەخپىي نۇمۇردىن پەرىقلىق بۇلىشى كېرەك.';
$messages['passwdexpirewarning'] = 'ئاگاھلاندۇرۇش! سىزنىڭ مەخپىي نۇمۇرىڭىزنىڭ ۋاقتى تېزلا ئۆتۈپ كېتىدۇ. expirationdatetime$دىن بۇرۇن ئۇنى ئۆزگەرتىڭ.';
$messages['passwdexpired'] = 'مەخپىي نۇمۇرىڭىزنىڭ ۋاقتى ئۆتتى. سىز ئۇنى دەرھال ئۆزگەرتىشىڭىز كېرەك!';
$messages['passwdconstraintviolation'] = 'مەخپىي نۇمۇر قائىدىسىگە خىلاپلىق قىلىندى. مەخپىي نۇمۇر بەلكىم بەك ئاجىز.';
$messages['pwned_mustnotbedisclosed'] = 'مەخپىي نۇمۇر <a href="$href" target="_blank"> ئادەتتە تۇنۇشلۇق </a>بولماسلىقى كېرەك.';
$messages['pwned_isdisclosed'] = 'بۇ مەخپىي نۇمۇر ئادەتتە تۇنۇشلۇق';
$messages['pwned_fetcherror'] = 'مەخپىي نۇمۇر كۈچىنى دەلىللەش مەغلۇپ بولدى.';
PKvc�\�_��

password/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = '암호 변경';
$labels['curpasswd']  = '현재 암호:';
$labels['newpasswd']  = '새로운 암호:';
$labels['confpasswd']  = '새로운 암호 확인:';
$messages['nopassword'] = '새로운 암호를 입력하세요.';
$messages['nocurpassword'] = '현재 사용 중인 암호를 입력해주세요.';
$messages['passwordincorrect'] = '현재 사용 중인 암호가 올바르지 않습니다.';
$messages['passwordinconsistency'] = '암호가 일치하지 않습니다. 다시 시도해주세요.';
$messages['crypterror'] = '새로운 암호를 저장할 수 없습니다. 암호화 기능이 누락되었습니다.';
$messages['connecterror'] = '새로운 암호를 저장할 수 없습니다. 연결 오류입니다.';
$messages['internalerror'] = '새로운 암호를 저장할 수 없습니다.';
$messages['passwordshort'] = '암호는 문자가 $length개 이상이어야 합니다.';
$messages['passwordweak'] = '암호는 숫자 및 특수문자를 각각 한 개 이상 포함해야 합니다.';
$messages['passwordtooweak'] = '암호가 너무 취약합니다.';
$messages['passwordnoseq'] = '암호는 123456 또는 QWERTY 같은 연속된 문구가 아니어야 합니다.';
$messages['passwordnocommon'] = '암호는 자주 쓰이는 단어 또는 이름을 포함할 수 없습니다.';
$messages['passwordforbidden'] = '암호가 금지된 문자을 포함하고 있습니다.';
$messages['firstloginchange'] = '처음 로그인하셨습니다. 암호를 변경해주세요.';
$messages['disablednotice'] = '시스템이 현재 유지보수 중이며 암호 변경이 일시적으로 불가능합니다. 모든 것이 조만간 정상화 될 예정입니다. 불편을 끼쳐드려 죄송합니다.';
$messages['passwinhistory'] = '이 암호는 이미 이전에 사용됐습니다.';
$messages['samepasswd'] = '새로운 암호는 예전 암호와 달라야 합니다.';
$messages['passwdexpirewarning'] = '경고! 암호가 곧 만료됩니다. $expirationdatetime 이전에 변경하십시오.';
$messages['passwdexpired'] = '암호가 만료됐습니다. 지금 변경하셔야 합니다!';
$messages['passwdconstraintviolation'] = '암호 제약 위반. 암호가 취약한 것 같습니다.';
$messages['pwned_mustnotbedisclosed'] = '<a href="$href" target="_blank">흔히 알려지지</a> 않은 암호여야 합니다.';
$messages['pwned_isdisclosed'] = '이것은 흔히 알려진 암호입니다.';
$messages['pwned_fetcherror'] = '암호 복잡성을 검증하는데 실패함.';
PKvc�\1�OF��password/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Cambiar contrasinal';
$labels['curpasswd']  = 'Contrasinal actual:';
$labels['newpasswd']  = 'Contrasinal novo:';
$labels['confpasswd']  = 'Confirmar contrasinal:';
$messages['nopassword'] = 'Por favor, introduce un contrasinal novo.';
$messages['nocurpassword'] = 'Por favor, introduce o contrasinal actual.';
$messages['passwordincorrect'] = 'O contrasinal actual é incorrecto.';
$messages['passwordinconsistency'] = 'Os contrasinais non cadran. Por favor, inténtao outra vez.';
$messages['crypterror'] = 'Non foi posíbel gardar o contrasinal novo. Falta a función de cifrado.';
$messages['connecterror'] = 'Non foi posíbel gardar o contrasinal novo. Erro de conexión';
$messages['internalerror'] = 'Non foi posíbel gardar o contrasinal novo.';
$messages['passwordshort'] = 'O contrasinal debe ter polo menos $length caracteres.';
$messages['passwordweak'] = 'O contrasinal debe incluir polo menos un número e un signo de puntuación.';
$messages['passwordforbidden'] = 'O contrasinal contén caracteres non permitidos.';
$messages['firstloginchange'] = 'É a primeira vez que se conecta. Por favor, troque o seu contrasinal.';
PKvc�\Ċ�OOpassword/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Modifica la Password';
$labels['curpasswd']  = 'Password corrente:';
$labels['newpasswd']  = 'Nuova password:';
$labels['confpasswd']  = 'Conferma la nuova Password:';
$messages['nopassword'] = 'Per favore inserire la nuova password.';
$messages['nocurpassword'] = 'Per favore inserire la password corrente.';
$messages['passwordincorrect'] = 'La password corrente non è corretta.';
$messages['passwordinconsistency'] = 'Le password non coincidono, per favore reinserire.';
$messages['crypterror'] = 'Impossibile salvare la nuova password. Funzione di crittografia mancante.';
$messages['connecterror'] = 'Impossibile salvare la nuova password. Errore di connessione.';
$messages['internalerror'] = 'Impossibile salvare la nuova password.';
$messages['passwordshort'] = 'La password deve essere lunga almeno $length caratteri.';
$messages['passwordweak'] = 'La password deve includere almeno una cifra decimale e un carattere di punteggiatura.';
$messages['passwordtooweak'] = 'La password è troppo debole.';
$messages['passwordnoseq'] = 'La password non deve essere una sequenza come 123456 o QWERTY.';
$messages['passwordnocommon'] = 'La password non deve contenere parole comuni o nomi.';
$messages['passwordforbidden'] = 'La password contiene caratteri proibiti.';
$messages['firstloginchange'] = 'Questo è il tuo primo accesso. Si prega di cambiare la propria password.';
$messages['disablednotice'] = 'Il sistema è attualmente in manutenzione e pertanto al momento non è possibile effettuare il cambio della password. Presto tutto tornerà alla normalità. Ci scusiamo per il disagio.';
$messages['passwinhistory'] = 'Questa password è già stata usata precedentemente';
$messages['samepasswd'] = 'La nuova password deve essere differente da una usata precedentemente.';
$messages['passwdexpirewarning'] = 'Attenzione! La tua password scadrà a breve, cambiala prima del $expiretiondatetime.';
$messages['passwdexpired'] = 'La tua password è scaduta, devi cambiarla adesso.';
$messages['passwdconstraintviolation'] = 'La password non soddisfa i requisiti di sicurezza.';
$messages['pwned_mustnotbedisclosed'] = 'La password non deve essere <a href="$href" target="_blank">nota</a>.';
$messages['pwned_isdisclosed'] = 'Questa password è nota.';
$messages['pwned_fetcherror'] = 'Verifica robustezza password fallita.';
PKvc�\{����password/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Cambiar contraseña';
$labels['curpasswd']  = 'Contraseña actual:';
$labels['newpasswd']  = 'Contraseña nueva:';
$labels['confpasswd']  = 'Confirmar contraseña:';
$messages['nopassword'] = 'Por favor, introduzca una contraseña nueva.';
$messages['nocurpassword'] = 'Por favor, introduzca la contraseña actual.';
$messages['passwordincorrect'] = 'La contraseña actual es incorrecta.';
$messages['passwordinconsistency'] = 'Las contraseñas no coinciden. Por favor, inténtelo de nuevo.';
$messages['crypterror'] = 'No se pudo guardar la contraseña nueva. Falta la función de cifrado.';
$messages['connecterror'] = 'No se pudo guardar la contraseña nueva. Error de conexión.';
$messages['internalerror'] = 'No se pudo guardar la contraseña nueva.';
$messages['passwordshort'] = 'La contraseña debe tener al menos $length caracteres.';
$messages['passwordweak'] = 'La contraseña debe incluir al menos un número y un signo de puntuación.';
$messages['passwordtooweak'] = 'La contraseña es demasiado débil.';
$messages['passwordnoseq'] = 'La contraseña no debería ser una secuencia tipo 123456 o QWERTY.';
$messages['passwordnocommon'] = 'La contraseña no debería ser un nombre o palabra común.';
$messages['passwordforbidden'] = 'La contraseña introducida contiene caracteres no permitidos.';
$messages['firstloginchange'] = 'Este es su primer inicio de sesión. Por favor, cambie su contraseña.';
$messages['disablednotice'] = 'El sistema actualmente está en mantenimiento y ahora no se puede cambiar la contraseña. Todo debería volver a la normalidad pronto. Disculpa las molestias.';
$messages['passwinhistory'] = 'Esta contraseña ya se ha usado previamente.';
$messages['samepasswd'] = 'La nueva contraseña tiene que ser diferente a la antigua.';
$messages['passwdexpirewarning'] = '¡ Atención! Su nueva contraseña expirará pronto, cámbiela antes de $expirationdatetime.';
$messages['passwdexpired'] = 'Su contraseña ha expirado, tiene que cambiarla ahora.';
$messages['passwdconstraintviolation'] = 'Violación de restricción de contraseña Contraseña probablemente demasiado débil.';
$messages['pwned_mustnotbedisclosed'] = 'La constraseña no debe ser <a href="$href" target="_blank">comúnmente conocida</a>.';
$messages['pwned_isdisclosed'] = 'La contraseña es comúnmente conocida.';
$messages['pwned_fetcherror'] = 'Fallo al verificar la fortaleza de la contraseña.';
PKvc�\P'!�!!password/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'രഹസ്യവാക്ക് മാറ്റുക';
$labels['curpasswd']  = 'ഇപ്പോഴത്തെ രഹസ്യവാക്ക്';
$labels['newpasswd']  = 'പുതിയ രഹസ്യവാക്ക്';
$labels['confpasswd']  = 'പുതിയ രഹസ്യവാക്ക് സ്ഥിരീകരിക്കുക';
$messages['nopassword'] = 'ദയവായി പുതിയ രഹസ്യവാക്ക് നൽകുക';
$messages['nocurpassword'] = 'ദയവായി ഇപ്പോഴത്തെ രഹസ്യവാക്ക് നൽകുക';
$messages['passwordincorrect'] = 'ഇപ്പോഴത്തെ രഹസ്യവാക്ക് തെറ്റാണ്.';
$messages['passwordinconsistency'] = 'രഹസ്യവാക്കുകൾ ചേരുന്നില്ല, ദയവായി വീണ്ടും ശ്രമിക്കുക';
$messages['crypterror'] = 'പുതിയ രഹസ്യവാക്ക് സൂക്ഷിക്കാൻ സാധിച്ചില്ല. എൻക്രിപ്ഷൻ ഫങ്ങ്ഷൻ ലഭ്യമല്ല.';
$messages['connecterror'] = 'പുതിയ രഹസ്യവാക്ക് സൂക്ഷിക്കാൻ സാധിച്ചില്ല. ബന്ധം സ്ഥാപിക്കുന്നതിൽ പിഴവ്.';
$messages['internalerror'] = 'പുതിയ രഹസ്യവാക്ക് സൂക്ഷിക്കാൻ സാധിച്ചില്ല.';
$messages['passwordshort'] = 'രഹസ്യവാക്കിനു് കുറഞ്ഞത് $length അക്ഷരങ്ങൾ നീളം വേണം';
$messages['passwordweak'] = 'രഹസ്യവാക്കിൽ കുറഞ്ഞത് ഒരു സംഖ്യയും, ഒരു പ്രത്യേക അക്ഷരവും വേണം';
$messages['passwordforbidden'] = 'രഹസ്യവാക്കിൽ അനുവദനീയമല്ലാത്ത അക്ഷരങ്ങൾ ഉണ്ട്';
$messages['firstloginchange'] = 'ഇത് താങ്കളുടെ ആദ്യത്തെ പ്രവേശനമാണ്. ദയവായി താങ്കളുടെ രഹസ്യവാക്ക് മാറ്റുക.';
PKvc�\҇��password/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Wijzig wachtwoord';
$labels['curpasswd']  = 'Huidig wachtwoord:';
$labels['newpasswd']  = 'Nieuw wachtwoord:';
$labels['confpasswd']  = 'Bevestig nieuw wachtwoord:';
$messages['nopassword'] = 'Vul uw nieuwe wachtwoord in.';
$messages['nocurpassword'] = 'Vul uw huidige wachtwoord in.';
$messages['passwordincorrect'] = 'Huidig wachtwoord is onjuist.';
$messages['passwordinconsistency'] = 'Wachtwoorden komen niet overeen, probeer het opnieuw.';
$messages['crypterror'] = 'Nieuwe wachtwoord kan niet opgeslagen worden; de server mist een versleutelfunctie.';
$messages['connecterror'] = 'Nieuwe wachtwoord kan niet opgeslagen worden; verbindingsfout.';
$messages['internalerror'] = 'Uw nieuwe wachtwoord kan niet worden opgeslagen.';
$messages['passwordshort'] = 'Het wachtwoord moet minimaal $length tekens lang zijn.';
$messages['passwordweak'] = 'Het wachtwoord moet minimaal één cijfer en één leesteken bevatten.';
$messages['passwordtooweak'] = 'Uw wachtwoord is niet sterk genoeg.';
$messages['passwordnoseq'] = 'Uw wachtwoord mag geen opeenvolging zijn zoals 123456 of AZERTY.';
$messages['passwordnocommon'] = 'Uw wachtwoord mag geen veel voorkomende naam of tekst zijn.';
$messages['passwordforbidden'] = 'Het wachtwoord bevat tekens die niet toegestaan zijn.';
$messages['firstloginchange'] = 'Dit is uw eerste aanmelding. Verander uw wachtwoord alstublieft.';
$messages['disablednotice'] = 'Het systeem is momenteel in onderhoud en wachtwoord wijzigen is op dit moment dus niet mogelijk. Alles werkt binnenkort weer naar behoren. Onze excuses voor het ongemak.';
$messages['passwinhistory'] = 'Dit wachtwoord is al eerder gebruikt.';
$messages['samepasswd'] = 'Het nieuwe paswoord dient verschillend ten opzichte van de oude te zijn.';
$messages['passwdexpirewarning'] = 'Waarschuwing! je wachtwoord verloopt binnenkort, Wijzig het voor $expirationdatetime.';
$messages['passwdexpired'] = 'Je wachtwoord is verlopen, je dient het nu te wijzigen!';
$messages['passwdconstraintviolation'] = 'Wachtwoord voldoet niet aan beleid. Waarschijnlijk te zwak.';
$messages['pwned_isdisclosed'] = 'Dit wachtwoord is algemeen bekend.';
$messages['pwned_fetcherror'] = 'De wachtwoordsterkte kon niet geverifieerd worden.';
PKvc�\;��oYYpassword/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Newid cyfrinair';
$labels['curpasswd']  = 'Cyfrinair Presennol:';
$labels['newpasswd']  = 'Cyfrinair Newydd:';
$labels['confpasswd']  = 'Cadarnhau Cyfrinair Newydd:';
$messages['nopassword'] = 'Rhowch eich cyfrinair newydd.';
$messages['nocurpassword'] = 'Rhowch eich cyfrinair presennol.';
$messages['passwordincorrect'] = 'Roedd y cyfrinair presennol yn anghywir.';
$messages['passwordinconsistency'] = 'Nid yw\'r cyfrineiriau yn cymharu, ceisiwch eto.';
$messages['crypterror'] = 'Methwyd cadw\'r cyfrinair newydd. Ffwythiant amgodi ar goll.';
$messages['connecterror'] = 'Methwyd cadw\'r cyfrinair newydd. Gwall cysylltiad.';
$messages['internalerror'] = 'Methwyd cadw\'r cyfrinair newydd.';
$messages['passwordshort'] = 'Rhaid i\'r cyfrinair fod o leia $length llythyren o hyd.';
$messages['passwordweak'] = 'Rhaid i\'r cyfrinair gynnwys o leia un rhif a un cymeriad atalnodi.';
$messages['passwordtooweak'] = 'Mae\'r cyfrinair yn rhy wan.';
$messages['passwordnoseq'] = 'Ni ddylai\'r cyfrinair fod yn ddilyniant fel 123456 neu QWERTY.';
$messages['passwordnocommon'] = 'Ni ddylai\'r cyfrinair fod yn air cyffredin neu enw.';
$messages['passwordforbidden'] = 'Mae\'r cyfrinair yn cynnwys llythrennau wedi gwahardd.';
$messages['firstloginchange'] = 'Dyma eich mewngofnodiad cynta. Newidiwch eich cyfrinair.';
$messages['disablednotice'] = 'Mae gwaith cynnal a chadw ar y system ar hyn o bryd a nid yw\'n bosib newid y cyfrinair ar hyn o bryd. Fe ddylai fod popeth nol i\'r arfer yn fuan. Rydym yn ymddiheuro am yr anghyfleustra.';
$messages['passwinhistory'] = 'Defnyddiwyd y cyfrinair hwn o\'r blaen.';
$messages['samepasswd'] = 'Rhaid i\'r cyfrinair newydd fod yn wahanol i\'r hen un.';
$messages['passwdexpirewarning'] = 'Rhybudd! Fe fydd eich cyfrinair yn dod i ben cyn hir, newidiwch e cyn $expirationdatetime.';
$messages['passwdexpired'] = 'Mae\'ch cyfrinair wedi dod i ben, rhaid i chi ei newid nawr!';
$messages['passwdconstraintviolation'] = 'Mae hwn yn torri cyfyngiad cyfrinair. Mae\'n bosib fod y cyfrinair yn rhy wan.';
$messages['pwned_mustnotbedisclosed'] = 'Ni all y cyfrinair fod yn <a href="https://haveibeenpwned.com/Passwords" target="_blank">air adnabyddus</a>.';
$messages['pwned_isdisclosed'] = 'Mae\'r cyfrinair hwn yn air sy\'n hysbys.';
$messages['pwned_fetcherror'] = 'Methwyd gwirio cryfder y cyfrinair.';
PKvc�\��� ��password/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Change password';
$labels['curpasswd']  = 'Current Password:';
$labels['newpasswd']  = 'New Password:';
$labels['confpasswd']  = 'Confirm New Password:';
$messages['nopassword'] = 'Please enter a new password.';
$messages['nocurpassword'] = 'Please enter the current password.';
$messages['passwordincorrect'] = 'Current password is incorrect.';
$messages['passwordinconsistency'] = 'Passwords do not match.  Please try again.';
$messages['crypterror'] = 'New password could not be saved.  The encryption function is missing.';
$messages['connecterror'] = 'New password could not be saved.  There is a connection error.';
$messages['internalerror'] = 'New password could not be saved.';
$messages['passwordshort'] = 'Password must be at least $length characters long.';
$messages['passwordweak'] = 'Password must include at least one number and one symbol.';
$messages['passwordtooweak'] = 'Password too weak.';
$messages['passwordnoseq'] = 'Password should not be a sequence like 123456 or QWERTY.';
$messages['passwordnocommon'] = 'Password should not be a common word or name.';
$messages['passwordforbidden'] = 'Password contains forbidden characters.';
$messages['firstloginchange'] = 'This is your first login. Please change your password.';
$messages['disablednotice'] = 'The system is currently under maintenance and password change is not possible at the moment. Everything should be back to normal soon. We apologise for any inconvenience.';
$messages['passwinhistory'] = 'This password has already been used previously.';
$messages['samepasswd'] = 'The new password has to be different from the old one.';
$messages['passwdexpirewarning'] = 'Warning! Your password will expire soon, change it before $expirationdatetime.';
$messages['passwdexpired'] = 'Your password has expired, you have to change it now!';
$messages['passwdconstraintviolation'] = 'Password constraint violation. Password probably too weak.';
$messages['pwned_mustnotbedisclosed'] = 'Password must not be <a href="$href" target="_blank">commonly known</a>.';
$messages['pwned_isdisclosed'] = 'This password is commonly known.';
$messages['pwned_fetcherror'] = 'Failed to verify the password strength.';
PKvc�\N��M''password/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Broyt loyniorð';
$labels['curpasswd']  = 'Nú verandi loyniorð:';
$labels['newpasswd']  = 'Nýtt loyniorð:';
$labels['confpasswd']  = 'Endurtak nýggja loyniorð:';
$messages['nopassword'] = 'Vinarliga skriva inn nýtt loyniorð.';
$messages['nocurpassword'] = 'Vinarliga skriva inn núverandi loyniorð.';
$messages['passwordincorrect'] = 'Verandi loyniorð er skeift.';
$messages['passwordinconsistency'] = 'Loyniorðini eru ikki líka, vinarliga royn aftur.';
$messages['crypterror'] = 'Kann ikki goyma nýggja loyniorð. Brongling manglar.';
$messages['connecterror'] = 'Kann ikki goyma nýtt loyniorð. Sambands feilur.';
$messages['internalerror'] = 'Kundi ikki goyma nýggja loyniorðið.';
$messages['passwordshort'] = 'Loyniorði má hvørfall verða $length tekin langt.';
$messages['passwordweak'] = 'Loyniorði má innihalda minst eitt nummar og eitt punktum tekin.';
$messages['passwordforbidden'] = 'Loyniorð inniheldur ólóglig tekin.';
$messages['firstloginchange'] = 'Hetta er tín fyrsta innriting. Vinarliga broyt títt loyniorð.';
$messages['disablednotice'] = 'Skipanin er í verandi stunduni dagførd. Av tí sama, er ikki loyvt at broyta loyniorði í løtuni. Alt skuldi verið aftur til tað vanliga skjótt. Tað muga tygum orsaka. ';
PKvc�\H�3�""password/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Keisti slaptažodį';
$labels['curpasswd']  = 'Dabartinis slaptažodis:';
$labels['newpasswd']  = 'Naujasis slaptažodis:';
$labels['confpasswd']  = 'Pakartokite naująjį slaptažodį:';
$messages['nopassword'] = 'Prašom įvesti naująjį slaptažodį.';
$messages['nocurpassword'] = 'Prašom įvesti dabartinį slaptažodį.';
$messages['passwordincorrect'] = 'Dabartinis slaptažodis neteisingas.';
$messages['passwordinconsistency'] = 'Slaptažodžiai nesutapo. Bandykite dar kartą.';
$messages['crypterror'] = 'Nepavyko įrašyti naujojo slaptažodžio. Trūksta šifravimo funkcijos.';
$messages['connecterror'] = 'Nepavyko įrašyti naujojo slaptažodžio. Ryšio klaida.';
$messages['internalerror'] = 'Nepavyko įrašyti naujojo slaptažodžio.';
$messages['passwordshort'] = 'Slaptažodis turi būti sudarytas bent iš $length simbolių.';
$messages['passwordweak'] = 'Slaptažodyje turi būti bent vienas skaitmuo ir vienas skyrybos ženklas.';
$messages['passwordtooweak'] = 'Slaptažodis pernelyg silpnas.';
$messages['passwordnoseq'] = 'Slaptažodis neturėtų būti seka, kaip, pavyzdžiui, 123456 ar QWERTY.';
$messages['passwordnocommon'] = 'Slaptažodis neturėtų būti įprastas žodis ar pavadinimas.';
$messages['passwordforbidden'] = 'Slaptažodyje rasta neleistinų simbolių.';
$messages['firstloginchange'] = 'Tai yra pirmasis jūsų prisijungimas. Prašau, pasikeiskite savo slaptažodį.';
$messages['disablednotice'] = 'Sistema šiuo metu tvarkoma ir slaptažodžio pakeitimas negalimas. Netrukus viskas turėtų grįžti į įprastą būseną. Atsiprašome dėl nepatogumų.';
$messages['passwinhistory'] = 'Šis slaptažodis jau buvo naudotas anksčiau.';
$messages['samepasswd'] = 'Naujas slaptažodis turi būti kitoks nei senasis.';
$messages['passwdexpirewarning'] = 'Įspėjimas! Jūsų slaptažodis greitai nustos galioti, pakeiskite jį iki $expirationdatetime.';
$messages['passwdexpired'] = 'Jūsų slaptažodis nebegalioja, jūs turite pakeisti jį dabar!';
$messages['passwdconstraintviolation'] = 'Slaptažodžio apribojimų pažeidimas. Tikriausiai, slaptažodis pernelyg silpnas.';
$messages['pwned_isdisclosed'] = 'Šis slaptažodis yra plačiai žinomas.';
$messages['pwned_fetcherror'] = 'Nepavyko patikrinti slaptažodžio stiprumo.';
PKvc�\5�o��password/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Alterar senha';
$labels['curpasswd']  = 'Senha actual:';
$labels['newpasswd']  = 'Nova senha:';
$labels['confpasswd']  = 'Confirmar senha:';
$messages['nopassword'] = 'Introduza a nova senha.';
$messages['nocurpassword'] = 'Introduza a senha atual.';
$messages['passwordincorrect'] = 'Senha atual incorreta.';
$messages['passwordinconsistency'] = 'As senhas não coincidem, tente novamente.';
$messages['crypterror'] = 'Não foi possível guardar a nova senha. Função de criptografia em falta.';
$messages['connecterror'] = 'Não foi possível guardar a nova senha. Erro de ligação.';
$messages['internalerror'] = 'Não foi possível guardar a nova senha.';
$messages['passwordshort'] = 'A senha deve ter pelo menos $length caracteres';
$messages['passwordweak'] = 'A senha deve incluir pelo menos um número e um sinal de pontuação.';
$messages['passwordtooweak'] = 'Senha demasiado fraca';
$messages['passwordnoseq'] = 'A senha não deve ser uma sequência como 123456 ou QWERTY.';
$messages['passwordnocommon'] = 'A senha não deve ser uma palavra ou nome comum.';
$messages['passwordforbidden'] = 'A senha contém caracteres não suportados.';
$messages['firstloginchange'] = 'Este é o seu primeiro acesso. Por favor, altere a sua senha.';
$messages['disablednotice'] = 'O sistema está em manutenção e a alteração da password não é possível neste momento. Tudo deve volta ao normal em breve. Pedimos desculpas por qualquer inconveniente.';
$messages['passwinhistory'] = 'Esta senha já foi usada anteriormente.';
$messages['samepasswd'] = 'A nova senha tem de ser diferente da antiga.';
$messages['passwdexpirewarning'] = 'Aviso! A sua senha irá expirar em breve. Deve alterá-la antes de $expirationdatetime.';
$messages['passwdexpired'] = 'A sua senha expirou. Tem de alterá-la agora!';
$messages['passwdconstraintviolation'] = 'Violação da limitação de senha. Senha provavelmente muito fraca.';
$messages['pwned_mustnotbedisclosed'] = 'A password não deve ser <a href="$href" target="_blank">vulgarmente conhecida</a>.';
$messages['pwned_isdisclosed'] = 'Esta senha é vulgarmente conhecida.';
$messages['pwned_fetcherror'] = 'Falha ao verificar a força da senha.';
PKvc�\#����password/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Password plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-password/
*/

$labels['changepasswd']  = 'Αλλαγή κωδικού';
$labels['curpasswd']  = 'Τρέχων κωδικός πρόσβασης:';
$labels['newpasswd']  = 'Νέος κωδικός πρόσβασης:';
$labels['confpasswd']  = 'Επιβέβαιωση κωδικού πρόσβασης:';
$messages['nopassword'] = 'Εισάγετε ένα νέο κωδικό.';
$messages['nocurpassword'] = 'Εισάγετε τον τρέχοντα κωδικό σας.';
$messages['passwordincorrect'] = 'Ο τρέχων κωδικός είναι λάθος.';
$messages['passwordinconsistency'] = 'Οι κωδικοί πρόσβασης δεν ταιριάζουν, προσπαθήστε ξανά.';
$messages['crypterror'] = 'Δεν μπόρεσε να αποθηκευτεί ο νέος κωδικός πρόσβασης. Η λειτουργία κρυπτογράφησης λείπει.';
$messages['connecterror'] = 'Δεν μπορεσε να αποθηκευτεί ο νέος κωδικός πρόσβασης. Σφάλμα σύνδεσης.';
$messages['internalerror'] = 'Δεν μπορεσε να αποθηκευτεί ο νέος κωδικός πρόσβασης. ';
$messages['passwordshort'] = 'Ο κωδικός πρόσβασης πρέπει να είναι τουλάχιστον $length χαρακτήρων.';
$messages['passwordweak'] = 'Ο κωδικός πρόσβασης πρέπει να περιλαμβάνει τουλάχιστον έναν αριθμό και ένα σημείο στίξης. ';
$messages['passwordtooweak'] = 'Το συνθηματικό είναι πολύ ασθενές.';
$messages['passwordnoseq'] = 'Το συνθηματικό δεν πρέπει να είναι μια ακολουθία όπως 123456 ή QWERTY.';
$messages['passwordnocommon'] = 'Το συνθηματικό δεν πρέπει να είναι μια κοινή λέξη ή όνομα.';
$messages['passwordforbidden'] = 'Ο κωδικός πρόσβασης περιέχει μη επιτρεπτούς χαρακτήρες. ';
$messages['firstloginchange'] = 'Αυτή είναι η πρώτη σας είσοδος. Παρακαλώ αλλάξτε το συνθηματικό σας.';
$messages['disablednotice'] = 'Το σύστημα βρίσκεται υπό συντήρηση και η αλλαγή του κωδικού πρόσβασης δεν είναι δυνατή αυτή τη στιγμή. Τα πάντα θα πρέπει να επανέλθουν σε κανονική λειτουργία σύντομα. Ζητούμε συγγνώμη για την όποια ταλαιπωρία.';
$messages['passwinhistory'] = 'Αυτό το συνθηματικό έχει ήδη χρησιμοποιηθεί.';
$messages['samepasswd'] = 'Το νέο συνθηματικό πρέπει να είναι διαφορετικό από το παλιό.';
$messages['passwdexpirewarning'] = 'Προσοχή! Το συνθηματικό σας θα λήξει σύντομα, αλλάξτε το πριν από $expirationdatetime.';
$messages['passwdexpired'] = 'Το συνθηματικό σας έληξε, πρέπει να το αλλάξετε τώρα!';
$messages['passwdconstraintviolation'] = 'Παραβίαση περιορισμών συνθηματικού. Το συνθηματικό είναι πιθανώς πολύ ασθενές.';
$messages['pwned_mustnotbedisclosed'] = 'Ο κωδικός πρόσβασης δεν πρέπει να είναι <a href="$href" target="_blank">ευρέως γνωστός</a>.';
$messages['pwned_isdisclosed'] = 'Αυτός ο κωδικός είναι ευρέως γνωστός.';
$messages['pwned_fetcherror'] = 'Αποτυχία επαλήθευσης της δύναμης του κωδικού πρόσβασης.';
PKvc�\����(M(Mpassword/config.inc.php.distnu�[���<?php

// Password Plugin options
// -----------------------
// A driver to use for password change. Default: "sql".
// See README file for list of supported driver names.
$config['password_driver'] = 'sql';

// A driver to use for checking password strength. Default: null (disabled).
// See README file for list of supported driver names.
$config['password_strength_driver'] = null;

// Determine whether current password is required to change password.
// Default: false.
$config['password_confirm_current'] = true;

// Require the new password to be a certain length.
// set to blank to allow passwords of any length
$config['password_minimum_length'] = 8;

// Require the new password to have at least the specified strength score.
// Note: Password strength is scored from 1 (week) to 5 (strong).
$config['password_minimum_score'] = 0;

// Enables logging of password changes into logs/password
$config['password_log'] = false;

// Array of login exceptions for which password change
// will be not available (no Password tab in Settings)
$config['password_login_exceptions'] = null;

// Array of hosts that support password changing.
// Listed hosts will feature a Password option in Settings; others will not.
// Example: ['mail.example.com', 'mail2.example.org'];
// Default is NULL (all hosts supported).
$config['password_hosts'] = null;

// Enables saving the new password even if it matches the old password. Useful
// for upgrading the stored passwords after the encryption scheme has changed.
$config['password_force_save'] = false;

// Enables forcing new users to change their password at their first login.
$config['password_force_new_user'] = false;

// Password hashing/crypting algorithm.
// Possible options: des-crypt, ext-des-crypt, md5-crypt, blowfish-crypt,
// sha256-crypt, sha512-crypt, md5, sha, smd5, ssha, ssha256, ssha512, samba, ad, dovecot, clear.
// Also supported are password_hash() algoriths: hash-bcrypt, hash-argon2i, hash-argon2id.
// Default: 'clear' (no hashing)
// For details see password::hash_password() method.
$config['password_algorithm'] = 'clear';

// Additional options for password hashing function(s).
// For password_hash()-based passwords see https://www.php.net/manual/en/function.password-hash.php
// It can be used to set the Blowfish algorithm cost, e.g. ['cost' => 12]
$config['password_algorithm_options'] = [];

// Password prefix (e.g. {CRYPT}, {SHA}) for passwords generated
// using password_algorithm above. Default: empty.
$config['password_algorithm_prefix'] = '';

// Path for dovecotpw/doveadm-pw (if not in the $PATH).
// Used for password_algorithm = 'dovecot'.
// $config['password_dovecotpw'] = '/usr/local/sbin/doveadm pw'; // for dovecot-2.x
$config['password_dovecotpw'] = '/usr/local/sbin/dovecotpw'; // for dovecot-1.x

// Dovecot password scheme.
// Used for password_algorithm = 'dovecot'.
$config['password_dovecotpw_method'] = 'CRAM-MD5';

// Enables use of password with method prefix, e.g. {MD5}$1$LUiMYWqx$fEkg/ggr/L6Mb2X7be4i1/
// when using password_algorithm=dovecot
$config['password_dovecotpw_with_method'] = false;

// Number of rounds for the sha256 and sha512 crypt hashing algorithms.
// Must be at least 1000. If not set, then the number of rounds is left up
// to the crypt() implementation. On glibc this defaults to 5000.
// Be aware, the higher the value, the longer it takes to generate the password hashes.
//$config['password_crypt_rounds'] = 50000;

// This option temporarily disables the password change functionality.
// Use it when the users database server is in maintenance mode or something like that.
// You can set it to TRUE/FALSE or a text describing the reason
// which will replace the default.
$config['password_disabled'] = false;

// Various drivers/setups use different format of the username.
// This option allows you to force specified format use. Default: '%u'.
// Supported variables:
//     %u - full username,
//     %l - the local part of the username (in case the username is an email address)
//     %d - the domain part of the username (in case the username is an email address)
// Note: This may no apply to some drivers implementing their own rules, e.g. sql.
$config['password_username_format'] = '%u';

// Options passed when creating Guzzle HTTP client, used to access various external APIs.
// This will overwrite global http_client settings. For example:
// [
//   'timeout' => 10,
//   'proxy' => 'tcp://localhost:8125',
// ]
$config['password_http_client'] = [];


// SQL Driver options
// ------------------
// PEAR database DSN for performing the query. By default
// Roundcube DB settings are used.
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
$config['password_db_dsn'] = '';

// The SQL query used to change the password.
// The query can contain the following macros that will be expanded as follows:
//      %p is replaced with the plaintext new password
//      %P is replaced with the crypted/hashed new password
//         according to configured password_algorithm
//      %o is replaced with the old (current) password
//      %O is replaced with the crypted/hashed old (current) password
//         according to configured password_algorithm
//      %h is replaced with the imap host (from the session info)
//      %u is replaced with the username (from the session info)
//      %l is replaced with the local part of the username
//         (in case the username is an email address)
//      %d is replaced with the domain part of the username
//         (in case the username is an email address)
// Escaping of macros is handled by this module.
// Default: "SELECT update_passwd(%P, %u)"
$config['password_query'] = 'SELECT update_passwd(%P, %u)';

// By default domains in variables are using unicode.
// Enable this option to use punycoded names
$config['password_idn_ascii'] = false;


// Poppassd Driver options
// -----------------------
// The host which changes the password (default: localhost)
// Supported replacement variables:
//   %n - hostname ($_SERVER['SERVER_NAME'])
//   %t - hostname without the first part
//   %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
//   %h - IMAP host
//   %z - IMAP domain without first part
//   %s - domain name after the '@' from e-mail address provided at login screen
$config['password_pop_host'] = 'localhost';

// TCP port used for poppassd connections (default: 106)
$config['password_pop_port'] = 106;


// SASL Driver options
// -------------------
// Additional arguments for the saslpasswd2 call
$config['password_saslpasswd_args'] = '';


// LDAP, LDAP_SIMPLE and LDAP_EXOP Driver options
// -----------------------------------
// LDAP server name to connect to.
// You can provide one or several hosts in an array in which case the hosts are tried from left to right.
// Example: ['ldap1.example.com', 'ldap2.example.com'];
// Default: 'localhost'
$config['password_ldap_host'] = 'localhost';

// LDAP server port to connect to
// Default: '389'
$config['password_ldap_port'] = '389';

// TLS is started after connecting
// Using TLS for password modification is recommended.
// Default: false
$config['password_ldap_starttls'] = false;

// LDAP version
// Default: '3'
$config['password_ldap_version'] = '3';

// LDAP base name (root directory)
// Example: 'dc=example,dc=com'
$config['password_ldap_basedn'] = 'dc=example,dc=com';

// LDAP connection method
// There are two connection methods for changing a user's LDAP password.
// 'user': use user credential (recommended, require password_confirm_current=true)
// 'admin': use admin credential (this mode require password_ldap_adminDN and password_ldap_adminPW)
// Default: 'user'
$config['password_ldap_method'] = 'user';

// LDAP Admin DN
// Used only in admin connection mode
// Default: null
$config['password_ldap_adminDN'] = null;

// LDAP Admin Password
// Used only in admin connection mode
// Default: null
$config['password_ldap_adminPW'] = null;

// LDAP user DN mask
// The user's DN is mandatory and as we only have his login,
// we need to re-create his DN using a mask
// '%login' will be replaced by the current roundcube user's login
// '%name' will be replaced by the current roundcube user's name part
// '%domain' will be replaced by the current roundcube user's domain part
// '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
// Example: 'uid=%login,ou=people,dc=example,dc=com'
$config['password_ldap_userDN_mask'] = 'uid=%login,ou=people,dc=example,dc=com';

// LDAP search DN
// The DN roundcube should bind with to find out user's DN
// based on his login. Note that you should comment out the default
// password_ldap_userDN_mask setting for this to take effect.
// Use this if you cannot specify a general template for user DN with
// password_ldap_userDN_mask. You need to perform a search based on
// users login to find his DN instead. A common reason might be that
// your users are placed under different ou's like engineering or
// sales which cannot be derived from their login only.
$config['password_ldap_searchDN'] = 'cn=roundcube,ou=services,dc=example,dc=com';

// LDAP search password
// If password_ldap_searchDN is set, the password to use for
// binding to search for user's DN. Note that you should comment out the default
// password_ldap_userDN_mask setting for this to take effect.
// Warning: Be sure to set appropriate permissions on this file so this password
// is only accessible to roundcube and don't forget to restrict roundcube's access to
// your directory as much as possible using ACLs. Should this password be compromised
// you want to minimize the damage.
$config['password_ldap_searchPW'] = 'secret';

// LDAP search base
// If password_ldap_searchDN is set, the base to search in using the filter below.
// Note that you should comment out the default password_ldap_userDN_mask setting
// for this to take effect.
$config['password_ldap_search_base'] = 'ou=people,dc=example,dc=com';

// LDAP search filter
// If password_ldap_searchDN is set, the filter to use when
// searching for user's DN. Note that you should comment out the default
// password_ldap_userDN_mask setting for this to take effect.
// '%login' will be replaced by the current roundcube user's login
// '%name' will be replaced by the current roundcube user's name part
// '%domain' will be replaced by the current roundcube user's domain part
// '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
// Example: '(uid=%login)'
// Example: '(&(objectClass=posixAccount)(uid=%login))'
$config['password_ldap_search_filter'] = '(uid=%login)';

// LDAP password hash type
// Standard LDAP encryption type which must be one of: crypt,
// ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, ad, cram-md5 (dovecot style) or clear.
// Set to 'default' if you want to use method specified in password_algorithm option above.
// Multiple password Values can be generated by concatenating encodings with a +. E.g. 'cram-md5+crypt'
// Default: 'crypt'.
$config['password_ldap_encodage'] = 'crypt';

// LDAP password attribute
// Name of the ldap's attribute used for storing user password
// Default: 'userPassword'
$config['password_ldap_pwattr'] = 'userPassword';

// LDAP password force replace
// Force LDAP replace in cases where ACL allows only replace not read
// See http://pear.php.net/package/Net_LDAP2/docs/latest/Net_LDAP2/Net_LDAP2_Entry.html#methodreplace
// Default: true
$config['password_ldap_force_replace'] = true;

// LDAP Password Last Change Date
// Some places use an attribute to store the date of the last password change
// The date is measured in "days since epoch" (an integer value)
// Whenever the password is changed, the attribute will be updated if set (e.g. shadowLastChange)
$config['password_ldap_lchattr'] = '';

// LDAP Samba password attribute, e.g. sambaNTPassword
// Name of the LDAP's Samba attribute used for storing user password
$config['password_ldap_samba_pwattr'] = '';

// LDAP Samba Password Last Change Date attribute, e.g. sambaPwdLastSet
// Some places use an attribute to store the date of the last password change
// The date is measured in "seconds since epoch" (an integer value)
// Whenever the password is changed, the attribute will be updated if set
$config['password_ldap_samba_lchattr'] = '';

// LDAP PPolicy Driver options
// -----------------------------------

// LDAP Change password command - filename of the perl script
// Example: 'change_ldap_pass.pl'
$config['password_ldap_ppolicy_cmd'] = 'change_ldap_pass.pl';

// LDAP URI
// Example: 'ldap://ldap.example.com/ ldaps://ldap2.example.com:636/'
$config['password_ldap_ppolicy_uri'] = 'ldap://localhost/';

// LDAP base name (root directory)
// Example: 'dc=example,dc=com'
$config['password_ldap_ppolicy_basedn'] = 'dc=example,dc=com';

$config['password_ldap_ppolicy_searchDN'] = 'cn=someuser,dc=example,dc=com';

$config['password_ldap_ppolicy_searchPW'] = 'secret';

// LDAP search filter
// Example: '(uid=%login)'
// Example: '(&(objectClass=posixAccount)(uid=%login))'
$config['password_ldap_ppolicy_search_filter'] = '(uid=%login)';

// CA Certificate file if in URI is LDAPS connection
$config['password_ldap_ppolicy_cafile'] = '/etc/ssl/cacert.crt';



// DirectAdmin Driver options
// --------------------------
// The host which changes the password
// Use 'ssl://host' instead of 'tcp://host' when running DirectAdmin over SSL.
// The host can contain the following macros that will be expanded as follows:
//     %h is replaced with the imap host (from the session info)
//     %d is replaced with the domain part of the username (if the username is an email)
$config['password_directadmin_host'] = 'tcp://localhost';

// TCP port used for DirectAdmin connections
$config['password_directadmin_port'] = 2222;


// vpopmaild Driver options
// -----------------------
// The host which changes the password
$config['password_vpopmaild_host'] = 'localhost';

// TCP port used for vpopmaild connections
$config['password_vpopmaild_port'] = 89;

// Timeout used for the connection to vpopmaild (in seconds)
$config['password_vpopmaild_timeout'] = 10;


// cPanel Driver options
// ---------------------
// The cPanel Host name
$config['password_cpanel_host'] = 'host.domain.com';

// The cPanel port to use
$config['password_cpanel_port'] = 2096;


// XIMSS (Communigate server) Driver options
// -----------------------------------------
// Host name of the Communigate server
$config['password_ximss_host'] = 'mail.example.com';

// XIMSS port on Communigate server
$config['password_ximss_port'] = 11024;


// chpasswd Driver options
// ---------------------
// Command to use (see "Sudo setup" in README)
$config['password_chpasswd_cmd'] = 'sudo /usr/sbin/chpasswd 2> /dev/null';


// XMail Driver options
// ---------------------
$config['xmail_host'] = 'localhost';
$config['xmail_user'] = 'YourXmailControlUser';
$config['xmail_pass'] = 'YourXmailControlPass';
$config['xmail_port'] = 6017;


// hMail Driver options
// -----------------------
// Remote hMailServer configuration
// true:  HMailserver is on a remote box (php.ini: com.allow_dcom = true)
// false: Hmailserver is on same box as PHP
$config['hmailserver_remote_dcom'] = false;
// Windows credentials
$config['hmailserver_server'] = [
    'Server'   => 'localhost',      // hostname or ip address
    'Username' => 'administrator',  // windows username
    'Password' => 'password'        // windows user password
];


// pw_usermod Driver options
// --------------------------
// Use comma delimited exlist to disable password change for users.
// See "Sudo setup" in README file.
$config['password_pw_usermod_cmd'] = 'sudo /usr/sbin/pw usermod -h 0 -n';


// DBMail Driver options
// -------------------
// Additional arguments for the dbmail-users call
$config['password_dbmail_args'] = '-p sha512';


// Expect Driver options
// ---------------------
// Location of expect binary
$config['password_expect_bin'] = '/usr/bin/expect';

// Location of expect script (see helpers/passwd-expect)
$config['password_expect_script'] = '';

// Arguments for the expect script. See the helpers/passwd-expect file for details.
// This is probably a good starting default:
//   -telnet -host localhost -output /tmp/passwd.log -log /tmp/passwd.log
$config['password_expect_params'] = '';


// smb Driver options
// ---------------------
// Samba host (default: localhost)
// Supported replacement variables:
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
$config['password_smb_host'] = 'localhost';
// Location of smbpasswd binary (default: /usr/bin/smbpasswd)
$config['password_smb_cmd'] = '/usr/bin/smbpasswd';

// gearman driver options
// ---------------------
// Gearman host (default: localhost)
$config['password_gearman_host'] = 'localhost';


// Plesk/PPA Driver options
// --------------------
// You need to allow RCP for IP of roundcube-server in Plesk/PPA Panel

// Plesk RCP Host
$config['password_plesk_host'] = '10.0.0.5';

// Plesk RPC Username
$config['password_plesk_user'] = 'admin';

// Plesk RPC Password
$config['password_plesk_pass'] = 'password';

// Plesk RPC Port
$config['password_plesk_rpc_port'] = '8443';

// Plesk RPC Path
$config['password_plesk_rpc_path'] = 'enterprise/control/agent.php';


// kpasswd Driver options
// ---------------------
// Command to use
$config['password_kpasswd_cmd'] = '/usr/bin/kpasswd';


// Modoboa Driver options
// ---------------------
// put token number from Modoboa server
$config['password_modoboa_api_token'] = '';


// Mail-in-a-Box Driver options
// ----------------------------
// the url to the control panel of Mail-in-a-Box, e.g. https://box.example.com/admin/
$config['password_miab_url'] = '';
// name (email) of the admin user used to access api
$config['password_miab_user'] = '';
// password of the admin user used to access api
$config['password_miab_pass'] = '';


// TinyCP
// --------------
// TinyCP host, port, user and pass.
$config['password_tinycp_host'] = '';
$config['password_tinycp_port'] = '';
$config['password_tinycp_user'] = '';
$config['password_tinycp_pass'] = '';

// HTTP-API Driver options
// ---------------------

// Base URL of password change API. HTTPS recommended.
$config['password_httpapi_url'] = 'https://passwordserver.example.org';

// Method (also affects how vars are sent). Default: POST.
// GET is not recommended as passwords will appears in the remote webserver's access log
$config['password_httpapi_method'] = 'POST';

// GET or POST variable in which to put the username
$config['password_httpapi_var_user'] = 'user';

// GET or POST variable in which to put the current password
$config['password_httpapi_var_curpass'] = 'curpass';

// GET or POST variable in which to put the new password
$config['password_httpapi_var_newpass'] = 'newpass';

// HTTP codes other than 2xx are assumed to mean the password changed failed.
// Optionally, if set, this variable additionally checks the body of the 2xx response to
// confirm the change. It's a preg_match regular expression.
$config['password_httpapi_expect'] = '/^ok$/i';


// dovecot_passwdfile
// ------------------
$config['password_dovecot_passwdfile_path'] = '/etc/mail/imap.passwd';


// Mailcow driver options
// ----------------------
$config['password_mailcow_api_host'] = 'localhost';
$config['password_mailcow_api_token'] = '';
PKvc�\�n9}w}wpassword/password.phpnu�[���<?php

/**
 * Password Plugin for Roundcube
 *
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

define('PASSWORD_CRYPT_ERROR', 1);
define('PASSWORD_ERROR', 2);
define('PASSWORD_CONNECT_ERROR', 3);
define('PASSWORD_IN_HISTORY', 4);
define('PASSWORD_CONSTRAINT_VIOLATION', 5);
define('PASSWORD_COMPARE_CURRENT', 6);
define('PASSWORD_COMPARE_NEW', 7);
define('PASSWORD_SUCCESS', 0);

/**
 * Change password plugin
 *
 * Plugin that adds functionality to change a users password.
 * It provides common functionality and user interface and supports
 * several backends to finally update the password.
 *
 * For installation and configuration instructions please read the README file.
 *
 * @author Aleksander Machniak
 */
class password extends rcube_plugin
{
    public $task    = '?(?!logout).*';
    public $noframe = true;
    public $noajax  = true;

    private $newuser = false;
    private $drivers = [];
    private $rc;


    function init()
    {
        $this->rc = rcmail::get_instance();

        $this->load_config();

        // update deprecated password_require_nonalpha option removed 20181007
        if ($this->rc->config->get('password_minimum_score') === null && $this->rc->config->get('password_require_nonalpha')) {
            $this->rc->config->set('password_minimum_score', 2);
        }

        if ($this->rc->task == 'settings') {
            if (!$this->check_host_login_exceptions()) {
                return;
            }

            $this->add_texts('localization/');

            $this->add_hook('settings_actions', [$this, 'settings_actions']);

            $this->register_action('plugin.password', [$this, 'password_init']);
            $this->register_action('plugin.password-save', [$this, 'password_save']);
        }

        if ($this->rc->config->get('password_force_new_user')) {
            if ($this->rc->config->get('newuserpassword') && $this->check_host_login_exceptions()) {
                if (!($this->rc->task == 'settings' && strpos($this->rc->action, 'plugin.password') === 0)) {
                    $this->rc->output->command('redirect', '?_task=settings&_action=plugin.password&_first=1', false);
                }
            }

            $this->add_hook('user_create', [$this, 'user_create']);
            $this->add_hook('login_after', [$this, 'login_after']);
        }
    }

    function settings_actions($args)
    {
        // register as settings action
        $args['actions'][] = [
            'action' => 'plugin.password',
            'class'  => 'password',
            'label'  => 'password',
            'title'  => 'changepasswd',
            'domain' => 'password',
        ];

        return $args;
    }

    function password_init()
    {
        $this->register_handler('plugin.body', [$this, 'password_form']);

        $this->rc->output->set_pagetitle($this->gettext('changepasswd'));

        if (rcube_utils::get_input_value('_first', rcube_utils::INPUT_GET)) {
            $this->rc->output->command('display_message', $this->gettext('firstloginchange'), 'notice');
        }
        else if (!empty($_SESSION['password_expires'])) {
            if ($_SESSION['password_expires'] == 1) {
                $this->rc->output->command('display_message', $this->gettext('passwdexpired'), 'error');
            }
            else {
                $this->rc->output->command('display_message', $this->gettext([
                        'name' => 'passwdexpirewarning',
                        'vars' => ['expirationdatetime' => $_SESSION['password_expires']]
                    ]), 'warning');
            }
        }

        $this->rc->output->send('plugin');
    }

    function password_save()
    {
        $this->register_handler('plugin.body', [$this, 'password_form']);

        $this->rc->output->set_pagetitle($this->gettext('changepasswd'));

        $confirm         = $this->rc->config->get('password_confirm_current');
        $required_length = (int) $this->rc->config->get('password_minimum_length', 8);
        $force_save      = $this->rc->config->get('password_force_save');

        if (($confirm && !isset($_POST['_curpasswd'])) || !isset($_POST['_newpasswd']) || !strlen($_POST['_newpasswd'])) {
            $this->rc->output->command('display_message', $this->gettext('nopassword'), 'error');
        }
        else {
            $charset    = strtoupper($this->rc->config->get('password_charset', 'UTF-8'));
            $rc_charset = strtoupper($this->rc->output->get_charset());

            $sesspwd = $this->rc->decrypt($_SESSION['password']);
            $curpwd = $confirm ? rcube_utils::get_input_string('_curpasswd', rcube_utils::INPUT_POST, true, $charset) : $sesspwd;
            $newpwd = rcube_utils::get_input_string('_newpasswd', rcube_utils::INPUT_POST, true);
            $conpwd = rcube_utils::get_input_string('_confpasswd', rcube_utils::INPUT_POST, true);

            // check allowed characters according to the configured 'password_charset' option
            // by converting the password entered by the user to this charset and back to UTF-8
            $orig_pwd = $newpwd;
            $chk_pwd  = rcube_charset::convert($orig_pwd, $rc_charset, $charset);
            $chk_pwd  = rcube_charset::convert($chk_pwd, $charset, $rc_charset);

            // We're doing this for consistence with Roundcube core
            $newpwd = rcube_charset::convert($newpwd, $rc_charset, $charset);
            $conpwd = rcube_charset::convert($conpwd, $rc_charset, $charset);

            if ($chk_pwd != $orig_pwd || preg_match('/[\x00-\x1F\x7F]/', $newpwd)) {
                $this->rc->output->command('display_message', $this->gettext('passwordforbidden'), 'error');
            }
            // other passwords validity checks
            else if ($conpwd != $newpwd) {
                $this->rc->output->command('display_message', $this->gettext('passwordinconsistency'), 'error');
            }
            else if ($confirm && ($res = $this->_compare($sesspwd, $curpwd, PASSWORD_COMPARE_CURRENT))) {
                $this->rc->output->command('display_message', $res, 'error');
            }
            else if ($required_length && strlen($newpwd) < $required_length) {
                $this->rc->output->command('display_message', $this->gettext(
                    ['name' => 'passwordshort', 'vars' => ['length' => $required_length]]), 'error');
            }
            else if ($res = $this->_check_strength($newpwd)) {
                $this->rc->output->command('display_message', $res, 'error');
            }
            // password is the same as the old one, warn user, return error
            else if (!$force_save && ($res = $this->_compare($sesspwd, $newpwd, PASSWORD_COMPARE_NEW))) {
                $this->rc->output->command('display_message', $res, 'error');
            }
            // try to save the password
            else if (!($res = $this->_save($curpwd, $newpwd))) {
                $this->rc->output->command('display_message', $this->gettext('successfullysaved'), 'confirmation');

                // allow additional actions after password change (e.g. reset some backends)
                $plugin = $this->rc->plugins->exec_hook('password_change', [
                        'old_pass' => $curpwd,
                        'new_pass' => $newpwd
                ]);

                // Reset session password
                $_SESSION['password'] = $this->rc->encrypt($plugin['new_pass']);

                if ($this->rc->config->get('newuserpassword')) {
                    $this->rc->user->save_prefs(['newuserpassword' => false]);
                }

                // Log password change
                if ($this->rc->config->get('password_log')) {
                    rcube::write_log('password', sprintf('Password changed for user %s (ID: %d) from %s',
                        $this->rc->get_user_name(), $this->rc->user->ID, rcube_utils::remote_ip()));
                }

                // Remove expiration date/time
                $this->rc->session->remove('password_expires');
            }
            else {
                $this->rc->output->command('display_message', $res, 'error');
            }
        }

        $this->rc->overwrite_action('plugin.password');
        $this->rc->output->send('plugin');
    }

    function password_form()
    {
        // add some labels to client
        $this->rc->output->add_label(
            'password.nopassword',
            'password.nocurpassword',
            'password.passwordinconsistency'
        );

        $form_disabled = $this->rc->config->get('password_disabled');

        $this->rc->output->set_env('product_name', $this->rc->config->get('product_name'));
        $this->rc->output->set_env('password_disabled', !empty($form_disabled));

        $table = new html_table(['cols' => 2, 'class' => 'propform']);

        if ($this->rc->config->get('password_confirm_current')) {
            // show current password selection
            $field_id = 'curpasswd';
            $input_curpasswd = new html_passwordfield([
                    'name'         => '_curpasswd',
                    'id'           => $field_id,
                    'size'         => 20,
                    'autocomplete' => 'off',
            ]);

            $table->add('title', html::label($field_id, rcube::Q($this->gettext('curpasswd'))));
            $table->add(null, $input_curpasswd->show());
        }

        // show new password selection
        $field_id = 'newpasswd';
        $input_newpasswd = new html_passwordfield([
                'name'         => '_newpasswd',
                'id'           => $field_id,
                'size'         => 20,
                'autocomplete' => 'off',
        ]);

        $table->add('title', html::label($field_id, rcube::Q($this->gettext('newpasswd'))));
        $table->add(null, $input_newpasswd->show());

        // show confirm password selection
        $field_id = 'confpasswd';
        $input_confpasswd = new html_passwordfield([
                'name'         => '_confpasswd',
                'id'           => $field_id,
                'size'         => 20,
                'autocomplete' => 'off',
        ]);

        $table->add('title', html::label($field_id, rcube::Q($this->gettext('confpasswd'))));
        $table->add(null, $input_confpasswd->show());

        $rules = '';

        $required_length = (int) $this->rc->config->get('password_minimum_length', 8);
        if ($required_length > 0) {
            $rules .= html::tag('li', ['class' => 'required-length d-block'], $this->gettext([
                'name' => 'passwordshort',
                'vars' => ['length' => $required_length]
            ]));
        }

        if ($msgs = $this->_strength_rules()) {
            foreach ($msgs as $msg) {
                $rules .= html::tag('li', ['class' => 'strength-rule d-block'], $msg);
            }
        }

        if (!empty($rules)) {
            $rules = html::tag('ul', ['id' => 'ruleslist', 'class' => 'hint proplist'], $rules);
        }

        $disabled_msg = '';
        if ($form_disabled) {
            $disabled_msg = is_string($form_disabled) ? $form_disabled : $this->gettext('disablednotice');
            $disabled_msg = html::div(['class' => 'boxwarning', 'id' => 'password-notice'], $disabled_msg);
        }

        $submit_button = $this->rc->output->button([
                'command' => 'plugin.password-save',
                'class'   => 'button mainaction submit',
                'label'   => 'save',
        ]);
        $form_buttons = html::p(['class' => 'formbuttons footerleft'], $submit_button);

        $this->rc->output->add_gui_object('passform', 'password-form');

        $this->include_script('password.js');

        $form = $this->rc->output->form_tag([
                'id'     => 'password-form',
                'name'   => 'password-form',
                'method' => 'post',
                'action' => './?_task=settings&_action=plugin.password-save',
            ],
            $disabled_msg . $table->show() . $rules
        );

        return html::div(['id' => 'prefs-title', 'class' => 'boxtitle'], $this->gettext('changepasswd'))
            . html::div(['class' => 'box formcontainer scroller'],
                html::div(['class' => 'boxcontent formcontent'], $form) . $form_buttons
            );
    }

    private function _compare($curpwd, $newpwd, $type)
    {
        $driver = $this->_load_driver();

        if (!$driver) {
            $result = $this->gettext('internalerror');
        }
        else if (method_exists($driver, 'compare')) {
            $result = $driver->compare($curpwd, $newpwd, $type);
        }
        else {
            switch ($type) {
            case PASSWORD_COMPARE_CURRENT:
                $result = $curpwd != $newpwd ? $this->gettext('passwordincorrect') : null;
                break;
            case PASSWORD_COMPARE_NEW:
                $result = $curpwd == $newpwd ? $this->gettext('samepasswd') : null;
                break;
            default:
                $result = $this->gettext('internalerror');
            }
        }

        return $result;
    }

    private function _strength_rules()
    {
        $result = null;

        if (($driver = $this->_load_driver('strength')) && method_exists($driver, 'strength_rules')) {
            $result = $driver->strength_rules();
        }
        else if ($this->rc->config->get('password_minimum_score') > 1) {
            $result = $this->gettext('passwordweak');
        }

        if (!is_array($result)) {
            $result = [$result];
        }

        return $result;
    }

    private function _check_strength($passwd)
    {
        $min_score = $this->rc->config->get('password_minimum_score');

        if (!$min_score) {
            return;
        }

        if (($driver = $this->_load_driver('strength')) && method_exists($driver, 'check_strength')) {
            list($score, $reason) = $driver->check_strength($passwd);
        }
        else {
            $score = (!preg_match("/[0-9]/", $passwd) || !preg_match("/[^A-Za-z0-9]/", $passwd)) ? 1 : 5;
        }

        if ($score < $min_score) {
            return $this->gettext('passwordtooweak') . (!empty($reason) ? " $reason" : '');
        }
    }

    private function _save($curpass, $passwd)
    {
        if (!($driver = $this->_load_driver())) {
            return $this->gettext('internalerror');
        }

        // Make sure the current user password is still valid
        // by logging in to the IMAP server (#8142)
        if (!$this->rc->get_storage()->check_connection()) {
            return $this->gettext('internalerror');
        }

        $result  = $driver->save($curpass, $passwd, self::username());
        $message = '';

        if (is_array($result)) {
            $message = $result['message'];
            $result  = $result['code'];
        }

        switch ($result) {
            case PASSWORD_SUCCESS:
                return;
            case PASSWORD_CRYPT_ERROR:
                $reason = $this->gettext('crypterror');
                break;
            case PASSWORD_CONNECT_ERROR:
                $reason = $this->gettext('connecterror');
                break;
            case PASSWORD_IN_HISTORY:
                $reason = $this->gettext('passwdinhistory');
                break;
            case PASSWORD_CONSTRAINT_VIOLATION:
                $reason = $this->gettext('passwdconstraintviolation');
                break;
            case PASSWORD_ERROR:
            default:
                $reason = $this->gettext('internalerror');
        }

        if ($message) {
            $reason .= ' ' . $message;
        }

        return $reason;
    }

    private function _load_driver($type = 'password')
    {
        if (!($type && $driver = $this->rc->config->get('password_' . $type . '_driver'))) {
            $driver = $this->rc->config->get('password_driver', 'sql');
        }

        if (empty($this->drivers[$type])) {
            $class  = "rcube_{$driver}_password";
            $file = $this->home . "/drivers/$driver.php";

            if (!file_exists($file)) {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Driver file does not exist ($file)"
                    ], true, false
                );
                return false;
            }

            include_once $file;

            if (!class_exists($class, false) || (!method_exists($class, 'save') && !method_exists($class, 'check_strength'))) {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Broken driver $driver"
                    ], true, false
                );
                return false;
            }

            $this->drivers[$type] = new $class;
        }

        return $this->drivers[$type];
    }

    function user_create($args)
    {
        $this->newuser = true;
        return $args;
    }

    function login_after($args)
    {
        if ($this->newuser && $this->check_host_login_exceptions()) {
            $this->rc->user->save_prefs(['newuserpassword' => true]);

            $args['_task']   = 'settings';
            $args['_action'] = 'plugin.password';
            $args['_first']  = 'true';
        }

        return $args;
    }

    // Check if host and login is allowed to change the password, false = not allowed, true = not allowed
    private function check_host_login_exceptions()
    {
        // Host exceptions
        $hosts = $this->rc->config->get('password_hosts');
        if (!empty($hosts) && !in_array($_SESSION['storage_host'], (array) $hosts)) {
            return false;
        }

        // Login exceptions
        if ($exceptions = $this->rc->config->get('password_login_exceptions')) {
            $exceptions = array_map('trim', (array) $exceptions);
            $exceptions = array_filter($exceptions);
            $username   = $_SESSION['username'];

            foreach ($exceptions as $ec) {
                if ($username === $ec) {
                    return false;
                }
            }
        }

        return true;
    }

    /**
     * Hashes a password and returns the hash based on the specified method
     *
     * Parts of the code originally from the phpLDAPadmin development team
     * http://phpldapadmin.sourceforge.net/
     *
     * @param string      $password Clear password
     * @param string      $method   Hashing method
     * @param bool|string $prefixed Prefix string or TRUE to add a default prefix
     *
     * @return string Hashed password
     */
    public static function hash_password($password, $method = '', $prefixed = true)
    {
        $method  = strtolower($method);
        $rcmail  = rcmail::get_instance();
        $prefix  = '';
        $crypted = null;
        $options = (array) $rcmail->config->get('password_algorithm_options', []);

        if (empty($method) || $method == 'default') {
            $method   = $rcmail->config->get('password_algorithm');
            $prefixed = $rcmail->config->get('password_algorithm_prefix');
        }

        switch ($method) {
        case 'des':
        case 'des-crypt':
            $crypted = crypt($password, rcube_utils::random_bytes(2));
            $prefix  = '{CRYPT}';
            break;

        case 'ext_des': // for BC
        case 'ext-des-crypt':
            $crypted = crypt($password, '_' . rcube_utils::random_bytes(8));
            $prefix  = '{CRYPT}';
            break;

        case 'md5crypt': // for BC
        case 'md5-crypt':
            $crypted = crypt($password, '$1$' . rcube_utils::random_bytes(9));
            $prefix  = '{MD5-CRYPT}';
            break;

        case 'sha256-crypt':
            $rounds = (int) $rcmail->config->get('password_crypt_rounds');
            $prefix = '$5$';

            if ($rounds > 1000) {
                $prefix .= 'rounds=' . $rounds . '$';
            }

            $crypted = crypt($password, $prefix . rcube_utils::random_bytes(16));
            $prefix  = '{SHA256-CRYPT}';
            break;

        case 'sha512-crypt':
            $rounds = (int) $rcmail->config->get('password_crypt_rounds');
            $prefix = '$6$';

            if ($rounds > 1000) {
                $prefix .= 'rounds=' . $rounds . '$';
            }

            $crypted = crypt($password, $prefix . rcube_utils::random_bytes(16));
            $prefix  = '{SHA512-CRYPT}';
            break;

        case 'blowfish': // for BC
        case 'blowfish-crypt':
            $cost   = (int) ($options['cost'] ?? $rcmail->config->get('password_blowfish_cost'));
            $cost   = $cost < 4 || $cost > 31 ? 12 : $cost;
            $prefix = sprintf('$2y$%02d$', $cost);

            $crypted = crypt($password, $prefix . rcube_utils::random_bytes(22));
            $prefix  = '{BLF-CRYPT}';
            break;

        case 'md5':
            $crypted = base64_encode(pack('H*', md5($password)));
            $prefix  = '{MD5}';
            break;

        case 'sha':
            if (function_exists('sha1')) {
                $crypted = pack('H*', sha1($password));
            }
            else if (function_exists('hash')) {
                $crypted = hash('sha1', $password, true);
            }
            else {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Your PHP installation does not have the hash() nor sha1() function"
                    ], true, true
                );
            }

            $crypted = base64_encode($crypted);
            $prefix = '{SHA}';
            break;

        case 'ssha':
            $salt = rcube_utils::random_bytes(8);

            if (function_exists('sha1')) {
                $salt    = substr(pack("H*", sha1($salt . $password)), 0, 4);
                $crypted = sha1($password . $salt, true);
            }
            else if (function_exists('hash')) {
                $salt    = substr(pack("H*", hash('sha1', $salt . $password)), 0, 4);
                $crypted = hash('sha1', $password . $salt, true);
            }
            else {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Your PHP installation does not have the hash() nor sha1() function"
                   ], true, true
               );
            }

            $crypted = base64_encode($crypted . $salt);
            $prefix  = '{SSHA}';
            break;

        // base64 encoded ssha256 for mailcow
        case 'ssha256':
            $salt = rcube_utils::random_bytes(8);

            if (function_exists('hash')) {
                $salt    = substr(pack("H*", hash('sha256', $salt . $password)), 0, 4);
                $crypted = hash('sha256', $password . $salt, true);
            }
            else {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Your PHP installation does not have the hash() function"
                   ], true, true
               );
            }

            $crypted = base64_encode($crypted . $salt);
            $prefix  = '{SSHA256}';
            break;

        case 'ssha512':
            $salt = rcube_utils::random_bytes(8);

            if (function_exists('hash')) {
                $salt    = substr(pack("H*", hash('sha512', $salt . $password)), 0, 4);
                $crypted = hash('sha512', $password . $salt, true);
            }
            else {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Your PHP installation does not have the hash() function"
                    ], true, true
                );
            }

            $crypted = base64_encode($crypted . $salt);
            $prefix  = '{SSHA512}';
            break;

        case 'smd5':
            $salt = rcube_utils::random_bytes(8);

            if (function_exists('hash')) {
                $salt    = substr(pack("H*", hash('md5', $salt . $password)), 0, 4);
                $crypted = hash('md5', $password . $salt, true);
            }
            else {
                $salt    = substr(pack("H*", md5($salt . $password)), 0, 4);
                $crypted = md5($password . $salt, true);
            }

            $crypted = base64_encode($crypted . $salt);
            $prefix  = '{SMD5}';
            break;

        case 'samba':
            if (function_exists('hash')) {
                $crypted = hash('md4', rcube_charset::convert($password, RCUBE_CHARSET, 'UTF-16LE'));
                $crypted = strtoupper($crypted);
            }
            else {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Your PHP installation does not have hash() function"
                    ], true, true
                );
            }
            break;

        case 'ad':
            $crypted = rcube_charset::convert('"' . $password . '"', RCUBE_CHARSET, 'UTF-16LE');
            break;

        case 'dovecot':
            if (!($dovecotpw = $rcmail->config->get('password_dovecotpw'))) {
                $dovecotpw = 'dovecotpw';
            }
            if (!($method = $rcmail->config->get('password_dovecotpw_method'))) {
                $method = 'CRAM-MD5';
            }

            $command = "$dovecotpw -s '$method'";

            $spec = [0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => ['pipe', 'w']];
            $pipe = proc_open($command, $spec, $pipes);

            if (!$pipe) {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Failed to execute command: $command"
                    ], true, false);
                return false;
            }

            fwrite($pipes[0], $password . "\n", 1+strlen($password));
            usleep(1000);
            fwrite($pipes[0], $password . "\n", 1+strlen($password));

            $crypted = trim(stream_get_contents($pipes[1]), "\n");
            $stderr = trim(stream_get_contents($pipes[2]));

            fclose($pipes[0]);
            fclose($pipes[1]);
            fclose($pipes[2]);
            proc_close($pipe);

            if (!preg_match('/^\{' . $method . '\}/', $crypted)) {
                rcube::raise_error([
                        'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                        'message' => "Password plugin: Failed to execute command: $command. Error: $stderr"
                    ], true, false);

                return false;
            }

            if (!$prefixed) {
                $prefixed = (bool) $rcmail->config->get('password_dovecotpw_with_method');
            }

            if (!$prefixed) {
                $crypted = trim(str_replace('{' . $method . '}', '', $crypted));
            }

            $prefixed = false;

            break;

        case 'hash-bcrypt':
            $crypted = password_hash($password, PASSWORD_BCRYPT, $options);
            $prefix  = '{BLF-CRYPT}';
            break;

        case 'hash-argon2i':
            $crypted = password_hash($password, PASSWORD_ARGON2I, $options);
            $prefix  = '{ARGON2I}';
            break;

        case 'hash-argon2id':
            $crypted = password_hash($password, PASSWORD_ARGON2ID, $options);
            $prefix  = '{ARGON2ID}';
            break;

        case 'clear':
            $crypted = $password;
            break;

        default:
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: Hash method not supported."
                ], true, true
            );
        }

        if ($crypted === null || $crypted === false) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Password plugin: Failed to hash password ($method). Check for configuration issues."
                ],
                true, true
            );
        }

        if ($prefixed && $prefixed !== true) {
            $prefix   = $prefixed;
            $prefixed = true;
        }

        if ($prefixed === true && $prefix) {
            $crypted = $prefix . $crypted;
        }

        return $crypted;
    }

    /**
     * Returns username in a configured form appropriate for the driver
     *
     * @param string $format Username format
     *
     * @return string Username
     */
    public static function username($format = null)
    {
        $rcmail = rcmail::get_instance();

        if (!$format) {
            $format = $rcmail->config->get('password_username_format');
        }

        if (!$format) {
            return $_SESSION['username'];
        }

        return strtr($format, [
                '%l' => $rcmail->user->get_username('local'),
                '%d' => $rcmail->user->get_username('domain'),
                '%u' => $_SESSION['username'],
        ]);
    }

    /**
     * Returns Guzzle HTTP client instance configured for use in a password driver.
     *
     * @return \GuzzleHttp\Client HTTP client
     */
    public static function get_http_client()
    {
        $rcube  = rcube::get_instance();
        $config = (array) $rcube->config->get('password_http_client');

        return $rcube->get_http_client($config);
    }
}
PKvc�\4��4�E�Epassword/READMEnu�[��� -----------------------------------------------------------------------
 Password Plugin for Roundcube
 -----------------------------------------------------------------------
 Plugin that adds a possibility to change user password using many
 methods (drivers) via Settings/Password tab.
 -----------------------------------------------------------------------
 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 3 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, see http://www.gnu.org/licenses/.

 @author Aleksander Machniak <alec@alec.pl>
 @author <see driver files for driver authors>
 -----------------------------------------------------------------------

 1.      Configuration
 2.      Drivers
 2.1.    Password Change Drivers
 2.1.1.  Database (sql)
 2.1.2.  Cyrus/SASL (sasl)
 2.1.3.  Poppassd/Courierpassd (poppassd)
 2.1.4.  LDAP (ldap)
 2.1.5.  DirectAdmin Control Panel (directadmin)
 2.1.6.  cPanel
 2.1.7.  XIMSS/Communigate (ximms)
 2.1.8.  Virtualmin (virtualmin)
 2.1.9.  hMailServer (hmail)
 2.1.10. PAM (pam)
 2.1.11. Chpasswd (chpasswd)
 2.1.12. LDAP - no PEAR (ldap_simple)
 2.1.13. XMail (xmail)
 2.1.14. Pw (pw_usermod)
 2.1.15. domainFACTORY (domainfactory)
 2.1.16. DBMail (dbmail)
 2.1.17. Expect (expect)
 2.1.18. Samba (smb)
 2.1.19. Vpopmail daemon (vpopmaild)
 2.1.20. Plesk (Plesk RPC-API)
 2.1.21. Kpasswd
 2.1.22. Modoboa
 2.1.23. LDAP - Password Modify Extended Operation (ldap_exop)
 2.1.24. TinyCP
 2.1.25. Mail-in-a-Box (miab)
 2.1.26. HTTP-API (httpapi)
 2.1.27. dovecot_passwdfile
 2.1.28. Mailcow
 2.2.    Password Strength Drivers
 2.2.1.  Zxcvbn
 2.2.2.  Have I been pwned? (pwned)
 3.      Driver API
 4.      Sudo setup


 1. Configuration
 ----------------

 Copy config.inc.php.dist to config.inc.php and set the options as described
 within the file.


 2. Drivers
 ----------


 2.1. Password Change Drivers
 ----------------------------

 Password plugin supports many password change mechanisms which are
 handled by included drivers. Just pass driver name in 'password_driver' option.


 2.1.1. Database (sql)
 ---------------------

 You can specify which database to connect by 'password_db_dsn' option and
 what SQL query to execute by 'password_query'. See config.inc.php.dist file for
 more info.

 Example implementations of an update_passwd function:

 - This is for use with LMS (http://lms.org.pl) database and postgres:

    CREATE OR REPLACE FUNCTION update_passwd(hash text, account text) RETURNS integer AS $$
    DECLARE
            res integer;
    BEGIN
        UPDATE passwd SET password = hash
        WHERE login = split_part(account, '@', 1)
            AND domainid = (SELECT id FROM domains WHERE name = split_part(account, '@', 2))
        RETURNING id INTO res;
        RETURN res;
    END;
    $$ LANGUAGE plpgsql SECURITY DEFINER;

 - This is for use with a SELECT update_passwd(%o,%P,%u) query
   Updates the password only when the old password matches the MD5 password
   in the database

    CREATE FUNCTION update_password (oldpass text, cryptpass text, user text) RETURNS text
        MODIFIES SQL DATA
    BEGIN
        DECLARE currentsalt varchar(20);
        DECLARE error text;
        SET error = 'incorrect current password';
        SELECT substring_index(substr(user.password,4),_latin1'$',1) INTO currentsalt FROM users WHERE username=user;
        SELECT '' INTO error FROM users WHERE username=user AND password=ENCRYPT(oldpass,currentsalt);
        UPDATE users SET password=cryptpass WHERE username=user AND password=ENCRYPT(oldpass,currentsalt);
        RETURN error;
    END

 Example SQL UPDATEs:

 - Plain text passwords:
    UPDATE users SET password=%p WHERE username=%u AND password=%o AND domain=%h LIMIT 1

 - Crypt text passwords:
    UPDATE users SET password=%P WHERE username=%u LIMIT 1

 - Use a MYSQL crypt function (*nix only) with random 8 character salt
    UPDATE users SET password=ENCRYPT(%p,concat(_utf8'$1$',right(md5(rand()),8),_utf8'$')) WHERE username=%u LIMIT 1

 - MD5 stored passwords:
    UPDATE users SET password=MD5(%p) WHERE username=%u AND password=MD5(%o) LIMIT 1


 2.1.2. Cyrus/SASL (sasl)
 ------------------------

 Cyrus SASL database authentication allows your Cyrus+Roundcube
 installation to host mail users without requiring a Unix Shell account!

 This driver only covers the "sasldb" case when using Cyrus SASL. Kerberos
 and PAM authentication mechanisms will require other techniques to enable
 user password manipulations.

 Cyrus SASL includes a shell utility called "saslpasswd" for manipulating
 user passwords in the "sasldb" database.  This plugin attempts to use
 this utility to perform password manipulations required by your webmail
 users without any administrative interaction. Unfortunately, this
 scheme requires that the "saslpasswd" utility be run as the "cyrus"
 user - kind of a security problem since we have chosen to SUID a small
 script which will allow this to happen.

 This driver is based on the Squirrelmail Change SASL Password Plugin.
 See http://www.squirrelmail.org/plugin_view.php?id=107 for details.

 Installation:

 Change into the helpers directory. Edit the chgsaslpasswd.c file as is
 documented within it.

 Compile the wrapper program:
    gcc -o chgsaslpasswd chgsaslpasswd.c

 Chown the compiled chgsaslpasswd binary to the cyrus user and group
 that your browser runs as, then chmod them to 4550.

 For example, if your cyrus user is 'cyrus' and the apache server group is
 'nobody' (I've been told Red Hat runs Apache as user 'apache'):

    chown cyrus:nobody chgsaslpasswd
    chmod 4550 chgsaslpasswd

 Stephen Carr has suggested users should try to run the scripts on a test
 account as the cyrus user eg;

    su cyrus -c "./chgsaslpasswd -p test_account"

 This will allow you to make sure that the script will work for your setup.
 Should the script not work, make sure that:
 1) the user the script runs as has access to the saslpasswd|saslpasswd2
   file and proper permissions
 2) make sure the user in the chgsaslpasswd.c file is set correctly.
   This could save you some headaches if you are the paranoid type.


 2.1.3. Poppassd/Courierpassd (poppassd)
 ---------------------------------------

 You can specify which host to connect to via 'password_pop_host' and
 what port via 'password_pop_port'. See config.inc.php.dist file for more info.


 2.1.4. LDAP (ldap)
 ------------------

 See config.inc.php.dist file. Requires PEAR::Net_LDAP2 package.


 2.1.5. DirectAdmin Control Panel (directadmin)
 ----------------------------------------------

 You can specify which host to connect to via 'password_directadmin_host' (don't
 forget to use tcp:// or ssl://) and what port via 'password_directadmin_port'.
 The password enforcement with plenty customization can be done directly by
 DirectAdmin, please see http://www.directadmin.com/features.php?id=910
 See config.inc.php.dist file for more info.


 2.1.6. cPanel
 -------------

 Specify the host to connect to via 'password_cpanel_host'. This driver
 comes with a minimal UAPI implementation and does not use the external xmlapi
 class. It requires php-curl extension.

 See config.inc.php.dist file for more info.


 2.1.7. XIMSS/Communigate (ximms)
 --------------------------------

 You can specify which host and port to connect to via 'password_ximss_host'
 and 'password_ximss_port'. See config.inc.php.dist file for more info.


 2.1.8. Virtualmin (virtualmin)
 ------------------------------

 As in sasl driver this one allows to change password using shell
 utility called "virtualmin". See helpers/chgvirtualminpasswd.c for
 installation instructions. Requires virtualmin >= 4.09.


 2.1.9. hMailServer (hmail)
 --------------------------

 Requires PHP COM (Windows only). For access to hMail server on remote host
 you'll need to define 'hmailserver_remote_dcom' and 'hmailserver_server'.
 See config.inc.php.dist file for more info.


 2.1.10. PAM (pam)
 -----------------

 This driver is for changing passwords of shell users authenticated with PAM.
 Requires PECL's PAM extension to be installed (http://pecl.php.net/package/PAM).


 2.1.11. Chpasswd (chpasswd)
 ---------------------------

 Driver that adds functionality to change the systems user password via
 the 'chpasswd' command. See config.inc.php.dist file.

 Attached wrapper script (helpers/chpass-wrapper.py) restricts password changes
 to uids >= 1000 and can deny requests based on a blacklist.


 2.1.12.  LDAP - no PEAR (ldap_simple)
 -------------------------------------

 It's rewritten ldap driver that doesn't require the Net_LDAP2 PEAR extension.
 It uses directly PHP's ldap module functions instead (as Roundcube does).

 This driver is fully compatible with the ldap driver, but
 does not require (or uses) the
    $config['password_ldap_force_replace'] variable.
 Other advantages:
    * Connects only once with the LDAP server when using the search user.
    * Does not read the DN, but only replaces the password within (that is
      why the 'force replace' is always used).


 2.1.13.  XMail (xmail)
 ----------------------

 Driver for XMail (www.xmailserver.org). See config.inc.php.dist file
 for configuration description.


 2.1.14.  Pw (pw_usermod)
 ------------------------

 Driver to change the systems user password via the 'pw usermod' command.
 See config.inc.php.dist file for configuration description.


 2.1.15.  domainFACTORY (domainfactory)
 -------------------------------------

 Driver for the hosting provider domainFACTORY (www.df.eu).
 No configuration options.


 2.1.16.  DBMail (dbmail)
 ------------------------

 Driver that adds functionality to change the users DBMail password.
 It only works with dbmail-users on the same host where Roundcube runs
 and requires shell access and gcc in order to compile the binary
 (see instructions in chgdbmailusers.c file).
 See config.inc.php.dist file for configuration description.

 Note: DBMail users can also use sql driver.


 2.1.17.  Expect (expect)
 ------------------------

 Driver to change user password via the 'expect' command.
 See config.inc.php.dist file for configuration description.


 2.1.18.  Samba (smb)
 --------------------

 Driver to change Samba user password via the 'smbpasswd' command.
 See config.inc.php.dist file for configuration description.


 2.1.19. Vpopmail daemon (vpopmaild)
 -------------------------------------

 Driver for the daemon of vpopmail. Vpopmail is used with qmail to
 enable virtual users that are saved in a database and not in /etc/passwd.

 Set $config['password_vpopmaild_host'] to the host where vpopmaild runs.

 Set $config['password_vpopmaild_port'] to the port of vpopmaild.

 Set $config['password_vpopmaild_timeout'] to the timeout used for the TCP
 connection to vpopmaild (You may want to set it higher on busy servers).


 2.1.20. Plesk (Plesk RPC-API)
 -----------------------------

 Driver for changing Passwords via Plesk RPC-API. This Driver also works with
 Parallels Plesk Automation (PPA).

 You need to allow the IP of the Roundcube-Server for RPC-Calls in the Panel.

 Set $config['password_plesk_host'] to the Hostname / IP where Plesk runs
 Set your Admin or RPC User: $config['password_plesk_user']
 Set the Password of the User: $config['password_plesk_pass']
 Set $config['password_plesk_rpc_port']  for the RPC-Port. Usually its 8443
 Set the RPC-Path in $config['password_plesk_rpc_path']. Normally this is: enterprise/control/agent.php.


 2.1.21. Kpasswd
 ---------------

 Driver to change the password in Kerberos environments via the 'kpasswd' command.
 See config.inc.php.dist file for configuration description.


 2.1.22. Modoboa
 ---------------

 Driver to change the password in Modoboa servers.
 See config.inc.php.dist file for configuration description.


 2.1.23. LDAP - Password Modify Extended Operation (ldap_exop)
 -------------------------------------------------------------

 Modified version of ldap_simple.
 Password is changed using ldap_exop_passwd operation.
 PHP >= 7.2 required.


 2.1.24 TinyCP
 -------------

 Download the TinyCPConnector.php file from your TinyCP Settings page and
 save it into the password/drivers folder. Update/resolve file permissions for
 www-data/apache.
 Set the password_tinycp_host, password_tinycp_port, password_tinycp_user, and
 password_tinycp_pass in plugin's config.inc.php file.


 2.1.25 Mail-in-a-Box (miab)
 ---------------------------
 Driver to change the password on Mail-in-a-Box servers.
 See config.inc.php.dist file for configuration description.


 2.1.26. HTTP-API (httpapi)
 --------------------------

 Driver to change the user's password via any HTTP/HTTPS POST/GET API in a
 generic manner. It passes any of the username, curpass and newpass variables
 to the configured POST or GET parameters at the configured URL.

 Any 4xx error code (except 404) is assumed to mean the password change failed.
 404 or any other non-2xx error code, or failure to connect, is assumed to be a
 connection error and is reported as such.

 A 2xx response is generally assumed to mean the password changed succeeded.
 Optionally, you can configure a regular expression to check the response as
 well to verify this.


 2.1.27. dovecot_passwdfile
 --------------------------

 Driver that adds functionality to change the passwords in dovecot 2 passwd-file files
 regarding https://doc.dovecot.org/configuration_manual/authentication/passwd_file.

 Set 'password_dovecot_passwdfile_path' to your dovecot passwd-file location and
 'password_algorithm' (and related options) to the algorithm you want the passwords
 stored in the file to be using.


 2.1.28 Mailcow
 ---------------------------
 Driver to change the password on Mailcow servers.
 See config.inc.php.dist file for configuration description.


 2.2. Password Strength Drivers
 ------------------------------

 Password plugin supports many password strength checking mechanisms which are
 handled by included drivers. Just pass driver name in 'password_strength_driver' option.


 2.2.1. Zxcvbn
 -------------

 Driver to use the Zxcvbn library to check password strength. Requires zxcvbn-php library.
 The library is not distributed with Roundcube (see composer.json-dist).
 Note: Required PHP's memory_limit >= 24M.

 Set $config['password_zxcvbn_min_score'] to define minimum acceptable password strength score.

 2.2.2. Have I been pwned? (pwned)
 ---------------------------------

 Driver using "Have I been pwned?" (https://haveibeenpwned.com/Passwords) API to
 check that entered passwords aren't already compromised (i.e., commonly known).
 The check is performed locally, the actual password is *not* transmitted anywhere else.

 Requires curl (preferred) or allow_url_fopen to work.

 Example configuration:

 $config['password_strength_driver'] = 'pwned';
 $config['password_minimum_score'] = 3;

 See the driver implementation file for more documentation.

 3. Driver API
 -------------

 Driver file (<driver_name>.php) must define rcube_<driver_name>_password class. Drivers should
 provide one or both of a public save() or check_strength() method.

 All password changing drivers (used in config `password_driver` - the password driver) must have
 a save() method. The same driver can also contain a check_strength() method or a separate driver
 containing this method can be used in `password_strength_driver` (the strength driver). To enable
 strength checks ensure `password_check_strength` is set to true.

 The save() method, used for changing the password has three arguments:
 First - current password, second - new password, third - current username.
 This method should return PASSWORD_SUCCESS on success or any of PASSWORD_CONNECT_ERROR,
 PASSWORD_CRYPT_ERROR, PASSWORD_ERROR when driver was unable to change password.
 Extended result (as a hash-array with 'message' and 'code' items) can be returned
 too. See existing drivers in drivers/ directory for examples.

 Optionally a password driver can contain a compare() method which has three arguments:
 First - current password, second - test password, third - compare type.
 Compare type: PASSWORD_COMPARE_CURRENT - when comparing the test password with current password.
 PASSWORD_COMPARE_NEW - when comparing the current password with the test password.
 For PASSWORD_COMPARE_CURRENT it should return error text if user entered and real current password
 DO NOT MATCH. For PASSWORD_COMPARE_NEW it should return error text if user entered and real current
 password DO MATCH. Else it should return null (no error).

 The check_strength() method, used for checking password strength has one argument: new password.
 This method should return an array with tho elements:
   - Score: integer from 1 (week) to 5 (strong)
   - Reason for the score (optional)

 Optionally a strength driver can contain a strength_rules() method. This has no arguments
 and returns a string, or array of strings explaining the password strength rules.


 4. Sudo setup
 -------------

 Some drivers that execute system commands (like chpasswd) require use of sudo command.
 Here's a sample for CentOS 7:

 # cat <<END >/etc/sudoers.d/99-roundcubemail
 apache ALL=NOPASSWD:/usr/sbin/chpasswd
 Defaults:apache !requiretty
 <<END

 Note: on different systems the username (here 'apache') may be different, e.g. www.
 Note: on some systems the disabling tty line may not be needed.
PKvc�\���"database_attachments/composer.jsonnu�[���{
    "name": "roundcube/database_attachments",
    "type": "roundcube-plugin",
    "description": "This plugin which provides database backed storage for temporary attachment file handling. The primary advantage of this plugin is its compatibility with round-robin dns multi-server Roundcube installations.",
    "license": "GPL-3.0-or-later",
    "version": "1.2",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        },
        {
            "name": "Ziba Scott",
            "email": "ziba@umich.edu",
            "role": "Developer"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3",
        "roundcube/filesystem_attachments": ">=1.0.0"
    }
}
PKvc�\']‡yy(database_attachments/config.inc.php.distnu�[���<?php

// By default this plugin stores attachments in filesystem
// and copies them into sql database.
// You can change it to use 'memcache', 'memcached', 'redis' or 'apc'.
// -----------------------------------------------------------
// WARNING: Remember to set max_allowed_packet in database or
//          config to match with expected max attachment size.
// -----------------------------------------------------------
$config['database_attachments_cache'] = 'db';

// Attachment data expires after specified TTL time in seconds (max.2592000).
// Default is 12 hours.
$config['database_attachments_cache_ttl'] = 12 * 60 * 60;
PKvc�\*�֛�-database_attachments/database_attachments.phpnu�[���<?php

/**
 * Database Attachments
 *
 * This plugin which provides database backed storage for temporary
 * attachment file handling. The primary advantage of this plugin
 * is its compatibility with round-robin dns multi-server roundcube
 * installations.
 *
 * This plugin relies on the core filesystem_attachments plugin
 *
 * @author Ziba Scott <ziba@umich.edu>
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * Copyright (C) The Roundcube Dev Team
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2
 * as published by the Free Software Foundation.
 *
 * 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.
 */

require_once INSTALL_PATH . 'plugins/filesystem_attachments/filesystem_attachments.php';

class database_attachments extends filesystem_attachments
{
    // Cache object
    protected $cache;

    // A prefix for the cache key used in the session and in the key field of the cache table
    const PREFIX = "ATTACH";

    /**
     * Save a newly uploaded attachment
     */
    function upload($args)
    {
        $args['status'] = false;

        $cache = $this->get_cache();
        $key   = $this->_key($args);
        $data  = file_get_contents($args['path']);

        if ($data === false) {
            return $args;
        }

        $data   = base64_encode($data);
        $status = $cache->set($key, $data);

        if ($status) {
            $args['id']     = $key;
            $args['status'] = true;
            $args['path']   = null;
        }

        return $args;
    }

    /**
     * Save an attachment from a non-upload source (draft or forward)
     */
    function save($args)
    {
        $args['status'] = false;

        $cache = $this->get_cache();
        $key   = $this->_key($args);

        if (!empty($args['path'])) {
            $args['data'] = file_get_contents($args['path']);

            if ($args['data'] === false) {
                return $args;
            }

            $args['path'] = null;
        }

        $data   = base64_encode($args['data']);
        $status = $cache->set($key, $data);

        if ($status) {
            $args['id'] = $key;
            $args['status'] = true;
        }

        return $args;
    }

    /**
     * Remove an attachment from storage
     * This is triggered by the remove attachment button on the compose screen
     */
    function remove($args)
    {
        $cache  = $this->get_cache();
        $status = $cache->remove($args['id']);

        $args['status'] = true;

        return $args;
    }

    /**
     * When composing an html message, image attachments may be shown
     * For this plugin, $this->get() will check the file and
     * return it's contents
     */
    function display($args)
    {
        return $this->get($args);
    }

    /**
     * When displaying or sending the attachment the file contents are fetched
     * using this method. This is also called by the attachment_display hook.
     */
    function get($args)
    {
        $cache = $this->get_cache();
        $data  = $cache->get($args['id']);

        if ($data !== null && $data !== false) {
            $args['data'] = base64_decode($data);
            $args['status'] = true;
        }
        else {
            $args['status'] = false;
        }

        return $args;
    }

    /**
     * Delete all temp files associated with this user
     */
    function cleanup($args)
    {
        // check if cache object exist, it may be empty on session_destroy (#1489726)
        if ($cache = $this->get_cache()) {
            $cache->remove($args['group'] ?? null, true);
        }
    }

    /**
     * Helper method to generate a unique key for the given attachment file
     */
    protected function _key($args)
    {
        $uname = !empty($args['path']) ? $args['path'] : $args['name'];
        return $args['group'] . md5(microtime() . $uname . $_SESSION['user_id']);
    }

    /**
     * Initialize and return cache object
     */
    protected function get_cache()
    {
        if (!$this->cache) {
            $this->load_config();

            $rcmail = rcube::get_instance();
            $ttl    = 12 * 60 * 60; // default: 12 hours
            $ttl    = $rcmail->config->get('database_attachments_cache_ttl', $ttl);
            $type   = $rcmail->config->get('database_attachments_cache', 'db');
            $prefix = self::PREFIX;

            // Add session identifier to the prefix to prevent from removing attachments
            // in other sessions of the same user (#1490542)
            if ($id = session_id()) {
                $prefix .= $id;
            }

            // Init SQL cache (disable cache data serialization)
            $this->cache = $rcmail->get_cache($prefix, $type, $ttl, false, true);
        }

        return $this->cache;
    }
}
PKvc�\��==archive/composer.jsonnu�[���{
    "name": "roundcube/archive",
    "type": "roundcube-plugin",
    "description": "This adds a button to move the selected messages to an archive folder. The folder (and the optional structure of subfolders) can be selected in the settings panel.",
    "license": "GPL-3.0-or-later",
    "version": "3.5",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Developer"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKvc�\�wf��archive/archive.min.jsnu�[���/**
 * Archive plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function rcmail_archive(i){var e;rcmail_is_archive()||(e=rcmail.selection_post_data())._uid&&(rcmail.enable_command(rcmail.env.message_commands,!1),rcmail.enable_command("plugin.archive",!1),rcmail.with_selected_messages("move",e,null,"plugin.move2archive"),rcmail.show_contentframe(!1))}function rcmail_is_archive(){return rcmail.env.mailbox==rcmail.env.archive_folder||rcmail.env.mailbox.startsWith(rcmail.env.archive_folder+rcmail.env.delimiter)}window.rcmail&&rcmail.addEventListener("init",function(i){var e;rcmail.register_command("plugin.archive",rcmail_archive,rcmail.env.uid&&!rcmail_is_archive()),rcmail.message_list&&rcmail.message_list.addEventListener("select",function(i){rcmail.enable_command("plugin.archive",0<i.get_selection().length&&!rcmail_is_archive())}),rcmail.env.archive_folder&&((e=rcmail.subscription_list?rcmail.subscription_list.get_item(rcmail.env.archive_folder):rcmail.get_folder_li(rcmail.env.archive_folder,"",!0))&&$(e).addClass("archive"),rcmail.addEventListener("menu-open",function(i){var e;"folder-selector"==i.name&&(e=rcmail.env.archive_folder,$("a",i.obj).filter(function(){return $(this).data("id")==e}).parent().addClass("archive"))}))});
PKvc�\�K,l
l
archive/archive.jsnu�[���/**
 * Archive plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

function rcmail_archive(prop)
{
  if (rcmail_is_archive())
    return;

  var post_data = rcmail.selection_post_data();

  // exit if selection is empty
  if (!post_data._uid)
    return;

  // Disable message command buttons until a message is selected
  rcmail.enable_command(rcmail.env.message_commands, false);
  rcmail.enable_command('plugin.archive', false);

  // let the server sort the messages to the according subfolders
  rcmail.with_selected_messages('move', post_data, null, 'plugin.move2archive');

  // Reset preview (must be after with_selected_messages() call)
  rcmail.show_contentframe(false);
}

function rcmail_is_archive()
{
  // check if current folder is an archive folder or one of its children
  return rcmail.env.mailbox == rcmail.env.archive_folder
    || rcmail.env.mailbox.startsWith(rcmail.env.archive_folder + rcmail.env.delimiter);
}

// callback for app-onload event
if (window.rcmail) {
  rcmail.addEventListener('init', function(evt) {
    // register command (directly enable in message view mode)
    rcmail.register_command('plugin.archive', rcmail_archive, rcmail.env.uid && !rcmail_is_archive());

    // add event-listener to message list
    if (rcmail.message_list)
      rcmail.message_list.addEventListener('select', function(list) {
        rcmail.enable_command('plugin.archive', list.get_selection().length > 0 && !rcmail_is_archive());
      });

    // set css style for archive folder
    var li;
    if (rcmail.env.archive_folder) {
      // in Settings > Folders
      if (rcmail.subscription_list)
        li = rcmail.subscription_list.get_item(rcmail.env.archive_folder);
      // in folders list
      else
        li = rcmail.get_folder_li(rcmail.env.archive_folder, '', true);

      if (li)
        $(li).addClass('archive');

      // in folder selector popup
      rcmail.addEventListener('menu-open', function(p) {
        if (p.name == 'folder-selector') {
          var search = rcmail.env.archive_folder;
          $('a', p.obj).filter(function() { return $(this).data('id') == search; }).parent().addClass('archive');
        }
      });
    }
  });
}
PKvc�\���k��archive/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = '存档';
$labels['buttontitle'] = '存档该信息';
$labels['archived'] = '存档成功';
$labels['archivedreload'] = '存档成功。请刷新本页以查看新的存档文件夹。';
$labels['archiveerror'] = '部分信息无法存档';
$labels['archivefolder'] = '存档';
$labels['settingstitle'] = '存档';
$labels['archivetype'] = '分类存档按';
$labels['archivetypeyear'] = '年(例如 存档/2012)';
$labels['archivetypemonth'] = '月(例如 存档/2012/06)';
$labels['archivetypetbmonth'] = '月份 - Thunderbird 兼容格式 (比如 Archive/2012/2012-06)';
$labels['archivetypefolder'] = '原始文件夹';
$labels['archivetypefolderyear'] = '年份与原始文件夹(例如:Archive/2012/...)';
$labels['archivetypefoldermonth'] = '年份、月份与原始文件夹(例如:Archive/2012/06/...)';
$labels['archivetypesender'] = '发件人邮件';
$labels['unkownsender'] = '未知';
$labels['readonarchive'] = '在归档中标记信息为已读';
PKvc�\@�ml		archive/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архіў';
$labels['buttontitle'] = 'Перанесці ў архіў';
$labels['archived'] = 'Паспяхова перанесена ў архіў';
$labels['archivedreload'] = 'Паспяхова перанесена ў архіў. Перагрузіце старонку, каб пабачыць новыя архіўныя каталогі.';
$labels['archiveerror'] = 'Некаторыя лісты немагчыма перанесці ў архіў';
$labels['archivefolder'] = 'Архіў';
$labels['settingstitle'] = 'Архіў';
$labels['archivetype'] = 'Падзяліць архіў паводле';
$labels['archivetypeyear'] = 'года (напрыклад, Архіў/2012)';
$labels['archivetypemonth'] = 'месяца (напрыклад, Архіў/2012/06)';
$labels['archivetypetbmonth'] = 'месяца - сумяшчальнасць з Thunderbird (напрыклад, Архіў/2012/2012-06)';
$labels['archivetypefolder'] = 'зыходнага каталога';
$labels['archivetypefolderyear'] = 'года і зыходнага каталога (напрыклад, Архіў/2012/...)';
$labels['archivetypefoldermonth'] = 'года, месяца і зыходнага каталога (напрыклад, Архіў/2012/06/...)';
$labels['archivetypesender'] = 'Электронная пошта адпраўніка';
$labels['unkownsender'] = 'невядомы';
$labels['readonarchive'] = 'Пазначыць ліст прачытаным у архіве';
PKvc�\�M,��archive/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архивирай';
$labels['buttontitle'] = 'Архивиране на писмото';
$labels['archived'] = 'Архивирането премина успешно';
$labels['archivedreload'] = 'Успешно архивирано. Презаредете страницата за да видите архивираните папки.';
$labels['archiveerror'] = 'Някои писма не бяха архивирани';
$labels['archivefolder'] = 'Архивирай';
$labels['settingstitle'] = 'Архив';
$labels['archivetype'] = 'Раздели архива по';
$labels['archivetypeyear'] = 'Година (пр. Архив/2012)';
$labels['archivetypemonth'] = 'Месец (пр. Архив/2012/06)';
$labels['archivetypetbmonth'] = 'Месец - съвместим с Thunderbird (пр. Архив/2012/2012-06)';
$labels['archivetypefolder'] = 'Оригинална папка';
$labels['archivetypefolderyear'] = 'Година и оригиналната папка (пр. Архив/2012/...) ';
$labels['archivetypefoldermonth'] = 'Година, месец и оригиналната папка (пр. Архив/2012/06/...) ';
$labels['archivetypesender'] = 'E-mail адрес на подател';
$labels['unkownsender'] = 'неизвестно';
$labels['readonarchive'] = 'Маркирай писмото като прочетено в архива';
PKvc�\�s�qGGarchive/localization/ne_NP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'अज्ञात';
PKvc�\[D��''archive/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels = [];
$labels['buttontext'] = 'Archive';
$labels['buttontitle'] = 'Archive this message';
$labels['archived'] = 'Successfully archived';
$labels['archivedreload'] = 'Successfully archived. Reload the page to see the new archive folders.';
$labels['archiveerror'] = 'Some messages could not be archived';
$labels['archivefolder'] = 'Archive';
$labels['settingstitle'] = 'Archive';
$labels['archivetype'] = 'Divide archive by';
$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)';
$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)';
$labels['archivetypetbmonth'] = 'Month - Thunderbird compatible (e.g. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Original folder';
$labels['archivetypefolderyear'] = 'Year and the original folder (e.g. Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Year, month and the original folder (e.g. Archive/2012/06/...)';
$labels['archivetypesender'] = 'Sender email';
$labels['unkownsender'] = 'unknown';
$labels['readonarchive'] = 'Mark the message as read on archive';
PKvc�\��&bGGarchive/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkistoi';
$labels['buttontitle'] = 'Arkistoi viesti';
$labels['archived'] = 'Arkistoitu onnistuneesti';
$labels['archivedreload'] = 'Arkistointi onnistui. Päivitä sivu nähdäksesi uudet arkistokansiot.';
$labels['archiveerror'] = 'Joidenkin viestien arkistointi epäonnistui';
$labels['archivefolder'] = 'Arkisto';
$labels['settingstitle'] = 'Arkistointi';
$labels['archivetype'] = 'Jaa arkisto';
$labels['archivetypeyear'] = 'Vuodella (esim. Arkisto/2012)';
$labels['archivetypemonth'] = 'Kuukaudella (esim. Arkisto/2012/06)';
$labels['archivetypetbmonth'] = 'Kuukausi - Thunderbird-yhteensopiva (esim. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Alkuperäinen kansio';
$labels['archivetypefolderyear'] = 'Vuosi ja alkuperäinen kansio (esim. Arkisto/2012/…)';
$labels['archivetypefoldermonth'] = 'Vuosi, kuukausi ja alkuperäinen kansio (esim. Arkisto/2012/06/…)';
$labels['archivetypesender'] = 'Lähettäjän osoite';
$labels['unkownsender'] = 'tuntematon';
$labels['readonarchive'] = 'Merkitse viesti luetuksi arkistoon';
PKvc�\et�earchive/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkiv';
$labels['buttontitle'] = 'Arkiver meldingen';
$labels['archived'] = 'Arkivert';
$labels['archivedreload'] = 'Arkivering vellykket. Last inn siden på nytt for å se de nye arkivmappene.';
$labels['archiveerror'] = 'Noen meldinger kunne ikke arkiveres';
$labels['archivefolder'] = 'Arkiv';
$labels['settingstitle'] = 'Arkiv';
$labels['archivetype'] = 'Del arkiv etter';
$labels['archivetypeyear'] = 'År (f.eks. Arkiv/2012)';
$labels['archivetypemonth'] = 'Måned (f.eks. Arkiv/2012/06)';
$labels['archivetypetbmonth'] = 'Måned - Thunderbird kompatibel (f.eks. Arkiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Opprinnelig mappe';
$labels['archivetypefolderyear'] = 'År og opprinnelig mappe (f.eks. Arkiv/2012/...)';
$labels['archivetypefoldermonth'] = 'År, måned og opprinnelig mappe (f.eks. Arkiv/2012/06/...)';
$labels['archivetypesender'] = 'Avsender';
$labels['unkownsender'] = 'ukjent';
$labels['readonarchive'] = 'Merk meldingen som lest ved arkivering';
PKvc�\7�C�//archive/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkivoje';
$labels['buttontitle'] = 'Arkivoje këtë mesazh';
$labels['archived'] = 'U arkivua me sukses';
$labels['archivedreload'] = 'U arkivua me sukses. Ringarkoni faqen që të shihni dosjet e reja arkiv.';
$labels['archiveerror'] = 'Ca nga mesazhet s’u arkivuan dot';
$labels['archivefolder'] = 'Arkivoje';
$labels['settingstitle'] = 'Arkivoje';
$labels['archivetype'] = 'Ndaje arkivin sipas';
$labels['archivetypeyear'] = 'Vit (p.sh. Arkiv/2012)';
$labels['archivetypemonth'] = 'Muaj (p.sh. Arkiv/2012/06)';
$labels['archivetypetbmonth'] = 'Muaj - i përputhshëm me Thunderbird-in (p.sh. Arkiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Dosje origjinale';
$labels['archivetypefolderyear'] = 'Vit dhe dosja origjinale (p.sh., Arkiv/2012/…)';
$labels['archivetypefoldermonth'] = 'Vit, muaj,dhe dosja origjinale (p.sh., Arkiv/2012/06/…)';
$labels['archivetypesender'] = 'Email dërguesi';
$labels['unkownsender'] = 'e panjohur';
$labels['readonarchive'] = 'I vini shenjë si të lexuar mesazhit në arkiv';
PKvc�\�EpcIIarchive/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arhiveeri';
$labels['buttontitle'] = 'Arhiveeri see kiri';
$labels['archived'] = 'Edukalt arhiveeritud';
$labels['archivedreload'] = 'Arhiveerimine õnnestus. Uute arhiivi kaustada nägemiseks laadi leht uuesti.';
$labels['archiveerror'] = 'Mõnda kirja ei õnnestusnud arhiveerida';
$labels['archivefolder'] = 'Arhiiv';
$labels['settingstitle'] = 'Arhiiv';
$labels['archivetype'] = 'Jaga arhiiv';
$labels['archivetypeyear'] = 'Aasta (nt. Arhiiv/2012)';
$labels['archivetypemonth'] = 'Kuu (nt. Arhiiv/2012/06)';
$labels['archivetypefolder'] = 'Esialgne kaust';
$labels['archivetypefolderyear'] = 'Aasta ja algne kaust (nt. Arhiiv/2012/...)';
$labels['archivetypesender'] = 'Saatja e-post';
$labels['unkownsender'] = 'teadmata';
$labels['readonarchive'] = 'Märgi kiri arhiveerimisel loetuks';
PKvc�\�;@6��archive/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'ئەرشیف';
$labels['buttontitle'] = 'ئەم نامەیە ئەرشیف بکە';
$labels['archived'] = 'بەسەرکەوتوویی ئەرشیف کرا';
$labels['archivedreload'] = 'بەسەرکەوتوویی ئەرشیف کرا، دووبارە پەڕەکە بکەرەوە بۆ بینینی بوخچە نوێیەکانی ئەرشیف.';
$labels['archiveerror'] = 'نەتوانرا هەندێک لە نامەکان ئەرشیف بکرێن';
$labels['archivefolder'] = 'ئەرشیف';
$labels['settingstitle'] = 'ئەرشیف';
$labels['archivetype'] = 'ئەرشیف دابەشبکە بەپێی';
$labels['archivetypeyear'] = 'ساڵ (بۆ نموونە ئەرشیف/2012)';
$labels['archivetypemonth'] = 'مانگ (بۆ نموونە ئەرشیف/06/2012)';
$labels['archivetypetbmonth'] = 'مانگ - گوونجاو لەگەڵ سەندەربێرد (بۆ نموونە ئەرشیف2012/2012-06)';
$labels['archivetypefolder'] = 'بوخچەی ڕەسەن';
$labels['archivetypefolderyear'] = 'ساڵ و بوخچە ڕەسەنەکە (بۆ نموونە ئەرشیف/2012/...)';
$labels['archivetypefoldermonth'] = 'ساڵ، مانگ و بوخچە ڕەسەنەکە (بۆ نموونە ئەرشیف/2012/06/...)';
$labels['archivetypesender'] = 'پۆستی ئەلیکترۆنیی نێردەر';
$labels['unkownsender'] = 'نەناسراو';
$labels['readonarchive'] = 'لە ئەرشیفدا نامەکە وەکو خوێنراوە دیاریبکە';
PKvc�\bI�MMarchive/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Artxibatu';
$labels['buttontitle'] = 'Artxibatu mezu hau';
$labels['archived'] = 'Ongi artxibatu da';
$labels['archivedreload'] = 'Ongi artxibatu da. Birkargatu orria artxiboan karpeta berriak ikusteko.';
$labels['archiveerror'] = 'Mezu batzuk ezin izan dira artxibatu';
$labels['archivefolder'] = 'Artxibatu';
$labels['settingstitle'] = 'Artxibatu';
$labels['archivetype'] = 'Banatu honen arabera';
$labels['archivetypeyear'] = 'Urtea (e.b. Archive/2012)';
$labels['archivetypemonth'] = 'Hilabetea (e.b. Archive/2012/06)';
$labels['archivetypetbmonth'] = 'Hilabetea - Thunderbird-ekin bateragarria (ad. Artxiboa/2012/2012-06)';
$labels['archivetypefolder'] = 'Jatorrizko karpeta';
$labels['archivetypefolderyear'] = 'Urtea eta jatorrizko karpeta (adib. Artxiboa/2012/...)';
$labels['archivetypefoldermonth'] = 'Urtea, hilabetea eta jatorrizko karpeta (adib. Artxiboa/2012/06/...)';
$labels['archivetypesender'] = 'Bidaltzailearen helbidea';
$labels['unkownsender'] = 'ezezaguna';
$labels['readonarchive'] = 'Markatu mezua irakurrita bezala artxiboan';
PKvc�\��)archive/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arşivle';
$labels['buttontitle'] = 'Bu iletiyi arşivle';
$labels['archived'] = 'Arşivlendi.';
$labels['archivedreload'] = 'Arşivlendi. Yeni arşiv klasörlerini görmek için sayfayı yenileyin.';
$labels['archiveerror'] = 'Bazı iletiler arşivlenemedi';
$labels['archivefolder'] = 'Arşiv';
$labels['settingstitle'] = 'Arşiv';
$labels['archivetype'] = 'Arşivleme şuna göre yapılsın';
$labels['archivetypeyear'] = 'Yıl (Arşiv/2012)';
$labels['archivetypemonth'] = 'Ay (Arşiv/2012/06)';
$labels['archivetypetbmonth'] = 'Ay - Thunderbird uyumlu (Arsiv2012/2012-06 gibi)';
$labels['archivetypefolder'] = 'Özgün klasör';
$labels['archivetypefolderyear'] = 'Yıl ve özgün klasör (Örnek: Arşiv/2012 ...)';
$labels['archivetypefoldermonth'] = 'Yıl, ay ve özgün klasör (Örnek: Arşiv/2012/06 ...)';
$labels['archivetypesender'] = 'Gönderici adresi';
$labels['unkownsender'] = 'bilinmeyen';
$labels['readonarchive'] = 'Arşivdeki ileti okunmuş olarak işaretlensin';
PKvc�\��33archive/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivo';
$labels['buttontitle'] = 'Archivar este mensaje';
$labels['archived'] = 'Mensaje Archivado';
$labels['archivedreload'] = 'Archivado satisfactoriamente. Recarga la página para ver las nuevas capetas archivadas.';
$labels['archiveerror'] = 'Algunos mensajes no pudieron archivarse';
$labels['archivefolder'] = 'Archivo';
$labels['settingstitle'] = 'Archivo';
$labels['archivetype'] = 'Separar archivo por';
$labels['archivetypeyear'] = 'Año (ej. Archivo/2012)';
$labels['archivetypemonth'] = 'Mes (ej. Archivo/2012/06)';
$labels['archivetypetbmonth'] = 'Mes - estilo Thunderbird  (ej. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Carpeta original';
$labels['archivetypefolderyear'] = 'Año y la carpeta original (p.ej. Archivo/2012/...)';
$labels['archivetypefoldermonth'] = 'Año, mes y la carpeta original (p.ej. Archivo/2012/06/...)';
$labels['archivetypesender'] = 'Remitente del correo';
$labels['unkownsender'] = 'desconocido';
$labels['readonarchive'] = 'Marcar el mensaje como leído al archivar';
PKvc�\J���archive/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arşîv';
$labels['buttontitle'] = 'vê peyamê arşîv bike';
$labels['archived'] = 'Bi serkeftin hat arşîvkirin';
$labels['archivedreload'] = 'Bi serkeftin hat arşîvkirin. Rûpelê dîsa bar bike da dosyeyên arşîvê yên nû bibînî.';
$labels['archiveerror'] = 'Hin peyam nehatin arşîvkirin.';
$labels['archivefolder'] = 'Arşîv';
$labels['settingstitle'] = 'Arşîv';
$labels['archivetype'] = 'Arşîvê dabeşîne';
$labels['archivetypeyear'] = 'Sal (wek Arşîv/2012)';
$labels['archivetypemonth'] = 'Meh (wek Arşîv/2012/06)';
$labels['archivetypefolder'] = 'Dosyeya resen';
$labels['archivetypesender'] = 'Emaila şandyar';
$labels['unkownsender'] = 'nenas';
PKvc�\�x��<<archive/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arquivo';
$labels['buttontitle'] = 'Arquivar esta mensagem';
$labels['archived'] = 'Arquivada com sucesso';
$labels['archivedreload'] = 'Arquivado com sucesso. Recarregue a página para ver as novas pastas de arquivo.';
$labels['archiveerror'] = 'Algumas mensagens não puderam ser arquivadas';
$labels['archivefolder'] = 'Arquivo';
$labels['settingstitle'] = 'Arquivo';
$labels['archivetype'] = 'Dividir arquivo por';
$labels['archivetypeyear'] = 'Ano (isto é, Arquivo/2012)';
$labels['archivetypemonth'] = 'Mês (isto é, Arquivo/2012/06)';
$labels['archivetypetbmonth'] = 'Mês - Compatível com o Thunderbird (exemplo Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Pasta original';
$labels['archivetypefolderyear'] = 'Ano e pasta original (ex. Arquivo/2012/...)';
$labels['archivetypefoldermonth'] = 'Ano, mês e pasta original (ex. Arquivo/2012/06/...)';
$labels['archivetypesender'] = 'E-mail do remetente';
$labels['unkownsender'] = 'desconhecido';
$labels['readonarchive'] = 'Marcar a mensagem como lida ao arquivar';
PKvc�\�%ffarchive/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arhīvs';
$labels['buttontitle'] = 'Arhivēt šo vēstuli';
$labels['archived'] = 'Vēstule veiksmīgi arhivēta';
$labels['archivedreload'] = 'Arhīvs veiksmīgi izveidots. Lai redzētu jaunās arhīva mapes, pārlādējiet lapu.';
$labels['archiveerror'] = 'Dažas vēstules nebija iespējams arhivēt';
$labels['archivefolder'] = 'Arhīvs';
$labels['settingstitle'] = 'Arhīvs';
$labels['archivetype'] = 'Sadalīt arhīvu pa';
$labels['archivetypeyear'] = 'Gadiem (piem. Arhīvs/2012)';
$labels['archivetypemonth'] = 'Mēnešiem (piem. Arhīvs/2012/06)';
$labels['archivetypetbmonth'] = 'Mēnesis - Savietojams ar Thunderbird (piem. Arhīvs/2012/2012-06)';
$labels['archivetypefolder'] = 'Sākotnējā mape';
$labels['archivetypefolderyear'] = 'Gads un oriģinālā mapīte (oiem. Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Gads, mēnesis un oriģinālā mapīte (piem. Archive/2012/06/...)';
$labels['archivetypesender'] = 'Sūtītāja e-pasts';
$labels['unkownsender'] = 'nezināms';
$labels['readonarchive'] = 'Arhivējot, atzīmēt vēstuli kā izlasītu';
PKvc�\�(�=��archive/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivovať';
$labels['buttontitle'] = 'Archivovať túto správu';
$labels['archived'] = 'Úspešne uložené do archívu';
$labels['archivedreload'] = 'Archivovanie bolo úspešne dokončené. Ak si chcete prezrieť nové archívne priečinky, obnovte stránku.';
$labels['archiveerror'] = 'Niektoré správy nebolo možné archivovať';
$labels['archivefolder'] = 'Archivovať';
$labels['settingstitle'] = 'Archív';
$labels['archivetype'] = 'Rozdeliť archív po';
$labels['archivetypeyear'] = 'rokoch (napríklad Archív/2012)';
$labels['archivetypemonth'] = 'mesiacoch (napríklad Archív/2012/06)';
$labels['archivetypetbmonth'] = 'mesiacoch - kompatibilne s Thunderbird (napríklad Archív /2012/2012-06)';
$labels['archivetypefolder'] = 'Pôvodný priečinok';
$labels['archivetypefolderyear'] = 'Rok a pôvodný priečinok (napr.: Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Rok, mesiac a pôvodný priečinok (napr.: Archive/2012/06/...)';
$labels['archivetypesender'] = 'E-mailová adresa odosielateľa';
$labels['unkownsender'] = 'neznámy';
$labels['readonarchive'] = 'Pri archivovaní označiť správu ako prečítanú';
PKvc�\(C�eAAarchive/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archiv';
$labels['buttontitle'] = 'Archivovat zprávu';
$labels['archived'] = 'Vloženo do archivu';
$labels['archivedreload'] = 'Archivováno. Obnovte stránku, abyste uviděli nové složky v archivu.';
$labels['archiveerror'] = 'Některé zprávy nelze archivovat';
$labels['archivefolder'] = 'Archiv';
$labels['settingstitle'] = 'Archiv';
$labels['archivetype'] = 'Rozdělit archiv podle';
$labels['archivetypeyear'] = 'Rok (např.  Archiv/2012)';
$labels['archivetypemonth'] = 'Měsíc (např. Archiv/2012/06)';
$labels['archivetypetbmonth'] = 'Měsíc - kompatibilní s Thunderbird klientem (např. Archiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Původní složka';
$labels['archivetypefolderyear'] = 'Rok a původní složka (např. Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Rok, měsíc a původní složka (např. Archive/2012/06/...)';
$labels['archivetypesender'] = 'E-mail odesílatele';
$labels['unkownsender'] = 'neznámý';
$labels['readonarchive'] = 'Při archivaci označit zprávu jako přečtenou';
PKvc�\>i�JJarchive/localization/ta_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'தெரியாத';
PKvc�\L��
GGarchive/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archief';
$labels['buttontitle'] = 'Archiveer dit bericht';
$labels['archived'] = 'Succesvol gearchiveerd';
$labels['archivedreload'] = 'Succesvol gearchiveerd. Herlaad de pagina om de nieuwe archiefmappen te zien.';
$labels['archiveerror'] = 'Sommige berichten konden niet gearchiveerd worden';
$labels['archivefolder'] = 'Archief';
$labels['settingstitle'] = 'Archief';
$labels['archivetype'] = 'Deel het archief door';
$labels['archivetypeyear'] = 'aar (bijv. Archief/2012)';
$labels['archivetypemonth'] = 'Maand (bijv. Archief/2012/06)';
$labels['archivetypetbmonth'] = 'Maand - compatibel met Thunderbird (bijv. Archief/2012/2012-06)';
$labels['archivetypefolder'] = 'Originele map';
$labels['archivetypefolderyear'] = 'Jaar en de originele map (bijv. Archief/2012/...)';
$labels['archivetypefoldermonth'] = 'Jaar, maand en de oorspronkelijke map (bijv. Archief/2012/06/...)';
$labels['archivetypesender'] = 'E-mail afzender';
$labels['unkownsender'] = 'onbekend';
$labels['readonarchive'] = 'Markeer het bericht als gelezen in het archief';
PKvc�\�s�qGGarchive/localization/hi_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'अज्ञात';
PKvc�\����@@archive/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архів';
$labels['buttontitle'] = 'Архівувати це повідомлення';
$labels['archived'] = 'Перенесено в архів';
$labels['archivedreload'] = 'Успішно заархівовано. Перезавантажте сторінку, щоб побачити нові теки з архівами.';
$labels['archiveerror'] = 'Деякі повідомлення не вдалося заархівувати';
$labels['archivefolder'] = 'Архів';
$labels['settingstitle'] = 'Архів';
$labels['archivetype'] = 'Розділити архів по';
$labels['archivetypeyear'] = 'Рік (наприклад Архів/2012)';
$labels['archivetypemonth'] = 'Місяць (наприклад Архів/2012/06)';
$labels['archivetypefolder'] = 'Оригінальна тека';
$labels['archivetypesender'] = 'Відправник email';
$labels['unkownsender'] = 'невідомо';
$labels['readonarchive'] = 'Позначити повідомлення як прочитане по архіву';
PKvc�\�D�33archive/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Argyf';
$labels['buttontitle'] = 'Pleats yn argyf';
$labels['archived'] = 'Mei sukses nei argyf ferpleatst';
$labels['archivedreload'] = 'Mei sukses nei argyf ferpleatst. Ferfarskje dizze side om de nije argyf mappen te sjen.';
$labels['archiveerror'] = 'Guon berjochten koenen net ferpleatst wurde nei it argyf';
$labels['archivefolder'] = 'Argyf';
$labels['settingstitle'] = 'Argyf';
$labels['archivetype'] = 'Ferdiel argyf troch';
$labels['archivetypeyear'] = 'Jier (bygelyks Argyf/2012)';
$labels['archivetypemonth'] = 'Moanne (bygelyks Argyf/2012/06)';
$labels['archivetypefolder'] = 'Oarspronklike map';
$labels['archivetypesender'] = 'Stjoerder e-post';
$labels['unkownsender'] = 'ûnbekend';
$labels['readonarchive'] = 'Markearje it berjocht as lêzen op argyf';
PKvc�\�H�EYYarchive/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archiv';
$labels['buttontitle'] = 'Nachricht(en) archivieren';
$labels['archived'] = 'Nachricht(en) erfolgreich archiviert';
$labels['archivedreload'] = 'Nachrichten wurden archiviert. Laden Sie die Seite neu, um die neuen Archivordner zu sehen.';
$labels['archiveerror'] = 'Einige Nachrichten konnten nicht archiviert werden';
$labels['archivefolder'] = 'Archiv';
$labels['settingstitle'] = 'Archiv';
$labels['archivetype'] = 'Erstelle Unterordner nach';
$labels['archivetypeyear'] = 'Jahr (z.B. Archiv/2012)';
$labels['archivetypemonth'] = 'Monat (z.B. Archiv/2012/06)';
$labels['archivetypetbmonth'] = 'Monat - Kompatibel mit Thunderbird (z.B. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Originalordner';
$labels['archivetypefolderyear'] = 'Jahr und Originalordner (z.B. Archiv/2012/Yxz)';
$labels['archivetypefoldermonth'] = ' Jahr, Monat und Originalordner (z.B. Archiv/2012/06/Xyz)';
$labels['archivetypesender'] = 'Absender';
$labels['unkownsender'] = 'unbekannt';
$labels['readonarchive'] = 'Nachrichten beim Archivieren als gelesen markieren';
PKvc�\숶���archive/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivar';
$labels['buttontitle'] = 'Archivar este mensaje';
$labels['archived'] = 'Archivado exitosamente';
$labels['archivedreload'] = 'Archivado exitosamente. Recarga esta página para ver las nuevas carpetas';
$labels['archiveerror'] = 'Algunos mensajes no pudieron ser archivados';
$labels['archivefolder'] = 'Archivar';
$labels['settingstitle'] = 'Archivar';
$labels['archivetype'] = 'Dividir archivo por';
$labels['archivetypeyear'] = 'Año (ej. Archivo/2012)';
$labels['archivetypemonth'] = 'Mes (ej. Archivo/2012/06)';
$labels['archivetypefolder'] = 'Carpeta original';
$labels['archivetypesender'] = 'Remitente de correo electrónico';
$labels['unkownsender'] = 'desconocido';
PKvc�\�/%hharchive/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arxiv';
$labels['buttontitle'] = 'Bu xatni arxivlang';
$labels['archived'] = 'Arxivlandi';
$labels['archivedreload'] = 'Arxivlandi. Yangi arxiv papkalarini ko‘rish uchun sahifani qayta yuklang.';
$labels['archiveerror'] = 'Ba‘zi xatlarni arxivlab bo‘lmaydi.';
$labels['archivefolder'] = 'Arxiv';
$labels['settingstitle'] = 'Arxiv';
$labels['archivetype'] = 'Arxivni ... ga ko‘ra bo\'lish';
$labels['archivetypeyear'] = 'Yil (masalan Arxiv/2012)';
$labels['archivetypemonth'] = 'Oy (masalan Arxiv/2012/06)';
$labels['archivetypetbmonth'] = 'Oy Thunderbirdga moslangan (masalan Arxiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Asl papka';
$labels['archivetypesender'] = 'Jo‘natuvchi elektron manzili';
$labels['unkownsender'] = 'noma’lum';
$labels['readonarchive'] = 'Arxivda xatni o‘qilgan deb belgilang';
PKvc�\���V��archive/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Արխիվ';
$labels['buttontitle'] = 'Արխիվացնել այս հաղորդագրությունը';
$labels['archived'] = 'Բարեհաջող արխիվացվեց';
$labels['archivedreload'] = 'Բարեհաջող արխիվացվեց: Վերբեռնեք էջը նոր արխիվացված պանակները տեսնելու համար:';
$labels['archiveerror'] = 'Որոշ հաղորդագրություններ հնարավոր չէ արխիվացնել';
$labels['archivefolder'] = 'Արխիվ';
$labels['settingstitle'] = 'Արխիվ';
$labels['archivetype'] = 'Բաժանել արխիվը';
$labels['archivetypeyear'] = 'Տարեթիվ (օր.՝ Արխիվ/2012)';
$labels['archivetypemonth'] = 'Ամսաթիվ (օր.՝ Արխիվ/2012/06)';
$labels['archivetypefolder'] = 'Առաջին պանակը';
$labels['archivetypesender'] = 'Ուղարկողի էլ-փոստը';
$labels['unkownsender'] = 'անհայտ';
PKvc�\B���archive/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archive';
$labels['buttontitle'] = 'Archive this message';
$labels['archived'] = 'Successfully archived';
$labels['archivedreload'] = 'Successfully archived. Reload the page to see the new archive folders.';
$labels['archiveerror'] = 'Some messages could not be archived';
$labels['archivefolder'] = 'Archive';
$labels['settingstitle'] = 'Archive';
$labels['archivetype'] = 'Divide archive by';
$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)';
$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)';
$labels['archivetypefolder'] = 'Original folder';
$labels['archivetypesender'] = 'Sender email';
$labels['unkownsender'] = 'unknown';
PKvc�\e8//archive/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = '封存';
$labels['buttontitle'] = '封存此信件';
$labels['archived'] = '成功封存';
$labels['archivedreload'] = '封存動作完成。要重新載入頁面,才能看到新的封存資料夾';
$labels['archiveerror'] = '部分信件無法完成封存';
$labels['archivefolder'] = '封存';
$labels['settingstitle'] = '封存';
$labels['archivetype'] = '封存檔案切割方式:';
$labels['archivetypeyear'] = '年分 (例如: 封存/2012)';
$labels['archivetypemonth'] = '月分 (例如: 封存/2012/06)';
$labels['archivetypetbmonth'] = '月分 - 相容於 Thunderbird (例如: 封存/2012/2012-06)';
$labels['archivetypefolder'] = '原始資料夾';
$labels['archivetypefolderyear'] = '年份與原始資料夾(例如:Archive/2012/...)';
$labels['archivetypefoldermonth'] = '年份、月份與原始資料夾(例如:Archive/2012/06/...)';
$labels['archivetypesender'] = '寄件者電子信箱';
$labels['unkownsender'] = '未知';
$labels['readonarchive'] = '將封存的郵件標示為已讀取';
PKvc�\]��;;archive/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arxiva';
$labels['buttontitle'] = 'Arxiva aquest missatge';
$labels['archived'] = 'Arxivat correctament';
$labels['archivedreload'] = 'Arxivat correctament. Recarregueu la pàgina per veure les noves carpetes de l\'arxiu.';
$labels['archiveerror'] = 'Alguns missatges no s\'han pogut arxivar';
$labels['archivefolder'] = 'Arxiu';
$labels['settingstitle'] = 'Arxiu';
$labels['archivetype'] = 'Divideix l\'arxiu per';
$labels['archivetypeyear'] = 'Any (p.ex. Arxiu/2012)';
$labels['archivetypemonth'] = 'Mes (p.ex. Arxiu/2012/06)';
$labels['archivetypetbmonth'] = 'Mes - Compatible amb Thunderbird (p.ex. Arxiu/2012/2102-06)';
$labels['archivetypefolder'] = 'Carpeta original';
$labels['archivetypefolderyear'] = 'L\'any i la carpeta original (p.ex. Arxiu/2012/...)';
$labels['archivetypefoldermonth'] = 'L\'any, el mes i la carpeta original (p.ex. Arxiu/2012/06/...)';
$labels['archivetypesender'] = 'Adreça del remitent';
$labels['unkownsender'] = 'desconegut';
$labels['readonarchive'] = 'Marca el missatge com a llegit a l\'arxiu';
PKvc�\��
���archive/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivar';
$labels['buttontitle'] = 'Archivar iste message';
$labels['archived'] = 'Archivate con successo';
$labels['archivedreload'] = 'Archivate con successo. Recarga le pagina pro vider le nove dossieres de archivo.';
$labels['archiveerror'] = 'Alcun messages non poteva esser archivate';
$labels['archivefolder'] = 'Archivo';
$labels['settingstitle'] = 'Archivo';
$labels['archivetype'] = 'Divider le archivo per';
$labels['archivetypeyear'] = 'Anno (p.ex. Archivo/2012)';
$labels['archivetypemonth'] = 'Mense (p.ex. Archivo/2012/06)';
$labels['archivetypetbmonth'] = 'Mense - compatibile con Thunderbird (p.ex. Archivo/2012/2012-06)';
$labels['archivetypefolder'] = 'Dossier original';
$labels['archivetypesender'] = 'E-mail del expeditor';
$labels['unkownsender'] = 'incognite';
$labels['readonarchive'] = 'Marcar le message como legite in le archivo';
PKvc�\/(=���archive/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arhiva';
$labels['buttontitle'] = 'Arhiviraj ovu poruku';
$labels['archived'] = 'Arhiviranje uspješno';
$labels['archivedreload'] = 'Uspješno arhivirano. Ponovo učitajte stranicu da biste vidjeli nove foldere za arhiviranje.';
$labels['archiveerror'] = 'Neke poruke nisu mogle biti arhivirane';
$labels['archivefolder'] = 'Arhiva';
$labels['settingstitle'] = 'Arhiva';
$labels['archivetype'] = 'Podijeli arhivu po';
$labels['archivetypeyear'] = 'Godinama (npr. Arhiva/2012)';
$labels['archivetypemonth'] = 'Mjesecima (npr Arhiva/2012/06)';
$labels['archivetypefolder'] = 'Originalni folder';
$labels['archivetypesender'] = 'Email pošiljaoca';
$labels['unkownsender'] = 'nepoznato';
PKvc�\��#��archive/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архив';
$labels['buttontitle'] = 'Переместить выбранное в архив';
$labels['archived'] = 'Перенесено в Архив';
$labels['archivedreload'] = 'Успешно заархивировано. Обновите страницу, чтобы увидеть новые папки архива.';
$labels['archiveerror'] = 'Некоторые сообщения не могут быть заархивированы';
$labels['archivefolder'] = 'Архив';
$labels['settingstitle'] = 'Архив';
$labels['archivetype'] = 'Разделить архив по';
$labels['archivetypeyear'] = 'Год (например, Архив/2012)';
$labels['archivetypemonth'] = 'Месяц (например, Архив/2012/06)';
$labels['archivetypetbmonth'] = 'Месяц - совместимо с Thunderbird (например, Архив/2012/2012-06)';
$labels['archivetypefolder'] = 'Исходная папка';
$labels['archivetypefolderyear'] = 'Год и исходная папка (например, Архив/2012/...)';
$labels['archivetypefoldermonth'] = 'Год, месяц и исходная папка (например, Архив/2012/06/...)';
$labels['archivetypesender'] = 'Адрес отправителя';
$labels['unkownsender'] = 'неизвестно';
$labels['readonarchive'] = 'Помечать как прочитанное при архивировании';
PKvc�\�蹼��archive/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'بایگانی';
$labels['buttontitle'] = 'بایگانی این پیغام';
$labels['archived'] = 'با موفقیت بایگانی شد';
$labels['archivedreload'] = 'با کام‌یابی بایگانی شد. برای دیدن پوشه‌های بایگانی جدید صفحه را مجددا بارگذاری نمایید.';
$labels['archiveerror'] = 'برخی از پیام‌ها بایگانی نشدند.';
$labels['archivefolder'] = 'بایگانی';
$labels['settingstitle'] = 'بایگانی';
$labels['archivetype'] = 'تقسیم بایگانی با';
$labels['archivetypeyear'] = 'سال (به عنوان مثال بایگانی/۲۰۱۲)';
$labels['archivetypemonth'] = 'ماه (به عنوان مثال بایگانی/۲۰۱۲/۰۶)';
$labels['archivetypefolder'] = 'پوشه اصلی';
$labels['archivetypesender'] = 'رایانامه فرستنده';
$labels['unkownsender'] = 'ناشناخته';
PKvc�\��*W��archive/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Geymsla';
$labels['buttontitle'] = 'Setja þessi skilaboð í safngeymslu';
$labels['archived'] = 'Tókst að setja í geymslu';
$labels['archivedreload'] = 'Tókst að setja í geymslu. Endurlestu síðuna til að sjá nýju geymslumöppurnar.';
$labels['archiveerror'] = 'Ekki var hægt að setja öll skilaboð í safngeymslu';
$labels['archivefolder'] = 'Geymsla';
$labels['settingstitle'] = 'Geymsla';
$labels['archivetype'] = 'Skipta geymslu upp eftir';
$labels['archivetypeyear'] = 'ári (t.d. Geymsla/2012)';
$labels['archivetypemonth'] = 'mánuði (t.d. Geymsla/2012/06)';
$labels['archivetypetbmonth'] = 'mánuði - samhæft við Thunderbird (t.d. Geymsla/2012/2012-06)';
$labels['archivetypefolder'] = 'Upprunaleg mappa';
$labels['archivetypefolderyear'] = 'Ár og upprunaleg mappa (t.d. Geymsla/2012/...)';
$labels['archivetypefoldermonth'] = 'Ár, mánuður og upprunaleg mappa (t.d. Geymsla/2012/06/...)';
$labels['archivetypesender'] = 'Tölvupóstfang sendanda';
$labels['unkownsender'] = 'óþekkt';
$labels['readonarchive'] = 'Merkja skilaboð sem lesin þegar þau eru lesin í safni';
PKvc�\�Ғ::archive/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Lưu trữ';
$labels['buttontitle'] = 'Lưu lại bức thư này';
$labels['archived'] = 'Lưu lại thành công';
$labels['archivedreload'] = 'Đã lưu thành công. Tải lại trang này để thấy các thư mục lưu trữ mới.';
$labels['archiveerror'] = 'Một số thư không thể lưu lại được';
$labels['archivefolder'] = 'Lưu trữ';
$labels['settingstitle'] = 'Lưu trữ';
$labels['archivetype'] = 'Chia bộ lưu trữ bởi';
$labels['archivetypeyear'] = 'Năm (ví dụ: Lưu trữ/2012)';
$labels['archivetypemonth'] = 'Tháng (ví dụ: Lưu trữ/2012/06)';
$labels['archivetypefolder'] = 'Thư mục nguyên gốc';
$labels['archivetypesender'] = 'Địa chỉ thư điện tử của người gửi';
$labels['unkownsender'] = 'Không rõ';
PKvc�\@�P�JJarchive/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'ไม่ทราบ';
PKvc�\�	/���archive/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'الأرشيف';
$labels['buttontitle'] = 'أرشفة هذه الرسالة';
$labels['archived'] = 'أُرشفت بنجاح';
$labels['archivedreload'] = 'تمت أرشفته بنجاح. أعد تحميل الصفحة لمشاهدة مجلدات الأرشيف الجديدة.';
$labels['archiveerror'] = 'لا يمكن أرشفة بعض الرسائل';
$labels['archivefolder'] = 'الأرشيف';
$labels['settingstitle'] = 'الأرشيف';
$labels['archivetype'] = 'تقسيم الأرشيف ب';
$labels['archivetypeyear'] = 'السنة (على سبيل المثال. الأرشيف / 2012)';
$labels['archivetypemonth'] = 'الشهر (على سبيل المثال. الأرشيف / 2012 / 06)';
$labels['archivetypetbmonth'] = 'الشهر - متوافق مع Thunderbird (على سبيل المثال أرشيف / 2012 / 2012-06)';
$labels['archivetypefolder'] = 'المجلد الاصلي';
$labels['archivetypefolderyear'] = 'السنة والمجلد الأصلي (على سبيل المثال. الأرشيف / 2012 / ...)';
$labels['archivetypefoldermonth'] = 'السنة والشهر والمجلد الأصلي (على سبيل المثال. الأرشيف / 2012 / 06 / ...)';
$labels['archivetypesender'] = 'البريد المرسل';
$labels['unkownsender'] = 'مجهول';
$labels['readonarchive'] = 'ضع علامة على الرسالة كمقروءة في الأرشيف';
PKvc�\���DDarchive/localization/ms_MY.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'tidak diketahui';
PKvc�\2%����archive/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arxiv';
$labels['buttontitle'] = 'Mesajı arxivə göndər';
$labels['archived'] = 'Arxivə göndərildi';
$labels['archivedreload'] = 'Müvəffəqiyyətlə arxivləşdirildi. Yeni arxiv qovluqlarını görmək üçün səhifəni yeniləyin.';
$labels['archiveerror'] = 'Bəzi məktublar arxivləşdirilə bilinmirlər';
$labels['archivefolder'] = 'Arxiv';
$labels['settingstitle'] = 'Arxiv';
$labels['archivetype'] = 'Arxivi böl: ';
$labels['archivetypeyear'] = 'İl (məs. Arxiv/2012)';
$labels['archivetypemonth'] = 'Ay (məs. Arxiv/2012/06)';
$labels['archivetypefolder'] = 'Orijinal qovluq';
$labels['archivetypesender'] = 'Göndərənin E-Poçtu';
$labels['unkownsender'] = 'naməlum';
PKvc�\2��^^archive/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arsip';
$labels['buttontitle'] = 'Arsipkan pesan ini';
$labels['archived'] = 'Berhasil mengarsipkan';
$labels['archivedreload'] = 'Berhasil diarsipkan. Reload halaman untuk melihat folder arsip baru.';
$labels['archiveerror'] = 'Beberapa pesan tidak dapat diarsipkan';
$labels['archivefolder'] = 'Arsip';
$labels['settingstitle'] = 'Arsip';
$labels['archivetype'] = 'Pisah arsip berdasarkan';
$labels['archivetypeyear'] = 'Tahun (contoh: Arsip/2012)';
$labels['archivetypemonth'] = 'Bulan (contoh: Arsip/2012/06)';
$labels['archivetypetbmonth'] = 'Bulan - Kecocokan Thunderbird ( contoh: Arsip/2012/2012-06 )';
$labels['archivetypefolder'] = 'Folder asli';
$labels['archivetypesender'] = 'Email pengirim';
$labels['unkownsender'] = 'Tidak dikenal';
$labels['readonarchive'] = 'Tandai pesan telah dibaca di arsip';
PKvc�\��<�<<archive/localization/tzl.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'inschì';
PKvc�\
Utaaarchive/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archiválás';
$labels['buttontitle'] = 'Üzenet archiválása';
$labels['archived'] = 'Sikeres archiválás';
$labels['archivedreload'] = 'Az arhiválás sikeres. Frissitsd az oldalt, hogy lásd a létrejött arhivum mappákat.';
$labels['archiveerror'] = 'Néhány üzenetet nem sikerült arhiválni';
$labels['archivefolder'] = 'Archiválás';
$labels['settingstitle'] = 'Archiválás';
$labels['archivetype'] = 'Arhívum tovább bontása a következő szerint';
$labels['archivetypeyear'] = 'Év ( pl Arhívum/2012)';
$labels['archivetypemonth'] = 'Honap ( pl Arhívum/2012/06)';
$labels['archivetypetbmonth'] = 'Honap - Thunderbird kompatibilis ( pl Arhívum/2012/2012-06)';
$labels['archivetypefolder'] = 'Eredeti mappa';
$labels['archivetypefolderyear'] = 'Év és az eredeti mappa (pl: Archív/2012/...)';
$labels['archivetypefoldermonth'] = 'Év, hónap és az eredeti mappa  (pl: Archív/2012/06/...)';
$labels['archivetypesender'] = 'Feladó';
$labels['unkownsender'] = 'ismeretlen';
$labels['readonarchive'] = 'Üzenet olvasottként jelölése arhiváláskor';
PKvc�\�'�Sbbarchive/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arhivă';
$labels['buttontitle'] = 'Arhivează mesajul.';
$labels['archived'] = 'Arhivare reuşită.';
$labels['archivedreload'] = 'Arhivat cu succes. Reîncărcați pagina pentru a vedea noul dosar de arhivare.';
$labels['archiveerror'] = 'Unele mesaje nu au putut fi arhivate';
$labels['archivefolder'] = 'Arhivă';
$labels['settingstitle'] = 'Arhivă';
$labels['archivetype'] = 'Împarte arhiva pe';
$labels['archivetypeyear'] = 'Ani (ex. Arhiva/2013)';
$labels['archivetypemonth'] = 'Luni (ex. Arhiva/2013/06)';
$labels['archivetypetbmonth'] = 'Luni - Compatibil Thunderbird (ex. Arhivă/2012/2012-06)';
$labels['archivetypefolder'] = 'Dosar original';
$labels['archivetypesender'] = 'E-mail expeditor';
$labels['unkownsender'] = 'necunoscut';
$labels['readonarchive'] = 'Marchează mesajul ca citit în arhivă';
PKvc�\u7�archive/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkivigi';
$labels['buttontitle'] = 'Arkivigi ĉi tiun mesaĝon';
$labels['archived'] = 'Sukcese arkivigita';
$labels['archivefolder'] = 'Arkivo';
$labels['settingstitle'] = 'Arkivigi';
$labels['unkownsender'] = 'nekonata';
PKvc�\�DDarchive/localization/bn_BD.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'অজানা';
PKvc�\��n'ssarchive/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archiver';
$labels['buttontitle'] = 'Archiver ce courriel';
$labels['archived'] = 'Archivé avec succès';
$labels['archivedreload'] = 'Archivé avec succès. Recharger la page pour voir les nouveaux dossiers d’archives.';
$labels['archiveerror'] = 'Certains courriels n’ont pas pu être archivés.';
$labels['archivefolder'] = 'Archives';
$labels['settingstitle'] = 'Archives';
$labels['archivetype'] = 'Diviser l’archive par';
$labels['archivetypeyear'] = 'Année (p. ex. Archives/2012)';
$labels['archivetypemonth'] = 'Mois (p. ex. Archives/2012/06)';
$labels['archivetypetbmonth'] = 'Mois – compatible avec Thunderbird (p.ex. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Dossier original';
$labels['archivetypefolderyear'] = 'Année et le dossier original (p. ex. Archive/2012/…)';
$labels['archivetypefoldermonth'] = 'Année, mois et le dossier original (p. ex. Archive/2012/06/…)';
$labels['archivetypesender'] = 'Courriel de l’expéditeur';
$labels['unkownsender'] = 'inconnu';
$labels['readonarchive'] = 'Marquer le courriel comme lu lors de l’archivage';
PKvc�\;8���archive/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arhiva';
$labels['buttontitle'] = 'Arhiviraj poruku';
$labels['archived'] = 'Uspješno arhivirano';
$labels['archivedreload'] = 'Uspješno arhivirano. Osvježite stranicu kako biste vidjeli nove arhivske mape.';
$labels['archiveerror'] = 'Neke poruke nije bilo moguće arhivirati';
$labels['archivefolder'] = 'Arhiva';
$labels['settingstitle'] = 'Arhiva';
$labels['archivetype'] = 'Podijeli arhivu po';
$labels['archivetypeyear'] = 'Godina (npr. Arhiva/2012)';
$labels['archivetypemonth'] = 'Mjesec (e.g. Arhiva/2012/06)';
$labels['archivetypefolder'] = 'Izvorna mapa';
$labels['archivetypesender'] = 'E-mail adresa pošiljatelja';
$labels['unkownsender'] = 'nepoznato';
PKvc�\ma�UUarchive/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archiwum';
$labels['buttontitle'] = 'Przenieś do archiwum';
$labels['archived'] = 'Pomyślnie zarchiwizowano';
$labels['archivedreload'] = 'Pomyślnie zarchiwizowano. Odśwież stronę aby zobaczyć nowe foldery.';
$labels['archiveerror'] = 'Nie można zarchiwizować niektórych wiadomości';
$labels['archivefolder'] = 'Archiwum';
$labels['settingstitle'] = 'Archiwum';
$labels['archivetype'] = 'Podziel archiwum wg';
$labels['archivetypeyear'] = 'Roku (np. Archiwum/2012)';
$labels['archivetypemonth'] = 'Miesiąca (np. Archiwum/2012/06)';
$labels['archivetypetbmonth'] = 'Miesiąca - Kompatybilnie z Thunderbird (np. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Oryginalny folder';
$labels['archivetypefolderyear'] = 'Rok i folder wiadomości (np. Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Rok, miesiąc i folder wiadomości (np. Archive/2012/06/...)';
$labels['archivetypesender'] = 'E-mail nadawcy';
$labels['unkownsender'] = 'nieznany';
$labels['readonarchive'] = 'Podczas archiwizowania oznacz wiadomość jako przeczytaną';
PKvc�\7��"��archive/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'जतन केलेला';
$labels['buttontitle'] = 'हा संदेश जतन करा';
$labels['archived'] = 'यशस्वीरीत्या जतन केला';
$labels['archivefolder'] = 'जतन केलेला';
$labels['settingstitle'] = 'जतन केलेला';
$labels['unkownsender'] = 'माहित नसलेला';
PKvc�\���archive/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'アーカイブ';
$labels['buttontitle'] = 'このメッセージをアーカイブ';
$labels['archived'] = 'アーカイブしました。';
$labels['archivedreload'] = 'アーカイブしました。ページを再読み込みすると、新しいアーカイブのフォルダーを表示します。';
$labels['archiveerror'] = 'アーカイブできないメッセージがありました';
$labels['archivefolder'] = 'アーカイブ';
$labels['settingstitle'] = 'アーカイブ';
$labels['archivetype'] = 'アーカイブを分割: ';
$labels['archivetypeyear'] = '年 (例: アーカイブ/2012)';
$labels['archivetypemonth'] = '月 (例: アーカイブ/2012/06)';
$labels['archivetypetbmonth'] = '月 - Thunderbird互換 (例: アーカイブ/2012/2012-06)';
$labels['archivetypefolder'] = '元のフォルダー';
$labels['archivetypefolderyear'] = '年と元のフォルダー (例: アーカイブ/2012/...)';
$labels['archivetypefoldermonth'] = '年、月と元のフォルダー (例: アーカイブ/2012/06/...)';
$labels['archivetypesender'] = '電子メールの送信者';
$labels['unkownsender'] = '不明';
$labels['readonarchive'] = 'アーカイブでメッセージを既読に設定';
PKvc�\ܬ�CCarchive/localization/ps.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'نامعلوم';
PKvc�\�.qi��archive/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkiver';
$labels['buttontitle'] = 'Arkiver meldinga';
$labels['archived'] = 'Arkivert';
$labels['archivedreload'] = 'Arkivering vellukka. Last inn sida på nytt for å sjå dei nye arkivmappene.';
$labels['archiveerror'] = 'Nokre meldingar kunne ikkje arkiverast';
$labels['archivefolder'] = 'Arkiver';
$labels['settingstitle'] = 'Arkiv';
$labels['archivetype'] = 'Del arkiv etter';
$labels['archivetypeyear'] = 'År (f.eks. Arkiv/2012)';
$labels['archivetypemonth'] = 'Månad (f.eks. Arkiv/2012/06)';
$labels['archivetypefolder'] = 'Opprinneleg mappe';
$labels['archivetypesender'] = 'Avsendar';
$labels['unkownsender'] = 'ukjent';
PKvc�\�`}
��archive/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivu';
$labels['buttontitle'] = 'Archivar esti mensaxe';
$labels['archived'] = 'Archiváu con ésitu';
$labels['archivedreload'] = 'Archiváu con ésitu. Recarga la páxina pa ver les nueves carpetes d\'archivos.';
$labels['archiveerror'] = 'Nun pudieron archivase dalgunos mensaxes';
$labels['archivefolder'] = 'Archivu';
$labels['settingstitle'] = 'Archivu';
$labels['archivetype'] = 'Dividir l\'archivu por';
$labels['archivetypeyear'] = 'Añu (p.ex. Archivu/2012)';
$labels['archivetypemonth'] = 'Mes (p.ex. Archivu/2012/06)';
$labels['archivetypefolder'] = 'Carpeta orixinal';
$labels['archivetypesender'] = 'Corréu-e del remitente';
$labels['unkownsender'] = 'desconocíu';
PKvc�\ʞ�ttarchive/localization/kab.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Ḥrez';
$labels['buttontitle'] = 'Ḥrez izen-agi';
$labels['archived'] = 'Aḥraz yedda akken iwata';
$labels['archivefolder'] = 'Aḥraz';
$labels['settingstitle'] = 'Aḥraz';
$labels['archivetypeyear'] = 'Aseggas(md. Aḥraz/2012)';
$labels['archivetypesender'] = 'Imayl n umazan';
$labels['unkownsender'] = 'arussin';
PKvc�\��9*��archive/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архивирај';
$labels['buttontitle'] = 'Архивирај ову поруку';
$labels['archived'] = 'Успешно архивирано';
$labels['archivedreload'] = 'Успешно архивирано. Поново учитајте страну да видите нове архивиране фасцикле.';
$labels['archiveerror'] = 'Неке поруке се нису могле архивирати';
$labels['archivefolder'] = 'Архива';
$labels['settingstitle'] = 'Архивирање';
$labels['archivetype'] = 'Разврстај архиве по';
$labels['archivetypeyear'] = 'години (нпр. Архива/2015)';
$labels['archivetypemonth'] = 'месецу (нпр. Архива/2015/03)';
$labels['archivetypetbmonth'] = 'месецу - као Тандерберд (нпр. Архива/2012/2012-03)';
$labels['archivetypefolder'] = 'изворној фасцикли';
$labels['archivetypesender'] = 'адреси пошиљаоца';
$labels['unkownsender'] = 'непознато';
$labels['readonarchive'] = 'Поруку означи као прочитану при архивирању';
PKvc�\h��carchive/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivéieren';
$labels['buttontitle'] = 'Dëse Message archivéieren';
$labels['archived'] = 'Erfollegräich archivéiert';
$labels['archivedreload'] = 'Erfollegräich archivéiert. Lued d\'Säit nei fir déi neisten Archiv-Dossieren ze gesinn.';
$labels['archiveerror'] = 'Verschidde Messagë konnten net archivéiert ginn';
$labels['archivefolder'] = 'Archiv';
$labels['settingstitle'] = 'Archiv';
$labels['archivetype'] = 'Archiv dividéieren duerch';
$labels['archivetypeyear'] = 'Joer (z.B. Archiv/2013)';
$labels['archivetypemonth'] = 'Mount (z.B. Archiv/2013/06)';
$labels['archivetypetbmonth'] = 'Mount - Thunderbird kompatibel (z.B. Archiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Original-Dossier';
$labels['archivetypefolderyear'] = 'Joer an den original Dossier (z.B. Archiv/2012/...)';
$labels['archivetypefoldermonth'] = 'Joer, Mount an den original Dossier (z.B. Archiv/2012/...)';
$labels['archivetypesender'] = 'Sender-E-Mail';
$labels['unkownsender'] = 'onbekannt';
PKvc�\��JM��archive/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'ارشیو';
$labels['buttontitle'] = 'ارشیو این پیام';
$labels['archived'] = 'با موفقیت ارشیو شد';
$labels['archivefolder'] = 'ارشیو';
$labels['settingstitle'] = 'ارشیو';
$labels['archivetypefolder'] = 'پوشه اصلی';
$labels['archivetypesender'] = 'ایمیل فرستنده';
$labels['unkownsender'] = 'نا شناس';
PKvc�\������archive/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Diell';
$labels['buttontitle'] = 'Diellaouiñ ar gemennadenn-mañ';
$labels['archived'] = 'Diellaouet gant berzh';
$labels['archivedreload'] = 'Diellaouet gant berzh. Adkargit ar bajenn da welet an teuliad dielloù nevez.';
$labels['archiveerror'] = 'Ul lodenn eus ar c\'hemennadennoù n\'hallont ket bezañ diellaouet';
$labels['archivefolder'] = 'Diell';
$labels['settingstitle'] = 'Diell';
$labels['archivetype'] = 'Rannañ an diell dre';
$labels['archivetypeyear'] = 'Bloaz (sk: Diell/2012)';
$labels['archivetypemonth'] = 'Miz (sk: Diell/2012/06)';
$labels['archivetypefolder'] = 'Teuliad orin';
$labels['archivetypesender'] = 'Postel ar c\'haser';
$labels['unkownsender'] = 'dianav';
PKvc�\��GGarchive/localization/ka_GE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['unkownsender'] = 'უცნობი';
PKvc�\E}l�]]archive/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архива ';
$labels['buttontitle'] = 'Архивирај ја оваа порака ';
$labels['archived'] = 'Успешно архивирана ';
$labels['archivedreload'] = 'Успешно архивирано. Вчитај ја страната повторно за да ги видиш новите архивирани папки.';
$labels['archiveerror'] = 'Некои пораки не може да бидат архивирани ';
$labels['archivefolder'] = 'Архива ';
$labels['settingstitle'] = 'Архива ';
$labels['archivetype'] = 'Подели архива по ';
$labels['archivetypeyear'] = 'Година (пр. Архива/2012/06)';
$labels['archivetypemonth'] = 'Месец (пр. Архива/2012/06)';
$labels['archivetypefolder'] = 'Оригинална папка ';
$labels['archivetypesender'] = 'Електронска пошта на испраќач';
$labels['unkownsender'] = 'Непознато ';
$labels['readonarchive'] = 'Обележи ја пораката како прочитана на архивата ';
PKvc�\�l����archive/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'ប័ណ្ណសារ';
$labels['buttontitle'] = 'ធ្វើ​សារ​នេះ​ជា​បណ្ណសារ';
$labels['archived'] = 'ធ្វើ​ជា​បណ្ណសារ​បាន​សម្រេច';
$labels['archivedreload'] = 'ធ្វើ​ជា​បណ្ណសារ​បាន​សម្រេច។ ផ្ទុក​ទំព័រ​ឡើង​វិញ ដើម្បី​មើល​ថត​បណ្ណសារ​ថ្មី។';
$labels['archiveerror'] = 'សារ​ខ្លះ​មិន​អាច​ត្រូវ​បាន​ធ្វើ​ជា​បណ្ណសារ​ទេ';
$labels['archivefolder'] = 'ប័ណ្ណសារ';
$labels['settingstitle'] = 'បណ្ណសារ';
$labels['archivetype'] = 'ចែក​បណ្ណសារ​តាម';
$labels['archivetypeyear'] = 'ឆ្នាំ (ឧទា. បណ្ណសារ/2012)';
$labels['archivetypemonth'] = 'ខែ (ឧទា. បណ្ណសារ/2012/06)';
$labels['archivetypefolder'] = 'ថត​ដើម';
$labels['archivetypesender'] = 'អ្នក​ផ្ញើ​អ៊ីមែល';
$labels['unkownsender'] = 'មិន​ស្គាល់';
PKvc�\�A����archive/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Архив';
$labels['buttontitle'] = 'Энэ зурвасыг архивлах';
$labels['archived'] = 'Амжилттай архивлагдлаа';
$labels['archivedreload'] = 'Амжилттай архивлагдлаа. Хуудсыг дахин дуудаж шинэ үүссэн архив хавтсыг харна уу.';
$labels['archiveerror'] = 'Зарим зурвас архивлагдаж чадахгүй';
$labels['archivefolder'] = 'Архив';
$labels['settingstitle'] = 'Архив';
$labels['archivetype'] = 'Архивыг дараахаар ялга: ';
$labels['archivetypeyear'] = 'Он (жиш: Архив/2012)';
$labels['archivetypemonth'] = 'Сар (жиш: Архив/2012/06)';
$labels['archivetypefolder'] = 'Жинхэнэ хавтас';
$labels['archivetypesender'] = 'Илгээгчийн мэйл хаяг';
$labels['unkownsender'] = 'мэдэгдэхгүй';
PKvc�\IW�]]archive/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'ארכיון';
$labels['buttontitle'] = 'משלוח ההודעה לארכיב';
$labels['archived'] = 'עדכון הארכיון הצליח';
$labels['archivedreload'] = 'נשמר בהצלחה בארכיב. יש לרענו את הדף כדי לראות את התיקיות החדשות בארכיב.';
$labels['archiveerror'] = 'לא ניתן היה להעביר לארכיב חלק מההודעות';
$labels['archivefolder'] = 'ארכיון';
$labels['settingstitle'] = 'ארכיב';
$labels['archivetype'] = 'לחלק את הארכיב על ידי';
$labels['archivetypeyear'] = 'שנה ( לדוגמה, ארכיב/2012 )';
$labels['archivetypemonth'] = 'חודש ( לדוגמה, ארכיב/2012/06 )';
$labels['archivetypetbmonth'] = 'חודש - תואם תאנדרבירד ( לדוגמה, ארכיב/2012/2012-06 )';
$labels['archivetypefolder'] = 'תיקיה מקורית';
$labels['archivetypefolderyear'] = 'שנה ושם התיקיה המקורית ( לדוגמה, לקוחות/2012 )';
$labels['archivetypefoldermonth'] = 'שנה, חודש ושם התיקיה המקורית (לדוגמה, לקוחות/2012/06/.....)';
$labels['archivetypesender'] = 'שולח ההודעה';
$labels['unkownsender'] = 'לא ידוע';
$labels['readonarchive'] = 'יש לסמן את ההודעה בארכיב כאילו נקראה';
PKvc�\�i�Warchive/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Cuir sa chartlann';
$labels['buttontitle'] = 'Cuir an teachtaireacht seo sa chartlann';
$labels['archived'] = 'Curtha go ráthúil sa chartlann';
$labels['archivedreload'] = 'Curtha go ráthúil sa chartlann. Athluchtaigh an leathanach chun na fillteáin chartlainne nua a fheiceáil.';
$labels['archiveerror'] = 'Níorbh fhéidir roinnt teachtaireachtaí a chur sa chartlann';
$labels['archivefolder'] = 'An Chartlann';
$labels['settingstitle'] = 'Cartlann';
$labels['archivetype'] = 'Roinn an chartlann de réir';
$labels['archivetypeyear'] = 'Biiain (m.sh. Cartlann/2012)';
$labels['archivetypemonth'] = 'Mí (m.sh. Cartlann/2012/06)';
$labels['archivetypetbmonth'] = 'Mí - comhoiriúnach le Thunderbird (m.sh. Cartlann/2012/2012-06)';
$labels['archivetypefolder'] = 'An fillteán bunaidh';
$labels['archivetypesender'] = 'Seoladh ríomhphoist an tseoltóra';
$labels['unkownsender'] = 'anaithnid';
$labels['readonarchive'] = 'Rianaigh an teachtaireacht mar léite sa chartlann';
PKvc�\RJ�karchive/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkiv';
$labels['buttontitle'] = 'Arkivér denne besked';
$labels['archived'] = 'Succesfuldt arkiveret.';
$labels['archivedreload'] = 'Arkivering lykkedes. Genindlæs siden for at se den nye arkiv mappe.';
$labels['archiveerror'] = 'Nogle meddelelser kunne ikke arkiveres';
$labels['archivefolder'] = 'Arkiv';
$labels['settingstitle'] = 'Arkiver';
$labels['archivetype'] = 'Del arkiv med';
$labels['archivetypeyear'] = 'År (f.eks. Arkiv/2012)';
$labels['archivetypemonth'] = 'Måned (f.eks. Arkiv/2012/06)';
$labels['archivetypetbmonth'] = 'Måned - Thunderbird kompatibelt(f.eks. Arkiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Original mappe';
$labels['archivetypefolderyear'] = 'År og den originale mappe (f.eks. Arkiv/2012/...)';
$labels['archivetypefoldermonth'] = 'År, måned og den originale mappe (f.eks. Arkiv/2012/06/...)';
$labels['archivetypesender'] = 'Afsenders email';
$labels['unkownsender'] = 'ukendt';
$labels['readonarchive'] = 'Marker denne meddelelse som læst i arkivet';
PKvc�\�����archive/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arhiv';
$labels['buttontitle'] = 'Arhiviraj to sporočilo';
$labels['archived'] = 'Sporočilo je bilo uspešno arhivirano';
$labels['archivedreload'] = 'Uspešno  shranjeno v arhiv. Za pregled map v Arhivu ponovno naložite stran.';
$labels['archiveerror'] = 'Nekaterih sporočil ni bilo mogoče arhivirati';
$labels['archivefolder'] = 'Arhiv';
$labels['settingstitle'] = 'Arhiv';
$labels['archivetype'] = 'Razdeli arhiv glede na';
$labels['archivetypeyear'] = 'Leto (npr. Arhiv/2012)';
$labels['archivetypemonth'] = 'Mesec (npr. Arhiv/2012/06)';
$labels['archivetypetbmonth'] = 'Mesec - podprto tudi v odjemalcu Thunderbird (npr. Arhiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Izvorna mapa';
$labels['archivetypesender'] = 'Naslov pošiljatelja';
$labels['unkownsender'] = 'neznan';
$labels['readonarchive'] = 'Ob arhiviranju označi sporočilo kot prebrano';
PKvc�\�kb��archive/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'أرشفة';
$labels['buttontitle'] = 'أرشفة هذه الرسالة';
$labels['archived'] = 'تم أرشفة الرسالة بنجاح';
$labels['archivefolder'] = 'أرشفة';
$labels['settingstitle'] = 'أرشفة';
$labels['archivetype'] = 'تقسيم الأرشيف بحسب';
$labels['archivetypefolder'] = 'المجلد الأصلي';
$labels['unkownsender'] = 'مجهول';
PKvc�\Y��+��archive/localization/si_LK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'සංරක්‍ෂණය';
$labels['buttontitle'] = 'මෙම පණිවිඩය සංරක්‍ෂණය කරන්න';
$labels['archived'] = 'සංරක්‍ෂණය සාර්ථකයි';
$labels['archivefolder'] = 'සංරක්‍ෂණය';
$labels['settingstitle'] = 'සංරක්‍ෂණය';
$labels['unkownsender'] = 'නොදනී';
PKvc�\�-�gWWarchive/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Ar­chi­vie­ren';
$labels['buttontitle'] = 'Nachricht archivieren';
$labels['archived'] = 'Nachricht erfolgreich archiviert';
$labels['archivedreload'] = 'Erfolgreich archiviert. Bitte die Seite aktualisieren, um die neuen Archivordner zu sehen.';
$labels['archiveerror'] = 'Einige Nachrichten konnten nicht archiviert werden';
$labels['archivefolder'] = 'Archiv';
$labels['settingstitle'] = 'Archiv';
$labels['archivetype'] = 'Archiv aufteilen nach';
$labels['archivetypeyear'] = 'Jahr (z.B. Archiv/2012)';
$labels['archivetypemonth'] = 'Monat (z.B. Archiv/2012/06)';
$labels['archivetypetbmonth'] = 'Monat - Thunderbird-kompatibel (z.B. Archiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Originalordner';
$labels['archivetypefolderyear'] = 'Jahr und der Originalordner (z.B. Archiv/2012/...)';
$labels['archivetypefoldermonth'] = 'Jahr, Monat und der Originalordner (z.B. Archiv/2012/06/...)';
$labels['archivetypesender'] = 'Absender-E-Mail';
$labels['unkownsender'] = 'unbekannt';
$labels['readonarchive'] = 'Nachricht im Archiv als gelesen markieren';
PKvc�\����00archive/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arkivera';
$labels['buttontitle'] = 'Arkivera meddelande';
$labels['archived'] = 'Meddelandet är arkiverat';
$labels['archivedreload'] = 'Meddelandet är arkiverat. Uppdatera sidan för att se de nya arkivmapparna.';
$labels['archiveerror'] = 'Några meddelanden kunde inte arkiveras';
$labels['archivefolder'] = 'Arkiv';
$labels['settingstitle'] = 'Arkiv';
$labels['archivetype'] = 'Uppdelning av arkiv';
$labels['archivetypeyear'] = 'År (ex. Arkiv/2012)';
$labels['archivetypemonth'] = 'Månad (ex. Arkiv/2012/06)';
$labels['archivetypetbmonth'] = 'Månad - Anpassad för Thunderbird (ex. Arkiv/2012/2012-06)';
$labels['archivetypefolder'] = 'Ursprunglig mapp';
$labels['archivetypefolderyear'] = 'År och den ursprungliga mappen (t.ex. Arkiv/2012/...)';
$labels['archivetypefoldermonth'] = 'År, månad och den ursprungliga mappen (t.ex. Arkiv/2012/06/...)';
$labels['archivetypesender'] = 'Avsändaradress';
$labels['unkownsender'] = 'Okänd';
$labels['readonarchive'] = 'Markera meddelande som läst vid arkivering';
PKvc�\J�ɻ��archive/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'ئارخىپ';
$labels['buttontitle'] = 'بۇ خەتنى ئارخىپلاش';
$labels['archived'] = 'مۇۋاپىقىيەتلىك ئارخىپلاندى';
$labels['archivedreload'] = 'مۇۋاپىقىيەتلىك ئارخىپلاندى. بەتنى قايتا يۈكلەش ئارقىلىق يېڭى ئارخىپ قىسقۇچىنى كۆرۈڭ.';
$labels['archiveerror'] = 'بەزى خەتلەرنى ئارخىپلىغىلى بولمىدى';
$labels['archivefolder'] = 'ئارخىپ';
$labels['settingstitle'] = 'ئارخىپ';
$labels['archivetype'] = 'ئارخىپنى ئايرىش';
$labels['archivetypeyear'] = 'يىل (مەسلەن: ئارخىپ/2012)';
$labels['archivetypemonth'] = 'ئاي (مەسلەن: ئارخىپ/2012/06)';
$labels['archivetypetbmonth'] = 'ئاي - چاقماققۇشقا ماس (مەسلەن: ئارخىپ/2012/2012-06)';
$labels['archivetypefolder'] = 'ئەسلىي قىسقۇچ';
$labels['archivetypefolderyear'] = 'يىل ھەمدە ئەسلىي قىسقۇچ (مەسلەن: ئارخىپ/2012/...)';
$labels['archivetypefoldermonth'] = 'يىل، ئاي ھەمدە ئەسلىي قىسقۇچ (مەسلەن: ئارخىپ/2012/06/...)';
$labels['archivetypesender'] = 'ئەۋەتكۈچى ئېلىخېتى';
$labels['unkownsender'] = 'ناتۇنۇش';
$labels['readonarchive'] = 'خەتكە ئارخىپتا ئۇقۇغانلىق بەلگىسىنى قۇيۇش';
PKvc�\j�	���archive/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = '보관';
$labels['buttontitle'] = '이 메시지를 저장 편지함으로 이동';
$labels['archived'] = '성공적으로 저장함';
$labels['archivedreload'] = '성공적으로 저장되었습니다. 페이지를 다시 불러와서 새로운 저장 편지함 폴더를 확인하세요.';
$labels['archiveerror'] = '일부 메시지가 저장되지 않음';
$labels['archivefolder'] = '저장 편지함';
$labels['settingstitle'] = '저장 편지함';
$labels['archivetype'] = '저장 편지함 정리 기준';
$labels['archivetypeyear'] = '연도 (예: 저장 편지함/2012)';
$labels['archivetypemonth'] = '월 (예: 저장 편지함/2012/06)';
$labels['archivetypetbmonth'] = '월 - 썬더버드 호환 (예: 저장 편지함/2012/2012-06)';
$labels['archivetypefolder'] = '원본 폴더';
$labels['archivetypefolderyear'] = '연도 및 원본 폴더 (예: 저장 편지함/2012/...)';
$labels['archivetypefoldermonth'] = '연, 월 및 원본 폴더 (예: 저장 편지함/2012/06/...)';
$labels['archivetypesender'] = '발송자 이메일';
$labels['unkownsender'] = '알 수 없음';
$labels['readonarchive'] = '저장 편지함에서 메시지를 읽음으로 표시';
PKvc�\�3���archive/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arquivo';
$labels['buttontitle'] = 'Arquivar esta mensaxe';
$labels['archived'] = 'Aquivouse a mensaxe';
$labels['archivedreload'] = 'Arquivado correctamente. Recargua a páxina para ver os novos cartafoles de arquivado.';
$labels['archiveerror'] = 'Non se puideron arquivar algunhas mensaxes';
$labels['archivefolder'] = 'Arquivo';
$labels['settingstitle'] = 'Arquivar';
$labels['archivetype'] = 'Dividir o arquivo por';
$labels['archivetypeyear'] = 'Ano (p.ex. Arquivo/2012)';
$labels['archivetypemonth'] = 'Mes (p.ex. Arquivo/2012/06)';
$labels['archivetypefolder'] = 'Cartafol orixe';
$labels['archivetypesender'] = 'Enderezo da persoa remitente';
$labels['unkownsender'] = 'descoñecido';
PKvc�\
٭�JJarchive/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivio';
$labels['buttontitle'] = 'Archivia questo messaggio';
$labels['archived'] = 'Archiviato correttamente';
$labels['archivedreload'] = 'Archiviata con successo. Ricarica la pagina per visualizzare le nuove cartelle.';
$labels['archiveerror'] = 'Alcuni messaggi non possono essere archiviati';
$labels['archivefolder'] = 'Archivio';
$labels['settingstitle'] = 'Archivio';
$labels['archivetype'] = 'Dividi archivio per';
$labels['archivetypeyear'] = 'Anno (es. Archivio/2012)';
$labels['archivetypemonth'] = 'Mese (es. Archivio/2012/06)';
$labels['archivetypetbmonth'] = 'Mese - compatibile con Thunderbird (es Archivio/2012/2012-06)';
$labels['archivetypefolder'] = 'Cartella di origine';
$labels['archivetypefolderyear'] = 'Anno e la cartella originale (p.e. Archivio/2012/...)';
$labels['archivetypefoldermonth'] = 'Anno, mese e la cartella originale (p.e. Archivio/2012/06/...)';
$labels['archivetypesender'] = 'Mittente email';
$labels['unkownsender'] = 'sconosciuto';
$labels['readonarchive'] = 'Segna i messaggi in archivio come letti';
PKvc�\�Ĩ`NNarchive/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archivo';
$labels['buttontitle'] = 'Archivar este mensaje';
$labels['archived'] = 'Archivado correctamente';
$labels['archivedreload'] = 'Archivado correctamente. Recargue la página para ver las nuevas carpetas de archivo.';
$labels['archiveerror'] = 'No se pudo archivar algunos mensajes';
$labels['archivefolder'] = 'Archivo';
$labels['settingstitle'] = 'Archivo';
$labels['archivetype'] = 'Dividir el archivo por';
$labels['archivetypeyear'] = 'Año (p.ej. Archivo/2012)';
$labels['archivetypemonth'] = 'Mes (p.ej. Archivo/2012/06)';
$labels['archivetypetbmonth'] = 'Mes - Compatible con Thunderbird (ej. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Bandeja original';
$labels['archivetypefolderyear'] = 'Año y la carpeta original (p.ej. Archivo/2012/...)';
$labels['archivetypefoldermonth'] = 'Año, mes y la carpeta original (p.ej. Archivo/2012/06/...)';
$labels['archivetypesender'] = 'Correo electrónico del remitente';
$labels['unkownsender'] = 'desconocido';
$labels['readonarchive'] = 'Marcar el mensaje como leído al archivar';
PKvc�\��ƀ�archive/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'ശേഖരം';
$labels['buttontitle'] = 'ഈ മെസ്സേജ് ശേഖരിക്കുക';
$labels['archived'] = 'വിജയകരമായി ശേഖരിച്ചു';
$labels['archivefolder'] = 'ശേഖരം';
$labels['settingstitle'] = 'ശേഖരം';
$labels['unkownsender'] = 'അറിയാത്ത';
PKvc�\��j�??archive/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archief';
$labels['buttontitle'] = 'Archiveer dit bericht';
$labels['archived'] = 'Succesvol gearchiveerd';
$labels['archivedreload'] = 'Succesvol gearchiveerd. Herlaad de pagina om de nieuwe archiefmappen te bekijken.';
$labels['archiveerror'] = 'Sommige berichten kunnen niet gearchiveerd worden';
$labels['archivefolder'] = 'Archief';
$labels['settingstitle'] = 'Archiveren';
$labels['archivetype'] = 'Archief opdelen in';
$labels['archivetypeyear'] = 'Jaar (bijv. Archief/2012)';
$labels['archivetypemonth'] = 'Maand (bijv. Archief/2012/06)';
$labels['archivetypetbmonth'] = 'Maand - Thunderbird compatibel (bijv. Archief/2012/06)';
$labels['archivetypefolder'] = 'Originele map';
$labels['archivetypefolderyear'] = 'Jaar en de oorspronkelijke map (bv. Archief/2012/...)';
$labels['archivetypefoldermonth'] = 'Jaar, maand en de oorspronkelijke map (bv. Archief/2012/06/...)';
$labels['archivetypesender'] = 'Afzender e-mail';
$labels['unkownsender'] = 'onbekend';
$labels['readonarchive'] = 'Markeer bericht al gelezen op archiveren';
PKvc�\a�Bb..archive/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archif';
$labels['buttontitle'] = 'Archifo\'r neges hwn';
$labels['archived'] = 'Archifwyd yn llwyddiannus';
$labels['archivedreload'] = 'Archifwyd yn llwyddiannus. Ail-lwythwch y dudalen i weld ffolderi archif newydd.';
$labels['archiveerror'] = 'Nid oedd yn bosib archifo rhai negeseuon';
$labels['archivefolder'] = 'Archif';
$labels['settingstitle'] = 'Archif';
$labels['archivetype'] = 'Rhannu archif gyda';
$labels['archivetypeyear'] = 'Blwyddyn (e.g. Archif/2012)';
$labels['archivetypemonth'] = 'Mis (e.g. Archif/2012/06)';
$labels['archivetypetbmonth'] = 'Mis - Cydnaws a Thunderbird (e.e. Archif/2012/2012-06)';
$labels['archivetypefolder'] = 'Ffolder gwreiddiol';
$labels['archivetypefolderyear'] = 'Blwyddyn a ffolder gwreiddiol (e.e. Archif/2012/...)';
$labels['archivetypefoldermonth'] = 'Blwyddyn, mis a\'r ffolder gwreiddiol (e.e. Archif/2012/06...)';
$labels['archivetypesender'] = 'Ebost anfonwr';
$labels['unkownsender'] = 'anhysbys';
$labels['readonarchive'] = 'Nodi\'r neges fel darllenwyd ar archif';
PKvc�\�T,
archive/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archive';
$labels['buttontitle'] = 'Archive this message';
$labels['archived'] = 'Successfully archived';
$labels['archivedreload'] = 'Successfully archived. Reload the page to see the new archive folders.';
$labels['archiveerror'] = 'Some messages could not be archived';
$labels['archivefolder'] = 'Archive';
$labels['settingstitle'] = 'Archive';
$labels['archivetype'] = 'Divide archive by';
$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)';
$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)';
$labels['archivetypetbmonth'] = 'Month - Thunderbird compatible (e.g. Archive/2012/2012-06)';
$labels['archivetypefolder'] = 'Original folder';
$labels['archivetypefolderyear'] = 'Year and the original folder (e.g. Archive/2012/...)';
$labels['archivetypefoldermonth'] = 'Year, month and the original folder (e.g. Archive/2012/06/...)';
$labels['archivetypesender'] = 'Sender email';
$labels['unkownsender'] = 'unknown';
$labels['readonarchive'] = 'Mark the message as read on archive';
PKvc�\!��		archive/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Goym í skjalasavni';
$labels['buttontitle'] = 'Goym hetta boð í skjalasavni';
$labels['archived'] = 'Goymt í skjalasavn';
$labels['archivedreload'] = 'Goymt í skjalasavn. Les inn aftur síðu fyri at síggja nýggjar mappur';
$labels['archiveerror'] = 'Onkur boð kundu ikki leggjast í skjalagoymslu';
$labels['archivefolder'] = 'Goym í skjalasavni';
$labels['settingstitle'] = 'Goym í skjalasavni';
$labels['archivetype'] = 'Deil skjalagoymslu við';
$labels['archivetypeyear'] = 'Ár (t.d. Skjalagoymsla/2012)';
$labels['archivetypemonth'] = 'Mánar(t.d. Skjalahgoymsla/2012/06)';
$labels['archivetypefolder'] = 'Uppruna mappa';
$labels['archivetypesender'] = 'Sendara teldupostur';
$labels['unkownsender'] = 'ókent';
PKvc�\%��Ɯ�archive/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Archyvuoti';
$labels['buttontitle'] = 'Perkelti šį laišką į archyvą';
$labels['archived'] = 'Laiškas sėkmingai perkeltas į archyvą';
$labels['archivedreload'] = 'Sėkmingai perkelta į archyvą. Iš naujo įkelkite puslapį, kad pamatytumėt pasikeitimus.';
$labels['archiveerror'] = 'Į archyvą nepavyko perkelti keleto laiškų.';
$labels['archivefolder'] = 'Archyvuoti';
$labels['settingstitle'] = 'Archyvuoti';
$labels['archivetype'] = 'Padalinti archyvą pagal';
$labels['archivetypeyear'] = 'Metai (pvz. Archyvas/2012)';
$labels['archivetypemonth'] = 'Mėnesis (pvz. Archyvas/2012/06)';
$labels['archivetypetbmonth'] = 'Mėnesis - Suderinama su Thunderbird (pvz., Archyvas/2012/2012-06)';
$labels['archivetypefolder'] = 'Tikrasis aplankas';
$labels['archivetypefolderyear'] = 'Metai ir pradinis aplankas (pvz., Archyvas/2012/...)';
$labels['archivetypefoldermonth'] = 'Metai, mėnuo ir pradinis aplankas (pvz., Archyvas/2012/06/...)';
$labels['archivetypesender'] = 'Siuntėjo el. pašto adresas';
$labels['unkownsender'] = 'nežinomas';
$labels['readonarchive'] = 'Archyvuojant, žymėti laišką kaip skaitytą';
PKvc�\����++archive/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Arquivo';
$labels['buttontitle'] = 'Arquivar esta mensagem';
$labels['archived'] = 'Arquivada com sucesso';
$labels['archivedreload'] = 'Arquivado com sucesso. Recarregue a página para ver as novas pastas de arquivo.';
$labels['archiveerror'] = 'Algumas mensagens não puderam ser arquivadas';
$labels['archivefolder'] = 'Arquivo';
$labels['settingstitle'] = 'Arquivo';
$labels['archivetype'] = 'Dividir arquivo por';
$labels['archivetypeyear'] = 'Ano (ex. Arquivo/2012)';
$labels['archivetypemonth'] = 'Mês (ex. Arquivo/2012/06)';
$labels['archivetypetbmonth'] = 'Mês - Compatível com Thunderbird (ex. Arquivo/2012/2012-06)';
$labels['archivetypefolder'] = 'Pasta original';
$labels['archivetypefolderyear'] = 'Ano e pasta original (ex. Arquivo/2012/...)';
$labels['archivetypefoldermonth'] = 'Ano, mês e pasta original (ex. Arquivo/2012/06/...)';
$labels['archivetypesender'] = 'Email do remetente';
$labels['unkownsender'] = 'desconhecido';
$labels['readonarchive'] = 'Marcar a mensagem como lida ao arquivar';
PKvc�\���				archive/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/
*/

$labels['buttontext'] = 'Αρχειοθέτηση';
$labels['buttontitle'] = 'Αρχειοθέτηση μηνύματος';
$labels['archived'] = 'Αρχειοθετήθηκε με επιτυχία';
$labels['archivedreload'] = 'Επιτυχής αρχειοθέτηση. Ανανεώστε την σελίδα για να δείτε τους νέους φακέλους αρχειοθέτησης. ';
$labels['archiveerror'] = 'Ορισμένα μηνύματα δεν ήταν δυνατό να αρχειοθετηθούν. ';
$labels['archivefolder'] = 'Αρχειοθέτηση';
$labels['settingstitle'] = 'Αρχειοθέτηση';
$labels['archivetype'] = 'Τμηματοποίηση αρχείου με βάση';
$labels['archivetypeyear'] = 'Έτος (π.χ. Αρχείο/2012)';
$labels['archivetypemonth'] = 'Μήνα (π.χ. Αρχείο/2012/06)';
$labels['archivetypetbmonth'] = 'Μήνας - Συμβατός με Thunderbird (π.χ. Αρχείο/2012/2012-06)';
$labels['archivetypefolder'] = 'Αρχικός φάκελος';
$labels['archivetypefolderyear'] = 'Έτος και αρχικός φάκελος (π.χ. Φάκελος/2012/...)';
$labels['archivetypefoldermonth'] = 'Έτος, μήνας, και αρχικός φάκελος (π.χ. Φάκελος/2012/06/...)';
$labels['archivetypesender'] = 'Αποστολέας email';
$labels['unkownsender'] = 'άγνωστο';
$labels['readonarchive'] = 'Σημείωση του μηνύματος ως αναγνωσμένο στο αρχείο';
PKvc�\��WkOOarchive/archive.phpnu�[���<?php

/**
 * Archive
 *
 * Plugin that adds a new button to the mailbox toolbar
 * to move messages to a (user selectable) archive folder.
 *
 * @version 3.2
 * @license GNU GPLv3+
 * @author Andre Rodier, Thomas Bruederli, Aleksander Machniak
 */
class archive extends rcube_plugin
{
    public $task = 'settings|mail|login';

    private $archive_folder;
    private $folders;
    private $result;


    /**
     * Plugin initialization.
     */
    function init()
    {
        $rcmail = rcmail::get_instance();

        // register special folder type
        rcube_storage::$folder_types[] = 'archive';

        $this->archive_folder = $rcmail->config->get('archive_mbox');

        if ($rcmail->task == 'mail' && ($rcmail->action == '' || $rcmail->action == 'show') && $this->archive_folder) {
            $this->include_stylesheet($this->local_skin_path() . '/archive.css');
            $this->include_script('archive.js');
            $this->add_texts('localization', true);
            $this->add_button(
                [
                    'type'     => 'link',
                    'label'    => 'buttontext',
                    'command'  => 'plugin.archive',
                    'class'    => 'button buttonPas archive disabled',
                    'classact' => 'button archive',
                    'width'    => 32,
                    'height'   => 32,
                    'title'    => 'buttontitle',
                    'domain'   => $this->ID,
                    'innerclass' => 'inner',
                ],
                'toolbar');

            // register hook to localize the archive folder
            $this->add_hook('render_mailboxlist', [$this, 'render_mailboxlist']);

            // set env variables for client
            $rcmail->output->set_env('archive_folder', $this->archive_folder);
            $rcmail->output->set_env('archive_type', $rcmail->config->get('archive_type',''));
        }
        else if ($rcmail->task == 'mail') {
            // handler for ajax request
            $this->register_action('plugin.move2archive', [$this, 'move_messages']);
        }
        else if ($rcmail->task == 'settings') {
            $this->add_hook('preferences_list', [$this, 'prefs_table']);
            $this->add_hook('preferences_save', [$this, 'prefs_save']);

            if ($rcmail->action == 'folders' && $this->archive_folder) {
                $this->include_stylesheet($this->local_skin_path() . '/archive.css');
                $this->include_script('archive.js');
                // set env variables for client
                $rcmail->output->set_env('archive_folder', $this->archive_folder);
            }
        }
    }

    /**
     * Hook to give the archive folder a localized name in the mailbox list
     */
    function render_mailboxlist($p)
    {
        // set localized name for the configured archive folder
        if ($this->archive_folder && !rcmail::get_instance()->config->get('show_real_foldernames')) {
            if (isset($p['list'][$this->archive_folder])) {
                $p['list'][$this->archive_folder]['name'] = $this->gettext('archivefolder');
            }
            else {
                // search in subfolders
                $this->_mod_folder_name($p['list'], $this->archive_folder, $this->gettext('archivefolder'));
            }
        }

        return $p;
    }

    /**
     * Helper method to find the archive folder in the mailbox tree
     */
    private function _mod_folder_name(&$list, $folder, $new_name)
    {
        foreach ($list as $idx => $item) {
            if ($item['id'] == $folder) {
                $list[$idx]['name'] = $new_name;
                return true;
            }
            else if (!empty($item['folders'])) {
                if ($this->_mod_folder_name($list[$idx]['folders'], $folder, $new_name)) {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * Plugin action to move the submitted list of messages to the archive subfolders
     * according to the user settings and their headers.
     */
    function move_messages()
    {
        $rcmail = rcmail::get_instance();

        // only process ajax requests
        if (!$rcmail->output->ajax_call) {
            return;
        }

        $this->add_texts('localization');

        $storage        = $rcmail->get_storage();
        $delimiter      = $storage->get_hierarchy_delimiter();
        $threading      = (bool) $storage->get_threading();
        $read_on_move   = (bool) $rcmail->config->get('read_on_archive');
        $archive_type   = $rcmail->config->get('archive_type', '');
        $archive_prefix = $this->archive_folder . $delimiter;
        $search_request = rcube_utils::get_input_string('_search', rcube_utils::INPUT_GPC);
        $from_show_action = !empty($_POST['_from']) && $_POST['_from'] == 'show';

        // count messages before changing anything
        $old_count = 0;
        if (!$from_show_action) {
            $old_count = $storage->count(null, $threading ? 'THREADS' : 'ALL');
        }

        $sort_col = rcmail_action_mail_index::sort_column();
        $sort_ord = rcmail_action_mail_index::sort_order();
        $count    = 0;
        $uids     = null;

        // this way response handler for 'move' action will be executed
        $rcmail->action = 'move';
        $this->result   = [
            'reload'       => false,
            'error'        => false,
            'sources'      => [],
            'destinations' => [],
        ];

        foreach (rcmail::get_uids(null, null, $multifolder, rcube_utils::INPUT_POST) as $mbox => $uids) {
            if (!$this->archive_folder || $mbox === $this->archive_folder || strpos($mbox, $archive_prefix) === 0) {
                $count = count($uids);
                continue;
            }
            else if (!$archive_type || $archive_type == 'folder') {
                $folder = $this->archive_folder;

                if ($archive_type == 'folder') {
                    // compose full folder path
                    $folder .= $delimiter . $mbox;
                }

                // create archive subfolder if it doesn't yet exist
                $this->subfolder_worker($folder);

                $count += $this->move_messages_worker($uids, $mbox, $folder, $read_on_move);
            }
            else {
                if ($uids == '*') {
                    $index = $storage->index(null, $sort_col, $sort_ord);
                    $uids  = $index->get();
                }

                $messages = $storage->fetch_headers($mbox, $uids);
                $execute  = [];

                foreach ($messages as $message) {
                    $subfolder = null;
                    switch ($archive_type) {
                    case 'year':
                        $subfolder = $rcmail->format_date($message->timestamp, 'Y');
                        break;

                    case 'month':
                        $subfolder = $rcmail->format_date($message->timestamp, 'Y')
                            . $delimiter . $rcmail->format_date($message->timestamp, 'm');
                        break;

                    case 'tbmonth':
                        $subfolder = $rcmail->format_date($message->timestamp, 'Y')
                            . $delimiter . $rcmail->format_date($message->timestamp, 'Y')
                            . '-' . $rcmail->format_date($message->timestamp, 'm');
                        break;

                    case 'sender':
                        $subfolder = $this->sender_subfolder($message->get('from'));
                        break;

                    case 'folderyear':
                        $subfolder = $rcmail->format_date($message->timestamp, 'Y')
                            . $delimiter . $mbox;
                        break;

                    case 'foldermonth':
                        $subfolder = $rcmail->format_date($message->timestamp, 'Y')
                            . $delimiter . $rcmail->format_date($message->timestamp, 'm')
                            . $delimiter . $mbox;
                        break;
                    }

                    // compose full folder path
                    $folder = $this->archive_folder . ($subfolder ? $delimiter . $subfolder : '');

                    $execute[$folder][] = $message->uid;
                }

                foreach ($execute as $folder => $uids) {
                    // create archive subfolder if it doesn't yet exist
                    $this->subfolder_worker($folder);

                    $count += $this->move_messages_worker($uids, $mbox, $folder, $read_on_move);
                }
            }
        }

        if ($this->result['error']) {
            if (!$from_show_action) {
                $rcmail->output->command('list_mailbox');
            }

            $rcmail->output->show_message($this->gettext('archiveerror'), 'warning');
            $rcmail->output->send();
        }

        if (!empty($_POST['_refresh'])) {
            // FIXME: send updated message rows instead of reloading the entire list
            $rcmail->output->command('refresh_list');
            $addrows = false;
        }
        else {
            $addrows = true;
        }

        // refresh saved search set after moving some messages
        if ($search_request && $rcmail->storage->get_search_set()) {
            $_SESSION['search'] = $rcmail->storage->refresh_search();
        }

        if ($from_show_action) {
            if ($next = rcube_utils::get_input_string('_next_uid', rcube_utils::INPUT_GPC)) {
                $rcmail->output->command('show_message', $next);
            }
            else {
                $rcmail->output->command('command', 'list');
            }

            $rcmail->output->send();
        }

        $mbox           = $storage->get_folder();
        $msg_count      = $storage->count(null, $threading ? 'THREADS' : 'ALL');
        $exists         = $storage->count($mbox, 'EXISTS', true);
        $page_size      = $storage->get_pagesize();
        $page           = $storage->get_page();
        $pages          = ceil($msg_count / $page_size);
        $nextpage_count = $old_count - $page_size * $page;
        $remaining      = $msg_count - $page_size * ($page - 1);
        $quota_root     = $multifolder ? $this->result['sources'][0] : 'INBOX';
        $jump_back      = false;

        // jump back one page (user removed the whole last page)
        if ($page > 1 && $remaining == 0) {
            $page -= 1;
            $storage->set_page($page);
            $_SESSION['page'] = $page;
            $jump_back = true;
        }

        // update unread messages counts for all involved folders
        foreach ($this->result['sources'] as $folder) {
            rcmail_action_mail_index::send_unread_count($folder, true);
        }

        // update message count display
        $rcmail->output->set_env('messagecount', $msg_count);
        $rcmail->output->set_env('current_page', $page);
        $rcmail->output->set_env('pagecount', $pages);
        $rcmail->output->set_env('exists', $exists);
        $rcmail->output->command('set_quota', rcmail_action::quota_content(null, $quota_root));
        $rcmail->output->command('set_rowcount', rcmail_action_mail_index::get_messagecount_text($msg_count), $mbox);

        if ($threading) {
            $count = rcube_utils::get_input_string('_count', rcube_utils::INPUT_POST);
        }

        // add new rows from next page (if any)
        if ($addrows && $count && $uids != '*' && ($jump_back || $nextpage_count > 0)) {
            // #5862: Don't add more rows than it was on the next page
            $count = $jump_back ? null : min($nextpage_count, $count);

            $a_headers = $storage->list_messages($mbox, null, $sort_col, $sort_ord, $count);

            rcmail_action_mail_index::js_message_list($a_headers, false);
        }

        if ($this->result['reload']) {
            $rcmail->output->show_message($this->gettext('archivedreload'), 'confirmation');
        }
        else {
            $rcmail->output->show_message($this->gettext('archived'), 'confirmation');

            if (!$read_on_move) {
                foreach ($this->result['destinations'] as $folder) {
                    rcmail_action_mail_index::send_unread_count($folder, true);
                }
            }
        }

        // send response
        $rcmail->output->send();
    }

    /**
     * Move messages from one folder to another and mark as read if needed
     */
    private function move_messages_worker($uids, $from_mbox, $to_mbox, $read_on_move)
    {
        $storage = rcmail::get_instance()->get_storage();

        if ($read_on_move) {
            // don't flush cache (4th argument)
            $storage->set_flag($uids, 'SEEN', $from_mbox, true);
        }

        // move message to target folder
        if ($storage->move_message($uids, $to_mbox, $from_mbox)) {
            if (!in_array($from_mbox, $this->result['sources'])) {
                $this->result['sources'][] = $from_mbox;
            }
            if (!in_array($to_mbox, $this->result['destinations'])) {
                $this->result['destinations'][] = $to_mbox;
            }

            return count($uids);
        }

        $this->result['error'] = true;
    }

    /**
     * Create archive subfolder if it doesn't yet exist
     */
    private function subfolder_worker($folder)
    {
        $storage   = rcmail::get_instance()->get_storage();
        $delimiter = $storage->get_hierarchy_delimiter();

        if ($this->folders === null) {
            $this->folders = $storage->list_folders('', $this->archive_folder . '*', 'mail', null, true);
        }

        if (!in_array($folder, $this->folders)) {
            $path = explode($delimiter, $folder);

            // we'll create all folders in the path
            for ($i=0; $i<count($path); $i++) {
                $_folder = implode($delimiter, array_slice($path, 0, $i+1));
                if (!in_array($_folder, $this->folders)) {
                    if ($storage->create_folder($_folder, true)) {
                        $this->result['reload'] = true;
                        $this->folders[] = $_folder;
                    }
                }
            }
        }
    }

    /**
     * Hook to inject plugin-specific user settings
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function prefs_table($args)
    {
        $this->add_texts('localization');

        $rcmail        = rcmail::get_instance();
        $dont_override = $rcmail->config->get('dont_override', []);

        if ($args['section'] == 'folders' && !in_array('archive_mbox', $dont_override)) {
            $mbox = $rcmail->config->get('archive_mbox');
            $type = $rcmail->config->get('archive_type');

            // load folders list when needed
            if ($args['current']) {
                $select = rcmail_action::folder_selector([
                        'noselection'   => '---',
                        'realnames'     => true,
                        'maxlength'     => 30,
                        'folder_filter' => 'mail',
                        'folder_rights' => 'w',
                        'onchange'      => "if ($(this).val() == 'INBOX') $(this).val('')",
                        'class'         => 'custom-select',
                ]);
            }
            else {
                $select = new html_select();
            }

            $args['blocks']['main']['options']['archive_mbox'] = [
                'title'   => html::label('_archive_mbox', rcube::Q($this->gettext('archivefolder'))),
                'content' => $select->show($mbox, ['id' => '_archive_mbox', 'name' => '_archive_mbox'])
            ];

            // If the server supports only either messages or folders in a folder
            // we do not allow archive splitting, for simplicity (#5057)
            if ($rcmail->get_storage()->get_capability(rcube_storage::DUAL_USE_FOLDERS)) {
                // add option for structuring the archive folder
                $archive_type = new html_select(['name' => '_archive_type', 'id' => 'ff_archive_type', 'class' => 'custom-select']);
                $archive_type->add($this->gettext('none'), '');
                $archive_type->add($this->gettext('archivetypeyear'), 'year');
                $archive_type->add($this->gettext('archivetypemonth'), 'month');
                $archive_type->add($this->gettext('archivetypetbmonth'), 'tbmonth');
                $archive_type->add($this->gettext('archivetypesender'), 'sender');
                $archive_type->add($this->gettext('archivetypefolder'), 'folder');
                $archive_type->add($this->gettext('archivetypefolderyear'), 'folderyear');
                $archive_type->add($this->gettext('archivetypefoldermonth'), 'foldermonth');

                $args['blocks']['archive'] = [
                    'name'    => rcube::Q($this->gettext('settingstitle')),
                    'options' => [
                        'archive_type' => [
                            'title'   => html::label('ff_archive_type', rcube::Q($this->gettext('archivetype'))),
                            'content' => $archive_type->show($type)
                        ]
                    ]
                ];
            }
        }
        else if ($args['section'] == 'server' && !in_array('read_on_archive', $dont_override)) {
            $chbox = new html_checkbox(['name' => '_read_on_archive', 'id' => 'ff_read_on_archive', 'value' => 1]);
            $args['blocks']['main']['options']['read_on_archive'] = [
                'title'   => html::label('ff_read_on_archive', rcube::Q($this->gettext('readonarchive'))),
                'content' => $chbox->show($rcmail->config->get('read_on_archive') ? 1 : 0)
            ];
        }

        return $args;
    }

    /**
     * Hook to save plugin-specific user settings
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function prefs_save($args)
    {
        $rcmail        = rcmail::get_instance();
        $dont_override = $rcmail->config->get('dont_override', []);

        if ($args['section'] == 'folders' && !in_array('archive_mbox', $dont_override)) {
            $args['prefs']['archive_type'] = rcube_utils::get_input_string('_archive_type', rcube_utils::INPUT_POST);
        }
        else if ($args['section'] == 'server' && !in_array('read_on_archive', $dont_override)) {
            $args['prefs']['read_on_archive'] = (bool) rcube_utils::get_input_value('_read_on_archive', rcube_utils::INPUT_POST);
        }

        return $args;
    }

    /**
     * Create folder name from the message sender address
     */
    protected function sender_subfolder($from)
    {
        static $delim;
        static $vendor;
        static $skip_hidden;

        preg_match('/[\b<](.+@.+)[\b>]/i', $from, $m);

        if (empty($m[1])) {
            return $this->gettext('unkownsender');
        }

        if ($delim === null) {
            $rcmail      = rcmail::get_instance();
            $storage     = $rcmail->get_storage();
            $delim       = $storage->get_hierarchy_delimiter();
            $vendor      = $storage->get_vendor();
            $skip_hidden = $rcmail->config->get('imap_skip_hidden_folders');
        }

        // Remove some forbidden characters
        $regexp = '\\x00-\\x1F\\x7F%*';

        if ($vendor == 'cyrus') {
            // List based on testing Kolab's Cyrus-IMAP 2.5
            $regexp .= '!`(){}|\\?<;"';
        }

        $folder_name = preg_replace("/[$regexp]/", '', $m[1]);

        if ($skip_hidden && $folder_name[0] == '.') {
            $folder_name = substr($folder_name, 1);
        }

        $replace = $delim == '-' ? '_' : '-';
        $replacements = [$delim => $replace];

        // Cyrus-IMAP does not allow @ character in folder name
        if ($vendor == 'cyrus') {
            $replacements['@'] = $replace;
        }

        // replace reserved characters in folder name
        return strtr($folder_name, $replacements);
    }
}
PKvc�\��P��!virtuser_query/virtuser_query.phpnu�[���<?php

/**
 * DB based User-to-Email and Email-to-User lookup
 *
 * Add it to the plugins list in config.inc.php and set
 * SQL queries to resolve usernames, e-mail addresses and hostnames from the database
 * %u will be replaced with the current username for login.
 * %m will be replaced with the current e-mail address for login.
 *
 * Queries should select the user's e-mail address, username or the imap hostname as first column
 * The email query could optionally select identity data columns in specified order:
 *    name, organization, reply-to, bcc, signature, html_signature
 *
 * $config['virtuser_query'] = ['email' => '', 'user' => '', 'host' => '', 'alias' => ''];
 *
 * The email query can return more than one record to create more identities.
 * This requires identities_level option to be set to value less than 2.
 *
 * By default Roundcube database is used. To use different database (or host)
 * you can specify DSN string in $config['virtuser_query_dsn'] option.
 *
 * @author Aleksander Machniak <alec@alec.pl>
 * @author Steffen Vogel
 * @author Tim Gerundt
 * @license GNU GPLv3+
 */
class virtuser_query extends rcube_plugin
{
    private $config;
    private $app;
    private $db;

    function init()
    {
        $this->app    = rcmail::get_instance();
        $this->config = $this->app->config->get('virtuser_query');

        if (!empty($this->config)) {
            if (is_string($this->config)) {
                $this->config = ['email' => $this->config];
            }

            if (!empty($this->config['email'])) {
                $this->add_hook('user2email', [$this, 'user2email']);
            }
            if (!empty($this->config['user'])) {
                $this->add_hook('email2user', [$this, 'email2user']);
            }
            if (!empty($this->config['host'])) {
                $this->add_hook('authenticate', [$this, 'user2host']);
            }
            if (!empty($this->config['alias'])) {
                $this->add_hook('authenticate', [$this, 'alias2user']);
            }
        }
    }

    /**
     * User > Email
     */
    function user2email($p)
    {
        $dbh = $this->get_dbh();

        $sql_result = $dbh->query(preg_replace('/%u/', $dbh->escape($p['user']), $this->config['email']));
        $result     = [];

        while ($sql_arr = $dbh->fetch_array($sql_result)) {
            if (strpos($sql_arr[0], '@')) {
                if (!empty($p['extended']) && count($sql_arr) > 1) {
                    $result[] = [
                        'email'          => rcube_utils::idn_to_ascii($sql_arr[0]),
                        'name'           => $sql_arr[1] ?? '',
                        'organization'   => $sql_arr[2] ?? '',
                        'reply-to'       => isset($sql_arr[3]) ? rcube_utils::idn_to_ascii($sql_arr[3]) : '',
                        'bcc'            => isset($sql_arr[4]) ? rcube_utils::idn_to_ascii($sql_arr[4]) : '',
                        'signature'      => $sql_arr[5] ?? '',
                        'html_signature' => isset($sql_arr[6]) ? intval($sql_arr[6]) : 0,
                    ];
                }
                else {
                    $result[] = $sql_arr[0];
                }

                if (!empty($p['first'])) {
                    break;
                }
            }
        }

        $p['email'] = $result;

        return $p;
    }

    /**
     * EMail > User
     */
    function email2user($p)
    {
        $dbh = $this->get_dbh();

        $sql_result = $dbh->query(preg_replace('/%m/', $dbh->escape($p['email']), $this->config['user']));

        if ($sql_arr = $dbh->fetch_array($sql_result)) {
            $p['user'] = $sql_arr[0];
        }

        return $p;
    }

    /**
     * User > Host
     */
    function user2host($p)
    {
        $dbh = $this->get_dbh();

        $sql_result = $dbh->query(preg_replace('/%u/', $dbh->escape($p['user']), $this->config['host']));

        if ($sql_arr = $dbh->fetch_array($sql_result)) {
            $p['host'] = $sql_arr[0];
        }

        return $p;
    }

    /**
     * Alias > User
     */
    function alias2user($p)
    {
        $dbh = $this->get_dbh();

        $sql_result = $dbh->query(preg_replace('/%u/', $dbh->escape($p['user']), $this->config['alias']));

        if ($sql_arr = $dbh->fetch_array($sql_result)) {
            $p['user'] = $sql_arr[0];
        }

        return $p;
    }

    /**
     * Initialize database handler
     */
    function get_dbh()
    {
        if (!$this->db) {
            if ($dsn = $this->app->config->get('virtuser_query_dsn')) {
                // connect to the virtuser database
                $this->db = rcube_db::factory($dsn);
                $this->db->set_debug((bool)$this->app->config->get('sql_debug'));
                $this->db->db_connect('r'); // connect in read mode
            }
            else {
                $this->db = $this->app->get_dbh();
            }
        }

        return $this->db;
    }
}
PKvc�\&�+�wwvirtuser_query/composer.jsonnu�[���{
    "name": "roundcube/virtuser_query",
    "type": "roundcube-plugin",
    "description": "Plugin adds possibility to resolve user email/login according to lookup tables in SQL database.",
    "license": "GPL-3.0-or-later",
    "version": "2.0",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKvc�\�H�reconnect/readme.mdnu�[���# RoundCube Reconnect Plugin

RoundCube reconnect Plugin is a small plugin that will try to reconnect to an
IMAP server, if there is no explicit error code replied. If there is a know
failure like wrong password, no additional attempts are triggered. This should
help in cases, when the connection to the IMAP server is not 100% stable.

## Configuration

You can specify the maximum attempts to connect the IMAP server.

  // Maximum attempts to connect the IMAP server
  $config['reconnect_imap_max_attempts'] = 5;
PKvc�\k{0reconnect/composer.jsonnu�[���{
    "name": "reconnect",
    "type": "roundcube-plugin",
    "description": "Reconnects to server for several attempts.",
    "license": "GPL-3.0-or-later",
    "version": "0.2",
    "authors": [
        {
            "name": "Sandro Knauß",
            "email": "hefee@debian.org"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKvc�\�;�\��reconnect/reconnect.phpnu�[���<?php
/**
 * Roundcube Reconnect Plugin
 *
 * @version 0.2
 * @author Sandro Knauß <hefee@debian.org>
 * @license GPLv3+
 */
class reconnect extends rcube_plugin
{
    private $imap_max_attempts;

    /**
     * Plugin initialization
     */
    function init()
    {
        $this->add_hook('storage_connect', [$this, 'storage_connect']);
    }

    /**
     * Storage_connect hook handler
     */
    function storage_connect($args)
    {
        $rcmail = rcmail::get_instance();

        $this->load_config();

        $this->imap_max_attempts = $rcmail->config->get('reconnect_imap_max_attempts', 5);

        $args['retry'] = ($args['attempt'] <= $this->imap_max_attempts);

        if ($args['attempt'] == 1) {
            return $args;
        }

        $storage = rcmail::get_instance()->get_storage();

        switch ($storage->get_error_code()) {
        case rcube_imap_generic::ERROR_NO:
        case rcube_imap_generic::ERROR_BAD:
        case rcube_imap_generic::ERROR_BYE:
            $args['retry'] = false;
            break;
        }

        if ($args['retry']) {
            // if we do a new attempt, sleep 50 to 150ms before retry.
            usleep(rand(50*1000, 150*1000));
        }

        return $args;
    }
}
PKvc�\�bbreconnect/config.inc.php.distnu�[���<?php

// Maximum attempts to connect the IMAP server
$config['reconnect_imap_max_attempts'] = 5;
PKvc�\�t�oovirtuser_file/composer.jsonnu�[���{
    "name": "roundcube/virtuser_file",
    "type": "roundcube-plugin",
    "description": "Plugin adds possibility to resolve user email/login according to lookup tables in files.",
    "license": "GPL-3.0-or-later",
    "version": "1.0",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKvc�\#���

virtuser_file/virtuser_file.phpnu�[���<?php

/**
 * File based User-to-Email and Email-to-User lookup
 *
 * Add it to the plugins list in config.inc.php and set
 * path to a virtuser table file to resolve user names and e-mail
 * addresses
 * $rcmail['virtuser_file'] = '';
 *
 * @license GNU GPLv3+
 * @author Aleksander Machniak
 */
class virtuser_file extends rcube_plugin
{
    private $file;
    private $app;

    /**
     * Plugin initialization
     */
    function init()
    {
        $this->app  = rcmail::get_instance();
        $this->file = $this->app->config->get('virtuser_file');

        if ($this->file) {
            $this->add_hook('user2email', [$this, 'user2email']);
            $this->add_hook('email2user', [$this, 'email2user']);
        }
    }

    /**
     * User > Email
     */
    function user2email($p)
    {
        $r = $this->findinvirtual('/\s' . preg_quote($p['user'], '/') . '\s*$/');
        $result = [];

        for ($i=0; $i<count($r); $i++) {
            $arr = preg_split('/\s+/', $r[$i]);

            if (count($arr) > 0 && strpos($arr[0], '@')) {
                $result[] = rcube_utils::idn_to_ascii(trim(str_replace('\\@', '@', $arr[0])));

                if (!empty($p['first'])) {
                    $p['email'] = $result[0];
                    break;
                }
            }
        }

        $p['email'] = empty($result) ? null : $result;

        return $p;
    }

    /**
     * Email > User
     */
    function email2user($p)
    {
        $r = $this->findinvirtual('/^' . preg_quote($p['email'], '/') . '\s/');

        for ($i=0; $i<count($r); $i++) {
            $arr = preg_split('/\s+/', trim($r[$i]));

            if (count($arr) > 0) {
                $p['user'] = trim($arr[count($arr)-1]);
                break;
            }
        }

        return $p;
    }

    /**
     * Find matches of the given pattern in virtuser file
     *
     * @param string $pattern Regular expression to search for
     *
     * @return array Matching entries
     */
    private function findinvirtual($pattern)
    {
        $result  = [];
        $virtual = null;

        if ($this->file) {
            $virtual = file($this->file);
        }

        if (empty($virtual)) {
            return $result;
        }

        // check each line for matches
        foreach ($virtual as $line) {
            $line = trim($line);
            if (empty($line) || $line[0] == '#') {
                continue;
            }

            if (preg_match($pattern, $line)) {
                $result[] = $line;
            }
        }

        return $result;
    }
}
PKvc�\���3��(additional_message_headers/composer.jsonnu�[���{
    "name": "roundcube/additional_message_headers",
    "type": "roundcube-plugin",
    "description": "Very simple plugin which will add additional headers to or remove them from outgoing messages.",
    "license": "GPL-3.0-or-later",
    "version": "1.2.1",
    "authors": [
        {
            "name": "Ziba Scott",
            "email": "email@example.org",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKvc�\]��]]9additional_message_headers/additional_message_headers.phpnu�[���<?php

/**
 * Additional Message Headers
 *
 * Very simple plugin which will add additional headers
 * to or remove them from outgoing messages.
 *
 * Enable the plugin in config.inc.php and add your desired headers:
 * $config['additional_message_headers'] = ['User-Agent' => 'My-Very-Own-Webmail'];
 *
 * @author Ziba Scott
 * @website http://roundcube.net
 */
class additional_message_headers extends rcube_plugin
{
    /**
     * Plugin initialization
     */
    function init()
    {
        $this->add_hook('message_before_send', [$this, 'message_headers']);
    }

    /**
     * 'message_before_send' hook handler
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function message_headers($args)
    {
        $this->load_config();

        $rcube = rcube::get_instance();

        // additional email headers
        $additional_headers = $rcube->config->get('additional_message_headers', []);

        if (!empty($additional_headers)) {
            $args['message']->headers($additional_headers, true);
        }

        return $args;
    }
}
PKvc�\����<<.additional_message_headers/config.inc.php.distnu�[���<?php

// $config['additional_message_headers']['X-Remote-Browser'] = $_SERVER['HTTP_USER_AGENT'];
// $config['additional_message_headers']['X-Originating-IP'] = '[' . $_SERVER['REMOTE_ADDR'] .']';
// $config['additional_message_headers']['X-RoundCube-Server'] = $_SERVER['SERVER_ADDR'];

// if( isset( $_SERVER['MACHINE_NAME'] )) {
//     $config['additional_message_headers']['X-RoundCube-Server'] .= ' (' . $_SERVER['MACHINE_NAME'] . ')';
// }

// To remove (e.g. X-Sender) message header use null value
// $config['additional_message_headers']['X-Sender'] = null;

?>
PKvc�\����??debug_logger/runlog/runlog.phpnu�[���<?php

/**
 * runlog
 *
 * @author Ziba Scott <ziba@umich.edu>
 */
class runlog {

    private $start_time     = false;
    private $parent_stack   = [];
    private $file_handles   = [];
    private $debug_messages = [];
    private $indent         = 0;
    private $run_log        = [];

    public $print_to_console = false;
    public $threshold        = 0;
    public $tag_count        = [];
    public $timestamp        = "d-M-Y H:i:s O";
    public $max_line_size    = 150;

    function __construct()
    {
        $this->start_time = microtime(true);
    }

    public function start($name, $tag = false)
    {
        $this->run_log[] = [
            'type'    => 'start',
            'tag'     => $tag,
            'index'   => count($this->run_log),
            'value'   => $name,
            'time'    => microtime(true),
            'parents' => $this->parent_stack,
            'ended'   => false,
        ];

        $this->parent_stack[] = $name;

        $this->print_to_console("start: ".$name, $tag);
        $this->print_to_file("start: ".$name, $tag);
        $this->indent++;
    }

    public function end()
    {
        $name  = array_pop($this->parent_stack);
        $lastk = 0;

        foreach ($this->run_log as $k => $entry) {
            if ($entry['value'] == $name && $entry['type'] == 'start' && !$entry['ended']) {
                $lastk = $k;
            }
        }

        $start = $this->run_log[$lastk]['time'];
        $this->run_log[$lastk]['duration'] = microtime(true) - $start;
        $this->run_log[$lastk]['ended'] = true;
        $this->run_log[] = [
            'type'     => 'end',
            'tag'      =>  $this->run_log[$lastk]['tag'],
            'index'    => $lastk,
            'value'    => $name,
            'time'     => microtime(true),
            'duration' => microtime(true) - $start,
            'parents'  => $this->parent_stack,
        ];

        $this->indent--;
        if ($this->run_log[$lastk]['duration'] >= $this->threshold) {
            $tag_report = "";
            foreach ($this->tag_count as $tag => $count){
                $tag_report .= "$tag: $count, ";
            }
            $end_txt = sprintf("end: $name - %0.4f seconds $tag_report", $this->run_log[$lastk]['duration']);
            $this->print_to_console($end_txt, $this->run_log[$lastk]['tag']);
            $this->print_to_file($end_txt,  $this->run_log[$lastk]['tag']);
        }
    }

    public function increase_tag_count($tag)
    {
        if (!isset($this->tag_count[$tag])) {
            $this->tag_count[$tag] = 0;
        }

        $this->tag_count[$tag]++;
    }

    public function get_text()
    {
        $text = "";
        foreach ($this->run_log as $entry){
            $text .= str_repeat("   ", count($entry['parents']));
            if ($entry['tag'] != 'text') {
                $text .= $entry['tag'] . ': ';
            }
            $text .= $entry['value'];

            if ($entry['tag'] == 'end') {
                $text .= sprintf(" - %0.4f seconds", $entry['duration']);
            }

            $text .= "\n";
        }

        return $text;
    }

    public function set_file($filename, $tag = 'master')
    {
        if (!isset($this->file_handles[$tag])) {
            $this->file_handles[$tag] = fopen($filename, 'a');
            if (!$this->file_handles[$tag]) {
                trigger_error("Could not open file for writing: $filename");
            }
        }
    }

    public function note($msg, $tag = false)
    {
        if ($tag) {
            $this->increase_tag_count($tag);
        }
        if (is_array($msg)) {
            $msg = '<pre>' . print_r($msg, true) . '</pre>';
        }
        $this->debug_messages[] = $msg;
        $this->run_log[] = [
            'type'    => 'note',
            'tag'     => $tag ?: 'text',
            'value'   => htmlentities($msg),
            'time'    => microtime(true),
            'parents' => $this->parent_stack,
        ];

        $this->print_to_file($msg, $tag);
        $this->print_to_console($msg, $tag);
    }

    public function print_to_file($msg, $tag = false)
    {
        $file_handle_tag = $tag ?: 'master';

        if ($file_handle_tag != 'master' && isset($this->file_handles[$file_handle_tag])) {
            $buffer = $this->get_indent();
            $buffer .= "$msg\n";
            if (!empty($this->timestamp)) {
                $buffer = sprintf("[%s] %s", date($this->timestamp, time()), $buffer);
            }
            fwrite($this->file_handles[$file_handle_tag], wordwrap($buffer, $this->max_line_size, "\n     "));
        }

        if (isset($this->file_handles['master']) && $this->file_handles['master']) {
            $buffer = $this->get_indent();
            if ($tag) {
                $buffer .= "$tag: ";
            }
            $msg = str_replace("\n", "", $msg);
            $buffer .= "$msg";
            if (!empty($this->timestamp)) {
                $buffer = sprintf("[%s] %s", date($this->timestamp, time()), $buffer);
            }
            if(strlen($buffer) > $this->max_line_size){
                $buffer = substr($buffer,0,$this->max_line_size - 3) . "...";
            }
            fwrite($this->file_handles['master'], $buffer."\n");
        }
    }

    public function print_to_console($msg, $tag = false)
    {
        if ($this->print_to_console) {
            if (is_array($this->print_to_console)) {
                if (in_array($tag, $this->print_to_console)) {
                    echo $this->get_indent();
                    if ($tag) {
                        echo "$tag: ";
                    }
                    echo "$msg\n";
                }
            }
            else {
                echo $this->get_indent();
                if ($tag) {
                    echo "$tag: ";
                }
                echo "$msg\n";
            }
        }
    }

    private function get_indent()
    {
        $buf = "";
        for ($i = 0; $i < $this->indent; $i++) {
            $buf .= "  ";
        }
        return $buf;
    }

    function  __destruct()
    {
        foreach ($this->file_handles as $handle) {
            fclose($handle);
        }
    }
}
PKvc�\Z5����debug_logger/composer.jsonnu�[���{
    "name": "roundcube/debug_logger",
    "type": "roundcube-plugin",
    "description": "Enhanced logging for debugging purposes. It is not recommended to be enabled on production systems without testing because of the somewhat increased memory, cpu and disk i/o overhead.",
    "license": "GPL-3.0-or-later",
    "version": "1.0",
    "authors": [
        {
            "name": "Ziba Scott",
            "email": "ziba@umich.edu",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKvc�\������debug_logger/debug_logger.phpnu�[���<?php

/**
 * Debug Logger
 *
 * Enhanced logging for debugging purposes.  It is not recommended
 * to be enabled on production systems without testing because of
 * the somewhat increased memory, cpu and disk i/o overhead.
 *
 * Debug Logger listens for existing rcube::console() calls and
 * introduces start and end tags as well as free form tagging
 * which can redirect messages to files.  The resulting log files
 * provide timing and tag quantity results.
 *
 * Enable the plugin in config.inc.php and add your desired
 * log types and files.
 *
 * @author Ziba Scott
 * @website http://roundcube.net
 *
 * Example:
 *
 *   // $config['debug_logger'][type of logging] = name of file in log_dir
 *   // The 'master' log includes timing information
 *   $config['debug_logger']['master'] = 'master';
 *   // If you want sql messages to also go into a separate file
 *   $config['debug_logger']['sql'] = 'sql';
 *
 * index.php (just after $RCMAIL->plugins->init()):
 *
 *   rcube::console("my test","start");
 *   rcube::console("my message");
 *   rcube::console("my sql calls","start");
 *   rcube::console("cp -r * /dev/null","shell exec");
 *   rcube::console("select * from example","sql");
 *   rcube::console("select * from example","sql");
 *   rcube::console("select * from example","sql");
 *   rcube::console("end");
 *   rcube::console("end");
 *
 * logs/master (after reloading the main page):
 *
 *   [17-Feb-2009 16:51:37 -0500] start: Task: mail.
 *   [17-Feb-2009 16:51:37 -0500]   start: my test
 *   [17-Feb-2009 16:51:37 -0500]     my message
 *   [17-Feb-2009 16:51:37 -0500]     shell exec: cp -r * /dev/null
 *   [17-Feb-2009 16:51:37 -0500]     start: my sql calls
 *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
 *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
 *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
 *   [17-Feb-2009 16:51:37 -0500]     end: my sql calls - 0.0018 seconds shell exec: 1, sql: 3, 
 *   [17-Feb-2009 16:51:37 -0500]   end: my test - 0.0055 seconds shell exec: 1, sql: 3, 
 *   [17-Feb-2009 16:51:38 -0500] end: Task: mail.  - 0.8854 seconds shell exec: 1, sql: 3, 
 *
 * logs/sql (after reloading the main page):
 *
 *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
 *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
 *   [17-Feb-2009 16:51:37 -0500]       sql: select * from example
 */
class debug_logger extends rcube_plugin
{
    protected $runlog;

    function init()
    {
        require_once(__DIR__ . '/runlog/runlog.php');

        $this->runlog = new runlog();

        if (!rcmail::get_instance()->config->get('log_dir')) {
            rcmail::get_instance()->config->set('log_dir', INSTALL_PATH . 'logs');
        }

        $log_config = rcmail::get_instance()->config->get('debug_logger', []);
        $log_dir    = rcmail::get_instance()->config->get('log_dir');

        foreach ($log_config as $type => $file) {
            $this->runlog->set_file($log_dir . '/' . $file, $type);
        }

        $start_string = '';
        $action = rcmail::get_instance()->action;
        $task   = rcmail::get_instance()->task;

        if ($action) {
            $start_string .= "Action: {$action}. ";
        }

        if ($task) {
            $start_string .= "Task: {$task}. ";
        }

        $this->runlog->start($start_string);

        $this->add_hook('console', [$this, 'console']);
        $this->add_hook('authenticate', [$this, 'authenticate']);
    }

    function authenticate($args)
    {
        $this->runlog->note('Authenticating '.$args['user'].'@'.$args['host']);
        return $args;
    }

    function console($args)
    {
        $note = $args['args'][0];

        if (!empty($args['args'][1])) {
            $type = $args['args'][1];
        }
        else {
            // This could be extended to detect types based on the
            // file which called console. For now only rcube_imap/rcube_storage is supported
            $bt   = debug_backtrace();
            $file = count($bt) >= 2 ? $bt[2]['file'] : '';

            switch (basename($file)) {
                case 'rcube_imap.php':
                    $type = 'imap';
                    break;
                case 'rcube_storage.php':
                    $type = 'storage';
                    break;
                default:
                    $type = false;
                    break;
            }
        }

        switch ($note) {
            case 'end':
                $type = 'end';
                break;
        }

        switch ($type) {
            case 'start':
                $this->runlog->start($note);
                break;
            case 'end':
                $this->runlog->end();
                break;
            default:
                $this->runlog->note($note, $type);
                break;
        }

        return $args;
    }

    function __destruct()
    {
        if ($this->runlog) {
            $this->runlog->end();
        }
    }
}
PKvc�\��ZE""autologon/autologon.phpnu�[���<?php

/**
 * Sample plugin to try out some hooks.
 * This performs an automatic login if accessed from localhost
 *
 * @license GNU GPLv3+
 * @author Thomas Bruederli
 */
class autologon extends rcube_plugin
{
    public $task = 'login';

    /**
     * Plugin initialization
     */
    public function init()
    {
        $this->add_hook('startup', [$this, 'startup']);
        $this->add_hook('authenticate', [$this, 'authenticate']);
    }

    /**
     * 'startup' hook handler
     *
     * @param array $args Hook arguments
     *
     * @return array Hook arguments
     */
    function startup($args)
    {
        // change action to login
        if (empty($_SESSION['user_id']) && !empty($_GET['_autologin']) && $this->is_localhost()) {
            $args['action'] = 'login';
        }

        return $args;
    }

    /**
     * 'authenticate' hook handler
     *
     * @param array $args Hook arguments
     *
     * @return array Hook arguments
     */
    function authenticate($args)
    {
        if (!empty($_GET['_autologin']) && $this->is_localhost()) {
            $args['user']        = 'me';
            $args['pass']        = '******';
            $args['host']        = 'localhost';
            $args['cookiecheck'] = false;
            $args['valid']       = true;
        }

        return $args;
    }

    /**
     * Checks if the request comes from localhost
     *
     * @return bool
     */
    private function is_localhost()
    {
        return $_SERVER['REMOTE_ADDR'] == '::1' || $_SERVER['REMOTE_ADDR'] == '127.0.0.1';
    }
}
PKvc�\�0��::autologon/composer.jsonnu�[���{
    "name": "roundcube/autologon",
    "type": "roundcube-plugin",
    "description": "Sample plugin to try out some hooks",
    "license": "GPL-3.0-or-later",
    "version": "1.0",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKvc�\�߳*��emoticons/composer.jsonnu�[���{
    "name": "roundcube/emoticons",
    "type": "roundcube-plugin",
    "description": "Plugin that adds emoticons support.",
    "license": "GPL-3.0-or-later",
    "version": "3.0",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        },
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Developer"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKvc�\����� emoticons/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = '显示纯文本消息的表情';
$labels['emoticonscompose'] = '启用表情';
PKvc�\����� emoticons/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Показвай емотикони в съобщения с обикновен текст';
$labels['emoticonscompose'] = 'Разреши емотикони';
PKvc�\{�G�� emoticons/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels = [];
$labels['emoticonsdisplay'] = 'Display emoticons in plain text messages';
$labels['emoticonscompose'] = 'Enable emoticons';
PKvc�\�OEG�� emoticons/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Näytä hymiöt "pelkkä teksti"-viesteissä';
$labels['emoticonscompose'] = 'Käytä hymiöitä';
PKvc�\+�y�� emoticons/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Vis emojier i ren tekst meldinger';
$labels['emoticonscompose'] = 'Aktiver emoji';
PKvc�\Y�y֣� emoticons/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Shfaqi emotikonet në mesazhe tekst të thjeshtë';
$labels['emoticonscompose'] = 'Aktivizoni emotikonet';
PKvc�\�� emoticons/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Näita lihttekst kirjas emotikone';
$labels['emoticonscompose'] = 'Luba emotikonid';
PKvc�\�ȵ�� emoticons/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'وێنۆچکەی هەستەکان لە دەقی نامەکاندا پیشانبدە';
$labels['emoticonscompose'] = 'وێنۆچکەی هەستەکان چالاک بکە';
PKvc�\������ emoticons/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Erakutsi sentikurrak testu lauan dauden mezuetan';
$labels['emoticonscompose'] = 'Gaitu sentikurrak';
PKvc�\A� V�� emoticons/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Düz metin iletilerinde duygu ifadeleri görüntülensin';
$labels['emoticonscompose'] = 'Duygu ifadeleri kullanılsın';
PKvc�\D�
��� emoticons/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Mostrar emoticones en mensajes de texto plano';
$labels['emoticonscompose'] = 'Habilitar emoticones';
PKvc�\6��0�� emoticons/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Exibir emoticons em mensagens de texto simples';
$labels['emoticonscompose'] = 'Habilitar emoticons';
PKvc�\�i��� emoticons/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Parastā teksta ziņojumos rādīt emocijas';
$labels['emoticonscompose'] = 'Rādīt emocijas';
PKvc�\�# ��� emoticons/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Zobrazovať emotikony v čisto textových správach';
$labels['emoticonscompose'] = 'Zapnúť emotikony';
PKvc�\0Q�F�� emoticons/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Zobrazit smajlíky v textovém formátu';
$labels['emoticonscompose'] = 'Povolit smajlíky';
PKvc�\���;�� emoticons/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Geef emoticons weer in tekst zonder opmaak';
$labels['emoticonscompose'] = 'Activeer emoticons';
PKvc�\�&3�� emoticons/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Показувати смайлики у повідомленнях з простим текстом';
$labels['emoticonscompose'] = 'Увімкнути смайлики';
PKvc�\P��l�� emoticons/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Lit emoticons yn gewoane tekst sjen';
$labels['emoticonscompose'] = 'Emoticons ynskeakelje';
PKvc�\�N��� emoticons/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Emoticons in Klartext-Nachrichten anzeigen';
$labels['emoticonscompose'] = 'Emoticons aktivieren';
PKvc�\�RE��emoticons/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Matnli xabarlarda smayliklar tasvirlansinmi?';
$labels['emoticonscompose'] = 'Smayliklarni faollashtirish';
PKvc�\1H4�� emoticons/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = '在純文字郵件顯示表情符號';
$labels['emoticonscompose'] = '啟用表情符號';
PKvc�\O�� emoticons/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Mostra les emoticones en els missatge en text net';
$labels['emoticonscompose'] = 'Activa les emoticones';
PKvc�\���emoticons/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Monstrar emoticones in messages a texto simple';
$labels['emoticonscompose'] = 'Activar emoticones';
PKvc�\
�m��� emoticons/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Показывать смайлики в чисто текстовых сообщениях';
$labels['emoticonscompose'] = 'Включить смайлики';
PKvc�\�P�� emoticons/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Birta tjáningartákn í skilaboðum með hreinum texta';
$labels['emoticonscompose'] = 'Virkja tjáningartákn';
PKvc�\
�p�� emoticons/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'عرض الرموز في رسائل نصية عادية';
$labels['emoticonscompose'] = 'تفعيل الرموز';
PKvc�\���� emoticons/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Tampilkan emoticon dalam pesan teks polos';
$labels['emoticonscompose'] = 'Fungsikan emoticon';
PKvc�\�y�5�� emoticons/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Hangulatjelek megjelenítése sima szöveges üzenetekben';
$labels['emoticonscompose'] = 'Hangulatjelek engedélyezése';
PKvc�\JW��� emoticons/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Afișați emoticoane în mesaje text simplu';
$labels['emoticonscompose'] = 'Activați emoticoane';
PKvc�\�a�� emoticons/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Afficher les frimousses dans les messages texte en clair';
$labels['emoticonscompose'] = 'Activer les frimousses';
PKvc�\�@��� emoticons/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Prikaži emotikone u tekstualnim porukama';
$labels['emoticonscompose'] = 'Omogući emotikone';
PKvc�\��O̟� emoticons/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Wyświetlaj emotikony w wiadomościach tekstowych';
$labels['emoticonscompose'] = 'Włącz emotikony';
PKvc�\{�?K�� emoticons/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'テキスト形式のメッセージで絵文字を表示します。';
$labels['emoticonscompose'] = '絵文字を有効';
PKvc�\g�y�� emoticons/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Прикажи емотиконе у обичним текстуалним порукама';
$labels['emoticonscompose'] = 'Укључи емотиконе';
PKvc�\�MD^��emoticons/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Skrammañ fromlunioù er c\'hemennadennoù testenn blaen';
$labels['emoticonscompose'] = 'Gweredekaat ar fromlunioù';
PKvc�\}�0�� emoticons/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Прикажување на емотикони во обични текст пораки ';
$labels['emoticonscompose'] = 'Овозможи прикажување на емотиконите';
PKvc�\��G�� emoticons/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'הצגה של פרצופונים בהודעות של טקסט פשוט';
$labels['emoticonscompose'] = 'הפעל פרצופונים';
PKvc�\2VC߯� emoticons/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Taispeáin straoiseoga i dteachtaireachtaí le gnáth-théacs';
$labels['emoticonscompose'] = 'Cumasaigh straoiseoga';
PKvc�\��m9�� emoticons/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Vis humørikoner i ren tekst beskeder';
$labels['emoticonscompose'] = 'Aktivér humørikoner';
PKvc�\�e�N�� emoticons/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Prikaži čustvenčke v tekstovnem načinu';
$labels['emoticonscompose'] = 'Omogoči čustvenčke';
PKvc�\���4��emoticons/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'عرض الأوجه المبتسمة كنص مجرّد في الرسائل';
$labels['emoticonscompose'] = 'تشغيل الأوجه المبتسمة';
PKvc�\��Gʚ� emoticons/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Emoticons in Klartextnachrichten anzeigen';
$labels['emoticonscompose'] = 'Emoticons aktivieren';
PKvc�\�L�� emoticons/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Visa emoji-symboler i textmeddelanden';
$labels['emoticonscompose'] = 'Aktivera emoji-symboler';
PKvc�\�S����emoticons/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'ئاددىي تېكىست خېتىدە چىراي-ئىپادىلىرىنى كۆرسىتىش';
$labels['emoticonscompose'] = 'چىراي-ئىپادىلىرىنى بار قىلىش';
PKvc�\C�}��� emoticons/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = '일반 텍스트 메시지에서 이모티콘 표시';
$labels['emoticonscompose'] = '이모티콘 활성화';
PKvc�\D�� emoticons/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Mostra emoticons nei messaggi di testo';
$labels['emoticonscompose'] = 'Abilita emoticons';
PKvc�\k���� emoticons/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Mostrar emoticonos en mensajes de texto simple';
$labels['emoticonscompose'] = 'Activar emoticonos';
PKvc�\`���� emoticons/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Emoticons weergeven in tekst zonder opmaak';
$labels['emoticonscompose'] = 'Emoticons inschakelen';
PKvc�\@Ϡ�� emoticons/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Dangos gwenogluniau mewn fformat testun plaen';
$labels['emoticonscompose'] = 'Galluogi gwenogluniau';
PKvc�\�s�� emoticons/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Display emoticons in plain text messages';
$labels['emoticonscompose'] = 'Enable emoticons';
PKvc�\au�#�� emoticons/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Vís "emoticons" í reinum tekst boðum';
$labels['emoticonscompose'] = 'Tendra "emoticons"';
PKvc�\h�E�� emoticons/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Rodyti jaustukus grynojo teksto laiškuose';
$labels['emoticonscompose'] = 'Įgalinti jaustukus';
PKvc�\c�6p�� emoticons/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Mostrar ícones expressivos em mensagens de texto simples';
$labels['emoticonscompose'] = 'Activar ícones expressivos';
PKvc�\�T���� emoticons/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Emoticons plugin           |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/
*/

$labels['emoticonsdisplay'] = 'Εμφάνιση emoticons σε μηνύματα απλού κειμένου ';
$labels['emoticonscompose'] = 'Ενεργοποίηση emoticons';
PKvc�\� dN��emoticons/config.inc.php.distnu�[���<?php

// Enable emoticons in plain text messages preview
$config['emoticons_display'] = false;

// Enable emoticons in compose editor (HTML)
$config['emoticons_compose'] = true;
PKvc�\���P��emoticons/emoticons.phpnu�[���<?php

/**
 * Emoticons.
 *
 * Plugin to replace emoticons in plain text message body with real emoji.
 * Also it enables emoticons in HTML compose editor. Both features are optional.
 *
 * @license GNU GPLv3+
 * @author Thomas Bruederli
 * @author Aleksander Machniak
 * @website https://roundcube.net
 */
class emoticons extends rcube_plugin
{
    public $task = 'mail|settings|utils';


    /**
     * Plugin initialization.
     */
    function init()
    {
        $rcube = rcube::get_instance();

        $this->add_hook('message_part_after', [$this, 'message_part_after']);
        $this->add_hook('html_editor', [$this, 'html_editor']);

        if ($rcube->task == 'settings') {
            $this->add_hook('preferences_list', [$this, 'preferences_list']);
            $this->add_hook('preferences_save', [$this, 'preferences_save']);
        }
    }

    /**
     * 'message_part_after' hook handler to replace common
     * plain text emoticons with emoji
     */
    function message_part_after($args)
    {
        if ($args['type'] == 'plain') {
            $this->load_config();

            $rcube = rcube::get_instance();
            if (!$rcube->config->get('emoticons_display', false)) {
                return $args;
            }

            $args['body'] = self::text2icons($args['body']);
        }

        return $args;
    }

    /**
     * 'html_editor' hook handler, where we enable emoticons in TinyMCE
     */
    function html_editor($args)
    {
        $rcube = rcube::get_instance();

        $this->load_config();

        if ($rcube->config->get('emoticons_compose', true)) {
            $args['extra_plugins'][] = 'emoticons';
            $args['extra_buttons'][] = 'emoticons';
        }

        return $args;
    }

    /**
     * 'preferences_list' hook handler
     */
    function preferences_list($args)
    {
        $rcube         = rcube::get_instance();
        $dont_override = $rcube->config->get('dont_override', []);

        if ($args['section'] == 'mailview' && !in_array('emoticons_display', $dont_override)) {
            $this->load_config();
            $this->add_texts('localization');

            $field_id = 'emoticons_display';
            $checkbox = new html_checkbox(['name' => '_' . $field_id, 'id' => $field_id, 'value' => 1]);

            $args['blocks']['main']['options']['emoticons_display'] = [
                    'title'   => html::label($field_id, $this->gettext('emoticonsdisplay')),
                    'content' => $checkbox->show(intval($rcube->config->get('emoticons_display', false)))
            ];
        }
        else if ($args['section'] == 'compose' && !in_array('emoticons_compose', $dont_override)) {
            $this->load_config();
            $this->add_texts('localization');

            $field_id = 'emoticons_compose';
            $checkbox = new html_checkbox(['name' => '_' . $field_id, 'id' => $field_id, 'value' => 1]);

            $args['blocks']['main']['options']['emoticons_compose'] = [
                    'title'   => html::label($field_id, $this->gettext('emoticonscompose')),
                    'content' => $checkbox->show(intval($rcube->config->get('emoticons_compose', true)))
            ];
        }

        return $args;
    }

    /**
     * 'preferences_save' hook handler
     */
    function preferences_save($args)
    {
        if ($args['section'] == 'mailview') {
            $args['prefs']['emoticons_display'] = (bool) rcube_utils::get_input_value('_emoticons_display', rcube_utils::INPUT_POST);
        }
        else if ($args['section'] == 'compose') {
            $args['prefs']['emoticons_compose'] = (bool) rcube_utils::get_input_value('_emoticons_compose', rcube_utils::INPUT_POST);
        }

        return $args;
    }

    /**
     * Replace common plain text emoticons with emoji
     *
     * @param string $text Text
     *
     * @return string Converted text
     */
    protected static function text2icons($text)
    {
        // This is a lookbehind assertion which will exclude html entities
        // E.g. situation when ";)" in "&quot;)" shouldn't be replaced by the icon
        // It's so long because of assertion format restrictions
        $entity = '(?<!&'
            . '[a-zA-Z0-9]{2}' . '|' . '#[0-9]{2}' . '|'
            . '[a-zA-Z0-9]{3}' . '|' . '#[0-9]{3}' . '|'
            . '[a-zA-Z0-9]{4}' . '|' . '#[0-9]{4}' . '|'
            . '[a-zA-Z0-9]{5}' . '|'
            . '[a-zA-Z0-9]{6}' . '|'
            . '[a-zA-Z0-9]{7}'
            . ')';

        // map of emoticon replacements
        $map = [
            '/(?<!mailto):-?D/'   => self::ico_tag('1f603', ':D'   ), // laugh
            '/:-?\(/'             => self::ico_tag('1f626', ':('   ), // frown
            '/'.$entity.';-?\)/'  => self::ico_tag('1f609', ';)'   ), // wink
            '/8-?\)/'             => self::ico_tag('1f60e', '8)'   ), // cool
            '/(?<!mailto):-?O/i'  => self::ico_tag('1f62e', ':O'   ), // surprised
            '/(?<!mailto):-?P/i'  => self::ico_tag('1f61b', ':P'   ), // tongue out
            '/(?<!mailto):-?@/i'  => self::ico_tag('1f631', ':-@'  ), // yell
            '/O:-?\)/i'           => self::ico_tag('1f607', 'O:-)' ), // innocent
            '/(?<!O):-?\)/'       => self::ico_tag('1f60a', ':-)'  ), // smile
            '/(?<!mailto):-?\$/'  => self::ico_tag('1f633', ':-$'  ), // embarrassed
            '/(?<!mailto):-?\*/i' => self::ico_tag('1f48b', ':-*'  ), // kiss
            '/(?<!mailto):-?S/i'  => self::ico_tag('1f615', ':-S'  ), // undecided
        ];

        return preg_replace(array_keys($map), array_values($map), $text);
    }

    protected static function ico_tag($ico, $title)
    {
        return html::span(['title' => $title], "&#x{$ico};");
    }
}
PKvc�\��8�bbnew_user_identity/composer.jsonnu�[���{
    "name": "roundcube/new_user_identity",
    "type": "roundcube-plugin",
    "description": "Populates a new user's default identity from LDAP on their first visit.",
    "license": "GPL-3.0-or-later",
    "version": "1.2",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKvc�\f�X..'new_user_identity/new_user_identity.phpnu�[���<?php
/**
 * New user identity
 *
 * Populates a new user's default identity from LDAP on their first visit.
 *
 * This plugin requires that a working public_ldap directory be configured.
 *
 * @author Kris Steinhoff
 * @license GNU GPLv3+
 */
class new_user_identity extends rcube_plugin
{
    public $task = 'login';

    private $rc;
    private $ldap;

    /**
     * Plugin initialization. API hooks binding.
     */
    function init()
    {
        $this->rc = rcmail::get_instance();

        $this->add_hook('user_create', [$this, 'lookup_user_name']);
        $this->add_hook('login_after', [$this, 'login_after']);
    }

    /**
     * 'user_create' hook handler.
     */
    function lookup_user_name($args)
    {
        if ($this->init_ldap($args['host'], $args['user'])) {
            $results = $this->ldap->search('*', $args['user'], true);

            if (count($results->records) == 1) {
                $user       = $results->records[0];
                $user_name  = is_array($user['name']) ? $user['name'][0] : $user['name'];
                $user_email = is_array($user['email']) ? $user['email'][0] : $user['email'];

                $args['user_name']  = $user_name;
                $args['email_list'] = [];

                if (empty($args['user_email']) && strpos($user_email, '@')) {
                    $args['user_email'] = rcube_utils::idn_to_ascii($user_email);
                }

                if (!empty($args['user_email'])) {
                    $args['email_list'][] = $args['user_email'];
                }

                foreach (array_keys($user) as $key) {
                    if (!preg_match('/^email($|:)/', $key)) {
                        continue;
                    }

                    foreach ((array) $user[$key] as $alias) {
                        if (strpos($alias, '@')) {
                            $args['email_list'][] = rcube_utils::idn_to_ascii($alias);
                        }
                    }
                }

                $args['email_list'] = array_unique($args['email_list']);
            }
        }

        return $args;
    }

    /**
     * 'login_after' hook handler. This is where we create identities for
     * all user email addresses.
     */
    function login_after($args)
    {
        $this->load_config();

        if ($this->ldap || !$this->rc->config->get('new_user_identity_onlogin')) {
            return $args;
        }

        $identities = $this->rc->user->list_emails();
        $ldap_entry = $this->lookup_user_name([
                'user' => $this->rc->user->data['username'],
                'host' => $this->rc->user->data['mail_host'],
        ]);

        if (empty($ldap_entry['email_list'])) {
            return $args;
        }

        foreach ((array) $ldap_entry['email_list'] as $email) {
            foreach ($identities as $identity) {
                if ($identity['email'] == $email) {
                    continue 2;
                }
            }

            $plugin = $this->rc->plugins->exec_hook('identity_create', [
                'login'  => true,
                'record' => [
                    'user_id'  => $this->rc->user->ID,
                    'standard' => 0,
                    'email'    => $email,
                    'name'     => $ldap_entry['user_name']
                ],
            ]);

            if (!$plugin['abort'] && !empty($plugin['record']['email'])) {
                $this->rc->user->insert_identity($plugin['record']);
            }
        }

        return $args;
    }

    /**
     * Initialize LDAP backend connection
     */
    private function init_ldap($host, $user)
    {
        if ($this->ldap) {
            return $this->ldap->ready;
        }

        $this->load_config();

        $addressbook = $this->rc->config->get('new_user_identity_addressbook');
        $ldap_config = (array)$this->rc->config->get('ldap_public');
        $match       = $this->rc->config->get('new_user_identity_match');

        if (empty($addressbook) || empty($match) || empty($ldap_config[$addressbook])) {
            return false;
        }

        $debug  = $this->rc->config->get('ldap_debug');
        $domain = $this->rc->config->mail_domain($host);
        $props  = $ldap_config[$addressbook];

        $this->ldap = new new_user_identity_ldap_backend($props, $debug, $domain, $match);

        return $this->ldap->ready;
    }
}

class new_user_identity_ldap_backend extends rcube_ldap
{
    function __construct($p, $debug, $mail_domain, $search)
    {
        parent::__construct($p, $debug, $mail_domain);
        $this->prop['search_fields'] = (array) $search;
    }
}
PKvc�\9�ʑ��%new_user_identity/config.inc.php.distnu�[���<?php

// The id of the address book to use to automatically set a
// user's full name in their new identity. (This should be an
// string, which refers to the $config['ldap_public'] array.)
$config['new_user_identity_addressbook'] = 'People';

// When automatically setting a user's full name in their
// new identity, match the user's login name against this field.
$config['new_user_identity_match'] = 'uid';

// Determine whether to import user's identities on each login.
// New user identity will be created for each e-mail address
// present in address book, but not assigned to any identity.
$config['new_user_identity_onlogin'] = false;
PKvc�\��O��.attachment_reminder/attachment_reminder.min.jsnu�[���/**
 * Attachment Reminder plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function rcmail_get_compose_message(){var e=rcmail.editor.get_content({nosig:!0});return e=rcmail.editor.is_html()?e.replace(/<blockquote[^>]*>(.|[\r\n])*<\/blockquote>/gim,"").replace(/<[^>]+>/gm," ").replace(/&nbsp;/g," "):e.replace(/^>.*$/gim,"")}function rcmail_check_message(e){var a=rcmail.get_label("keywords","attachment_reminder").split(",").concat([".doc",".pdf"]),a=$.map(a,function(e){return RegExp.escape(e)}),a=new RegExp("("+a.join("|")+")","i");return-1!=e.search(a)}function rcmail_have_attachments(){return rcmail.env.attachments&&$("li",rcmail.gui_objects.attachmentlist).length}function rcmail_attachment_reminder_dialog(){var e={};e[rcmail.get_label("addattachment")]=function(){$(this).remove(),$("#messagetoolbar a.attach, .toolbar a.attach").first().click()},e[rcmail.get_label("send")]=function(e){$(this).remove(),rcmail.env.attachment_reminder=!0,rcmail.command("send","",e)},rcmail.env.attachment_reminder=!1,rcmail.show_popup_dialog(rcmail.get_label("attachment_reminder.forgotattachment"),rcmail.get_label("attachment_reminder.missingattachment"),e,{button_classes:["mainaction attach","send"]})}window.rcmail&&rcmail.addEventListener("beforesend",function(e){var a=rcmail_get_compose_message(),t=$("#compose-subject").val();if(!rcmail.env.attachment_reminder&&!rcmail_have_attachments()&&(rcmail_check_message(a)||rcmail_check_message(t)))return rcmail_attachment_reminder_dialog(),!1});
PKvc�\�Tm���+attachment_reminder/attachment_reminder.phpnu�[���<?php
/**
 * Attachment Reminder
 *
 * A plugin that reminds a user to attach the files
 *
 * @author Thomas Yu - Sian, Liu
 * @author Aleksander Machniak <machniak@kolabsys.com>
 *
 * Copyright (C) 2013 Thomas Yu - Sian, Liu
 * Copyright (C) Kolab Systems AG
 *
 * 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 3 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, see <http://www.gnu.org/licenses/>
 */

class attachment_reminder extends rcube_plugin
{
    public $task   = 'mail|settings';
    public $noajax = true;


    /**
     * Plugin initialization
     */
    function init()
    {
        $rcmail = rcube::get_instance();

        if ($rcmail->task == 'mail' && $rcmail->action == 'compose') {
            if ($rcmail->config->get('attachment_reminder')) {
                $this->include_script('attachment_reminder.js');
                $this->add_texts('localization/', ['keywords', 'forgotattachment', 'missingattachment']);
                $rcmail->output->add_label('addattachment', 'send');
            }
        }

        if ($rcmail->task == 'settings') {
            $dont_override = $rcmail->config->get('dont_override', []);

            if (!in_array('attachment_reminder', $dont_override)) {
                $this->add_hook('preferences_list', [$this, 'prefs_list']);
                $this->add_hook('preferences_save', [$this, 'prefs_save']);
            }
        }
    }

    /**
     * 'preferences_list' hook handler
     *
     * @param array $args Hook arguments
     *
     * @return array Hook arguments
     */
    function prefs_list($args)
    {
        if ($args['section'] == 'compose') {
            $this->add_texts('localization/');
            $reminder = rcube::get_instance()->config->get('attachment_reminder');
            $field_id = 'rcmfd_attachment_reminder';
            $checkbox = new html_checkbox(['name' => '_attachment_reminder', 'id' => $field_id, 'value' => 1]);

            $args['blocks']['main']['options']['attachment_reminder'] = [
                'title'   => html::label($field_id, rcube::Q($this->gettext('reminderoption'))),
                'content' => $checkbox->show($reminder ? 1 : 0),
            ];
        }

        return $args;
    }

    /**
     * 'preferences_save' hook handler
     *
     * @param array $args Hook arguments
     *
     * @return array Hook arguments
     */
    function prefs_save($args)
    {
        if ($args['section'] == 'compose') {
            $dont_override = rcube::get_instance()->config->get('dont_override', []);
            if (!in_array('attachment_reminder', $dont_override)) {
                $args['prefs']['attachment_reminder'] = !empty($_POST['_attachment_reminder']);
            }
        }

        return $args;
    }
}
PKvc�\�+�>!attachment_reminder/composer.jsonnu�[���{
    "name": "roundcube/attachment_reminder",
    "type": "roundcube-plugin",
    "description": "This Roundcube plugin reminds the user to attach a file if the composed message text indicates that there should be any.",
    "license": "GPL-3.0-or-later",
    "version": "1.1",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        },
        {
            "name": "Thomas Yu - Sian, Liu",
            "email": "",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKvc�\;_�x*attachment_reminder/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "缺少附件吗?";
$messages['forgotattachment'] = "您似乎忘记添加附件了,是否继续发送?";
$messages['reminderoption'] = "忘记添加附件提醒";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKvc�\�<�*attachment_reminder/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Няма далучанага файла?";
$messages['forgotattachment'] = "Забыліся далучыць файл?";
$messages['reminderoption'] = "Нагадваць пра файлы, якія забыліся далучыць";
$messages['keywords'] = "далучаны файл,файл,далучыць,далучаны,далучаецца,укладзены,CV,cover letter";
PKvc�\�����*attachment_reminder/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Липсва прикачен файл?";
$messages['forgotattachment'] = "Забравихте ли да прикрепите файл към съобщението?";
$messages['reminderoption'] = "Напомняне за забравени прикачени файлове";
$messages['keywords'] = "прикачен,прикрепен,прикачам,прикачвам,прикрепям,прикрепвам,файл,attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKvc�\�M���*attachment_reminder/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Missing attachment?";
$messages['forgotattachment'] = "Did you forget to attach a file?";
$messages['reminderoption'] = "Remind about forgotten attachments";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKvc�\�_$�33*attachment_reminder/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Puuttuva liite?";
$messages['forgotattachment'] = "Unohditko liittää tiedoston?";
$messages['reminderoption'] = "Muistuta mahdollisesti unohtuneista liitteistä";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,liite,tiedosto,liitteenä,liitetiedosto,ansioluettelo";
PKvc�\@����*attachment_reminder/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Mangler vedlegg?";
$messages['forgotattachment'] = "Glemte du å legge ved en fil?";
$messages['reminderoption'] = "Gi meg en påminnelse om glemte vedlegg";
$messages['keywords'] = "vedlegg, fil, legg ved, lagt ved, legger ved, lukket, CV, følgebrev";
PKvc�\�	)�  *attachment_reminder/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Mungon bashkëngjitje?";
$messages['forgotattachment'] = "Mos harruat të bashkëngjitni një kartelë?";
$messages['reminderoption'] = "Kujtoji për bashkëngjitje të harruara";
$messages['keywords'] = "bashkëngjitje,kartelë,bashkëngjite,bashkëngjitur,përfshirë,CV,letër shoqëruese";
PKvc�\5""*attachment_reminder/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Manus puudu?";
$messages['forgotattachment'] = "Unustasid faili lisada?";
$messages['reminderoption'] = "Tuleta mulle meelde kui unustasin manuse lisada";
$messages['keywords'] = "manus,manuses,lisatud,lisasin,fail,file,failis,attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKvc�\�=���*attachment_reminder/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "ئایا لەبیرت کرد پەڕگەیەک هاوپێچ بکەی؟";
$messages['reminderoption'] = "بیرهێنانەوە دەربارەی هاوپێچە لەبیرکراوەکان";
PKvc�\G���*attachment_reminder/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Eranskina falta da?";
$messages['forgotattachment'] = "Ahaztu zaizu fitxategia eranstea?";
$messages['reminderoption'] = "Ohartarazi ahaztutako erankinez";
$messages['keywords'] = "eranskin,fitxategia,erantzi,erantzita,eransten,atxikita";
PKvc�\�S[��*attachment_reminder/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Dosya eklemeyi unuttunuz mu?";
$messages['forgotattachment'] = "Dosya eklemeyi mi unuttunuz?";
$messages['reminderoption'] = "Dosya ekleme unutulduysa hatırlatılsın";
$messages['keywords'] = "ek,dosya,ekle,ekte,ekledim,ekteki,CV,mektup";
PKvc�\��r��*attachment_reminder/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "¿Adjunto olvidado?";
$messages['forgotattachment'] = "¿Te olvidaste de adjuntar un archivo?";
$messages['reminderoption'] = "Recordar sobre archivos adjuntos olvidados";
$messages['keywords'] = "adjunto,archivo,adjuntar,adjuntado,adjuntando,CV";
PKvc�\{8����'attachment_reminder/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Te ji bîr kir da pelekê pêve bikî?";
$messages['reminderoption'] = "Pêvekên jibîrkirî bi bîr bixe";
$messages['keywords'] = "pêvek, pel, pêve bike, pêvekirî, pêve dike, rapêçandî, CV, tîpa bergê";
PKvc�\���t*attachment_reminder/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Faltando anexo?";
$messages['forgotattachment'] = "Você esqueceu-se de anexar um arquivo?";
$messages['reminderoption'] = "Alertar sobre o possível esquecimento de anexos";
$messages['keywords'] = "anexo,arquivo,anexar,anexado,anexando,incluso,currículo,carta de apresentação";
PKvc�\�5��*attachment_reminder/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Trūkst pielikums?";
$messages['forgotattachment'] = "Vai Jūs nepiemirsāt pievienot failu?";
$messages['reminderoption'] = "Atgādināt par nepievienotajiem pielikumiem";
$messages['keywords'] = "pielikums,fails,pievienot,pielikt,pievienots,pielikts,ievietot,ievietots,CV";
PKvc�\��*attachment_reminder/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Chýbajúca príloha?";
$messages['forgotattachment'] = "Nezabudli ste pridať prílohu?";
$messages['reminderoption'] = "Pripomenúť zabudnuté prílohy";
$messages['keywords'] = "príloha,súbor,pripojiť,priložená,priložený,priložené,v prílohe,životopis,sprievodný list";
PKvc�\B�f�*attachment_reminder/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Chybějící příloha?";
$messages['forgotattachment'] = "Nezapomněli jste připojit přílohu?";
$messages['reminderoption'] = "Upozorňovat na zapomenuté přílohy";
$messages['keywords'] = "příloha,přílohy,příloze,přílohu,přiloženém,připojeném,CV,životopis";
PKvc�\��P�*attachment_reminder/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Ontbrekende bijlage?";
$messages['forgotattachment'] = "Ben je vergeten een bestand bij te voegen?";
$messages['reminderoption'] = "Herinnering over vergeten bijlagen";
$messages['keywords'] = "bijlage,bestand,bijvoegen,bijvoegen,bijsluiten,CV,sollicitatiebrief";
PKvc�\
1�33*attachment_reminder/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Ви забули прикріпити файл?";
$messages['reminderoption'] = "Нагадати про забуте вкладення";
$messages['keywords'] = "вкладення,файл,прикріпити,прикріплений,прикріплюю,вкладено,CV,супровідний лист";
PKvc�\�Y���*attachment_reminder/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Hawwo jo ferjitten in bestân ta te heakjen?";
$messages['reminderoption'] = "Herinnerje oer ferjitten taheaksels";
$messages['keywords'] = "bestân,triem,hechtsje,ferbûn,taheak,ynsletten,CV,brief";
PKvc�\���*attachment_reminder/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Fehlender Anhang?";
$messages['forgotattachment'] = "Haben Sie möglicherweise vergessen eine Datei anzuhängen?";
$messages['reminderoption'] = "Vor vergessenen Anhängen warnen";
$messages['keywords'] = "anbei,anhang,angehängt,angefügt,beigefügt,beiliegend";
PKvc�\�c<��+attachment_reminder/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "¿Has olvidado adjuntar un archivo?";
$messages['reminderoption'] = "Recordar si olvido adjuntar archivos";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKvc�\�e�f��'attachment_reminder/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Ilovani yo‘qotdingizmi?";
$messages['forgotattachment'] = "Ilova faylini unutdingizmi?";
$messages['reminderoption'] = "Unutilgan ilovalar haqida eslatish";
$messages['keywords'] = "ilova,fayl,ilovalash,ilova qilindi,ilova qilinmoqda,yopilgan,CV,xatjild";
PKvc�\�M���*attachment_reminder/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Missing attachment?";
$messages['forgotattachment'] = "Did you forget to attach a file?";
$messages['reminderoption'] = "Remind about forgotten attachments";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKvc�\�%[��*attachment_reminder/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "是否遺漏了附件?";
$messages['forgotattachment'] = "似乎忘記加入附件,確定要寄出嗎?";
$messages['reminderoption'] = "提醒加入附件";
$messages['keywords'] = "附件,檔案,附加,附檔,附上,履歷,封面";
PKvc�\p_�]��*attachment_reminder/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Hi falta l'adjunt?";
$messages['forgotattachment'] = "Us heu oblidat afegir un fitxer?";
$messages['reminderoption'] = "Recordatori de fitxers adjunts oblidats";
$messages['keywords'] = "adjunt,fitxer,adjunta,adjuntat,adjuntant,delimitat,CV,carta";
PKvc�\Slp'attachment_reminder/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Attachamento mancante?";
$messages['forgotattachment'] = "Ha vos oblidate de attachar un file?";
$messages['reminderoption'] = "Rememorar de attachamentos oblidate";
$messages['keywords'] = "attachamento,file,attachar,attachate,attachante,annexo,annexe,annexate,CV,curriculo de vita";
PKvc�\`/��*attachment_reminder/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Da li ste zaboravili da dodate ovu datoteku?";
$messages['reminderoption'] = "Napomene o zaboravljenim prilozima";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,prilog,biografija,popratno pismo,prilogu,popratnom pismu,datoteka,fajl";
PKvc�\�RR*attachment_reminder/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Забыли вложение?";
$messages['forgotattachment'] = "Вы не забыли прикрепить файл?";
$messages['reminderoption'] = "Напоминать о забытых вложениях";
$messages['keywords'] = "вложение,файл, вложенный, прикрепленный,резюме,документ";
PKvc�\��}�*attachment_reminder/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "آیا شما پیوست کردن پرونده را فراموش کرده‌اید؟";
$messages['reminderoption'] = "یادآوری فراموشی پیوست‌ها";
$messages['keywords'] = "پیوست،پرونده،پیوست کردن، پیوست شده، CV";
PKvc�\dq��*attachment_reminder/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Vantar viðhengi?";
$messages['forgotattachment'] = "Gleymdirðu að hengja við skrá?";
$messages['reminderoption'] = "Minna á viðhengi sem gleymast";
$messages['keywords'] = "viðhengi,skrá,hengja við,innfellt,CV,meðfylgjandi,ferilskrá,mynd";
PKvc�\��G*attachment_reminder/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Bạn đã quên không đính kèm tệp tin?";
$messages['reminderoption'] = "Nhắc về tệp tin đính kèm bị quên";
$messages['keywords'] = "tệp đính kèm,tệp tin,đính kèm,đã đính kèm,đang đính kèm tập tin,đính kèm,CV,thư mở đầu";
PKvc�\6�F�))*attachment_reminder/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "المرفق مفقود ؟";
$messages['forgotattachment'] = "هل نسيت إرفاق ملف؟";
$messages['reminderoption'] = "تذكير حول المرفقات المنسية";
$messages['keywords'] = "المرفقات,الملف,ارفاق,مرفق,ارفاق,مضمون,CV,صفحة المغلف";
PKvc�\h(;���*attachment_reminder/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Faylı əlavə etməyi unutdunuz?";
$messages['reminderoption'] = "Unudulmuş qoşmalardan xəbərdar et";
$messages['keywords'] = "qoşmalar,fayl,qoşma,qoşulub,qoşulur,qapalı,CV,qoşma məktub";
PKvc�\Zou*attachment_reminder/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Kehilangan lampiran?";
$messages['forgotattachment'] = "Apakah anda lupa melampirkan sebuah file?";
$messages['reminderoption'] = "Ingatkan tentang lampiran yang terlupakan";
$messages['keywords'] = "lampiran, file, terlampir, dilampirkan, melampirkan, lampiran tertutup, CV, sampul surat";
PKvc�\��*attachment_reminder/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Hiányzó csatolmány?";
$messages['forgotattachment'] = "Nem felejtetted el a csatolandó file-t?";
$messages['reminderoption'] = "Emlékeztessen a csatolandó csatolmányra";
$messages['keywords'] = "csatolmány, file, csatolás, csatolt, csatolni, közrezárt, CV, kisérőlevél";
PKvc�\�2��*attachment_reminder/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Lipsă atașament?";
$messages['forgotattachment'] = "Ați uitat să atașati ?";
$messages['reminderoption'] = "Adu-mi aminte de atașamente";
$messages['keywords'] = "atașament,atasament,atas,atasat,ataș,attach,fisier,fișier,attach,atach,attache";
PKvc�\[�EE*attachment_reminder/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Pièce jointe manquante ?";
$messages['forgotattachment'] = "Avez-vous oublié de joindre un fichier ?";
$messages['reminderoption'] = "Rappel sur les pièces jointes oubliées";
$messages['keywords'] = "pièce jointe,fichier joint,fichier,joindre,joins,joint,attaché,inclus,ci-inclus,CV, lettre d’accompagnement, PJ, P.J";
PKvc�\�#a���*attachment_reminder/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Nedostaje privitak?";
$messages['forgotattachment'] = "Jeste li zaboravili dodati privitak?";
$messages['reminderoption'] = "Podsjeti na zaboravljen privitak";
$messages['keywords'] = "privitak,datoteka,dodati,dodano,dodajem,u privitku,CV,motivacijsko pismo";
PKvc�\�%V���*attachment_reminder/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Brakujący załącznik?";
$messages['forgotattachment'] = "Czy nie zapomniałeś załączyć pliku?";
$messages['reminderoption'] = "Włącz przypominanie o brakującym załączniku";
$messages['keywords'] = "załącznik,plik,załącz,CV";
PKvc�\h	_�*attachment_reminder/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "添付ファイルを忘れてませんか?";
$messages['forgotattachment'] = "ファイルの添付を忘れていませんか?";
$messages['reminderoption'] = "添付ファイルの付け忘れを確認";
$messages['keywords'] = "添付,ファイル,添付ファイル,同封,添え状";
PKvc�\V�ذ��(attachment_reminder/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "¿Escaecisti axuntar un ficheru?";
$messages['reminderoption'] = "Recordar alrodiu d'axuntos escaecíos";
$messages['keywords'] = "axuntu,ficheru,axuntar,axuntáu,axuntando,axuntao,axuntada,CV,carta de presentación";
PKvc�\���ɬ�(attachment_reminder/localization/kab.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Tettuḍ ad t-tessedduḍ afaylu?";
$messages['reminderoption'] = "Smekti af imeddayen yettwattun";
$messages['keywords'] = "amedday,afaylu,seddu,yeddan,aseddu,yedda,CV,tabratt";
PKvc�\/�a)ee*attachment_reminder/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Да ли сте заборавили да приложите фајл?";
$messages['reminderoption'] = "Подсетник на заборављене прилоге";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,прилог,фајл,приложи,приложен,прилажем,пропратно писмо";
PKvc�\��S*attachment_reminder/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Hues du vergiess e Fichier drunzehänken?";
$messages['reminderoption'] = "U vergiessen Unhäng erënneren";
$messages['keywords'] = "Attachment,Fichier,Unhank,Unhang,Unhäng,ugehaangen,unhänken,attachment,file,attach,attached,attaching,enclosed,CV,cover letter,fichier joint";
PKvc�\^5�[NN*attachment_reminder/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "آیا فراموش کردید که فایل را الصاق کرده اید؟";
$messages['reminderoption'] = "یاد آوری درمورد ضمایم فراموش شده";
$messages['keywords'] = "ضمیمه،فایل،ضمیمه کردن،ضمیمه شده،در حال ضمیمه کردن، الصاق شده،CV، عنوان نامه";
PKvc�\�|f ��'attachment_reminder/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Disonjet ho peus stagan er restr ?";
$messages['reminderoption'] = "Adgalv war ar pezhiou stag disonjet";
$messages['keywords'] = "pezh stag, restr, stagan, aman staget, stagit, ouzhpenan, CV, lizher youl";
PKvc�\u��??*attachment_reminder/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Дали заборави да прикачиш датотека ?";
$messages['reminderoption'] = "Потсети за заборавени прикачувања ";
$messages['keywords'] = "Додаток, датотека, прикачени, прикалува, затворен, ЦВ, мотивационо писмо";
PKvc�\�Y��dd*attachment_reminder/localization/kn_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "ನೀವು ಫೈಲ್ ಅಟ್ಯಾಚ್ ಮಾಡಲು ಮರೆತಿರುವಿರಾ?";
PKvc�\��==*attachment_reminder/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "តើអ្នក​ភ្លេច​ភ្ជាប់​ឯកសារ​ឬ?";
$messages['reminderoption'] = "រំលឹង​អំពី​ឯកសារ​ភ្ជាប់​ដែល​បាន​ភ្លេច";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKvc�\���II*attachment_reminder/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Та файл хавсаргахаа мартсан уу?";
$messages['reminderoption'] = "Мартсан хавсралтуудыг сануулах";
$messages['keywords'] = "хавсралт,файл,хавсралт,хавсаргагдсан,хавсаргаж байна,хасваргасан,анкет,танилцуулга";
PKvc�\�!�*attachment_reminder/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "האם חסרה צרופה?";
$messages['forgotattachment'] = "האם שכחת לצרף קובץ?";
$messages['reminderoption'] = "להזכיר לצרף נספח";
$messages['keywords'] = "נספח,קובץ,לצרף,מצורף,מצרף,מצרפת,רצ\"ב,קו\"ח,קורות חיים";
PKvc�\��Z�*attachment_reminder/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "An bhfuil ceangaltán in easnamh?";
$messages['forgotattachment'] = "Ar dhearmad tú comhad a cheangal leis?";
$messages['reminderoption'] = "Cuimhneachán faoi cheangaltán dearmadta";
$messages['keywords'] = "ceangaltán,comhad,ceangail,ceangailte,ag ceangail,iniata,CV,litir chumhdaigh";
PKvc�\Ea��*attachment_reminder/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Mangler vedhæftet fil?";
$messages['forgotattachment'] = "Glemte du at vedhæfte en fil?";
$messages['reminderoption'] = "Påmind om glemt vedhæftning af filer";
$messages['keywords'] = "vedhæftet fil,fil,vedhæft,vedhæftet,vedhæfter,lukket,CV,følgebrev";
PKvc�\� q�*attachment_reminder/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Ste pozabili na priponko?";
$messages['forgotattachment'] = "Ste pozabili pripeti datoteko?";
$messages['reminderoption'] = "Opozorilo za dodajanje priponk";
$messages['keywords'] = "priponka,datoteka,pripeti,pripeta,pripenjati,priložen,priložiti,CV,spremno pismo";
PKvc�\ʐ���'attachment_reminder/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "هل نسيت ملفا للإرفاق ؟";
$messages['forgotattachment'] = "هل نسيت إرفاق ملف ؟";
$messages['reminderoption'] = "التذكير إن كنت تود إرسال مرفقات";
PKvc�\qܕ(*attachment_reminder/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Fehlender Anhang?";
$messages['forgotattachment'] = "Haben Sie möglicherweise vergessen, eine Datei anzuhängen?";
$messages['reminderoption'] = "An vergessene Anhänge erinnern";
$messages['keywords'] = "anbei,im anhang,siehe anhang,angehängt,angefügt,beigefügt,beiliegend";
PKvc�\�����*attachment_reminder/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Saknas bilaga?";
$messages['forgotattachment'] = "Glömde du att bifoga en fil?";
$messages['reminderoption'] = "Påminn om glömda bilagor";
$messages['keywords'] = "bilaga,fil,bifoga,bifogad,bifogar,infogad,CV,personligt brev";
PKvc�\y����'attachment_reminder/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "قىستۇرما چۈشۈپ قالدىمۇ؟";
$messages['forgotattachment'] = "سىز ھۆججەت قىستۇرۇشنى ئۇنتۇپ قالدىڭىزمۇ؟";
$messages['reminderoption'] = "ئۇنتۇلغان قىستۇرمىلارنى ئەسكەرتىش";
$messages['keywords'] = "قىستۇرما، ھۆججەت، قىستۇرۇش، قىستۇرۇلدى، قىستۇرۋاتىدۇ، ئۆز-ئىچىگە ئېلىندى، تەرجىمال، تۇنۇشتۇرۇش";
PKvc�\��??*attachment_reminder/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "첨부파일을 잊으셨나요?";
$messages['forgotattachment'] = "파일을 첨부하는 것을 잊으셨습니까?";
$messages['reminderoption'] = "잊었던 첨부파일 추가에 대해 알림";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,첨부,파일,동봉,이력서";
PKvc�\��9���*attachment_reminder/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "Esqueceches adxuntar un ficheiro?";
$messages['reminderoption'] = "Lembrete de adxuntos esquecidos";
$messages['keywords'] = "anexo, arquivo, engadir, anexo, anexando, pechado, CV, carta de presentación";
PKvc�\�\aww*attachment_reminder/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Allegato mancante?";
$messages['forgotattachment'] = "Sembra che tu abbia dimenticato di allegare un file!\nPremere Annulla per inviare lo stesso.\nOK per tornare al messaggio senza inviare.";
$messages['reminderoption'] = "Ricorda per gli allegati dimenticati";
$messages['keywords'] = "allegato,allegati,allegata,allegate,allega,allego,alleghi,attaccato,file,attachment,attach";
PKvc�\7��*attachment_reminder/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "¿Falta archivo?";
$messages['forgotattachment'] = "¿Olvidó adjuntar un fichero al mensaje?";
$messages['reminderoption'] = "Recordatorio sobre adjuntos olvidados";
$messages['keywords'] = "adjunto, archivo, adjuntar, unido, adjuntando, cerrado, CV, carta de presentación";
PKvc�\H�7�*attachment_reminder/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['forgotattachment'] = "താങ്കൾ ഒരു ഫയൽ ചേർക്കാൻ മറന്നുപോയി";
$messages['reminderoption'] = "ചേർക്കാൻ മറന്നുപോയ ഫയലുകളെ പറ്റി ഓർമ്മപ്പെടുത്തുക";
PKvc�\G�*attachment_reminder/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Bijlage ontbreekt?";
$messages['forgotattachment'] = "Bent u vergeten het bestand bij te voegen?";
$messages['reminderoption'] = "Herinner mij aan vergeten bijlagen";
$messages['keywords'] = "attachment,bestand,bijgaand,bijgaande,brief,bijgevoegd,bijgesloten,CV,document,bijgesloten";
PKvc�\�W��***attachment_reminder/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Atodiad ar goll?";
$messages['forgotattachment'] = "Wedi anghofio atodi ffeil?";
$messages['reminderoption'] = "Atgoffa am atodiadau ar goll";
$messages['keywords'] = "atodiad,atodi,atodaf,atodwyd,atodir,amgaedig,dogfen,llythyr,ffeil,attachment,file,attach,attached,attaching,enclosed,CV,cover letter,";
PKvc�\�M���*attachment_reminder/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Missing attachment?";
$messages['forgotattachment'] = "Did you forget to attach a file?";
$messages['reminderoption'] = "Remind about forgotten attachments";
$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter";
PKvc�\D���*attachment_reminder/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Manglar viðheft?";
$messages['forgotattachment'] = "Gloymdi tú at viðhefta ein fíl?";
$messages['reminderoption'] = "Áminn um gloymdar viðheftingar";
$messages['keywords'] = "viðhefting,fílur,heft,viðheft,heftir,lagt inní,CV,fylgi skriv";
PKvc�\z����*attachment_reminder/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Trūksta priedo?";
$messages['forgotattachment'] = "Ar nepamiršote prisegti priedo?";
$messages['reminderoption'] = "Priminti apie neprisegtus priedus";
$messages['keywords'] = "priedas, byla, prisegti, prisegta, prisegama, uždaras, CV, laiškas";
PKvc�\]3�&77*attachment_reminder/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Falta anexo?";
$messages['forgotattachment'] = "Mencionou ficheiros ou anexos mas não tem anexos na mensagem. Pretende anexar um ficheiro?";
$messages['reminderoption'] = "Lembrar sobre anexos esquecidos";
$messages['keywords'] = "anexo,ficheiro,anexar,anexado,a anexar,em anexo,currículo,carta de apresentação";
PKvc�\���g��*attachment_reminder/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Archive plugin             |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/
*/

$messages['missingattachment'] = "Ανύπαρκτο συνημμένο;";
$messages['forgotattachment'] = "Μήπως ξεχάσετε να επισυνάψετε αρχείο; ";
$messages['reminderoption'] = "Υπενθύμιση για συνημμένα";
$messages['keywords'] = "συνημμένο, αρχείο, επισύναψη, συνημμένο, επισυνάπτοντας, εσωκλείοντας, βιογραφικό σημείωμα, συνοδευτική επιστολή";
PKvc�\C�~X�	�	*attachment_reminder/attachment_reminder.jsnu�[���/**
 * Attachment Reminder plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

function rcmail_get_compose_message()
{
  var msg = rcmail.editor.get_content({ nosig: true });

  if (rcmail.editor.is_html()) {
    // Remove quoted content, all HTML tags, and some entities
    msg = msg.replace(/<blockquote[^>]*>(.|[\r\n])*<\/blockquote>/gmi, '')
             .replace(/<[^>]+>/gm, ' ')
             .replace(/&nbsp;/g, ' ');
  }
  else {
    // Remove quoted content
    msg = msg.replace(/^>.*$/gmi, '');
  }

  return msg;
};

function rcmail_check_message(msg)
{
  var i, rx, keywords = rcmail.get_label('keywords', 'attachment_reminder').split(",").concat([".doc", ".pdf"]);

  keywords = $.map(keywords, function(n) { return RegExp.escape(n); });
  rx = new RegExp('(' + keywords.join('|') + ')', 'i');

  return msg.search(rx) != -1;
};

function rcmail_have_attachments()
{
  return rcmail.env.attachments && $('li', rcmail.gui_objects.attachmentlist).length;
};

function rcmail_attachment_reminder_dialog()
{
  var buttons = {};

  buttons[rcmail.get_label('addattachment')] = function() {
    $(this).remove();
    $('#messagetoolbar a.attach, .toolbar a.attach').first().click();
  };
  buttons[rcmail.get_label('send')] = function(e) {
    $(this).remove();
    rcmail.env.attachment_reminder = true;
    rcmail.command('send', '', e);
  };

  rcmail.env.attachment_reminder = false;
  rcmail.show_popup_dialog(
    rcmail.get_label('attachment_reminder.forgotattachment'),
    rcmail.get_label('attachment_reminder.missingattachment'),
    buttons,
    {button_classes: ['mainaction attach', 'send']}
  );
};


if (window.rcmail) {
  rcmail.addEventListener('beforesend', function(evt) {
    var msg = rcmail_get_compose_message(),
      subject = $('#compose-subject').val();

    if (!rcmail.env.attachment_reminder && !rcmail_have_attachments()
      && (rcmail_check_message(msg) || rcmail_check_message(subject))
    ) {
      rcmail_attachment_reminder_dialog();
      return false;
    }
  });
}
PKvc�\/`z��new_user_dialog/composer.jsonnu�[���{
    "name": "roundcube/new_user_dialog",
    "type": "roundcube-plugin",
    "description": "When a new user is created, this plugin checks the default identity and sets a session flag in case it is incomplete. An overlay box will appear on the screen until the user has reviewed/completed his identity.",
    "license": "GPL-3.0-or-later",
    "version": "2.4",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKvc�\Z�A#��&new_user_dialog/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = '请填写发送人身份';
$labels['identitydialoghint'] = '本提示仅在第一次登录时显示。';
PKvc�\ݾ��%%&new_user_dialog/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Калі ласка, запоўніце тоеснасць адпраўніка';
$labels['identitydialoghint'] = 'Гэтае акно з\'яўляецца толькі аднойчы, у час першага ўваходу.';
PKvc�\�wk;;&new_user_dialog/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Моля попълнете данни за Вашата самоличност като подател';
$labels['identitydialoghint'] = 'Този диалог се появява само при първоначално регистриране.';
PKvc�\�r���&new_user_dialog/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels = [];
$labels['identitydialogtitle'] = 'Please complete your sender identity';
$labels['identitydialoghint'] = 'This box only appears once at the first login.';
PKvc�\��v��&new_user_dialog/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Täydennä lähettäjätietosi';
$labels['identitydialoghint'] = 'Tämä kohta näkyy vain ensimmäisellä kirjautumiskerralla.';
PKvc�\�X�Z��&new_user_dialog/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Vennligst fullfør din avvsender identitet.';
$labels['identitydialoghint'] = 'Denne boksen kommer kun ved første pålogging.';
PKvc�\WT��&new_user_dialog/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Ju lutemi, plotësoni identitetin tuaj si dërgues';
$labels['identitydialoghint'] = 'Kjo kuti shfaqet vetëm një herë gjatë hyrjes së parë.';
PKvc�\z���&new_user_dialog/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Palun täida oma saatja identiteet';
$labels['identitydialoghint'] = 'See kast ilmub ainult esmasel sisselogimisel.';
PKvc�\�C<&new_user_dialog/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'تکایە ناسنامەی نێرەری خۆت تەواوبکە';
$labels['identitydialoghint'] = 'ئەم خانەیە تەنها لە یەکەم چوونەژوورەوە دەردەکەوێت.';
PKvc�\�%���&new_user_dialog/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Osatu zure bidaltzaile-identitatea';
$labels['identitydialoghint'] = 'Kutxa hau behin bakarri agertzen da lehenengoz sartzean.';
PKvc�\�!?Q��&new_user_dialog/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Lütfen gönderici kimliğinizi tamamlayın';
$labels['identitydialoghint'] = 'Bu ekran oturum ilk kez açıldığında bir kere görüntülenir.';
PKvc�\�
'���&new_user_dialog/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor, seleccione una identidad para los mensajes salientes';
$labels['identitydialoghint'] = 'Este diálogo aparecerá sólo una vez durante el primer ingreso';
PKvc�\�ۺ�#new_user_dialog/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'tkaya nawnişani nenar ba tawawi bnwsa';
$labels['identitydialoghint'] = 'am qtwia wadiara yak jar la sarata krawatawa';
PKvc�\pr�
��&new_user_dialog/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor complete a sua identidade';
$labels['identitydialoghint'] = 'Esta tela aparece somente no primeiro acesso.';
PKvc�\��)��&new_user_dialog/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Lūdzu aizpildiet Jūsu, kā sūtītāja, identitātes informāciju';
$labels['identitydialoghint'] = 'Šis logs parādīsies tikai pirmajā autorizācijas reizē.';
PKvc�\�"s��&new_user_dialog/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Doplňte prosím svoju identifikáciu odosielateľa';
$labels['identitydialoghint'] = 'Toto okno sa zobrazí len raz, pri prvom prihlásení.';
PKvc�\^�����&new_user_dialog/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Prosím doplňte své jméno a e-mail';
$labels['identitydialoghint'] = 'Tento dialog se objeví pouze při prvním přihlášení.';
PKvc�\����&new_user_dialog/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Gelieve uw verzend identiteit te vervolledigen';
$labels['identitydialoghint'] = 'Dit scherm verschijnt enkel bij de eerste aanmelding.';
PKvc�\]��&new_user_dialog/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Будь ласка, вкажіть Ваше ім’я';
$labels['identitydialoghint'] = 'Це повідомлення відображається тільки під час першого входження';
PKvc�\J�����&new_user_dialog/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Foltôgje jo stjoerder identiteit';
$labels['identitydialoghint'] = 'Dit fak ferskynt allinnich by de earste kear ynloggen.';
PKvc�\�����&new_user_dialog/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Bitte vervollständigen Sie Ihre Absender-Informationen';
$labels['identitydialoghint'] = 'Dieser Dialog erscheint nur einmal beim ersten Login.';
PKvc�\��O��'new_user_dialog/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor completa tu información de remitente';
$labels['identitydialoghint'] = 'Esta sección solo aparece un vez en el primer login.';
PKvc�\��aa#new_user_dialog/localization/es.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | plugins/new_user_dialog/localization/<lang>.inc                       |
 |                                                                       |
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/
$labels['identitydialogtitle'] = 'Por favor complete su identidad de remitente';
$labels['identitydialoghint'] = 'Esta caja solo aparece en el primer inicio de sesión.';
?>PKvc�\��B��&new_user_dialog/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Լրացրեք Ձեր ինքնությունը';
$labels['identitydialoghint'] = 'Այս նշումը երևում է միայն առաջին մուտքի ժամանակ մեկ անգամ';
PKvc�\}�h��&new_user_dialog/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Please complete your sender identity';
$labels['identitydialoghint'] = 'This box only appears once at the first login.';
PKvc�\�cd��&new_user_dialog/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = '請完成填寫您的身份資訊';
$labels['identitydialoghint'] = '此視窗只會於第一次登入時出現';
PKvc�\HO����&new_user_dialog/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Si us plau, completeu la identitat del vostre remitent';
$labels['identitydialoghint'] = 'Aquest quadre només apareix un cop a la primera entrada.';
PKvc�\N?����#new_user_dialog/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Per favor, completa vostre identitate de expeditor';
$labels['identitydialoghint'] = 'Iste quadro solmente appare un vice al prime apertura de session.';
PKvc�\.��I��&new_user_dialog/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Molimo vas da kompletirate vaš identitet pošiljaoca';
$labels['identitydialoghint'] = 'Ovaj okvir se pojavljuje samo jednom prilikom prve prijave.';
PKvc�\N��&new_user_dialog/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Пожалуйста, укажите Ваше имя.';
$labels['identitydialoghint'] = 'Данное сообщение отображается только при первом входе.';
PKvc�\�6��&new_user_dialog/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'لطفا شناسه ارسالی‌تان را کامل کنید';
$labels['identitydialoghint'] = 'این جعبه فقط یک بار در اولین ورود ظاهر می‌شود.';
PKvc�\�����&new_user_dialog/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Fylltu út auðkenni þín fyrir sendingar';
$labels['identitydialoghint'] = 'Þessi reitur birtist einungis við fyrstu innskráningu.';
PKvc�\��f4��&new_user_dialog/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Xin điền nhận diện người gửi của bạn';
$labels['identitydialoghint'] = 'Hộp này chỉ xuất hiện 1 lần khi đăng nhập lần đầu tiên';
PKvc�\��U�pp&new_user_dialog/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'โปรดกรอกข้อมูลประจำตัวของผู้ส่ง';
$labels['identitydialoghint'] = 'ช่องนี้จะปรากฏขึ้นเพียงครั้งเดียวในการเข้าสู่ระบบครั้งแรก';
PKvc�\xbv���&new_user_dialog/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'يرجى اكمال هوية المُرسل.';
$labels['identitydialoghint'] = 'يظهر هذا المربع مرة واحدة فقط عند أول الدخول';
PKvc�\e�C���&new_user_dialog/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Lütfən, adınızı yazın.';
$labels['identitydialoghint'] = 'Bu məlumat yalnız ilk girişdə göstərilir.';
PKvc�\Ł[���&new_user_dialog/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Tolong lengkapi identitas pengirim Anda';
$labels['identitydialoghint'] = 'Kotak ini hanya muncul sekali saat masuk pertama kali.';
PKvc�\qQWz��&new_user_dialog/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Kérem töltse ki a küldő azonosítóját';
$labels['identitydialoghint'] = 'Ez az ablak csak az első belépéskor jelenik meg.';
PKvc�\NͶ&��&new_user_dialog/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Te rog completează identitatea expeditorului.';
$labels['identitydialoghint'] = 'Această căsuţă apare doar la prima autentificare.';
PKvc�\�ߝ��#new_user_dialog/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Bonvole plenumu vian identon pri sendanto';
$labels['identitydialoghint'] = 'Ĉi tiu kesto aperas nur unufoje je la unua ensaluto.';
PKvc�\�w���&new_user_dialog/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Veuillez saisir votre identité d’expéditeur';
$labels['identitydialoghint'] = 'Ce champ n’apparaît que lors de la première connexion.';
PKvc�\�"Cj��&new_user_dialog/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Molim dovršite vaš identitet za slanje poruka';
$labels['identitydialoghint'] = 'Ova poruka će se pojaviti samo kod prve prijave.';
PKvc�\�:��&new_user_dialog/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Uzupełnij tożsamość nadawcy';
$labels['identitydialoghint'] = 'To okno pojawia się tylko przy pierwszym logowaniu.';
PKvc�\���44&new_user_dialog/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'कृपया पाठवणा-याची ओळख पूर्ण करा';
$labels['identitydialoghint'] = 'हा चौकोन पहिल्यांदा लॉगिन करताना एकदाच दिसेल.';
PKvc�\C�6���&new_user_dialog/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = '送信者情報の入力を完了してください。';
$labels['identitydialoghint'] = 'このボックスは最初のログイン時に一度だけ表示されます。';
PKvc�\f����&new_user_dialog/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Fullfør avsendaridentiteten din.';
$labels['identitydialoghint'] = 'Denne boksen kjem berre fram ved første pålogging.';
PKvc�\����$new_user_dialog/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor, completa la to identidá de remitente';
$labels['identitydialoghint'] = 'Esta caxa namái apaecerá una vegada nel primer aniciu de sesión.';
PKvc�\�q��&new_user_dialog/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Попуните свој идентитет пошиљаоца';
$labels['identitydialoghint'] = 'Ово се појављује само једном при првом пријављивању';
PKvc�\µ���&new_user_dialog/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Vervollstänneg w.e.gl deng Sender-Identitéit';
$labels['identitydialoghint'] = 'Dës Këscht erschéngt just beim éischte Login.';
PKvc�\�)b���&new_user_dialog/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'لطفا مشخصات فرستنده را کامل کنید';
$labels['identitydialoghint'] = 'این متن تنها هنگام اولین ورود نمایش داده خواهد شد';
PKvc�\S�Jѿ�#new_user_dialog/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Bizskrivit hoc\'h anv kaser mar plij';
$labels['identitydialoghint'] = 'Diskouezet eo ar boest e-pad ar c\'hentañ kennask.';
PKvc�\&��H**&new_user_dialog/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Ве молиме пополнете го идентитетот на испраќачот ';
$labels['identitydialoghint'] = 'Оваа кутија се појавува само еднаш на првото најавување ';
PKvc�\�`g��&new_user_dialog/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'សូម​បំពេញ​អត្តសញ្ញាណ​របស់​អ្នក​ផ្ញើ​របស់​អ្នក';
$labels['identitydialoghint'] = 'ប្រអប់​នេះ​បង្ហាញ​តែ​ម្ដង​នៅ​ពេល​ចូល​​ដំបូង​ប៉ុណ្ណោះ។';
PKvc�\[H		&new_user_dialog/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Илгээхэд харагдах мэдээллээ оруулна уу';
$labels['identitydialoghint'] = 'Энэ хайрцаг анх нэвтрэх үед нэг л удаа харагдана.';
PKvc�\��}���&new_user_dialog/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'נא להשלים את פרטי זהותך';
$labels['identitydialoghint'] = 'תיבה זו מופיעה פעם אחת בזמן הכניסה הראשונה למערכת';
PKvc�\�^��&new_user_dialog/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Críochnaigh do chéannacht seoltóra';
$labels['identitydialoghint'] = 'Ní fheictear an bosca seo ach uair amháin nuair a cheanglaítear anseo den chéad uair.';
PKvc�\�6��&new_user_dialog/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Udfyld din afsender identitet';
$labels['identitydialoghint'] = 'Denne boks vises kun én gang ved første login';
PKvc�\��$��&new_user_dialog/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Izberite identiteto za pošiljanje';
$labels['identitydialoghint'] = 'To okno se prikaže le ob prvi prijavi v spletno pošto.';
PKvc�\;[c#new_user_dialog/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'يرجى إكمال هوية المُرسِل الخاصة بك';
$labels['identitydialoghint'] = 'يظهر هذا المربع مرة واحدة فقط عند تسجيل الدخول أول مرة .';
PKvc�\�#/���&new_user_dialog/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Bitte vervollständigen Sie Ihre Absenderkennung';
$labels['identitydialoghint'] = 'Dieser Dialog erscheint nur einmal beim ersten Anmelden.';
PKvc�\�����&new_user_dialog/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Fyll i namn och avsändaradress under personliga inställningar';
$labels['identitydialoghint'] = 'Informationen visas endast vid första inloggningen.';
PKvc�\ ��#new_user_dialog/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'سىزنىڭ ئەۋەتكۈچىلىك كىملىكىڭىزنى تۇلۇقلاڭ';
$labels['identitydialoghint'] = 'بۇ بەلگە پەقەتلا تۇنجى قېتىم كىرگەندە كۆرۈنىدۇ.';
PKvc�\������&new_user_dialog/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = '발송자의 신원을 완성해주세요.';
$labels['identitydialoghint'] = '이 상자는 최초로 로그인할 때만 나타납니다.';
PKvc�\�����&new_user_dialog/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor, completa os teus datos persoais';
$labels['identitydialoghint'] = 'Este diálogo só aparecerá a primera vez que te conectes ao correo.';
PKvc�\��\Y��&new_user_dialog/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Per favore completa le informazioni riguardo la tua identità';
$labels['identitydialoghint'] = 'Questa finestra comparirà una volta sola al primo accesso';
PKvc�\B ���&new_user_dialog/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor, complete su identidad de remitente';
$labels['identitydialoghint'] = 'Este diálogo sólo aparece la primera vez que inicia su sesión.';
PKvc�\o?Iv��&new_user_dialog/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'സ്വീകര്‍ത്താവിന്റെ വ്യക്തിത്വം പൂര്‍ത്തീകരിക്കുക';
$labels['identitydialoghint'] = 'ആദ്യത്തെ പ്രവേശനത്തില്‍ മാത്രമേ ഈ പെട്ടി വരികയുള്ളു';
PKvc�\�9���&new_user_dialog/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Vul alstublieft uw afzendergegevens in.';
$labels['identitydialoghint'] = 'Dit scherm verschijnt eenmalig bij uw eerste aanmelding.';
PKvc�\��y���&new_user_dialog/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Cwblhewch eich enw danfonwr';
$labels['identitydialoghint'] = 'Mae\'r bocs hwn yn ymddangos unwaith ar eich mewngofnodiad cyntaf.';
PKvc�\��s��&new_user_dialog/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Please complete your sender identity.';
$labels['identitydialoghint'] = 'This box only appears once at the first login.';
PKvc�\�qQ"��&new_user_dialog/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Vinarliga fill út tín sendara samleika';
$labels['identitydialoghint'] = 'Hesin kassin sæðst einans á fyrstu innriting.';
PKvc�\��R��&new_user_dialog/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Prašom užpildyti trūkstamą informaciją apie save';
$labels['identitydialoghint'] = 'Šis langas rodomas tik prisijungus pirmąjį kartą.';
PKvc�\k:��&new_user_dialog/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Por favor, complete a sua identidade';
$labels['identitydialoghint'] = 'Esta caixa aparece apenas uma vez no primeiro acesso.';
PKvc�\����00&new_user_dialog/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail New User Dialog plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-new_user_dialog/
*/

$labels['identitydialogtitle'] = 'Παρακαλώ συμπληρώστε την ταυτότητα του αποστολέα';
$labels['identitydialoghint'] = 'Αυτό το πλαίσιο εμφανίζεται μια φορά κατά την πρώτη σύνδεση';
PKvc�\.Pd�aa#new_user_dialog/new_user_dialog.phpnu�[���<?php

/**
 * Present identities settings dialog to new users
 *
 * When a new user is created, this plugin checks the default identity
 * and sets a session flag in case it is incomplete. An overlay box will appear
 * on the screen until the user has reviewed/completed his identity.
 *
 * @license GNU GPLv3+
 * @author Thomas Bruederli
 * @author Aleksander Machniak
 */
class new_user_dialog extends rcube_plugin
{
    public $task    = '';
    public $noframe = true;


    function init()
    {
        $this->add_hook('identity_create', [$this, 'create_identity']);
        $this->add_hook('render_page', [$this, 'render_page']);
        $this->register_action('plugin.newusersave', [$this, 'save_data']);
    }

    /**
     * Check newly created identity at first login
     */
    function create_identity($p)
    {
        // set session flag when a new user was created and the default identity seems to be incomplete
        if (!empty($p['login']) && empty($p['complete']) && !empty($p['record']['standard'])) {
            $rcmail = rcmail::get_instance();
            $rcmail->user->save_prefs(['newuserdialog' => true]);
        }
    }

    /**
     * Callback function when HTML page is rendered
     * We'll add an overlay box here.
     */
    function render_page($p)
    {
        $rcmail = rcmail::get_instance();

        if ($p['template'] != 'login' && $rcmail->config->get('newuserdialog')) {
            $this->add_texts('localization');

            $identity         = $rcmail->user->get_identity();
            $identities_level = intval($rcmail->config->get('identities_level', 0));

            // compose user-identity dialog
            $table = new html_table(['cols' => 2, 'class' => 'propform']);

            $table->add('title', html::label('newuserdialog-name', $this->gettext('name')));
            $table->add(null, html::tag('input', [
                    'id'       => 'newuserdialog-name',
                    'type'     => 'text',
                    'name'     => '_name',
                    'value'    => $identity['name'],
                    'disabled' => $identities_level == 4
                ])
            );

            $table->add('title', html::label('newuserdialog-email', $this->gettext('email')));
            $table->add(null, html::tag('input', [
                    'id'       => 'newuserdialog-email',
                    'type'     => 'text',
                    'name'     => '_email',
                    'value'    => rcube_utils::idn_to_utf8($identity['email']),
                    'disabled' => in_array($identities_level, [1, 3, 4])
                ])
            );

            $table->add('title', html::label('newuserdialog-org', $this->gettext('organization')));
            $table->add(null, html::tag('input', [
                    'id'       => 'newuserdialog-org',
                    'type'     => 'text',
                    'name'     => '_organization',
                    'value'    => $identity['organization'],
                    'disabled' => $identities_level == 4
                ])
            );

            $table->add('title', html::label('newuserdialog-sig', $this->gettext('signature')));
            $table->add(null, html::tag('textarea', [
                    'id'   => 'newuserdialog-sig',
                    'name' => '_signature',
                    'rows' => '5',
                ],
                $identity['signature']
            ));

            // add overlay input box to html page
            $rcmail->output->add_footer(html::tag('form', [
                    'id'     => 'newuserdialog',
                    'action' => $rcmail->url('plugin.newusersave'),
                    'method' => 'post',
                    'class'  => 'formcontent',
                    'style'  => 'display: none',
                ],
                html::p('hint', rcube::Q($this->gettext('identitydialoghint'))) . $table->show()
            ));

            $title  = rcube::JQ($this->gettext('identitydialogtitle'));
            $script = "
var newuserdialog = rcmail.show_popup_dialog($('#newuserdialog'), '$title', [{
    text: rcmail.get_label('save'),
    'class': 'mainaction save',
    click: function() {
      var request = {};
      $.each($('form', this).serializeArray(), function() {
        request[this.name] = this.value;
      });

      rcmail.http_post('plugin.newusersave', request, true);
      return false;
    }
  }],
  {
    resizable: false,
    closeOnEscape: false,
    width: 500,
    open: function() { $('#newuserdialog').show(); $('#newuserdialog-name').focus(); },
    beforeClose: function() { return false; }
  }
);
rcube_webmail.prototype.new_user_dialog_close = function() { newuserdialog.dialog('destroy'); };
";
            // disable keyboard events for messages list (#1486726)
            $rcmail->output->add_script($script, 'docready');
        }
    }

    /**
     * Handler for submitted form (ajax request)
     *
     * Check fields and save to default identity if valid.
     * Afterwards the session flag is removed and we're done.
     */
    function save_data()
    {
        $rcmail      = rcmail::get_instance();
        $identity    = $rcmail->user->get_identity();
        $ident_level = intval($rcmail->config->get('identities_level', 0));
        $disabled    = [];

        $save_data = [
            'name'         => rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST),
            'email'        => rcube_utils::get_input_string('_email', rcube_utils::INPUT_POST),
            'organization' => rcube_utils::get_input_string('_organization', rcube_utils::INPUT_POST),
            'signature'    => rcube_utils::get_input_string('_signature', rcube_utils::INPUT_POST),
        ];

        if ($ident_level == 4) {
            $disabled = ['name', 'email', 'organization'];
        }
        else if (in_array($ident_level, [1, 3])) {
            $disabled = ['email'];
        }

        foreach ($disabled as $key) {
            $save_data[$key] = $identity[$key];
        }

        if (empty($save_data['name']) || empty($save_data['email'])) {
            $rcmail->output->show_message('formincomplete', 'error');
        }
        else if (!rcube_utils::check_email($save_data['email'] = rcube_utils::idn_to_ascii($save_data['email']))) {
            $rcmail->output->show_message('emailformaterror', 'error', ['email' => $save_data['email']]);
        }
        else {
            // execute hook
            $plugin = $rcmail->plugins->exec_hook('identity_update', [
                'id' => $identity['identity_id'],
                'record' => $save_data
            ]);

            if (!$plugin['abort']) {
                // save identity
                $updated = $rcmail->user->update_identity($plugin['id'], $plugin['record']);
            } else {
                $updated = $plugin['result'];
            }

            if ($updated) {
                // save prefs to not show dialog again
                $rcmail->user->save_prefs(['newuserdialog' => null]);
                // hide dialog
                $rcmail->output->command('new_user_dialog_close');
                $rcmail->output->show_message('successfullysaved', 'confirmation');
            } else {
                // show error
                $error = !empty($plugin['message']) ? $plugin['message'] : 'errorsaving';
                $rcmail->output->show_message($error, 'error', null, false);
            }
        }

        $rcmail->output->send();
    }
}
PKvc�\�D�4@I@Ienigma/enigma.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Enigma Plugin for Roundcube                                             |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

/**
 * This class contains only hooks and action handlers.
 * Most plugin logic is placed in enigma_engine and enigma_ui classes.
 */
class enigma extends rcube_plugin
{
    public $task = 'mail|settings|cli';
    public $rc;
    public $engine;
    public $ui;

    private $env_loaded = false;


    /**
     * Plugin initialization.
     */
    function init()
    {
        $this->rc = rcube::get_instance();

        if ($this->rc->task == 'mail') {
            // message parse/display hooks
            $this->add_hook('message_part_structure', [$this, 'part_structure']);
            $this->add_hook('message_part_body', [$this, 'part_body']);
            $this->add_hook('message_body_prefix', [$this, 'status_message']);

            $this->register_action('plugin.enigmaimport', [$this, 'import_file']);
            $this->register_action('plugin.enigmakeys', [$this, 'preferences_ui']);

            // load the Enigma plugin configuration
            $this->load_config();

            $enabled = $this->rc->config->get('enigma_encryption', true);

            // message displaying
            if ($this->rc->action == 'show' || $this->rc->action == 'preview' || $this->rc->action == 'print') {
                $this->add_hook('message_load', [$this, 'message_load']);
                $this->add_hook('template_object_messagebody', [$this, 'message_output']);
            }
            // message composing
            else if ($enabled && $this->rc->action == 'compose') {
                $this->add_hook('message_compose_body', [$this, 'message_compose']);

                $this->load_ui();
                $this->ui->init();
            }
            // message sending (and draft storing)
            else if ($enabled && $this->rc->action == 'send') {
                $this->add_hook('message_ready', [$this, 'message_ready']);
            }

            $this->password_handler();
        }
        else if ($this->rc->task == 'settings') {
            // add hooks for Enigma settings
            $this->add_hook('settings_actions', [$this, 'settings_actions']);
            $this->add_hook('preferences_sections_list', [$this, 'preferences_sections_list']);
            $this->add_hook('preferences_list', [$this, 'preferences_list']);
            $this->add_hook('preferences_save', [$this, 'preferences_save']);
            $this->add_hook('identity_form', [$this, 'identity_form']);

            // register handler for keys/certs management
            $this->register_action('plugin.enigmakeys', [$this, 'preferences_ui']);
//            $this->register_action('plugin.enigmacerts', [$this, 'preferences_ui']);

            $this->load_ui();

            if (empty($_REQUEST['_framed']) || strpos($this->rc->action, 'plugin.enigma') === 0) {
                $this->ui->add_css();
            }

            $this->password_handler();
        }
        else if ($this->rc->task == 'cli') {
            $this->add_hook('user_delete_commit', [$this, 'user_delete']);
        }

        $this->add_hook('refresh', [$this, 'refresh']);
    }

    /**
     * Plugin environment initialization.
     */
    function load_env()
    {
        if ($this->env_loaded) {
            return;
        }

        $this->env_loaded = true;

        // Add include path for Enigma classes and drivers
        $include_path = $this->home . '/lib' . PATH_SEPARATOR;
        $include_path .= ini_get('include_path');
        set_include_path($include_path);

        // load the Enigma plugin configuration
        $this->load_config();

        // include localization (if wasn't included before)
        $this->add_texts('localization/');
    }

    /**
     * Plugin UI initialization.
     */
    function load_ui($all = false)
    {
        if (!$this->ui) {
            // load config/localization
            $this->load_env();

            // Load UI
            $this->ui = new enigma_ui($this, $this->home);
        }

        if ($all) {
            $this->ui->add_css();
            $this->ui->add_js();
        }
    }

    /**
     * Plugin engine initialization.
     */
    function load_engine()
    {
        if ($this->engine) {
            return $this->engine;
        }

        // load config/localization
        $this->load_env();

        return $this->engine = new enigma_engine($this);
    }

    /**
     * Handler for message_part_structure hook.
     * Called for every part of the message.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function part_structure($p)
    {
        $this->load_engine();

        return $this->engine->part_structure($p);
    }

    /**
     * Handler for message_part_body hook.
     * Called to get body of a message part.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function part_body($p)
    {
        $this->load_engine();

        return $this->engine->part_body($p);
    }

    /**
     * Handler for settings_actions hook.
     * Adds Enigma settings section into preferences.
     *
     * @param array $args Original parameters
     *
     * @return array Modified parameters
     */
    function settings_actions($args)
    {
        // add labels
        $this->add_texts('localization/');

        // register as settings action
        $args['actions'][] = [
            'action' => 'plugin.enigmakeys',
            'class'  => 'enigma keys',
            'label'  => 'enigmakeys',
            'title'  => 'enigmakeys',
            'domain' => 'enigma',
        ];
/*
        $args['actions'][] = [
            'action' => 'plugin.enigmacerts',
            'class'  => 'enigma certs',
            'label'  => 'enigmacerts',
            'title'  => 'enigmacerts',
            'domain' => 'enigma',
        ];
*/
        return $args;
    }

    /**
     * Handler for preferences_sections_list hook.
     * Adds Encryption settings section into preferences sections list.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function preferences_sections_list($p)
    {
        $p['list']['enigma'] = [
            'id' => 'enigma', 'section' => $this->gettext('encryption'),
        ];

        return $p;
    }

    /**
     * Handler for preferences_list hook.
     * Adds options blocks into Enigma settings sections in Preferences.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function preferences_list($p)
    {
        if ($p['section'] != 'encryption') {
            return $p;
        }

        $no_override = array_flip((array)$this->rc->config->get('dont_override'));

        if (!isset($no_override['enigma_encryption'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_encryption';
            $input    = new html_checkbox([
                    'name'  => '_enigma_encryption',
                    'id'    => $field_id,
                    'value' => 1,
            ]);

            $p['blocks']['main']['options']['enigma_encryption'] = [
                'title'   => html::label($field_id, $this->gettext('supportencryption')),
                'content' => $input->show(intval($this->rc->config->get('enigma_encryption'))),
            ];
        }

        if (!isset($no_override['enigma_signatures'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_signatures';
            $input    = new html_checkbox([
                    'name'  => '_enigma_signatures',
                    'id'    => $field_id,
                    'value' => 1,
            ]);

            $p['blocks']['main']['options']['enigma_signatures'] = [
                'title'   => html::label($field_id, $this->gettext('supportsignatures')),
                'content' => $input->show(intval($this->rc->config->get('enigma_signatures'))),
            ];
        }

        if (!isset($no_override['enigma_decryption'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_decryption';
            $input    = new html_checkbox([
                    'name'  => '_enigma_decryption',
                    'id'    => $field_id,
                    'value' => 1,
            ]);

            $p['blocks']['main']['options']['enigma_decryption'] = [
                'title'   => html::label($field_id, $this->gettext('supportdecryption')),
                'content' => $input->show(intval($this->rc->config->get('enigma_decryption'))),
            ];
        }

        if (!isset($no_override['enigma_sign_all'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_sign_all';
            $input    = new html_checkbox([
                    'name'  => '_enigma_sign_all',
                    'id'    => $field_id,
                    'value' => 1,
            ]);

            $p['blocks']['main']['options']['enigma_sign_all'] = [
                'title'   => html::label($field_id, $this->gettext('signdefault')),
                'content' => $input->show($this->rc->config->get('enigma_sign_all') ? 1 : 0),
            ];
        }

        if (!isset($no_override['enigma_encrypt_all'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_encrypt_all';
            $input    = new html_checkbox([
                    'name'  => '_enigma_encrypt_all',
                    'id'    => $field_id,
                    'value' => 1,
            ]);

            $p['blocks']['main']['options']['enigma_encrypt_all'] = [
                'title'   => html::label($field_id, $this->gettext('encryptdefault')),
                'content' => $input->show($this->rc->config->get('enigma_encrypt_all') ? 1 : 0),
            ];
        }

        if (!isset($no_override['enigma_attach_pubkey'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_attach_pubkey';
            $input    = new html_checkbox([
                    'name'  => '_enigma_attach_pubkey',
                    'id'    => $field_id,
                    'value' => 1,
            ]);

            $p['blocks']['main']['options']['enigma_attach_pubkey'] = [
                'title'   => html::label($field_id, $this->gettext('attachpubkeydefault')),
                'content' => $input->show($this->rc->config->get('enigma_attach_pubkey') ? 1 : 0),
            ];
        }

        if (!isset($no_override['enigma_password_time'])) {
            if (!$p['current']) {
                $p['blocks']['main']['content'] = true;
                return $p;
            }

            $field_id = 'rcmfd_enigma_password_time';
            $select   = new html_select(['name' => '_enigma_password_time', 'id' => $field_id, 'class' => 'custom-select']);

            foreach ([1, 5, 10, 15, 30] as $m) {
                $label = $this->gettext(['name' => 'nminutes', 'vars' => ['m' => $m]]);
                $select->add($label, $m);
            }
            $select->add($this->gettext('wholesession'), 0);

            $p['blocks']['main']['options']['enigma_password_time'] = [
                'title'   => html::label($field_id, $this->gettext('passwordtime')),
                'content' => $select->show(intval($this->rc->config->get('enigma_password_time'))),
            ];
        }

        return $p;
    }

    /**
     * Handler for preferences_save hook.
     * Executed on Enigma settings form submit.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function preferences_save($p)
    {
        if ($p['section'] == 'encryption') {
            $p['prefs']['enigma_signatures'] = (bool) rcube_utils::get_input_value('_enigma_signatures', rcube_utils::INPUT_POST);
            $p['prefs']['enigma_decryption'] = (bool) rcube_utils::get_input_value('_enigma_decryption', rcube_utils::INPUT_POST);
            $p['prefs']['enigma_encryption'] = (bool) rcube_utils::get_input_value('_enigma_encryption', rcube_utils::INPUT_POST);
            $p['prefs']['enigma_sign_all'] = (bool) rcube_utils::get_input_value('_enigma_sign_all', rcube_utils::INPUT_POST);
            $p['prefs']['enigma_encrypt_all'] = (bool) rcube_utils::get_input_value('_enigma_encrypt_all', rcube_utils::INPUT_POST);
            $p['prefs']['enigma_attach_pubkey'] = (bool) rcube_utils::get_input_value('_enigma_attach_pubkey', rcube_utils::INPUT_POST);
            $p['prefs']['enigma_password_time'] = intval(rcube_utils::get_input_value('_enigma_password_time', rcube_utils::INPUT_POST));
        }

        return $p;
    }

    /**
     * Handler for keys/certs management UI template.
     */
    function preferences_ui()
    {
        $this->load_ui();

        $this->ui->init();
    }

    /**
     * Handler for 'identity_form' plugin hook.
     *
     * This will list private keys matching this identity
     * and add a link to enigma key management action.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function identity_form($p)
    {
        if (isset($p['form']['encryption']) && !empty($p['record']['identity_id'])) {
            $content = '';

            // find private keys for this identity
            if (!empty($p['record']['email'])) {
                $listing = [];
                $engine  = $this->load_engine();
                $keys    = $engine->list_keys($p['record']['email']);

                // On error do nothing, plugin/gnupg misconfigured?
                if ($keys instanceof enigma_error) {
                    return $p;
                }

                foreach ($keys as $key) {
                    if ($key->get_type() === enigma_key::TYPE_KEYPAIR) {
                        $listing[] = html::tag('li', null,
                            html::tag('strong', 'uid', html::quote($key->id))
                            . ' ' . html::tag('span', 'identity', html::quote($key->name))
                        );
                    }
                }

                if (count($listing)) {
                    $content .= html::p(null, $this->gettext(['name' => 'identitymatchingprivkeys', 'vars' => ['nr' => count($listing)]]));
                    $content .= html::tag('ul', 'keylist', implode("\n", $listing));
                }
                else {
                    $content .= html::p(null, $this->gettext('identitynoprivkeys'));
                }
            }

            // add button linking to enigma key management
            $button_attr = [
                'class'  => 'button',
                'href'   => $this->rc->url(['action' => 'plugin.enigmakeys']),
                'target' => '_parent',
            ];
            $content .= html::p(null, html::a($button_attr, $this->gettext('managekeys')));

            // rename class to avoid Mailvelope key management to kick in
            $p['form']['encryption']['attrs'] = ['class' => 'enigma-identity-encryption'];
            // fill fieldset content with our stuff
            $p['form']['encryption']['content'] = html::div('identity-encryption-block', $content);
        }

        return $p;
    }

    /**
     * Handler for message_body_prefix hook.
     * Called for every displayed (content) part of the message.
     * Adds infobox about signature verification and/or decryption
     * status above the body.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function status_message($p)
    {
        $this->load_ui();

        return $this->ui->status_message($p);
    }

    /**
     * Handler for message_load hook.
     * Check message bodies and attachments for keys/certs.
     */
    function message_load($p)
    {
        $this->load_ui();

        return $this->ui->message_load($p);
    }

    /**
     * Handler for template_object_messagebody hook.
     * This callback function adds a box below the message content
     * if there is a key/cert attachment available
     */
    function message_output($p)
    {
        $this->load_ui();

        return $this->ui->message_output($p);
    }

    /**
     * Handler for attached keys/certs import
     */
    function import_file()
    {
        $this->load_ui();

        $this->ui->import_file();
    }

    /**
     * Handle password submissions
     */
    function password_handler()
    {
        $this->load_engine();

        $this->engine->password_handler();
    }

    /**
     * Handle message_ready hook (encryption/signing)
     */
    function message_ready($p)
    {
        $this->load_ui();

        return $this->ui->message_ready($p);
    }

    /**
     * Handle message_compose_body hook
     */
    function message_compose($p)
    {
        $this->load_ui();

        return $this->ui->message_compose($p);
    }

    /**
     * Handler for refresh hook.
     */
    function refresh($p)
    {
        // calling enigma_engine constructor to remove passwords
        // stored in session after expiration time
        $this->load_engine();

        return $p;
    }

    /**
     * Handle delete_user_commit hook
     */
    function user_delete($p)
    {
        $this->load_engine();

        $p['abort'] = $p['abort'] || !$this->engine->delete_user_data($p['username']);

        return $p;
    }
}
PKvc�\��B-enigma/skins/elastic/templates/keyimport.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="enigma.importkeys" /></h1>

<div class="formcontent">
	<roundcube:object name="importform" class="propform" part="import" />
</div>

<roundcube:include file="includes/footer.html" />
PKvc�\
�j(enigma/skins/elastic/templates/keys.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" />

<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="enigma.enigmakeys" /></h1>

<!-- keys list -->
<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-enigmakeyslist">
	<div class="header">
		<a class="button icon back-sidebar-button" href="#sidebar"><span class="inner"><roundcube:label name="settings" /></span></a>
		<span id="aria-label-enigmakeyslist" class="header-title"><roundcube:label name="enigma.enigmakeys" /></span>
		<a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a>
	</div>
	<roundcube:object name="searchform" id="keysearch" wrapper="searchbar menu"
		label="keysearchform" buttontitle="findkeys" ariatag="h2" />
	<div class="scroller">
		<roundcube:object name="keyslist" id="keys-table" class="listing" role="listbox" noheader="true"
		data-list="keys_list" data-label-msg="listempty" />
	</div>
	<div class="pagenav menu footer small" role="toolbar" aria-label="<roundcube:label name="arialabellistnav" />">
		<roundcube:button command="firstpage" type="link" class="firstpage disabled" classAct="firstpage"
			title="firstpage" label="first" innerclass="inner" />
		<roundcube:button command="previouspage" type="link" class="prevpage disabled" classAct="prevpage"
			title="previouspage" label="previous" innerclass="inner" />
		<span class="pagenav-text" aria-live="polite" aria-relevant="text">
			<roundcube:object name="countdisplay" />
		</span>
		<roundcube:endif />
		<roundcube:button command="nextpage" type="link" class="nextpage disabled" classAct="nextpage"
			title="nextpage" label="next" innerclass="inner" />
		<roundcube:button command="lastpage" type="link" class="lastpage disabled" classAct="lastpage"
			title="lastpage" label="last" innerclass="inner" />
	</div>
</div>

<!-- key info frame -->
<div id="layout-content" role="main">
	<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
	<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
		<!-- toolbar -->
		<div id="folderstoolbar" class="toolbar menu">
			<roundcube:button command="plugin.enigma-key-create" type="link" class="create disabled" classAct="create"
				label="create" title="enigma.createkeys" innerClass="inner" />
			<roundcube:button command="plugin.enigma-key-delete" type="link" class="delete disabled" classAct="delete"
				label="delete" title="enigma.keyremove" innerClass="inner" />
			<span class="spacer"></span>
			<roundcube:button command="plugin.enigma-key-import-search" type="link" class="search disabled" classAct="search"
				label="search" title="enigma.keyimportsearchlabel" innerClass="inner" />
			<roundcube:button command="plugin.enigma-key-import" type="link" class="import disabled" classAct="import"
				label="import" title="enigma.importkeys" innerClass="inner" />
			<span class="dropbutton">
				<roundcube:button command="plugin.enigma-key-export" type="link" class="export disabled" classAct="export"
					label="export" title="enigma.exportkeys" innerclass="inner" />
				<a href="#export" class="dropdown" data-popup="export-menu">
					<span class="inner"><roundcube:label name="enigma.arialabelkeyexportoptions" /></span>
				</a>
			</span>
		</div>
	</div>
	<div class="iframe-wrapper">
		<roundcube:object name="contentframe" id="keyframe" src="env:blankpage" />
	</div>
</div>

<div id="export-menu" class="popupmenu">
	<h3 id="aria-label-exportmenu" class="voice"><roundcube:label name="enigma.arialabelkeyexportoptions" /></h3>
	<ul class="menu listing" role="menu" aria-labelledby="aria-label-export-menu">
		<roundcube:button type="link-menuitem" command="plugin.enigma-key-export" label="exportall" prop="sub" class="export all disabled" classAct="export all active" />
		<roundcube:button type="link-menuitem" command="plugin.enigma-key-export-selected" label="exportsel" prop="sub" class="export select disabled" classAct="export select active" />
	</ul>
</div>

<roundcube:include file="includes/footer.html" />
PKvc�\f���-enigma/skins/elastic/templates/keysearch.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="enigma.keyimportsearchlabel" /></h1>

<div class="formcontent">
	<roundcube:object name="importform" class="propform" part="search" />
</div>

<roundcube:include file="includes/footer.html" />
PKvc�\�щ��-enigma/skins/elastic/templates/keycreate.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="enigma.createkeys" /></h1>

<div class="formcontent">
	<roundcube:object name="keyform" class="propform" textarearows="6" />
</div>

<div class="formbuttons">
	<roundcube:button command="plugin.enigma-key-save" class="btn btn-primary submit" label="save" />
</div>

<roundcube:include file="includes/footer.html" />
PKvc�\��|�+enigma/skins/elastic/templates/keyinfo.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="enigma.keyprops" /></h1>

<div class="formcontent">
	<roundcube:object name="keydata" class="propform" />
</div>

<roundcube:include file="includes/footer.html" />
PKwc�\?��[[enigma/composer.jsonnu�[���{
    "name": "roundcube/enigma",
    "type": "roundcube-plugin",
    "description": "Server-side PGP Encryption for Roundcube",
    "license": "GPL-3.0-or-later",
    "version": "0.9",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": "~0.1.6",
        "pear/crypt_gpg": "~1.6.3"
    }
}
PKwc�\��&�[[enigma/localization/zh_CN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = '加密';
$labels['enigmacerts'] = 'S/MIME 证书';
$labels['enigmakeys'] = 'PGP 密钥';
$labels['keysfromto'] = '从 $from 到 $to,共计 $count 个密钥';
$labels['keyname'] = '名称';
$labels['keyid'] = '密钥 ID';
$labels['keyuserid'] = '用户 ID';
$labels['keytype'] = '密钥类型';
$labels['fingerprint'] = '指纹';
$labels['subkeys'] = '子密钥';
$labels['keyprops'] = '密钥属性';
$labels['basicinfo'] = '基本信息';
$labels['userids'] = '其他用户';
$labels['typepublickey'] = '公钥';
$labels['typekeypair'] = '密钥对';
$labels['keyattfound'] = '此消息包含附加的 PGP 密钥。';
$labels['keyattimport'] = '导入密钥';
$labels['typesign'] = '签名';
$labels['typeencrypt'] = '加密';
$labels['typecert'] = '证明';
$labels['typeauth'] = '身份验证';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = '算法';
$labels['subkeycreated'] = '创建于';
$labels['subkeyexpires'] = '过期时间';
$labels['subkeyusage'] = '用法';
$labels['expiresnever'] = '从不';
$labels['unknown'] = '未知';
$labels['uservalid'] = '有效';
$labels['userid'] = 'ID';
$labels['valid'] = '有效';
$labels['supportencryption'] = '启用邮件加密和签名';
$labels['supportsignatures'] = '启用邮件签名验证';
$labels['supportdecryption'] = '启用邮件解密';
$labels['signdefault'] = '默认签名所有邮件';
$labels['encryptdefault'] = '默认加密所有邮件';
$labels['attachpubkeydefault'] = '默认附加我的公共 PGP 密钥';
$labels['passwordtime'] = '保持私钥密码';
$labels['nminutes'] = '$m 分钟';
$labels['wholesession'] = '整个会话';
$labels['createkeys'] = '创建新密钥对';
$labels['importkeys'] = '导入密钥';
$labels['exportkeys'] = '加密密钥';
$labels['keyactions'] = '密钥操作...';
$labels['keyremove'] = '移除';
$labels['keydisable'] = '禁用';
$labels['keyrevoke'] = '废除';
$labels['keysend'] = '在邮件中发送公钥';
$labels['keychpass'] = '修改密码';
$labels['newkeyident'] = '标识';
$labels['newkeypass'] = '密码';
$labels['newkeypassconfirm'] = '确认密码';
$labels['newkeytype'] = '密钥类型';
$labels['keygenerating'] = '正在生成密钥...';
$labels['encryptionoptions'] = '加密选项...';
$labels['encryptmsg'] = '加密此邮件';
$labels['signmsg'] = '数字签名此邮件';
$labels['sendunencrypted'] = '不加密发送';
$labels['enterkeypasstitle'] = '请输入密钥口令';
$labels['enterkeypass'] = '需要口令解锁私钥 ($keyid),用户:$user。';
$labels['attachpubkeymsg'] = '附加我的公钥';
$labels['keyexportprompt'] = '您要在保存的 OpenPGP 密钥文件中包含私钥吗?';
$labels['onlypubkeys'] = '仅导出公钥';
$labels['withprivkeys'] = '导出私钥';
$labels['findkey'] = '搜索密钥服务器';
$labels['keyimportlabel'] = '从文件导入';
$labels['keyimportsearchlabel'] = '在密钥服务器上搜索';
$labels['managekeys'] = '管理 PGP 密钥';
$labels['identitymatchingprivkeys'] = '你的钥匙环中有 $nr 项符合条件的 PGP 私钥:';
$labels['identitynoprivkeys'] = '你的钥匙环中没有符合此发件人身份的 PGP 私钥';
$labels['arialabelkeyexportoptions'] = '密钥导出选项';
$messages['sigvalid'] = '已验证来自 $sender 的签名。';
$messages['sigvalidpartial'] = '已验证来自 $sender 的签名,但主体部分未被签名。';
$messages['siginvalid'] = '无效的来自 $sender 的签名。';
$messages['sigunverified'] = '未验证签名。证书未验证。证书 ID: $keyid。';
$messages['signokey'] = '未验证签名。公钥未找到。密钥 ID: $keyid。';
$messages['sigerror'] = '未验证签名。内部错误。';
$messages['decryptok'] = '邮件已解密';
$messages['decrypterror'] = '解密失败。';
$messages['decryptnokey'] = '解密失败。私钥未找到。密钥 ID: $keyid。';
$messages['decryptbadpass'] = '解密失败。密码无效。';
$messages['decryptnopass'] = '解密失败。需要密钥密码。';
$messages['decryptpartial'] = '邮件已解密,但主体部分未被加密。';
$messages['signerror'] = '签名失败。';
$messages['signnokey'] = '签名失败。私钥未找到。';
$messages['signbadpass'] = '签名失败。密码无效。';
$messages['signnopass'] = '签名失败。需要密钥密码。';
$messages['encrypterror'] = '加密失败。';
$messages['encryptnokey'] = '加密失败。用于 $email 的公钥未找到。';
$messages['nokeysfound'] = '没有找到密钥';
$messages['keynotfound'] = '密钥未找到!';
$messages['keyopenerror'] = '无法获取密钥信息!内部错误。';
$messages['keylisterror'] = '无法列出密钥。内部错误。';
$messages['keysimportfailed'] = '无法导入密钥!内部错误。';
$messages['keysimportsuccess'] = '密钥导入成功。已导入 $new 项,未变更 $old 项。';
$messages['keyremoving'] = '正在移除密钥...';
$messages['keyremoveconfirm'] = '您确定吗,确定删除选定密钥?';
$messages['keyremovesuccess'] = '密钥删除成功';
$messages['keyremoveerror'] = '无法删除选定密钥。';
$messages['keyimporttext'] = '您可以导入私钥和公钥或废除 ASCII-Armor 格式的签名。';
$messages['keyimportsearchtext'] = '您可以根据密钥标识符、用户名或电子邮件地址搜索公钥和直接导入它们。';
$messages['formerror'] = '请填写表单。所有字段都为必填!';
$messages['passwordsdiffer'] = '密码不匹配!';
$messages['keygenerateerror'] = '生成密钥对失败';
$messages['keygeneratesuccess'] = '密钥对生成和导入成功。';
$messages['keygennosupport'] = '您的网页浏览器不支持加密。无法生成密钥对!';
$messages['noidentselected'] = '您必须为该密钥选择至少一个身份!';
$messages['nonameident'] = '身份必须有一个用户名!';
$labels['newkeysize'] = '密钥长度';
$labels['key2048'] = '2048 位 - 默认';
$labels['key4096'] = '4096 位 - 更安全';
PKwc�\��L((enigma/localization/be_BE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Шыфраванне';
$labels['keyname'] = 'Назва';
$labels['keyid'] = 'ID ключа';
$labels['typeencrypt'] = 'Зашыфраваць';
$labels['subkeycreated'] = 'Створаны';
$labels['expiresnever'] = 'ніколі';
$labels['unknown'] = 'невядома';
$labels['createkeys'] = 'Стварыць новую пару ключоў';
$labels['keychpass'] = 'Змяніць пароль';
$labels['newkeypass'] = 'Пароль';
$labels['keyimportlabel'] = 'Імпартаваць з файла';
PKwc�\yT���+�+enigma/localization/bg_BG.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Криптиране';
$labels['enigmacerts'] = 'S/MIME сертификати';
$labels['enigmakeys'] = 'PGP ключове';
$labels['keysfromto'] = 'Ключове $from до $to от $count';
$labels['keyname'] = 'Име';
$labels['keyid'] = 'ИН на ключ';
$labels['keyuserid'] = 'ИН на потребител';
$labels['keytype'] = 'Тип на ключ';
$labels['fingerprint'] = 'Пръстов отпечатък';
$labels['subkeys'] = 'Подключове';
$labels['keyprops'] = 'Свойства на ключа';
$labels['basicinfo'] = 'Основна информация';
$labels['userids'] = 'Допълнителни потребители';
$labels['typepublickey'] = 'публичен ключ';
$labels['typekeypair'] = 'ключова двойка';
$labels['keyattfound'] = 'Това писмо съдържа прикачен(и) PGP ключ(ове)';
$labels['keyattimport'] = 'Импорт на ключ(ове)';
$labels['typesign'] = 'Подписване';
$labels['typeencrypt'] = 'Криптиране';
$labels['typecert'] = 'Удостоверяване';
$labels['typeauth'] = 'Идентификация';
$labels['subkeyid'] = 'ИН';
$labels['subkeyalgo'] = 'Алгоритъм';
$labels['subkeycreated'] = 'Създаден';
$labels['subkeyexpires'] = 'Изтича';
$labels['subkeyusage'] = 'Употреба';
$labels['expiresnever'] = 'никога';
$labels['unknown'] = 'неизвестно';
$labels['uservalid'] = 'Валиден';
$labels['userid'] = 'ИН';
$labels['valid'] = 'валиден';
$labels['supportencryption'] = 'Включи криптиране и подписване на писма';
$labels['supportsignatures'] = 'Включи верификация на подписи в писма';
$labels['supportdecryption'] = 'Включи декриптиране на писма';
$labels['signdefault'] = 'Подписвай всички писма по подразбиране';
$labels['encryptdefault'] = 'Криптирай всички писма по подразбиране';
$labels['attachpubkeydefault'] = 'Прикачи по подразбирне моя публичен PGP ключ';
$labels['passwordtime'] = 'Запомни паролата на частния ключ за';
$labels['nminutes'] = '$m минути';
$labels['wholesession'] = 'цялата сесия';
$labels['createkeys'] = 'Създай нова ключова двойка';
$labels['importkeys'] = 'Импорт на ключ(ове)';
$labels['exportkeys'] = 'Експорт на ключ(ове)';
$labels['keyactions'] = 'Действия...';
$labels['keyremove'] = 'Изтриване';
$labels['keydisable'] = 'Деактивиране';
$labels['keyrevoke'] = 'Отмяна';
$labels['keysend'] = 'Изпрати писмо с публичен ключ';
$labels['keychpass'] = 'Промени паролата';
$labels['keyadd'] = 'Добавяне на ключ';
$labels['newkeyident'] = 'Самоличност';
$labels['newkeypass'] = 'Парола';
$labels['newkeypassconfirm'] = 'Потвърди паролата';
$labels['newkeytype'] = 'Тип на ключ';
$labels['rsa2048'] = 'RSA - 2048 бита';
$labels['rsa4096'] = 'RSA - 4096 бита';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Генериране на ключове...';
$labels['encryptionoptions'] = 'Опции за криптиране...';
$labels['encryptmsg'] = 'Криптирай това писмо';
$labels['signmsg'] = 'Подпиши цифрово това писмо';
$labels['sendunencrypted'] = 'Изпрати некриптирано';
$labels['enterkeypasstitle'] = 'Въведете парола на ключа';
$labels['enterkeypass'] = 'Нужна е парола за отваряне на ключ ($keyid) за потребител $user.';
$labels['attachpubkeymsg'] = 'Прикачи моя публичен ключ';
$labels['keyexportprompt'] = 'Желаете ли да включите секретните ключове в записания OpenPGP файл?';
$labels['onlypubkeys'] = 'Експорт само на Публичните ключове';
$labels['withprivkeys'] = 'Експорт на Секретни ключове';
$labels['findkey'] = 'Търси на сървъри за ключове';
$labels['keyimportlabel'] = 'Импорт от файл';
$labels['keyimportsearchlabel'] = 'Търси на сървъри за ключове';
$labels['managekeys'] = 'Управление на PGP ключовете';
$labels['identitymatchingprivkeys'] = 'Имате $nr съвпадащи PGP частни ключа, съхранени във вашия ключодържател:';
$labels['identitynoprivkeys'] = 'Тази самоличност на подателя все още няма частен PGP ключ, съхраняван във вашия ключодържател.';
$labels['arialabelkeyexportoptions'] = 'Опции за експорт на ключ';
$labels['arialabelkeysearchform'] = 'Форма за търсене на ключове';
$labels['arialabelkeyoptions'] = 'Настройки на ключа';
$messages['sigvalid'] = 'Верифициран подпис от $sender.';
$messages['sigvalidpartial'] = 'Верифициран подпис от $sender, но част от съдържанието на писмото не е било подписано';
$messages['siginvalid'] = 'Невалиден подпис от $sender.';
$messages['sigunverified'] = 'Неверифициран подпис. Сертификатът не е верифициран. Сертификат с ИН $keyid.';
$messages['signokey'] = 'Неверифициран подпис. Публичния ключ не е намерен. Ключ с ИН $keyid.';
$messages['sigerror'] = 'Неверифициран подпис. Вътрешна грешка.';
$messages['decryptok'] = 'Писмото е декриптирано.';
$messages['decrypterror'] = 'Невъзможно декриптиране.';
$messages['decryptnokey'] = 'Невъзможно декриптиране. Частният ключ не е намерен. Ключ с ИН $keyid.';
$messages['decryptnomdc'] = 'Декриптирането е пропуснато. Целостта писмото е нарушена.';
$messages['decryptbadpass'] = 'Невъзможно декриптиране. Невалидна парола.';
$messages['decryptnopass'] = 'Невъзможно декриптиране. Паролата на частния ключ е задължителна.';
$messages['decryptpartial'] = 'Писмото е декриптирано, но част от съдържанието му не е било защитено с криптиране.';
$messages['signerror'] = 'Невъзможно подписване.';
$messages['signnokey'] = 'Невъзможно подписване. Частният ключ не е намерен.';
$messages['signbadpass'] = 'Невъзможно подписване. Невалидна парола.';
$messages['signnopass'] = 'Невъзможно подписване. Паролата на частния ключ е задължителна.';
$messages['encrypterror'] = 'Невъзможно криптиране.';
$messages['encryptnokey'] = 'Невъзможно криптиране. Публичният ключ не е намерен за $email.';
$messages['encryptnoprivkey'] = 'Невъзможно криптиране. Частният ключ не е намерен.';
$messages['nokeysfound'] = 'Не са намерени ключове';
$messages['keynotfound'] = 'Ключът не е намерен!';
$messages['keyopenerror'] = 'Невъзможно получаване на информация за ключа! Вътрешна грешка.';
$messages['keylisterror'] = 'Невъзможно получаване на ключове! Вътрешна грешка.';
$messages['keysimportfailed'] = 'Невъзможно импортиране на ключове! Вътрешна грешка.';
$messages['keysimportsuccess'] = 'Ключовете са импортирани успешно. Импортирани $new, непроменени $old.';
$messages['keyremoving'] = 'Изтриване на ключове...';
$messages['keyremoveconfirm'] = 'Желаете ли да изтриете избраните ключове?';
$messages['keyremovesuccess'] = 'Ключовете са изтрити успешно.';
$messages['keyremoveerror'] = 'Невъзможно изтриване на ключове.';
$messages['keyimporttext'] = 'Можете да импортирате частни и публични ключове или сигнатури за отмяна в ASCII-Armor формат.';
$messages['keyimportsearchtext'] = 'Можете да търсите публични ключове по идентификатор, потребителско име или адрес на ел. поща, след което директно да ги импортирате.';
$messages['keystoragenotice'] = 'Всички публични и частни ключове се съхраняват на сървъра.';
$messages['formerror'] = 'Моля попълнете формата. Всички полета са задължителни!';
$messages['passwordsdiffer'] = 'Паролите не съвпадат!';
$messages['keygenerateerror'] = 'Невъзможно генериране на ключова двойка';
$messages['keygeneratesuccess'] = 'Ключовата двойка е генерирана и импортирана успешно.';
$messages['keygennosupport'] = 'Вашият браузър не поддържа нужните криптографски методи. Невъзможно генериране на ключова двойка.';
$messages['noidentselected'] = 'Трябва да избере поне една самоличност за този ключ!';
$messages['nonameident'] = 'Самоличността трябва да има дефинирано потребителско име!';
$labels['newkeysize'] = 'Размер на ключа';
$labels['key2048'] = '2048 бита (по подразбиране)';
$labels['key4096'] = '4096 бита (по-сигурен)';
PKwc�\??2m��enigma/localization/ne_NP.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'काहिलै नहुने';
$labels['unknown'] = 'अज्ञात';
$labels['newkeypass'] = 'प्रवेश शब्द';
PKwc�\z>���enigma/localization/en_US.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels = [];
$labels['encryption'] = 'Encryption';
$labels['enigmacerts'] = 'S/MIME Certificates';
$labels['enigmakeys'] = 'PGP Keys';
$labels['keysfromto'] = 'Keys $from to $to of $count';
$labels['keyname'] = 'Name';
$labels['keyid'] = 'Key ID';
$labels['keyuserid'] = 'User ID';
$labels['keytype'] = 'Key type';
$labels['fingerprint'] = 'Fingerprint';
$labels['subkeys'] = 'Subkeys';
$labels['keyprops'] = 'Key properties';
$labels['basicinfo'] = 'Basic Information';
$labels['userids'] = 'Additional Users';
$labels['typepublickey'] = 'public key';
$labels['typekeypair'] = 'key pair';
$labels['keyattfound'] = 'This message contains attached PGP key(s).';
$labels['keyattimport'] = 'Import key(s)';
$labels['typesign'] = 'Sign';
$labels['typeencrypt'] = 'Encrypt';
$labels['typecert'] = 'Certify';
$labels['typeauth'] = 'Authentication';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorithm';
$labels['subkeycreated'] = 'Created';
$labels['subkeyexpires'] = 'Expires';
$labels['subkeyusage'] = 'Usage';
$labels['expiresnever'] = 'never';
$labels['unknown'] = 'unknown';
$labels['uservalid'] = 'Valid';
$labels['userid'] = 'ID';
$labels['valid'] = 'valid';

$labels['supportencryption'] = 'Enable message encryption and signing';
$labels['supportsignatures'] = 'Enable message signatures verification';
$labels['supportdecryption'] = 'Enable message decryption';
$labels['signdefault'] = 'Sign all messages by default';
$labels['encryptdefault'] = 'Encrypt all messages by default';
$labels['attachpubkeydefault'] = 'Attach my public PGP key by default';
$labels['passwordtime'] = 'Keep private key passwords for';
$labels['nminutes'] = '$m minute(s)';
$labels['wholesession'] = 'the whole session';

$labels['createkeys'] = 'Create a new key pair';
$labels['importkeys'] = 'Import key(s)';
$labels['exportkeys'] = 'Export key(s)';
$labels['keyactions'] = 'Key actions...';
$labels['keyremove'] = 'Remove';
$labels['keydisable'] = 'Disable';
$labels['keyrevoke'] = 'Revoke';
$labels['keysend'] = 'Send public key in a message';
$labels['keychpass'] = 'Change password';
$labels['keyadd'] = 'Add key';

$labels['newkeyident'] = 'Identity';
$labels['newkeypass'] = 'Password';
$labels['newkeypassconfirm'] = 'Confirm password';
$labels['newkeytype'] = 'Key type';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Generating keys...';

$labels['encryptionoptions'] = 'Encryption options...';
$labels['encryptmsg'] = 'Encrypt this message';
$labels['signmsg'] = 'Digitally sign this message';
$labels['sendunencrypted'] = 'Send unencrypted';

$labels['enterkeypasstitle'] = 'Enter key passphrase';
$labels['enterkeypass'] = 'A passphrase is needed to unlock the secret key ($keyid) for user: $user.';
$labels['attachpubkeymsg'] = 'Attach my public key';

$labels['keyexportprompt'] = 'Do you want to include secret keys in the saved OpenPGP keys file?';
$labels['onlypubkeys'] = 'Export Public Keys Only';
$labels['withprivkeys'] = 'Export Secret Keys';
$labels['findkey'] = 'Search on key server(s)';
$labels['keyimportlabel'] = 'Import from file';
$labels['keyimportsearchlabel'] = 'Search on key server(s)';

$labels['managekeys'] = 'Manage PGP keys';
$labels['identitymatchingprivkeys'] = 'You have $nr matching PGP private keys stored in your keyring:';
$labels['identitynoprivkeys'] = 'This sender identity doesn\'t yet have a PGP private key stored in your keyring.';

$labels['arialabelkeyexportoptions'] = 'Keys export options';
$labels['arialabelkeysearchform'] = 'Keys search form';
$labels['arialabelkeyoptions'] = 'Key options';

$messages = [];
$messages['sigvalid'] = 'Verified signature from $sender.';
$messages['sigvalidpartial'] = 'Verified signature from $sender, but part of the body was not signed.';
$messages['siginvalid'] = 'Invalid signature from $sender.';
$messages['sigunverified'] = 'Unverified signature. Certificate not verified. Certificate ID: $keyid.';
$messages['signokey'] = 'Unverified signature. Public key not found. Key ID: $keyid.';
$messages['sigerror'] = 'Unverified signature. Internal error.';
$messages['decryptok'] = 'Message decrypted.';
$messages['decrypterror'] = 'Decryption failed.';
$messages['decryptnokey'] = 'Decryption failed. Private key not found. Key ID: $keyid.';
$messages['decryptnomdc'] = 'Decryption skipped. Message is not integrity protected.';
$messages['decryptbadpass'] = 'Decryption failed. Invalid password.';
$messages['decryptnopass'] = 'Decryption failed. Key password required.';
$messages['decryptpartial'] = 'Message decrypted, but part of the body was not encrypted.';
$messages['signerror'] = 'Signing failed.';
$messages['signnokey'] = 'Signing failed. Private key not found.';
$messages['signbadpass'] = 'Signing failed. Invalid password.';
$messages['signnopass'] = 'Signing failed. Key password required.';
$messages['encrypterror'] = 'Encryption failed.';
$messages['encryptnokey'] = 'Encryption failed. Public key not found for $email.';
$messages['encryptnoprivkey'] = 'Encryption failed. Private key not found.';
$messages['nokeysfound'] = 'No keys found';
$messages['keynotfound'] = 'Key not found!';
$messages['keyopenerror'] = 'Unable to get key information! Internal error.';
$messages['keylisterror'] = 'Unable to list keys! Internal error.';
$messages['keysimportfailed'] = 'Unable to import key(s)! Internal error.';
$messages['keysimportsuccess'] = 'Key(s) imported successfully. Imported: $new, unchanged: $old.';
$messages['keyremoving'] = 'Removing key(s)...';
$messages['keyremoveconfirm'] = 'Are you sure, you want to delete selected key(s)?';
$messages['keyremovesuccess'] = 'Key(s) deleted successfully';
$messages['keyremoveerror'] = 'Unable to delete selected key(s).';
$messages['keyimporttext'] = 'You can import private and public key(s) or revocation signatures in ASCII-Armor format.';
$messages['keyimportsearchtext'] = 'You can search for public keys by key identifier, user name or email address and then import them directly.';
$messages['keystoragenotice'] = 'All public and private keys are stored on the server.';

$messages['formerror'] = 'Please, fill the form. All fields are required!';
$messages['passwordsdiffer'] = 'Passwords do not match!';
$messages['keygenerateerror'] = 'Failed to generate a key pair';
$messages['keygeneratesuccess'] = 'A key pair generated and imported successfully.';
$messages['keygennosupport'] = 'Your web browser does not support cryptography. Unable to generate a key pair!';
$messages['noidentselected'] = 'You have to select at least one identity for the key!';

// removed in 1.3
$messages['nonameident'] = 'Identity must have a user name defined!';

// removed in 1.5
$labels['newkeysize'] = 'Key size';
$labels['key2048'] = '2048 bits - default';
$labels['key4096'] = '4096 bits - more secure';
PKwc�\��m��enigma/localization/fi_FI.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Salaus';
$labels['enigmacerts'] = 'S/MIME-varmenteet';
$labels['enigmakeys'] = 'PGP-avaimet';
$labels['keysfromto'] = 'Avaimet $from-$to/$count';
$labels['keyname'] = 'Nimi';
$labels['keyid'] = 'Avaintunniste';
$labels['keyuserid'] = 'Käyttäjätunniste';
$labels['keytype'] = 'Avaimen tyyppi';
$labels['fingerprint'] = 'Sormenjälki';
$labels['subkeys'] = 'Aliavaimet';
$labels['keyprops'] = 'Avaimen asetukset';
$labels['basicinfo'] = 'Perustiedot';
$labels['userids'] = 'Lisäkäyttäjät';
$labels['typepublickey'] = 'julkinen avain';
$labels['typekeypair'] = 'avainpari';
$labels['keyattfound'] = 'Tämä viesti sisältää yhden tai useamman PGP-avaimen.';
$labels['keyattimport'] = 'Tuo avaimia';
$labels['typesign'] = 'Allekirjoitus';
$labels['typeencrypt'] = 'Salaus';
$labels['typecert'] = 'Todistus';
$labels['typeauth'] = 'Tunnistautuminen';
$labels['subkeyid'] = 'Tunniste';
$labels['subkeyalgo'] = 'Algoritmi';
$labels['subkeycreated'] = 'Luotu';
$labels['subkeyexpires'] = 'Vanhenee';
$labels['subkeyusage'] = 'Käyttö';
$labels['expiresnever'] = 'ei koskaan';
$labels['unknown'] = 'tuntematon';
$labels['uservalid'] = 'Kelvollinen';
$labels['userid'] = 'Tunniste';
$labels['valid'] = 'kelvollinen';
$labels['supportencryption'] = 'Käytä viestien salausta ja allekirjoitusta';
$labels['supportsignatures'] = 'Käytä viestien allekirjoitusten vahvistusta';
$labels['supportdecryption'] = 'Ota käyttöön viestien salauksen purkaminen';
$labels['signdefault'] = 'Allekirjoita kaikki viestit oletuksena';
$labels['encryptdefault'] = 'Salaa kaikki viestit oletuksena';
$labels['attachpubkeydefault'] = 'Liitä julkinen PGP-avaimeni oletuksena';
$labels['passwordtime'] = 'Säilytä yksityisen avaimen salasanat';
$labels['nminutes'] = '$m minuutin ajan';
$labels['wholesession'] = 'koko istunnon ajan';
$labels['createkeys'] = 'Luo uusi avainpari';
$labels['importkeys'] = 'Tuo avaimia';
$labels['exportkeys'] = 'Vie avaimia';
$labels['keyactions'] = 'Avaintoiminnot...';
$labels['keyremove'] = 'Poista';
$labels['keydisable'] = 'Poista käytöstä';
$labels['keyrevoke'] = 'Kumoa';
$labels['keysend'] = 'Lähetä julkinen avain viestissä';
$labels['keychpass'] = 'Vaihda salasana';
$labels['keyadd'] = 'Lisää avain';
$labels['newkeyident'] = 'Identiteetti';
$labels['newkeypass'] = 'Salasana';
$labels['newkeypassconfirm'] = 'Vahvista salasana';
$labels['newkeytype'] = 'Avaimen tyyppi';
$labels['rsa2048'] = 'RSA – 2048 bittiä';
$labels['rsa4096'] = 'RSA – 4096 bittiä';
$labels['ecckeypair'] = 'ECC (elliptinen käyrä)';
$labels['keygenerating'] = 'Luodaan avaimia...';
$labels['encryptionoptions'] = 'Salausvalinnat...';
$labels['encryptmsg'] = 'Salaa tämä viesti';
$labels['signmsg'] = 'Lisää digitaalinen allekirjoitus tähän viestiin';
$labels['sendunencrypted'] = 'Lähetä salaamaton';
$labels['enterkeypasstitle'] = 'Anna tunnuslause';
$labels['enterkeypass'] = 'Käyttäjän $user salaisen avaimen ($keyid) avaamiseen tarvitaan salasana.';
$labels['attachpubkeymsg'] = 'Liitä julkinen avaimeni';
$labels['onlypubkeys'] = 'Vie vain julkiset avaimet';
$labels['withprivkeys'] = 'Vie salaiset avaimet';
$labels['findkey'] = 'Etsi avainpalvelimilta';
$labels['keyimportlabel'] = 'Tuo tiedostosta';
$labels['keyimportsearchlabel'] = 'Etsi avainpalvelimilta';
$labels['managekeys'] = 'Hallinnoi PGP-avaimia';
$labels['arialabelkeyexportoptions'] = 'Avaimien vientivalinnat';
$labels['arialabelkeysearchform'] = 'Avaimien hakulomake';
$labels['arialabelkeyoptions'] = 'Avaimen valinnat';
$messages['sigvalid'] = 'Vahvistettu allekirjoitus lähettäjältä $sender.';
$messages['sigvalidpartial'] = 'Vahvistettu allekirjoitus lähettäjältä $sender, mutta viestisisällön osaa ei allekirjoitettu. ';
$messages['siginvalid'] = 'Virheellinen allekirjoitus lähettäjältä $sender.';
$messages['sigunverified'] = 'Vahvistamaton allekirjoitus. Varmennetta ei ole vahvistettu. Varmenteen tunniste: $keyid.';
$messages['signokey'] = 'Vahvistamaton allekirjoitus. Julkista avainta ei löydy. Avaimen tunniste: $keyid.';
$messages['sigerror'] = 'Vahvistamaton allekirjoitus. Sisäinen virhe.';
$messages['decryptok'] = 'Viestin salaus purettu.';
$messages['decrypterror'] = 'Salauksen purkaminen epäonnistui.';
$messages['decryptnokey'] = 'Salauksen purkaminen epäonnistui. Yksityistä avainta ei löytynyt. Avaimen tunniste: $keyid.';
$messages['decryptnomdc'] = 'Purku ohitettu. Viestin eheyttä ei ole suojattu.';
$messages['decryptbadpass'] = 'Salauksen purkaminen epäonnistui. Väärä salasana.';
$messages['decryptnopass'] = 'Salauksen purkaminen epäonnistui. Avaimen salasana vaaditaan.';
$messages['decryptpartial'] = 'Viestin salaus purettiin, mutta osa viestisisällöstä ei ollut salattu.';
$messages['signerror'] = 'Allekirjoittaminen epäonnistui.';
$messages['signnokey'] = 'Allekirjoittaminen epäonnistui. Yksityistä avainta ei löytynyt.';
$messages['signbadpass'] = 'Allekirjoitus epäonnistui. Virheellinen salasana.';
$messages['signnopass'] = 'Allekirjoitus epäonnistui. Avaimen salasana vaaditaan.';
$messages['encrypterror'] = 'Salaaminen epäonnistui.';
$messages['encryptnokey'] = 'Salaaminen epäonnistui. Osoitteelle $email ei löytynyt julkista avainta.';
$messages['encryptnoprivkey'] = 'Salaus epäonnistui. Yksityistä avainta ei löytynyt.';
$messages['nokeysfound'] = 'Avaimia ei löytynyt';
$messages['keynotfound'] = 'Avainta ei löytynyt!';
$messages['keyopenerror'] = 'Avaintietojen noutaminen ei onnistu! Sisäinen virhe.';
$messages['keylisterror'] = 'Avainten listaaminen ei onnistu! Sisäinen virhe.';
$messages['keysimportfailed'] = 'Avaimen tuominen epäonnistui! Sisäinen virhe.';
$messages['keysimportsuccess'] = 'Avain tai avaimet tuotiin onnistuneesti. Tuotiin: $new, muuttumaton: $old.';
$messages['keyremoving'] = 'Poistetaan avaimia...';
$messages['keyremoveconfirm'] = 'Oletko varma että haluat poistaa valitut avaimet?';
$messages['keyremovesuccess'] = 'Avaimet poistettu onnistuneesti';
$messages['keyremoveerror'] = 'Avaimien poisto epäonnistui.';
$messages['formerror'] = 'Täytä lomake. Kaikki kentät ovat pakollisia!';
$messages['passwordsdiffer'] = 'Salasanat eivät täsmää!';
$messages['keygenerateerror'] = 'Avainparin luominen epäonnistui';
$messages['keygeneratesuccess'] = 'Avainpari luotiin ja tuotiin onnistuneesti.';
$messages['keygennosupport'] = 'Selaimesi ei tue salaustekniikkaa. Avainparin luominen ei onnistu!';
$messages['noidentselected'] = 'Sinun täytyy valita vähintään yksi identiteetti avaimelle!';
$messages['nonameident'] = 'Identiteetillä tulee olla käyttäjänimi määritettynä!';
$labels['newkeysize'] = 'Avaimen koko';
$labels['key2048'] = '2048 bittiä - oletus';
$labels['key4096'] = '4096 bittiä - turvallisempi';
PKwc�\�cR��enigma/localization/nb_NO.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Kryptering';
$labels['keyname'] = 'Navn';
$labels['keyid'] = 'Nøkkel ID';
$labels['typeencrypt'] = 'Krypter';
$labels['subkeyid'] = 'ID';
$labels['subkeycreated'] = 'Opprettet';
$labels['expiresnever'] = 'Aldri';
$labels['unknown'] = 'ukjent';
$labels['userid'] = 'ID';
$labels['createkeys'] = 'Lag et nytt nøkkelpar';
$labels['keychpass'] = 'Bytt passord';
$labels['newkeypass'] = 'Passord';
$labels['keyimportlabel'] = 'Importer fra fil';
PKwc�\v94�� � enigma/localization/sq_AL.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Fshehtëzim';
$labels['enigmacerts'] = 'Dëshmi S/MIME';
$labels['enigmakeys'] = 'Kyçe PGP';
$labels['keysfromto'] = 'Kyçat nga $from deri në $to nga $count gjithsej';
$labels['keyname'] = 'Emër';
$labels['keyid'] = 'ID Kyçi';
$labels['keyuserid'] = 'ID Përdoruesi';
$labels['keytype'] = 'Lloj kyçi';
$labels['fingerprint'] = 'Shenja gishtash';
$labels['subkeys'] = 'Nënkyç';
$labels['keyprops'] = 'Veti kyçi';
$labels['basicinfo'] = 'Informacion bazë';
$labels['userids'] = 'Përdorues Shtesë';
$labels['typepublickey'] = 'kyç publik';
$labels['typekeypair'] = 'çift kyçesh';
$labels['keyattfound'] = 'Ky mesazh përmban kyçin(et) PGP të bashkëngjitur.';
$labels['keyattimport'] = 'Importo kyç(e)';
$labels['typesign'] = 'Nënshkruaje';
$labels['typeencrypt'] = 'Fshehtëzoje';
$labels['typecert'] = 'Dëshmoje';
$labels['typeauth'] = 'Mirëfilltësim';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritëm';
$labels['subkeycreated'] = 'Krijuar më';
$labels['subkeyexpires'] = 'Skadon më';
$labels['subkeyusage'] = 'Përdorim';
$labels['expiresnever'] = 'kurrë';
$labels['unknown'] = 'i panjohur';
$labels['uservalid'] = 'I vlefshëm';
$labels['userid'] = 'ID';
$labels['valid'] = 'i vlefshëm';
$labels['supportencryption'] = 'Aktivizo fshehtëzim dhe nënshkrim mesazhesh';
$labels['supportsignatures'] = 'Aktivizo verifikim nënshkrimesh mesazhi';
$labels['supportdecryption'] = 'Aktivizo shfshehtëzim mesazhi';
$labels['signdefault'] = 'Si parazgjedhje, nënshkruaji krejt mesazhet';
$labels['encryptdefault'] = 'Si parazgjedhje, fshehtëzoji krejt mesazhet';
$labels['attachpubkeydefault'] = 'Bashkëngjite kyçin tim publik, si parazgjedhje';
$labels['passwordtime'] = 'Fjalëkalimet e kyçeve privatë mbaji për';
$labels['nminutes'] = '$m minutë(a)';
$labels['wholesession'] = 'krejt sesionin';
$labels['createkeys'] = 'Krijoni një çift të ri kyçesh';
$labels['importkeys'] = 'Importo kyç(e)';
$labels['exportkeys'] = 'Eksporto kyç(e)';
$labels['keyactions'] = 'Veprime kyçesh…';
$labels['keyremove'] = 'Hiqe';
$labels['keydisable'] = 'Çaktivizoje';
$labels['keyrevoke'] = 'Shfuqizoje';
$labels['keysend'] = 'Dërgo kyç publik në mesazh';
$labels['keychpass'] = 'Ndryshoni fjalëkalimin';
$labels['keyadd'] = 'Shtoni kyç';
$labels['newkeyident'] = 'Identitet';
$labels['newkeypass'] = 'Fjalëkalimi';
$labels['newkeypassconfirm'] = 'Ripohoni fjalëkalimin';
$labels['newkeytype'] = 'Lloj kyçi';
$labels['rsa2048'] = 'RSA - 2048 bite';
$labels['rsa4096'] = 'RSA - 4096 bite';
$labels['ecckeypair'] = 'ECC (Lakore Eliptike)';
$labels['keygenerating'] = 'Po prodhohen kyçe…';
$labels['encryptionoptions'] = 'Mundësi fshehtëzimi…';
$labels['encryptmsg'] = 'Fshehtëzoje këtë mesazh';
$labels['signmsg'] = 'Nënshkruaje në mënyrë dixhitale këtë mesazh';
$labels['sendunencrypted'] = 'Dërgoje të pafshehtëzuar';
$labels['enterkeypasstitle'] = 'Jepni frazëkalim kyçi';
$labels['enterkeypass'] = 'Frazëkalimi është i nevojshëm për të zhbllokuar kyçin e fshehtë ($keyid) për përdoruesin: $user.';
$labels['attachpubkeymsg'] = 'Bashkëngjite kyçin tim publik';
$labels['keyexportprompt'] = 'Doni të përfshihen kyçe të fshehtë te kartela e ruajtur e kyçeve OpenPGP?';
$labels['onlypubkeys'] = 'Eksporto Vetëm Kyçe Publikë';
$labels['withprivkeys'] = 'Eksporto Kyçe të Fshehtë';
$labels['findkey'] = 'Kërko në shërbyes kyçesh';
$labels['keyimportlabel'] = 'Importo prej kartele';
$labels['keyimportsearchlabel'] = 'Kërko në shërbyes kyçesh';
$labels['managekeys'] = 'Administroni kyçe PGP';
$labels['identitymatchingprivkeys'] = 'Keni të depozituar në vargun tuaj të kyçeve $nr kyçe private PGP me përputhje:';
$labels['identitynoprivkeys'] = 'Ky identitet dërguesi ende nuk ka ndonjë kyç privat të depozituar në vargun tuaj të kyçeve.';
$labels['arialabelkeyexportoptions'] = 'Mundësi eksportimi kyçesh';
$labels['arialabelkeysearchform'] = 'Formular kërkimi kyçesh';
$labels['arialabelkeyoptions'] = 'Mundësi kyçesh';
$messages['sigvalid'] = 'Nënshkrim nga $sender i verifikuar.';
$messages['sigvalidpartial'] = 'Nënshkrim nga $sender i verifikuar, por s’pati të nënshkruar pjesë lënde.';
$messages['siginvalid'] = 'Nënshkrim  i pavlefshëm nga $sender.';
$messages['sigunverified'] = 'Nënshkrim i paverifikuar. Dëshmia s’u verifikua. ID Dëshmie: $keyid.';
$messages['signokey'] = 'Nënshkrim i paverifikuar. S’u gjet kyç. ID Kyçi: $keyid.';
$messages['sigerror'] = 'Nënshkrim i paverifikuar. Gabim i brendshëm.';
$messages['decryptok'] = 'Mesazhi u shfshehtëzua.';
$messages['decrypterror'] = 'Shfshehtëzimi dështoi.';
$messages['decryptnokey'] = 'Shfshehtëzimi dështoi. S’u gjet kyç privat. ID Kyçi: $keyid.';
$messages['decryptnomdc'] = 'Shfshehtëzimi u anashkalua. Mesazhi është pa mbrojtje integriteti.';
$messages['decryptbadpass'] = 'Shfshehtëzimi dështoi. Fjalëkalim i pavlefshëm.';
$messages['decryptnopass'] = 'Shfshehtëzimi dështoi. Lypset fjalëkalim kyçi.';
$messages['decryptpartial'] = 'Mesazhi u shfshehtëzua, por një pjesë e lëndë s’u shfshehtëzua.';
$messages['signerror'] = 'Nënshkrimi dështoi.';
$messages['signnokey'] = 'Nënshkrimi dështoi. S’u gjet kyç privat.';
$messages['signbadpass'] = 'Hyrja dështoi. Fjalëkalim i pavlefshëm.';
$messages['signnopass'] = 'Nënshkrimi dështoi. Lypset fjalëkalim kyçi.';
$messages['encrypterror'] = 'Fshehtëzimi dështoi.';
$messages['encryptnokey'] = 'Fshehtëzimi dështoi. S’u gjet kyç publik për $email';
$messages['encryptnoprivkey'] = 'Fshehtëzimi dështoi. S’u gjet kyç privat.';
$messages['nokeysfound'] = 'S’u gjetën kyçe';
$messages['keynotfound'] = 'S’u gjet kyç!';
$messages['keyopenerror'] = 'S’arrihet të merren të dhëna kyçi! Gabim i brendshëm.';
$messages['keylisterror'] = 'S’arrihet të paraqiten kyçe! Gabim i brendshëm.';
$messages['keysimportfailed'] = 'S’arrihet të importohen kyç(e)! Gabim i brendshëm.';
$messages['keysimportsuccess'] = 'Kyçi(et) u importuan me sukses. Të importuar: $new, të pandryshuar: $old.';
$messages['keyremoving'] = 'Po hiqet kyçi(et)…';
$messages['keyremoveconfirm'] = 'Jeni i sigurt se doni të fshihet kyçi(et) i përzgjedhur?';
$messages['keyremovesuccess'] = 'Kyçi(et) u fshi me sukses';
$messages['keyremoveerror'] = 'S’arrihet të fshihen kyçin(et) e përzgjedhur?';
$messages['keyimporttext'] = 'Mund të importoni kyç(e) privatë dhe publikë ose nënshkrime shfuqizimesh në formatin ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Për kyçe publikë mund të kërkoni sipas identifikuesi kyçi, emri përdoruesi ose adrese email dhe mandej t’i importoni ata drejtpërsëdrejti.';
$messages['keystoragenotice'] = 'Krejt kyçet, publikë dhe privatë, depozitohen te shërbyesi.';
$messages['formerror'] = 'Ju lutemi, plotësoni formularin. Janë të domosdoshme krejt fushat!';
$messages['passwordsdiffer'] = 'Fjalëkalimet nuk përputhen!';
$messages['keygenerateerror'] = 'S’u arrit të prodhohej një çift kyçesh';
$messages['keygeneratesuccess'] = 'U prodhua dhe importua me sukses një çift kyçesh.';
$messages['keygennosupport'] = 'Shfletuesi juaj nuk e mbulon kriptografinë. S’arrihet të prodhohet çift kyçesh!';
$messages['noidentselected'] = 'Duhet të përzgjidhni të paktën një identitet për kyçin!';
$messages['nonameident'] = 'Identiteti duhet të ketë të përcaktuar një emër përdoruesi!';
$labels['newkeysize'] = 'Madhësi kyçi';
$labels['key2048'] = '2048 bite - parazgjedhje';
$labels['key4096'] = '4096 bite - më i sigurt';
PKwc�\Ǥ�QQenigma/localization/et_EE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Krüpteerimine';
$labels['enigmacerts'] = 'S/MIME sertifikaadid';
$labels['enigmakeys'] = 'PGP võtmed';
$labels['keyname'] = 'Nimi';
$labels['keyid'] = 'Võtme ID';
$labels['keyuserid'] = 'Kasutaja ID';
$labels['keytype'] = 'Võtme tüüp';
$labels['fingerprint'] = 'Sõrmejälg';
$labels['keyprops'] = 'Võtme omadused';
$labels['userids'] = 'Lisakasutajad';
$labels['typepublickey'] = 'avalik võti';
$labels['typekeypair'] = 'võtme paar';
$labels['keyattimport'] = 'Impordi võti';
$labels['typesign'] = 'Allkirjasta';
$labels['typeencrypt'] = 'Krüpti';
$labels['typecert'] = 'Sertifitseeri';
$labels['typeauth'] = 'Autentimine';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritm';
$labels['subkeycreated'] = 'Loodud';
$labels['subkeyexpires'] = 'Aegub';
$labels['subkeyusage'] = 'Kasutus';
$labels['expiresnever'] = 'mitte kunagi';
$labels['unknown'] = 'teadmata';
$labels['uservalid'] = 'Kehtiv';
$labels['userid'] = 'ID';
$labels['valid'] = 'kehtiv';
$labels['nminutes'] = '$m minute(it)';
$labels['wholesession'] = 'kogu sessioon';
$labels['createkeys'] = 'Loo uus võtme paar';
$labels['importkeys'] = 'Impordi võti';
$labels['keyremove'] = 'Eemalda';
$labels['keydisable'] = 'Keela';
$labels['keychpass'] = 'Muuda parooli';
$labels['keyadd'] = 'Lisa võti';
$labels['newkeyident'] = 'Identiteet';
$labels['newkeypass'] = 'Parool';
$labels['newkeypassconfirm'] = 'Kinnita parooli';
$labels['newkeytype'] = 'Võtme tüüp';
$labels['rsa2048'] = 'RSA - 2048 bitti';
$labels['rsa4096'] = 'RSA - 4096 bitti';
$labels['ecckeypair'] = 'ECC (elliptiline kurv)';
$labels['keygenerating'] = 'Võtmete genereerimine...';
$labels['encryptionoptions'] = 'Krüpteerimise valikud...';
$labels['encryptmsg'] = 'Krüpteeri see sõnum';
$labels['attachpubkeymsg'] = 'Lisa minu avalik võti';
$labels['onlypubkeys'] = 'Ekspordi ainult avalikud võtmed';
$labels['withprivkeys'] = 'Ekspordi salavõtmed';
$labels['keyimportlabel'] = 'Impordi failist';
$labels['managekeys'] = 'Halda PGP võtmeid';
$labels['arialabelkeyoptions'] = 'Võtme valikud';
$messages['encrypterror'] = 'Krüpteerimine ebaõnnestus.';
$messages['nokeysfound'] = 'Võtmeid ei leitud';
$messages['keynotfound'] = 'Võtit ei leitud!';
$labels['newkeysize'] = 'Võtme suurus';
$labels['key2048'] = '2048 bitti - vailimisi';
$labels['key4096'] = '4096 bitti - turvalisem';
PKwc�\��}��enigma/localization/ku_IQ.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'ناو';
$labels['subkeycreated'] = 'دروستکرا';
$labels['unknown'] = 'نەناسراو';
$labels['keychpass'] = 'گۆڕینی تێپەڕەوشە';
$labels['newkeypass'] = 'تێپەڕەوشە';
PKwc�\Ѷv��enigma/localization/eu_ES.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Zifraketa';
$labels['enigmacerts'] = 'S/MIME ziurtagiriak';
$labels['enigmakeys'] = 'PGP gakoak';
$labels['keysfromto'] = '$count-eko $from-etik $to-rako gakoak';
$labels['keyname'] = 'Izena';
$labels['keyid'] = 'Gakoaren IDa';
$labels['keyuserid'] = 'Erabiltzailearen IDa';
$labels['keytype'] = 'Gako mota';
$labels['fingerprint'] = 'Hatz-marka';
$labels['subkeys'] = 'Azpigakoak';
$labels['keyprops'] = 'Gakoaren propietateak';
$labels['basicinfo'] = 'Oinarrizko informazioa';
$labels['userids'] = 'Erabiltzaile gehigarriak';
$labels['typepublickey'] = 'gako publikoa';
$labels['typekeypair'] = 'gako bikotea';
$labels['keyattfound'] = 'Mezu honek erantsita PGP gakoa(k) d(it)u';
$labels['keyattimport'] = 'Inportatu gakoa(k)';
$labels['typesign'] = 'Sinatu';
$labels['typeencrypt'] = 'Zifratu';
$labels['typecert'] = 'Ziurtatu';
$labels['typeauth'] = 'Egiaztapena';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmoa';
$labels['subkeycreated'] = 'Sortuta';
$labels['subkeyexpires'] = 'Iraungitze-data';
$labels['subkeyusage'] = 'Erabilera';
$labels['expiresnever'] = 'inoiz ez';
$labels['unknown'] = 'ezezaguna';
$labels['uservalid'] = 'Baliozkoa';
$labels['userid'] = 'ID';
$labels['valid'] = 'baliozkoa';
$labels['supportencryption'] = 'Gaitu mezuen zifratzea eta sinadura ';
$labels['supportsignatures'] = 'Gaitu mezuen sinaduren egiaztapena';
$labels['supportdecryption'] = 'Gaitu mezuen deszifratzea';
$labels['signdefault'] = 'Mezuen sinatzea lehenetsita';
$labels['encryptdefault'] = 'Mezuen zifratzea lehenetsita';
$labels['attachpubkeydefault'] = 'Nire PGP gako publikoa eranstea lehenetsita';
$labels['passwordtime'] = 'Mantendu gako pribatuen pasahitzak';
$labels['nminutes'] = '$m minutu';
$labels['wholesession'] = 'Saio osoa';
$labels['createkeys'] = 'Sortu gako pare berria';
$labels['importkeys'] = 'Inportatu gakoa(k)';
$labels['exportkeys'] = 'Esportatu gakoa(k)';
$labels['keyactions'] = 'Gakoaren ekintzak...';
$labels['keyremove'] = 'Kendu';
$labels['keydisable'] = 'Desgaitu';
$labels['keyrevoke'] = 'Errebokatu';
$labels['keysend'] = 'Bidali gako publikoa mezu batean';
$labels['keychpass'] = 'Aldatu pasahitza';
$labels['keyadd'] = 'Gehitu gakoa';
$labels['newkeyident'] = 'Identitatea';
$labels['newkeypass'] = 'Pasahitza';
$labels['newkeypassconfirm'] = 'Baieztatu pasahitza';
$labels['newkeytype'] = 'Gako mota';
$labels['rsa2048'] = 'RSA - 2048 bit';
$labels['rsa4096'] = 'RSA - 4096 bit';
$labels['ecckeypair'] = 'ECC (Kurba eliptikoa)';
$labels['keygenerating'] = 'Gakoak sortzen...';
$labels['encryptionoptions'] = 'Zifratze aukerak...';
$labels['encryptmsg'] = 'Zifratu mezu hau';
$labels['signmsg'] = 'Digitalki sinatu mezu hau';
$labels['sendunencrypted'] = 'Bidali zifratu gabe';
$labels['enterkeypasstitle'] = 'Sartu gakoaren pasaesaldia';
$labels['enterkeypass'] = 'Pasaesaldi bat behar da erabiltzaile honen gako sekretua ($keyid) desblokeatzeko: $user';
$labels['attachpubkeymsg'] = 'Erantsi nire gako publikoa';
$labels['keyexportprompt'] = 'Nahi al duzu gako sekretuak sartzea gordetako OpenPGP gakoen fitxategian?';
$labels['onlypubkeys'] = 'Esportatu bakarrik gako publikoak';
$labels['withprivkeys'] = 'Esportatu gako sekretuak';
$labels['findkey'] = 'Bilatu gako zerbitzari(et)an';
$labels['keyimportlabel'] = 'Inportatu fitxategitik';
$labels['keyimportsearchlabel'] = 'Bilatu gako zerbitzari(et)an';
$labels['managekeys'] = 'Kudeatu PGP gakoak';
$labels['identitymatchingprivkeys'] = ' Badaukazu bat datozen $nr PGP gako pribatu zure giltzarrian gordeta:';
$labels['identitynoprivkeys'] = 'Bidaltzaile honen identitateak ez dauka PGP gako pribaturik zure giltzarrian gordeta.';
$labels['arialabelkeyexportoptions'] = 'Gakoen esportazio aukerak';
$labels['arialabelkeysearchform'] = 'Gakoen bilaketa formularioa';
$labels['arialabelkeyoptions'] = 'Gako aukerak';
$messages['sigvalid'] = '$sender-en sinadura egiaztatuta';
$messages['sigvalidpartial'] = '$sender-en sinadura egiaztatuta, baina testu-gorputzaren zati bat ez dago sinatua.';
$messages['siginvalid'] = '$sender-en sinadura baliogabea.';
$messages['sigunverified'] = 'Egiaztatu gabeko sinadura. Ziurtagiria ez dago egiaztatuta. Ziurtagiriaren IDa: $Keyid.';
$messages['signokey'] = 'Egiaztatu gabeko sinadura. Ez da aurkitu gako publikoa. Gakoaren IDa: $keyid.';
$messages['sigerror'] = 'Egiaztatu gabeko sinadura. Barne errorea.';
$messages['decryptok'] = 'Mezua deszifratua.';
$messages['decrypterror'] = 'Deszifratzeak huts egin du.';
$messages['decryptnokey'] = 'Deszifratzeak  huts egin du. Ez da aurkitu gako pribatua. Gakoaren IDa:  $keyid.';
$messages['decryptnomdc'] = 'Deszifratzeak huts egin du. Mezua ez da bere osotasunean babestu.';
$messages['decryptbadpass'] = 'Deszifratzeak huts egin du. Baliogabeko pasahitza.';
$messages['decryptnopass'] = 'Deszifratzeak huts egin du. Pasahitz gakoa behar da.';
$messages['decryptpartial'] = 'Mezua deszifratua, baina testu gorputzaren zati bat ez zegoen zifratua.';
$messages['signerror'] = 'Sinadurak huts egin du.';
$messages['signnokey'] = 'Sinadurak huts egin du. Ez da aurkitu gako pribatua.';
$messages['signbadpass'] = 'Sinadurak huts egin du. Baliogabeko pasahitza.';
$messages['signnopass'] = 'Sinadurak huts egin du. Gako pasahitza behar da.';
$messages['encrypterror'] = 'Zifratzeak huts egin du.';
$messages['encryptnokey'] = 'Zifratzeak huts egin du. Ez da $email -ren gako publikoa aurkitu.';
$messages['encryptnoprivkey'] = 'Zifratzeak huts egin du. Gako pribatua ez da aurkitu.';
$messages['nokeysfound'] = 'Ez dira gakoak aurkitu';
$messages['keynotfound'] = 'Gakoa ez da aurkitu!';
$messages['keyopenerror'] = 'Ezin izan da gakoaren informazioa eskuratu! Barne errorea.';
$messages['keylisterror'] = 'Ezin izan dira gakoak zerrendatu! Barne errorea.';
$messages['keysimportfailed'] = 'Ezin izan d(ir)a gakoa(k) inportatu! Barne errorea.';
$messages['keysimportsuccess'] = 'Gakoa(k) ongi inportatu d(ir)a. Inportatua: $new, aldatu gabe: $old';
$messages['keyremoving'] = 'Gakoa(k) kentzen...';
$messages['keyremoveconfirm'] = 'Ziur hautatutako gakoa(k) ezabatu nahi d(it)uzula?';
$messages['keyremovesuccess'] = 'Gakoa(k) ongi ezabatu d(ir)a';
$messages['keyremoveerror'] = 'Ezin izan d(ir)a hautatutako gakoa(k) ezabatu.';
$messages['keyimporttext'] = 'Gako pribatu eta publikoa(k) edo errebokazio sinadurak ASCII-Armor formatuan inportatu ahal dituzu.';
$messages['keyimportsearchtext'] = 'Gako publikoak bilatzen ahal dituzu gako identifikatzaile, erabiltzaile-izena edo posta helbidearen bidez eta orduan zuzenean inportatu.';
$messages['keystoragenotice'] = 'Gako publiko eta pribatu guztiak zerbitzarian gordeta daude.';
$messages['formerror'] = 'Bete formularioa. Eremu guztiak bete behar dira!';
$messages['passwordsdiffer'] = 'Pasahitzak ez dira berdinak!';
$messages['keygenerateerror'] = 'Huts egin du gako bikotea sortzea.';
$messages['keygeneratesuccess'] = 'Gako bikotea ongi sortu eta inportatu da.';
$messages['keygennosupport'] = 'Zure nabigatzaileak ez du kriptografia onartzen. Ezin da gako bikotea sortu!';
$messages['noidentselected'] = 'Gutxienez identitate bat hautatu behar duzu gakoarentzat!';
$messages['nonameident'] = 'Identitateak erabiltzaile-izen bat definitua izan behar du!';
$labels['newkeysize'] = 'Gakoaren tamaina';
$labels['key2048'] = '2048 bit - lehenetsia';
$labels['key4096'] = '4096 bit - seguruagoa';
PKwc�\��<"  enigma/localization/tr_TR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Şifreleme';
$labels['enigmacerts'] = 'S/MIME sertifikaları';
$labels['enigmakeys'] = 'PGP anahtarları';
$labels['keysfromto'] = 'Anahtarlar $from - $to / $count';
$labels['keyname'] = 'Ad';
$labels['keyid'] = 'Anahtar kodu';
$labels['keyuserid'] = 'Kullanıcı kodu';
$labels['keytype'] = 'Anahtar türü';
$labels['fingerprint'] = 'Parmak izi';
$labels['subkeys'] = 'Alt anahtarlar';
$labels['keyprops'] = 'Anahtar özellikleri';
$labels['basicinfo'] = 'Temel bilgiler';
$labels['userids'] = 'Ek kullanıcılar';
$labels['typepublickey'] = 'Herkese açık anahtar';
$labels['typekeypair'] = 'Anahtar çifti';
$labels['keyattfound'] = 'İleti ekinde PGP anahtarları var.';
$labels['keyattimport'] = 'Anahtar(lar)ı içe aktar.';
$labels['typesign'] = 'İmza';
$labels['typeencrypt'] = 'Şifrele';
$labels['typecert'] = 'Belgele';
$labels['typeauth'] = 'Kimlik doğrulaması';
$labels['subkeyid'] = 'Kod';
$labels['subkeyalgo'] = 'Algoritma';
$labels['subkeycreated'] = 'Eklendi';
$labels['subkeyexpires'] = 'Geçerlilik süresi';
$labels['subkeyusage'] = 'Kullanım';
$labels['expiresnever'] = 'asla';
$labels['unknown'] = 'bilinmeyen';
$labels['uservalid'] = 'Geçerli';
$labels['userid'] = 'Kod';
$labels['valid'] = 'geçerli';
$labels['supportencryption'] = 'İletiler şifrelensin ve imzalansın';
$labels['supportsignatures'] = 'İleti imzaları doğrulansın';
$labels['supportdecryption'] = 'İleti şifreleri çözülsün';
$labels['signdefault'] = 'Varsayılan olarak tüm iletiler imzalansın';
$labels['encryptdefault'] = 'Varsayılan olarak tüm iletiler şifrelensin';
$labels['attachpubkeydefault'] = 'Varsayılan olarak herkese açık PGP anahtarım eklensin';
$labels['passwordtime'] = 'Parolalar için kişisel anahtarları tut';
$labels['nminutes'] = '$m dakika';
$labels['wholesession'] = 'tüm oturum';
$labels['createkeys'] = 'Yeni anahtar çifti oluştur';
$labels['importkeys'] = 'Anahtar(lar)ı içe aktar';
$labels['exportkeys'] = 'Anahtar(lar)ı dışa aktar';
$labels['keyactions'] = 'Anahtar işlemleri...';
$labels['keyremove'] = 'Kaldır';
$labels['keydisable'] = 'Devre dışı';
$labels['keyrevoke'] = 'Geri al';
$labels['keysend'] = 'İletilerde herkese açık anahtar gönderilsin';
$labels['keychpass'] = 'Parolayı değiştir';
$labels['keyadd'] = 'Anahtar ekle';
$labels['newkeyident'] = 'Kimlik';
$labels['newkeypass'] = 'Parola';
$labels['newkeypassconfirm'] = 'Parola Onayı';
$labels['newkeytype'] = 'Anahtar türü';
$labels['rsa2048'] = 'RSA - 2048 bit';
$labels['rsa4096'] = 'RSA - 4096 bit';
$labels['ecckeypair'] = 'ECC (eliptik eğri)';
$labels['keygenerating'] = 'Anahtarlar oluşturuluyor...';
$labels['encryptionoptions'] = 'Şifreleme ayarları...';
$labels['encryptmsg'] = 'Bu iletiyi şifrele';
$labels['signmsg'] = 'Bu iletiyi sayısal olarak imzala';
$labels['sendunencrypted'] = 'Şifrelenmemiş olarak gönder';
$labels['enterkeypasstitle'] = 'Anahtar parolasını yazın';
$labels['enterkeypass'] = 'Gizli anahtarı ($keyid) açmak için $user kullanıcısının parolası gerekli.';
$labels['attachpubkeymsg'] = 'Herkese açık anahtarımı ekle';
$labels['keyexportprompt'] = 'OpenPGP anahtar dosyasına gizli anahtarları da  kaydetmek istiyor musunuz?';
$labels['onlypubkeys'] = 'Yalnızca herkese açık anahtarları dışa aktar';
$labels['withprivkeys'] = 'Gizli anahtarları dışa aktar';
$labels['findkey'] = 'Anahtarı sunucu(lar)da ara';
$labels['keyimportlabel'] = 'Dosyadan içe aktar';
$labels['keyimportsearchlabel'] = 'Anahtarı sunucu(lar)da ara';
$labels['managekeys'] = 'PGP anahtarları yönetimi';
$labels['identitymatchingprivkeys'] = 'Anahtarlığınızda eşleşen $nr PGP kişisel anahtarı var:';
$labels['identitynoprivkeys'] = 'Henüz bu gönderici kimliği için PGP anahtarlığınızda bir kişisel anahtar bulunmuyor.';
$labels['arialabelkeyexportoptions'] = 'Anahtar dışa aktarma ayarları';
$labels['arialabelkeysearchform'] = 'Anahtar arama formu';
$labels['arialabelkeyoptions'] = 'Anahtar seçenekleri';
$messages['sigvalid'] = '$sender imzası geçerli.';
$messages['sigvalidpartial'] = '$sender imzası doğrulandı, ancak metnin tümü imzalanmamış.';
$messages['siginvalid'] = '$sender imzası geçersiz.';
$messages['sigunverified'] = 'İmza doğrulanmamış. Sertifika doğrulanmamış. Sertifika Kodu: $keyid.';
$messages['signokey'] = 'İmza doğrulanmamış. Herkese açık anahtar bulunamadı. Anahtar kodu: $keyid.';
$messages['sigerror'] = 'Sorun var! İmza doğrulanmamış.';
$messages['decryptok'] = 'İleti şifresi çözüldü.';
$messages['decrypterror'] = 'Şifre çözülemedi.';
$messages['decryptnokey'] = 'Şifre çözülemedi. Kişisel anahtar bulunamadı. Anahtar kodu: $keyid.';
$messages['decryptnomdc'] = 'Şifre çözme işlemi atlandı. İletinin bütünlüğü korunmamış.';
$messages['decryptbadpass'] = 'Şifre çözülemedi. Parola geçersiz.';
$messages['decryptnopass'] = 'Şifre çözülemedi. Anahtar parolası gerekli.';
$messages['decryptpartial'] = 'İletinin şifresi çözüldü, fakat metnin tümü şifrelenmemiş.';
$messages['signerror'] = 'İmzalama geçersiz.';
$messages['signnokey'] = 'İmzalanamadı. Kişisel anahtar bulunamadı.';
$messages['signbadpass'] = 'İmzalanamadı. Parola geçersiz.';
$messages['signnopass'] = 'İmzalanamadı. Anahtar parolası gerekli.';
$messages['encrypterror'] = 'Şifrelenemedi.';
$messages['encryptnokey'] = 'Şifrelenemedi. Herkese açık anahtar $email içinde bulunamadı.';
$messages['encryptnoprivkey'] = 'Şifrelenemedi. Kişisel anahtar bulunamadı.';
$messages['nokeysfound'] = 'Anahtarlar bulunamadı';
$messages['keynotfound'] = 'Anahtar buunamadı!';
$messages['keyopenerror'] = 'Sorun var! Anahtar bilgileri alınamıyor.';
$messages['keylisterror'] = 'Sorun var! Anahtar listesi yok.';
$messages['keysimportfailed'] = 'Sorun var! Anahtar(lar) aktarılamıyor.';
$messages['keysimportsuccess'] = 'Anahtar(lar) içe aktarıldı. İçe Aktarılan: $new, Değişmeyen: $old.';
$messages['keyremoving'] = 'Anahtar(lar) kaldırılıyor...';
$messages['keyremoveconfirm'] = 'Seçilmiş anahtar(lar)ı silmek istediğinize emin misiniz?';
$messages['keyremovesuccess'] = 'Anahtar(lar) silindi';
$messages['keyremoveerror'] = 'Anahtar(lar) silinemedi.';
$messages['keyimporttext'] = 'Kişisel ve herkese açık anahtar(lar)ı içe aktarabilir ya da ASCII-Armor biçimindeki imzanızı geri çekebilirsiniz.';
$messages['keyimportsearchtext'] = 'Herkese açık anahtarları, anahtar tanımlayıcı, e-posta ya da kullanıcı adına göre arayarak doğrudan içe aktarabilirsiniz.';
$messages['keystoragenotice'] = 'Herkese açık ve kişisel tüm anahtarlar sunucu üzerinde depolanıyor.';
$messages['formerror'] = 'Formun doldurun. Tüm alanlar zorunludur!';
$messages['passwordsdiffer'] = 'Parola ile onayı aynı değil!';
$messages['keygenerateerror'] = 'Anahtar çifti oluşturulamadı.';
$messages['keygeneratesuccess'] = 'Anahtar çiftiniz oluşturuldu ve içe aktarıldı.';
$messages['keygennosupport'] = 'Tarayıcınız şifrelemeyi desteklemiyor. Anahtar çifti oluşturulamıyor.';
$messages['noidentselected'] = 'Anahtar için en az bir kimlik seçmelisiniz!';
$messages['nonameident'] = 'Kimlik için bir kullanıcı adı belirtmelisiniz!';
$labels['newkeysize'] = 'Anahtar boyutu';
$labels['key2048'] = '2048 bit - varsayılan';
$labels['key4096'] = '4096 bit - daha güvenli';
PKwc�\�UE E enigma/localization/es_AR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Encriptación';
$labels['enigmacerts'] = 'Certificados S/MIME';
$labels['enigmakeys'] = 'Claves PGP';
$labels['keysfromto'] = 'Claves $from a $to de $count';
$labels['keyname'] = 'Nombre';
$labels['keyid'] = 'ID de clave';
$labels['keyuserid'] = 'ID de usuario';
$labels['keytype'] = 'Tipo de clave';
$labels['fingerprint'] = 'Huella';
$labels['subkeys'] = 'Subclave';
$labels['keyprops'] = 'Propiedades de la clave';
$labels['basicinfo'] = 'Información básica';
$labels['userids'] = 'Usuarios adicionales';
$labels['typepublickey'] = 'clave pública';
$labels['typekeypair'] = 'par de claves';
$labels['keyattfound'] = 'Este mensaje contiene clave(s) PGP adjunta(s)';
$labels['keyattimport'] = 'Importar clave(s)';
$labels['typesign'] = 'Firmar';
$labels['typeencrypt'] = 'Encriptar';
$labels['typecert'] = 'Certificar';
$labels['typeauth'] = 'Autenticación';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmo';
$labels['subkeycreated'] = 'Creado';
$labels['subkeyexpires'] = 'Expira';
$labels['subkeyusage'] = 'Uso';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'desconocido';
$labels['uservalid'] = 'Válido';
$labels['userid'] = 'ID';
$labels['valid'] = 'válido';
$labels['supportencryption'] = 'Habilita encriptación y firma de mensajes';
$labels['supportsignatures'] = 'Habilitar la verificación de firmas de mensaje';
$labels['supportdecryption'] = 'Habilitar descifrado de mensaje';
$labels['signdefault'] = 'Firmar todos los mensajes por defecto';
$labels['encryptdefault'] = 'Cifrar todos los mensajes por defecto';
$labels['attachpubkeydefault'] = 'Adjuntar mi clave PGP pública por defecto';
$labels['passwordtime'] = 'Guardar las contraseñas de clave privada durante';
$labels['nminutes'] = '$m minuto(s)';
$labels['wholesession'] = 'toda la sesión';
$labels['createkeys'] = 'Crear un nuevo par de claves';
$labels['importkeys'] = 'Importar clave(s)';
$labels['exportkeys'] = 'Exportar clave(s)';
$labels['keyactions'] = 'Acciones sobre la clave...';
$labels['keyremove'] = 'Eliminar';
$labels['keydisable'] = 'Deshabilitar';
$labels['keyrevoke'] = 'Revocar';
$labels['keysend'] = 'Enviar clave pública en un mensaje';
$labels['keychpass'] = 'Cambiar contraseña';
$labels['keyadd'] = 'Agregar clave';
$labels['newkeyident'] = 'Identidad';
$labels['newkeypass'] = 'Contraseña';
$labels['newkeypassconfirm'] = 'Confirmar contraseña';
$labels['newkeytype'] = 'Tipo de clave';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Curva elíptica)';
$labels['keygenerating'] = 'Generando claves...';
$labels['encryptionoptions'] = 'Opciones de cifrado...';
$labels['encryptmsg'] = 'Cifrar este mensaje';
$labels['signmsg'] = 'Firmar digitalmente este mensaje';
$labels['sendunencrypted'] = 'Enviar sin cifrar';
$labels['enterkeypasstitle'] = 'Escriba la frase de contraseña';
$labels['enterkeypass'] = 'Se necesita una contraseña para desbloquear la clave secreta ($keyid) para el usuario: $user.';
$labels['attachpubkeymsg'] = 'Adjuntar mi clave pública';
$labels['keyexportprompt'] = '¿Desea incluir claves secretas en el archivo guardado de claves OpenPGP?';
$labels['onlypubkeys'] = 'Exportar Sólo las Claves Públicas';
$labels['withprivkeys'] = 'Exportar las Claves Secretas';
$labels['findkey'] = 'Buscar en servidor(es) de claves';
$labels['keyimportlabel'] = 'Importar desde archivo';
$labels['keyimportsearchlabel'] = 'Buscar en servidor(es) de claves';
$labels['managekeys'] = 'Gestionar claves PGP';
$labels['identitymatchingprivkeys'] = 'Tiene $nr claves privadas PGP coincidentes en el anillo de claves:';
$labels['identitynoprivkeys'] = 'Esta identidad remitente no tiene aún una clave privada almacenada en el anillo de claves.';
$labels['arialabelkeyexportoptions'] = 'Opciones de claves de exportación';
$labels['arialabelkeysearchform'] = 'Formulario de búsqueda de claves';
$labels['arialabelkeyoptions'] = 'Opciones de clave';
$messages['sigvalid'] = 'Firma verificada de $sender.';
$messages['sigvalidpartial'] = 'Firma verificada de $sender, pero parte parte del cuerpo no estaba firmado.';
$messages['siginvalid'] = 'Firma inválida de $sender.';
$messages['sigunverified'] = 'Firma no verificada. Certificado no verificado. ID del Certificado: $keyid.';
$messages['signokey'] = 'Firma no verificada. Clave pública no encontrada. ID de Clave: $keyid.';
$messages['sigerror'] = 'Firma no verificada. Error interno.';
$messages['decryptok'] = 'Mensaje descifrado.';
$messages['decrypterror'] = 'Descifrado fallido.';
$messages['decryptnokey'] = 'Descifrado fallido. Clave privada no encontrada. ID de Clave: $keyid.';
$messages['decryptnomdc'] = 'Se ha saltado el descifrado. La integridad del mensaje no está protegida.';
$messages['decryptbadpass'] = 'Descifrado fallido. Contraseña no válida.';
$messages['decryptnopass'] = 'Descifrado fallido. Contraseña requerida.';
$messages['decryptpartial'] = 'Mensaje descifrado, pero parte del cuerpo no estaba cifrado.';
$messages['signerror'] = 'Falló la firma.';
$messages['signnokey'] = 'Falló la firma. Clave privada no encontrada.';
$messages['signbadpass'] = 'Falló la firma. Contraseña no válida.';
$messages['signnopass'] = 'Falló la firma. Contraseña requerida.';
$messages['encrypterror'] = 'Cifrado fallido.';
$messages['encryptnokey'] = 'Cifrado fallido. Clave pública no encontrada para $email.';
$messages['encryptnoprivkey'] = 'Cifrado fallido. No se encontró la clave privada.';
$messages['nokeysfound'] = 'No se encontraron claves';
$messages['keynotfound'] = '¡Clave no encontrada!';
$messages['keyopenerror'] = '¡No se puede obtener la información de clave! Error interno.';
$messages['keylisterror'] = '¡No es posible enumerar las claves! Error interno.';
$messages['keysimportfailed'] = '¡No se puede(n) importar la(s) clave(s)! Error interno.';
$messages['keysimportsuccess'] = 'Clave(s) importada(s) correctamente. Importado: $new, sin cambios: $old.';
$messages['keyremoving'] = 'Eliminando clave(s)...';
$messages['keyremoveconfirm'] = '¿Seguro que quiere eliminar la(s) clave(s) seleccionada(s)?';
$messages['keyremovesuccess'] = 'Clave(s) eliminada(s) correctamente.';
$messages['keyremoveerror'] = 'No se han podido borrar las clave(s) seleccionadas.';
$messages['keyimporttext'] = 'Puede importar la(s) clave(s) privada(s) y pública(s) o firmas de revocación en formato ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Puede buscar claves por identificador de clave, nombre de usuario o dirección de email y después importarlas directamente.';
$messages['keystoragenotice'] = 'Todas las claves públicas y privadas son guardadas en el servidor.';
$messages['formerror'] = 'Por favor rellene el formulario. ¡Todos los campos son obligatorios!';
$messages['passwordsdiffer'] = '¡Las contraseñas no coinciden!';
$messages['keygenerateerror'] = 'No se ha podido generar un par de claves';
$messages['keygeneratesuccess'] = 'Un par de claves generadas e importadas correctamente.';
$messages['keygennosupport'] = 'Su navegador web no soporta criptografía. ¡No se puede generar un par de claves!';
$messages['noidentselected'] = '¡Tiene que seleccionar al menos una identidad para la clave!';
$messages['nonameident'] = '¡La identidad debe de tener un nombre de usuario definido!';
$labels['newkeysize'] = 'Tamaño de clave';
$labels['key2048'] = '2048 bits - por defecto';
$labels['key4096'] = '4096 bits - más seguro';
PKwc�\��66enigma/localization/ur_PK.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/


$labels['newkeypass'] = 'پاسورڈ';
PKwc�\ٮ[��enigma/localization/ku.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Nav';
$labels['subkeycreated'] = 'Hat afirandin';
$labels['expiresnever'] = 'qet';
$labels['unknown'] = 'nenas';
$labels['keychpass'] = 'Şîfreyê biguherîne';
$labels['newkeypass'] = 'Nasnav';
PKwc�\Ș�Qf f enigma/localization/pt_BR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Criptografação';
$labels['enigmacerts'] = 'Certificados S/MIME';
$labels['enigmakeys'] = 'Chaves PGP';
$labels['keysfromto'] = ' $count chaves de $from para $to';
$labels['keyname'] = 'Nome';
$labels['keyid'] = 'ID da chave';
$labels['keyuserid'] = 'ID do usuário';
$labels['keytype'] = 'Tipo de chave';
$labels['fingerprint'] = 'Autenticação digital';
$labels['subkeys'] = 'Subchaves';
$labels['keyprops'] = 'Propriedades-chave';
$labels['basicinfo'] = 'Informação básica';
$labels['userids'] = 'Usuários adicionais';
$labels['typepublickey'] = 'chave pública';
$labels['typekeypair'] = 'par de chave';
$labels['keyattfound'] = 'Essa mensagem contém chave(s) PGP em anexo.';
$labels['keyattimport'] = 'Importa chave(s)';
$labels['typesign'] = 'Assinatura';
$labels['typeencrypt'] = 'Criptografar';
$labels['typecert'] = 'Certificado';
$labels['typeauth'] = 'Autenticação';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritimo';
$labels['subkeycreated'] = 'Criado';
$labels['subkeyexpires'] = 'Expira';
$labels['subkeyusage'] = 'Uso';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'desconhecido';
$labels['uservalid'] = 'Válido';
$labels['userid'] = 'ID';
$labels['valid'] = 'válido';
$labels['supportencryption'] = 'Habilitar mensagens criptografadas e assinaturas';
$labels['supportsignatures'] = 'Habilitar verificação de mensagens assinadas';
$labels['supportdecryption'] = 'habilita descriptografia de mensagens';
$labels['signdefault'] = 'Assinar todas as mensagens por padrão';
$labels['encryptdefault'] = 'Criptografar todas as mensagens por padrão';
$labels['attachpubkeydefault'] = 'Anexar minha chave PGP pública';
$labels['passwordtime'] = 'Mantenha senhas de chave privada para';
$labels['nminutes'] = '$m minuto(s)';
$labels['wholesession'] = 'toda a sessão';
$labels['createkeys'] = 'Criar novo par de chaves';
$labels['importkeys'] = 'importar chave(s)';
$labels['exportkeys'] = 'Exportar chave(s)';
$labels['keyactions'] = 'Principais ações ...';
$labels['keyremove'] = 'Remover';
$labels['keydisable'] = 'Desabilitar';
$labels['keyrevoke'] = 'Revogar';
$labels['keysend'] = 'Mandar chave pública em uma mensagem';
$labels['keychpass'] = 'Trocar senha';
$labels['keyadd'] = 'Adicionar chave';
$labels['newkeyident'] = 'identificação';
$labels['newkeypass'] = 'Senha';
$labels['newkeypassconfirm'] = 'Confirme a senha';
$labels['newkeytype'] = 'Tipo de chave';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Curva Elíptica)';
$labels['keygenerating'] = 'Gerando chaves...';
$labels['encryptionoptions'] = 'Opções de criptografia...';
$labels['encryptmsg'] = 'Criptografar essa mensagem';
$labels['signmsg'] = 'Assinar digitalmente essa mensagem';
$labels['sendunencrypted'] = 'Enviar não criptografado';
$labels['enterkeypasstitle'] = 'Digite a frase secreta da chave';
$labels['enterkeypass'] = 'Uma frase secreta é necessária para desbloquear a chave ($keyid) para o usuário: $user.';
$labels['attachpubkeymsg'] = 'Anexar minha chave pública';
$labels['keyexportprompt'] = 'Deseja incluir chaves secretas no arquivo de chaves OpenPGP salva?';
$labels['onlypubkeys'] = 'Exportar somente Chaves Públicas';
$labels['withprivkeys'] = 'Exportar Chaves Secretas';
$labels['findkey'] = 'Procurar no(s) servidor(es) de chaves';
$labels['keyimportlabel'] = 'Importar do arquivo';
$labels['keyimportsearchlabel'] = 'Procurar no(s) servidor(es) de chaves';
$labels['managekeys'] = 'Gerenciar chaves PGP';
$labels['identitymatchingprivkeys'] = 'Você tem $nr chaves PGP guardadas no chaveiro correspondente:';
$labels['identitynoprivkeys'] = 'A identidade deste emissor ainda não tem uma chave privada PGP armazenada em sua keyring.';
$labels['arialabelkeyexportoptions'] = 'Opções de exportação das chaves';
$labels['arialabelkeysearchform'] = 'Formulário de pesquisa de chaves';
$labels['arialabelkeyoptions'] = 'Opções da chave';
$messages['sigvalid'] = 'Verificar assinatura de $sender.';
$messages['sigvalidpartial'] = 'Verificar assinatura de $sender, mas parte do corpo não foi assinada.';
$messages['siginvalid'] = 'Assinatura inválida de $sender.';
$messages['sigunverified'] = 'Assinatura não verificada. Certificado não verificado. Certificado de ID: $keyid.';
$messages['signokey'] = 'Assinatura não verificada. Chave pública não encontrada. Chave de ID: $keyid.';
$messages['sigerror'] = 'Assinatura não verificada. Erro interno.';
$messages['decryptok'] = 'Mensagem descriptografada';
$messages['decrypterror'] = 'Falha ao descriptografar.';
$messages['decryptnokey'] = 'Falha ao descriptografar. Chave privada não encontrada. Chave de ID: $keyid.';
$messages['decryptnomdc'] = 'Descriptografia pulada. A integridade da mensagem não está protegida.';
$messages['decryptbadpass'] = 'Descriptografia falhou. Senha inválida.';
$messages['decryptnopass'] = 'Falha ao descriptografar. Senha chave requerida.';
$messages['decryptpartial'] = 'Mensagem descriptografada, mas parte do corpo não foi encriptado.';
$messages['signerror'] = 'Assinatura falhou.';
$messages['signnokey'] = 'Assinatura falhou. Chave privada não encontrada.';
$messages['signbadpass'] = 'Login falhou. Senha inválida.';
$messages['signnopass'] = 'Assinatura falhou. Senha chave requerida.';
$messages['encrypterror'] = 'Falha ao criptografar.';
$messages['encryptnokey'] = 'Falha ao criptografar. Chave pública não encontrada para $email.';
$messages['encryptnoprivkey'] = 'Falha ao criptografar. Chave privada não encontrada.';
$messages['nokeysfound'] = 'Nenhuma chave encontrada';
$messages['keynotfound'] = 'Chave não encontrada!';
$messages['keyopenerror'] = 'Não é possível obter informações da chave! Erro interno.';
$messages['keylisterror'] = 'Não é possível listar as chaves! Erro interno.';
$messages['keysimportfailed'] = 'Não é possível importar chave(s)! Erro interno.';
$messages['keysimportsuccess'] = 'Chave(s) importada(s) com sucesso. Importado: $new, mantido: $old.';
$messages['keyremoving'] = 'Removendo chave(s)...';
$messages['keyremoveconfirm'] = 'Tem a certeza, de que deseja excluir a seleção de chave(s)?';
$messages['keyremovesuccess'] = 'Chave(s) deletada com sucvesso';
$messages['keyremoveerror'] = 'Não é possível excluir a seleção de chave(s).';
$messages['keyimporttext'] = 'Você pode importar chaves privadas e publicas ou assinaturas de revogação em formato ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Você pode procurar por chaves públicas pelo identificador de chaves, nome do usuário ou e-mail, e então importá-las diretamente.';
$messages['keystoragenotice'] = 'Todas as chaves públicas e privadas são armazenadas no servidor.';
$messages['formerror'] = 'Por favor, preencha o formulário. Todos os campos são necessários!';
$messages['passwordsdiffer'] = 'Senhas não conferem!';
$messages['keygenerateerror'] = 'Falha ao gerar um par de chaves';
$messages['keygeneratesuccess'] = 'Um par de chaves foi gerado e importado com sucesso.';
$messages['keygennosupport'] = 'Seu navegador não suporta criptografia. Não é possível gerar um par de chaves!';
$messages['noidentselected'] = 'Você tem que selecionar ao menos uma identidade para a chave!';
$messages['nonameident'] = 'A identificação deve ter um nome de usuário definido!';
$labels['newkeysize'] = 'Tamanho da chave';
$labels['key2048'] = '2048 bits - padrão';
$labels['key4096'] = '4096 bits - maise seguro';
PKwc�\Agvf��enigma/localization/lv_LV.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Šifrēšana';
$labels['enigmacerts'] = 'S/MIME sertifikāti';
$labels['enigmakeys'] = 'PGP atslēgas';
$labels['keysfromto'] = 'Atslēgas $from līdz $to no $count';
$labels['keyname'] = 'Vārds';
$labels['keyid'] = 'Atslēgas ID';
$labels['keyuserid'] = 'Lietotāja ID';
$labels['keytype'] = 'Atslēgas tips';
$labels['fingerprint'] = 'Pirksta nospiedums';
$labels['subkeys'] = 'Apakšatslēgas';
$labels['keyprops'] = 'Atslēgas īpašības';
$labels['basicinfo'] = 'Pamatinformācija';
$labels['userids'] = 'Papildus lietotāji';
$labels['typepublickey'] = 'publiskā atslēga';
$labels['typekeypair'] = 'atslēgu pāris';
$labels['keyattfound'] = 'Šis e-pasts satur pievienotu PGP atslēgu(as);';
$labels['keyattimport'] = 'Importēt atslēgu(as).';
$labels['typesign'] = 'Paraksts';
$labels['typeencrypt'] = 'Šifrēt';
$labels['typecert'] = 'Sertifikāts';
$labels['typeauth'] = 'Autentifikācija';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritms';
$labels['subkeycreated'] = 'Izveidots';
$labels['subkeyexpires'] = 'Termiņš';
$labels['subkeyusage'] = 'Pielietojums';
$labels['expiresnever'] = 'nekad';
$labels['unknown'] = 'neiznāms';
$labels['uservalid'] = 'Derīgs';
$labels['userid'] = 'ID';
$labels['valid'] = 'derīgs';
$labels['supportencryption'] = 'Ieslēgt e-pastu šifrēšanu un parakstīšanu';
$labels['supportsignatures'] = 'Ieslēgt e-pastu parakstu pārbaudi';
$labels['supportdecryption'] = 'Ieslēgt e-pastu atšifrēšanu';
$labels['signdefault'] = 'Pēc noklusējuma parakstīt visus e-pastus';
$labels['encryptdefault'] = 'Pēc noklusējuma šifrēt visas vēstules';
$labels['attachpubkeydefault'] = 'Pēc noklusējuma pievienot manu publisko PGP atslēgu';
$labels['passwordtime'] = 'Saglabāt privāto atslēgu paroles';
$labels['nminutes'] = '$m minūte(s)';
$labels['wholesession'] = 'visai sessijai';
$labels['createkeys'] = 'Izveidot jaunu atslēgu pāri';
$labels['importkeys'] = 'Importēt atslēgu(as).';
$labels['exportkeys'] = 'Eksportēt atslēgu(as)';
$labels['keyactions'] = 'Darbības ar atslēgu ...';
$labels['keyremove'] = 'Dzēst';
$labels['keydisable'] = 'Atspējot';
$labels['keyrevoke'] = 'Atsaukt';
$labels['keysend'] = 'Ar e-pastu sūtīt arī publisko atslēgu';
$labels['keychpass'] = 'Mainīt paroli';
$labels['newkeyident'] = 'Identitāte';
$labels['newkeypass'] = 'Parole';
$labels['newkeypassconfirm'] = 'Apstiprināt paroli';
$labels['newkeytype'] = 'Atslēgas tips';
$labels['keygenerating'] = 'Ģenerē atslēgas...';
$labels['encryptionoptions'] = 'Šifrēšanas iestatījumi...';
$labels['encryptmsg'] = 'Šifrēt šo e-pastu';
$labels['signmsg'] = 'Digitāli parakstīt šo e-pastu';
$labels['sendunencrypted'] = 'Sūtīt nešifrētu';
$labels['enterkeypasstitle'] = 'Ievadiet atslēgas paroli';
$labels['enterkeypass'] = 'Lai atbloķētu lietotāja $user šifrēto atslēgu ($keyid), ir nepieciešama parole.';
$labels['attachpubkeymsg'] = 'Pievienot manu publisko atslēgu';
$labels['keyexportprompt'] = 'Vai iekļaut slepenās atslēgas saglabātajos openPGP atslēgu failos?';
$labels['onlypubkeys'] = 'Eksportēt tikai publiskās atslēgas';
$labels['withprivkeys'] = 'Eksportēt slepenās atslēgas';
$labels['findkey'] = 'Meklēt atslēgu serveros.';
$labels['keyimportlabel'] = 'Importēt no faila';
$labels['keyimportsearchlabel'] = 'Meklēt atslēgu serveros.';
$labels['arialabelkeyexportoptions'] = 'Atslēgu eksportēšanas iestatījumi';
$messages['sigvalid'] = 'Pārbaudīts $sender paraksts.';
$messages['sigvalidpartial'] = 'Pārbaudīts $sender paraksts, bet daļa no e-pasta nav parakstīta.';
$messages['siginvalid'] = 'Nederīgs paraksts no $sender.';
$messages['sigunverified'] = 'Nepārbaudīts paraksts. Sertifikāts nav pārbaudīts. Sertifikāta ID: $keyid.';
$messages['signokey'] = 'Nepārbaudīts paraksts. Publiskā atslēga nav atrasta. Atslēgas ID: $keyid.';
$messages['sigerror'] = 'Nepārbaudīts paraksts. Iekšējā kļūda.';
$messages['decryptok'] = 'E-pasts atšifrēts.';
$messages['decrypterror'] = 'Atšifrēšana neizdevās.';
$messages['decryptnokey'] = 'Atšifrēšana neizdevās. Privātā atslēga netika atrasta. Atslēgas ID: $keyid.';
$messages['decryptbadpass'] = 'Atšifrēšana neizdevās. Nepareiza parole.';
$messages['decryptnopass'] = 'Atšifrēšana neizdevās. Nepieciešama atslēgas parole.';
$messages['decryptpartial'] = 'E-pasts ir atšifrēts, bet daļa no tā nemaz nebija šifrēta.';
$messages['signerror'] = 'Sūtīšana neizdevās.';
$messages['signnokey'] = 'Nosūtīt neizdevās. Nav atrasta privātā atslēga.';
$messages['signbadpass'] = 'Parakstīšana neizdevās. Nepareiza parole.';
$messages['signnopass'] = 'Nosūtīt neizdevās. Ir nepieciešama atslēgas parole.';
$messages['encrypterror'] = 'Šifrēšana neizdevās.';
$messages['encryptnokey'] = 'Šifrēšana neizdevās. Epastam $email netika atrasta publiskā atslēga.';
$messages['nokeysfound'] = 'Nav atrasta neviena atslēga';
$messages['keynotfound'] = 'Atslēga netika atrasta!';
$messages['keyopenerror'] = 'Nav iespējams iegūt atslēgas informāciju! Iekšējā kļūda.';
$messages['keylisterror'] = 'Nav iespējams parādīt atslēgu sarakstu! Iekšējā kļūda.';
$messages['keysimportfailed'] = 'Nav iespējams ieimportēt atslēgu(s)! Iekšējā kļūda.';
$messages['keysimportsuccess'] = 'Atslēgas ieimportētas veiksmīgi. Ieimportēts: $new, nemainīts: $old.';
$messages['keyremoving'] = 'Dzēš atslēgu(as)...';
$messages['keyremoveconfirm'] = 'Vai Jūs esat pārliecināti ka gribat dzēst atzīmētās astlēgas?';
$messages['keyremovesuccess'] = 'Atslēga(s) nodzēsta veiksmīgi.';
$messages['keyremoveerror'] = 'Atzīmēto atslēgu(as) neizdevās nodzēst.';
$messages['keyimporttext'] = 'Jūs varat importēt privātās un publiskās atslēgas vai anulēšanas parakstus ASCII-Armor formātā.';
$messages['keyimportsearchtext'] = 'Publiskās atslēgas Jūs varat meklēt norādot vai nu atslēgas identifikatoru, vai lietotājvārdu, vai e-pasta adresi - un pēc tam pa tiešo tās importēt.';
$messages['formerror'] = 'Lūdzu aipildiet formu. Visi lauki ir obligāti!';
$messages['passwordsdiffer'] = 'Paroles nesakrīt!';
$messages['keygenerateerror'] = 'Neizdevās uzģenerēt atslēgu pāri.';
$messages['keygeneratesuccess'] = 'Atslēgu pāris veiksmīgi uzģenerēts un ieimportēts.';
$messages['keygennosupport'] = 'Nav iespējams uzģenerēt atslēgu pāri, jo Jūsu tīmekļa pārlūks neatbalsta kriptogrāfijas iespējas!';
$messages['noidentselected'] = 'Jums ir jāizvēlas vismaz viens atslēgas identifikators!';
$messages['nonameident'] = 'Identitātei jābūt ar definētu lietotāja vārdu!';
$labels['newkeysize'] = 'Atslēgas stiprums';
$labels['key2048'] = '2048 biti - pec noklusējuma';
$labels['key4096'] = '4096 biti - papildus drošība';
PKwc�\� ��!�!enigma/localization/sk_SK.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Šifrovanie';
$labels['enigmacerts'] = 'Certifikáty S/MIME';
$labels['enigmakeys'] = 'Kľúče PGP';
$labels['keysfromto'] = 'Kľúče $from až $to z počtu: $count';
$labels['keyname'] = 'Názov';
$labels['keyid'] = 'ID kľúča';
$labels['keyuserid'] = 'ID používateľa';
$labels['keytype'] = 'Typ kľúča';
$labels['fingerprint'] = 'Odtlačok';
$labels['subkeys'] = 'Podradené kľúče';
$labels['keyprops'] = 'Vlastnosti kľúča';
$labels['basicinfo'] = 'Základná informácia';
$labels['userids'] = 'Ďalší používatelia';
$labels['typepublickey'] = 'verejný kľúč';
$labels['typekeypair'] = 'pár kľúčov';
$labels['keyattfound'] = 'Táto správa obsahuje priložené kľúče PGP.';
$labels['keyattimport'] = 'Importovať kľúč(e)';
$labels['typesign'] = 'Podpísať';
$labels['typeencrypt'] = 'Zašifrovať';
$labels['typecert'] = 'Certifikovať';
$labels['typeauth'] = 'Autentifikácia';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmus';
$labels['subkeycreated'] = 'Vytvorené';
$labels['subkeyexpires'] = 'Expiruje';
$labels['subkeyusage'] = 'Využitie';
$labels['expiresnever'] = 'nikdy';
$labels['unknown'] = 'neznáme';
$labels['uservalid'] = 'Platné';
$labels['userid'] = 'ID';
$labels['valid'] = 'platné';
$labels['supportencryption'] = 'Zapnúť šifrovanie a podpisovanie správ';
$labels['supportsignatures'] = 'Zapnúť overovanie podpisov v správe';
$labels['supportdecryption'] = 'Zapnúť dešifrovanie správ';
$labels['signdefault'] = 'Predvolene podpisovať všetky správy';
$labels['encryptdefault'] = 'Predvolene šifrovať všetky správy';
$labels['attachpubkeydefault'] = 'Predvolene pripájať môj verejný PGP kľúč';
$labels['passwordtime'] = 'Uchovávať heslá súkromného kľúča počas';
$labels['nminutes'] = '$m minút/minúty';
$labels['wholesession'] = 'celej relácie';
$labels['createkeys'] = 'Vytvoriť nový pár kľúčov';
$labels['importkeys'] = 'Importovať kľúč(e)';
$labels['exportkeys'] = 'Exportovať kľúč(e)';
$labels['keyactions'] = 'Akcie kľúča...';
$labels['keyremove'] = 'Odstrániť';
$labels['keydisable'] = 'Vypnúť';
$labels['keyrevoke'] = 'Odvolať';
$labels['keysend'] = 'Odoslať verejný kľúč v správe';
$labels['keychpass'] = 'Zmeniť heslo';
$labels['keyadd'] = 'Pridať kľúč';
$labels['newkeyident'] = 'Identita';
$labels['newkeypass'] = 'Heslo';
$labels['newkeypassconfirm'] = 'Potvrdenie hesla';
$labels['newkeytype'] = 'Typ kľúča';
$labels['rsa2048'] = 'RSA - 2048 bitov';
$labels['rsa4096'] = 'RSA - 4096 bitov';
$labels['ecckeypair'] = 'ECC (eliptická krivka)';
$labels['keygenerating'] = 'Generovanie kľúčov...';
$labels['encryptionoptions'] = 'Nastavenia šifrovania...';
$labels['encryptmsg'] = 'Zašifrovať túto správu';
$labels['signmsg'] = 'Digitálne podpísať túto správu';
$labels['sendunencrypted'] = 'Odoslať nezašifrované';
$labels['enterkeypasstitle'] = 'Zadať kľúčovú frázu';
$labels['enterkeypass'] = 'Na odomknutie tajného kľúča je potrebná kľúčová fráza ($keyid) pre používateľa: $user.';
$labels['attachpubkeymsg'] = 'Pripojiť môj verejný kľúč';
$labels['keyexportprompt'] = 'Chcete do uloženého súboru s kľúčmi OpenPGP zahrnúť aj tajné kľúče?';
$labels['onlypubkeys'] = 'Exportovať len verejné kľúče';
$labels['withprivkeys'] = 'Exportovať tajné kľúče';
$labels['findkey'] = 'Hľadať na serveri/serveroch s kľúčom';
$labels['keyimportlabel'] = 'Importovať zo súboru';
$labels['keyimportsearchlabel'] = 'Hľadať na serveri/serveroch s kľúčom';
$labels['managekeys'] = 'Spravovať kľúče PGP';
$labels['identitymatchingprivkeys'] = 'Vo vašej súprave kľúčov máte uložených $nr zodpovedajúcich súkromných kľúčov PGP.';
$labels['identitynoprivkeys'] = 'Pre túto identitu odosielateľa ešte nemáte v súprave kľúčov uložený žiadny súkromný kľúč PGP.';
$labels['arialabelkeyexportoptions'] = 'Nastavenia exportu kľúčov';
$labels['arialabelkeysearchform'] = 'Formulár pre vyhľadávanie kľúčov';
$labels['arialabelkeyoptions'] = 'Možnosti kľúča';
$messages['sigvalid'] = 'Overený podpis od $sender.';
$messages['sigvalidpartial'] = 'Overený podpis od $sender, ale časť tela podpísaná nebola.';
$messages['siginvalid'] = 'Neplatný podpis od $sender.';
$messages['sigunverified'] = 'Neoverený podpis, certifikát nebol overený. ID certifikátu: $keyid.';
$messages['signokey'] = 'Neoverený podpis. Verejný kľúč sa nenašiel. ID kľúča: $keyid.';
$messages['sigerror'] = 'Neoverený podpis. Interná chyba.';
$messages['decryptok'] = 'Správa bola dešifrovaná.';
$messages['decrypterror'] = 'Dešifrovanie nebolo úspešné.';
$messages['decryptnokey'] = 'Dešifrovanie nebolo úspešné. Súkromný kľúč sa nenašiel. ID kľúča: $keyid.';
$messages['decryptnomdc'] = 'Dešifrovanie bolo preskočené. Integrita správy nie je chránená.';
$messages['decryptbadpass'] = 'Dešifrovanie bolo neúspešné. Neplatné heslo.';
$messages['decryptnopass'] = 'Dešifrovanie nebolo úspešné. Vyžaduje sa kľúčové heslo.';
$messages['decryptpartial'] = 'Správa bola dešifrovaná, ale časť jej tela nebola zašifrovaná.';
$messages['signerror'] = 'Vloženie podpisu bolo neúspešné.';
$messages['signnokey'] = 'Vloženie podpisu bolo neúspešné. Nenašiel sa súkromný kľúč.';
$messages['signbadpass'] = 'Podpisovanie bolo neúspešné. Neplatné heslo.';
$messages['signnopass'] = 'Vloženie podpisu nebolo úspešné. Vyžaduje sa kľúčové heslo.';
$messages['encrypterror'] = 'Šifrovanie nebolo úspešné.';
$messages['encryptnokey'] = 'Šifrovanie nebolo úspešné. Nenašiel sa verejný kľúč pre $email.';
$messages['encryptnoprivkey'] = 'Šifrovanie bolo neúspešné. Nenašiel sa súkromný kľúč.';
$messages['nokeysfound'] = 'Nenašli sa žiadne kľúče';
$messages['keynotfound'] = 'Kľúč sa nenašiel!';
$messages['keyopenerror'] = 'Nemožno získať informácie o kľúči! Interná chyba.';
$messages['keylisterror'] = 'Nemožno zostaviť zoznam kľúčov! Interná chyba.';
$messages['keysimportfailed'] = 'Nemožno naimportovať kľúč(e)! Interná chyba.';
$messages['keysimportsuccess'] = 'Import kľúča (kľúčov) bol úspešný.Naimportované položky: $new, bez zmeny: $old.';
$messages['keyremoving'] = 'Odstraňovanie kľúča (kľúčov)...';
$messages['keyremoveconfirm'] = 'Naozaj chcete vymazať vybraný kľúč/kľúče?';
$messages['keyremovesuccess'] = 'Vymazanie kľúča (kľúčov) bolo úspešné.';
$messages['keyremoveerror'] = 'Nemožno vymazať vybraný kľúč (vybrané kľúče).';
$messages['keyimporttext'] = 'Môžete naimportovať súkromné a verejné kľúče alebo podpisy pre odvolanie vo formáte ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Verejné kľúče môžete vyhľadávať podľa identifikátora kľúča, mena používateľa alebo e-mailovej adresy a potom ich priamo importovať.';
$messages['keystoragenotice'] = 'Všetky verejné a súkromné kľúče sú uložené na serveri.';
$messages['formerror'] = 'Prosím vyplňte formulár. Je nutné vyplniť všetky polia!';
$messages['passwordsdiffer'] = 'Heslá sa nezhodujú!';
$messages['keygenerateerror'] = 'Nepodarilo sa vygenerovať pár kľúčov';
$messages['keygeneratesuccess'] = 'Pár kľúčov bol úspešne vygenerovaný a naimportovaný.';
$messages['keygennosupport'] = 'Váš internetový prehliadač nepodporuje kryptografiu. Nemožno vygenerovať pár kľúčov!';
$messages['noidentselected'] = 'Pre tento kľúč si musíte vybrať aspoň jednu identitu!';
$messages['nonameident'] = 'Identita musí mať definované meno používateľa!';
$labels['newkeysize'] = 'Veľkosť kľúča';
$labels['key2048'] = '2048 bitov – predvolené';
$labels['key4096'] = '4096 bitov - bezpečnejšie';
PKwc�\Q_��enigma/localization/cs_CZ.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Šifrování';
$labels['enigmacerts'] = 'S/MIME certifikáty';
$labels['enigmakeys'] = 'PGP klíče';
$labels['keysfromto'] = 'Klíče $from až $to z počtu: $count';
$labels['keyname'] = 'Jméno';
$labels['keyid'] = 'ID Klíče';
$labels['keyuserid'] = 'ID uživatele';
$labels['keytype'] = 'Typ klíče';
$labels['fingerprint'] = 'Otisk prstu';
$labels['subkeys'] = 'Podklíče';
$labels['keyprops'] = 'Vlastnosti klíče';
$labels['basicinfo'] = 'Základní informace';
$labels['userids'] = 'Další uživatelé';
$labels['typepublickey'] = 'veřejný klíč';
$labels['typekeypair'] = 'pár klíčů';
$labels['keyattfound'] = 'Tato zpráva má přiložený/é PGP klíče.';
$labels['keyattimport'] = 'Importovat klíče';
$labels['typesign'] = 'Podepsat';
$labels['typeencrypt'] = 'Zašifrovat';
$labels['typecert'] = 'Certifikovat';
$labels['typeauth'] = 'Autentizace';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmus';
$labels['subkeycreated'] = 'Vytvořený';
$labels['subkeyexpires'] = 'Vyprší';
$labels['subkeyusage'] = 'Použití';
$labels['expiresnever'] = 'nikdy';
$labels['unknown'] = 'neznámý';
$labels['uservalid'] = 'Správný';
$labels['userid'] = 'ID';
$labels['valid'] = 'správný';
$labels['supportencryption'] = 'Povolit podepisování a šifrování zpráv.';
$labels['supportsignatures'] = 'Povolit ověřování podpisů zpráv.';
$labels['supportdecryption'] = 'Povolit dešifrování zpráv.';
$labels['signdefault'] = 'Podepisovat všechny zprávy';
$labels['encryptdefault'] = 'Šifrovat všechny zprávy';
$labels['attachpubkeydefault'] = 'Automaticky připojit svůj veřejný klíč';
$labels['passwordtime'] = 'Uchovat hesla soukromých klíčů pro';
$labels['nminutes'] = '$m minut(a)';
$labels['wholesession'] = 'celá relace';
$labels['createkeys'] = 'Vytvořit nový pár klíčů';
$labels['importkeys'] = 'Importovat klíče';
$labels['exportkeys'] = 'Exportovat klíče';
$labels['keyactions'] = 'Akce s klíčem...';
$labels['keyremove'] = 'Smazat';
$labels['keydisable'] = 'Vypnout';
$labels['keyrevoke'] = 'Revokovat';
$labels['keysend'] = 'Odeslat veřejný klíč ve zprávě';
$labels['keychpass'] = 'Změnit heslo';
$labels['keyadd'] = 'Přidat klíč';
$labels['newkeyident'] = 'Identita';
$labels['newkeypass'] = 'Heslo';
$labels['newkeypassconfirm'] = 'Potvrdit heslo';
$labels['newkeytype'] = 'Typ klíče';
$labels['rsa2048'] = 'RSA - 2048 bitů';
$labels['rsa4096'] = 'RSA - 4096 bitů';
$labels['ecckeypair'] = 'ECC (Eliptická křivka)';
$labels['keygenerating'] = 'Generuji klíče...';
$labels['encryptionoptions'] = 'Možnosti šifrování...';
$labels['encryptmsg'] = 'Zašifrovat tuto zprávu';
$labels['signmsg'] = 'Digitálně podepsat tuto zprávu';
$labels['sendunencrypted'] = 'Poslat nešifrovaně';
$labels['enterkeypasstitle'] = 'Zadejte heslo pro klíč';
$labels['enterkeypass'] = 'Heslo je nutné k odemknutí soukromého klíče ($keyid) pro uživatele: $user.';
$labels['attachpubkeymsg'] = 'Připojit můj veřejný klíč';
$labels['keyexportprompt'] = 'Chcete do uloženého souboru s klíči OpenPGP zahrnout i tajné klíče?';
$labels['onlypubkeys'] = 'Exportovat pouze veřejné klíče';
$labels['withprivkeys'] = 'Exportovat soukromé klíče';
$labels['findkey'] = 'Hledat klíč na keyserveru';
$labels['keyimportlabel'] = 'Importovat ze souboru';
$labels['keyimportsearchlabel'] = 'Hledat klíč na keyserveru';
$labels['managekeys'] = 'Spravovat PGP klíče';
$labels['identitymatchingprivkeys'] = 'V klíčence máte $nr odpovídajících soukromých PGP klíčů:';
$labels['identitynoprivkeys'] = 'Klíčenka neobsahuje soukromý PGP klíč identity odesílatele.';
$labels['arialabelkeyexportoptions'] = 'Možnosti pro export klíčů';
$labels['arialabelkeysearchform'] = 'Formulář pro vyhledávání klíčů';
$labels['arialabelkeyoptions'] = 'Nastavení klíče';
$messages['sigvalid'] = 'Ověřený podpis od $sender.';
$messages['sigvalidpartial'] = 'Ověřený podpis od $sender, ale část těla není podepsána.';
$messages['siginvalid'] = 'Nesprávný podpis od $sender.';
$messages['sigunverified'] = 'Neověřený podpis. Certifikát není ověřen. ID certifikátu: $keyid.';
$messages['signokey'] = 'Neověřený podpis. Veřejný klíč nebyl nalezen. ID klíče: $keyid.';
$messages['sigerror'] = 'Neověřený podpis. Interní chyba.';
$messages['decryptok'] = 'Zpráva byla dešifrována.';
$messages['decrypterror'] = 'Dešifrování selhalo.';
$messages['decryptnokey'] = 'Dešifrování selhalo. Soukromý klíč nebyl nalezen. ID klíče: $keyid.';
$messages['decryptnomdc'] = 'Dešifrování přeskočeno. Integrita zprávy není chráněna.';
$messages['decryptbadpass'] = 'Dešifrování selhalo. Špatné heslo.';
$messages['decryptnopass'] = 'Dešifrování selhalo. Heslo pro klíč je požadováno.';
$messages['decryptpartial'] = 'Zpráva byla dešifrována, ale část jejího těla nebyla zašifrovaná.';
$messages['signerror'] = 'Podepisování selhalo.';
$messages['signnokey'] = 'Podepisování selhalo. Soukromý klíč nebyl nalezen.';
$messages['signbadpass'] = 'Podepisování selhalo. Špatné heslo.';
$messages['signnopass'] = 'Podepisování selhalo. Heslo pro klíč je požadováno.';
$messages['encrypterror'] = 'Šifrování selhalo.';
$messages['encryptnokey'] = 'Šifrování selhalo. Veřejný klíč pro email $email nebyl nalezen.';
$messages['encryptnoprivkey'] = 'Šifrování selhalo. Soukromý klíč nebyl nalezen.';
$messages['nokeysfound'] = 'Nebyly nalezeny žádné klíče.';
$messages['keynotfound'] = 'Klíč nebyl nalezen!';
$messages['keyopenerror'] = 'Nemohu dostat informace o klíči! Interní chyba.';
$messages['keylisterror'] = 'Nemohu získat seznam klíčů! Interní chyba.';
$messages['keysimportfailed'] = 'Nemohu importovat klíče! Interní chyba.';
$messages['keysimportsuccess'] = 'Klíče byly naimportovány. Importovány: $new, nezměněny: $old.';
$messages['keyremoving'] = 'Odstraňuji klíče...';
$messages['keyremoveconfirm'] = 'Opravdu si přejete odstranit vybrané klíče?';
$messages['keyremovesuccess'] = 'Klíče byly odstraněny.';
$messages['keyremoveerror'] = 'Nemohu smazat vybrané klíče.';
$messages['keyimporttext'] = 'Můžete naimportovat soukromé a veřejné klíče nebo podpisy pro revokaci ve formátu ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Veřejné klíče můžete vyhledávat podle identifikátoru klíče, uživatele, nebo e-mailové adresy a potom je přímo importovat.';
$messages['keystoragenotice'] = 'Všechny veřejné a soukromé klíče jsou uloženy na serveru.';
$messages['formerror'] = 'Prosím vyplňte tento formulář. Všechna pole jsou požadována.';
$messages['passwordsdiffer'] = 'Zadaná hesla se neshodují!';
$messages['keygenerateerror'] = 'Selhalo generování páru klíčů';
$messages['keygeneratesuccess'] = 'Pár klíčů byl vygenerován a naimportován.';
$messages['keygennosupport'] = 'Váš webový prohlížeč nepodporuje kryptografii. Nemohu vygenerovat pár klíčů.';
$messages['noidentselected'] = 'Pro tento klíč si musíte vybrat alespoň jednu identitu!';
$messages['nonameident'] = 'Identita musí mít definované uživatelské jméno!';
$labels['newkeysize'] = 'Velikost klíče';
$labels['key2048'] = '2048 bitů - výchozí';
$labels['key4096'] = '4096 bitů - více bezpečné';
PKwc�\��qqenigma/localization/ti.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'እዋን ፍጥረት';
$labels['newkeypass'] = 'መሐለፊ ቃል';
PKwc�\.���enigma/localization/ta_IN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'எப்போதுமில்லை';
$labels['unknown'] = 'தெரியாத';
$labels['newkeypass'] = 'கடவுச்சொல்';
PKwc�\��~�enigma/localization/nl_BE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Naam';
$labels['subkeycreated'] = 'Aangemaakt';
$labels['expiresnever'] = 'nooit';
$labels['unknown'] = 'onbekend';
$labels['keychpass'] = 'Wijzig wachtwoord';
$labels['newkeypass'] = 'Wachtwoord';
$labels['keyimportlabel'] = 'Importeren uit bestand';
PKwc�\��;G��enigma/localization/hi_IN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'कभी नहाीं';
$labels['unknown'] = 'अज्ञात';
$labels['newkeypass'] = 'पासवर्ड';
PKwc�\���$�$enigma/localization/uk_UA.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Шифрування';
$labels['enigmacerts'] = 'Сертифікати S/MIME';
$labels['enigmakeys'] = 'PGP-ключі';
$labels['keysfromto'] = 'Ключі з $from до $to з $count';
$labels['keyname'] = 'Ім\'я';
$labels['keyid'] = 'ID ключа';
$labels['keyuserid'] = 'ID користувача';
$labels['keytype'] = 'Тип ключа';
$labels['fingerprint'] = 'Відбиток';
$labels['subkeys'] = 'Субключі';
$labels['basicinfo'] = 'Базова інформація';
$labels['userids'] = 'Додаткові користувачі';
$labels['typepublickey'] = 'публічний ключ';
$labels['typekeypair'] = 'пара ключів';
$labels['keyattfound'] = 'Це повідомлення містить прикріплений PGP-ключ(і).';
$labels['keyattimport'] = 'Імпортувати ключ(і)';
$labels['typesign'] = 'Підписати';
$labels['typeencrypt'] = 'Шифрувати';
$labels['typecert'] = 'Сертифікувати';
$labels['typeauth'] = 'Автентифікація';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Алгоритм';
$labels['subkeycreated'] = 'Створено';
$labels['subkeyexpires'] = 'Закінчується';
$labels['subkeyusage'] = 'Використання';
$labels['expiresnever'] = 'ніколи';
$labels['unknown'] = 'невідомо';
$labels['uservalid'] = 'Дійсний';
$labels['userid'] = 'ID';
$labels['valid'] = 'дійсний';
$labels['supportencryption'] = 'Увімкнути шифрування і підписання повідомлень';
$labels['supportsignatures'] = 'Увімкнути верифікацію підписів повідомленьй';
$labels['supportdecryption'] = 'Увімкнути розшифрування повідомлень';
$labels['signdefault'] = 'Типово підписувати усі листи';
$labels['encryptdefault'] = 'Типово шифрувати усі повідомлення';
$labels['attachpubkeydefault'] = 'Приєднати мій публічний типовий PGP ключ';
$labels['passwordtime'] = 'Зберігати паролі приватних ключів';
$labels['nminutes'] = '$n хвилин(и)';
$labels['wholesession'] = 'усю сесію';
$labels['createkeys'] = 'Створити нову пару ключів';
$labels['importkeys'] = 'Імпортувати ключ(і)';
$labels['exportkeys'] = 'Експортувати ключ(і)';
$labels['keyactions'] = 'Ключові дії...';
$labels['keyremove'] = 'Вилучити';
$labels['keydisable'] = 'Вимкнути';
$labels['keyrevoke'] = 'Відкликати';
$labels['keysend'] = 'Надіслати публічний ключ в повідомленні';
$labels['keychpass'] = 'Змінити пароль';
$labels['newkeypass'] = 'Пароль';
$labels['newkeytype'] = 'Тип ключа';
$labels['keygenerating'] = 'Генерування ключів…';
$labels['encryptionoptions'] = 'Опції шифрування…';
$labels['encryptmsg'] = 'Шифрувати це повідомлення';
$labels['signmsg'] = 'Поставити цифровий підпис під повідомленням';
$labels['enterkeypasstitle'] = 'Введіть фразу-пароль ключа';
$labels['enterkeypass'] = 'Необхідна фраза-пароль для відімкнення секретного ключа ($keyid) для користувача: $user.';
$labels['attachpubkeymsg'] = 'Приєднати мій публічний ключ';
$labels['keyexportprompt'] = 'Бажаєте включити приватні ключі у файл-ключів OpenPGP?';
$labels['onlypubkeys'] = 'Експортувати публічні ключі';
$labels['withprivkeys'] = 'Експортувати приватні ключі';
$labels['findkey'] = 'Пошук по ключовому(вих) серверах';
$labels['keyimportlabel'] = 'Імпортувати з файлу';
$labels['keyimportsearchlabel'] = 'Пошук по ключовому(вих) серверах';
$labels['arialabelkeyexportoptions'] = 'Опції експорту ключів';
$messages['sigvalid'] = 'Перевірений підпис від $sender.';
$messages['sigvalidpartial'] = 'Перевірений підпис від $sender, але частина тіла повідомлення не було підписано.';
$messages['siginvalid'] = 'Недійсний підпис від $sender.';
$messages['sigunverified'] = 'Неперевірений підпис. Сертифікат не перевірено. ID сертифіката: $keyid.';
$messages['signokey'] = 'Неперевірений підпис. Публічний ключ не знайдено. ID ключа: $keyid.';
$messages['sigerror'] = 'Неперевірений підпис. Внутрішня помилка.';
$messages['decryptok'] = 'Повідомлення розшифровано.';
$messages['decrypterror'] = 'Розшифрування не вдалося.';
$messages['decryptnokey'] = 'Розшифрування не вдалося. Приватний ключ не знайдено. ID ключа: $keyid.';
$messages['decryptnopass'] = 'Розшифрування не вдалося. Потрібен пароль ключа.';
$messages['decryptpartial'] = 'Повідомлення розшифроване, але частина тіла не було зашифроване.';
$messages['signerror'] = 'Підписання не вдалося.';
$messages['signnokey'] = 'Підписання не вдалося. Приватний ключ не знайдено.';
$messages['signnopass'] = 'Підписання не вдалося. Потрібен пароль ключа.';
$messages['encrypterror'] = 'Шифрування не вдалося. ';
$messages['encryptnokey'] = 'Шифрування не вдалося. Публічний ключ не знайдено для $email.';
$messages['nokeysfound'] = 'Не знайдено ключів';
$messages['keynotfound'] = 'Ключ не знайдено!';
$messages['keyopenerror'] = 'Не вдалося отримати інформацію про ключ! Внутрішня помилка.';
$messages['keylisterror'] = 'Не вдалося вивести перелік ключів! Внутрішня помилка.';
$messages['keysimportfailed'] = 'Не вдалося імпортувати ключ(і)! Внутрішня помилка.';
$messages['keysimportsuccess'] = 'Ключ(і) імпотровано успішно. Імпортовано: $new, без змін: $old.';
$messages['keyremoving'] = 'Вилучення ключа(-ів)…';
$messages['keyremoveconfirm'] = 'Ви дійсно хочете видалити обраний(-і) ключ(і)?';
$messages['keyremovesuccess'] = 'Ключ(і) вилучено успішно';
$messages['keyremoveerror'] = 'Не вдалося вилучити обраний(-і) ключ(і).';
$messages['keyimporttext'] = 'Ви можете імпортувати приватні та публічні ключі чи підписи скасування у форматі ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Ви можете здійснювати пошук відкритих ключів за допомогою ідентифікатора ключа, ім\'я користувача або адреси електронної пошти, а потім імпортувати їх.';
$messages['formerror'] = 'Будь ласка, заповніть форму. Усі поля обов\'язкові!';
$messages['passwordsdiffer'] = 'Паролі не співпадають!';
$messages['keygenerateerror'] = 'Не вдалося згенерувати пару ключів';
$messages['keygeneratesuccess'] = 'Пару ключів успішно згенеровано й імпортовано.';
$messages['keygennosupport'] = 'Ваш веб-браузер не підтримує криптографію. Не вдалося згенерувати пару ключів!';
$messages['noidentselected'] = 'Ви повинні вибрати принаймні, один ідентифікатор для ключа!';
$messages['nonameident'] = 'Профіль повинен мати вказане ім\'я користувача!';
$labels['key2048'] = '2048 бітів — дефолтно';
$labels['key4096'] = '4096 бітів — безпечніше';
PKwc�\e�מ,,enigma/localization/fy_NL.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Namme';
$labels['keyid'] = 'Kaai ID';
$labels['typeencrypt'] = 'Fersiferje';
$labels['subkeycreated'] = 'Oanmakke';
$labels['expiresnever'] = 'nea';
$labels['unknown'] = 'ûnbekend';
$labels['keychpass'] = 'Wachtwurd feroarje';
$labels['newkeypass'] = 'Wachtwurd';
PKwc�\|�[j"j"enigma/localization/de_CH.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Verschlüsselung';
$labels['enigmacerts'] = 'S/MIME Zertifikate';
$labels['enigmakeys'] = 'PGP Schlüssel';
$labels['keysfromto'] = 'Schlüssel $from bis $to von $count';
$labels['keyname'] = 'Schlüssel';
$labels['keyid'] = 'Schlüssel ID';
$labels['keyuserid'] = 'Benutzer ID';
$labels['keytype'] = 'Schlüsseltyp';
$labels['fingerprint'] = 'Fingerprint';
$labels['subkeys'] = 'Sub-Schlüssel';
$labels['keyprops'] = 'Schlüsseleigenschaften';
$labels['basicinfo'] = 'Allgemeine Informationen';
$labels['userids'] = 'Zusätzliche Benutzer';
$labels['typepublickey'] = 'Öffentlicher Schlüssel';
$labels['typekeypair'] = 'Schlüsselpaar';
$labels['keyattfound'] = 'Diese Nachricht enthält angehängte PGP Schlüssel.';
$labels['keyattimport'] = 'Schlüssel importieren';
$labels['typesign'] = 'Signieren';
$labels['typeencrypt'] = 'Verschlüsseln';
$labels['typecert'] = 'Bestätigen';
$labels['typeauth'] = 'Authentifizierung';
$labels['subkeyid'] = 'Sub-Schlüssel ID';
$labels['subkeyalgo'] = 'Algorithmus';
$labels['subkeycreated'] = 'Erstellt am';
$labels['subkeyexpires'] = 'Läuft aus';
$labels['subkeyusage'] = 'Verwendet für';
$labels['expiresnever'] = 'nie';
$labels['unknown'] = 'unbekannt';
$labels['uservalid'] = 'Gültigkeit';
$labels['userid'] = 'ID';
$labels['valid'] = 'gültig';
$labels['supportencryption'] = 'Nachrichtenverschlüsselung und Signierung aktivieren';
$labels['supportsignatures'] = 'Verifizierung der Nachrichtensignatur aktivieren';
$labels['supportdecryption'] = 'Entschlüsselung von Nachrichten aktivieren';
$labels['signdefault'] = 'Nachrichten immer signieren';
$labels['encryptdefault'] = 'Nachrichten immer verschlüsseln';
$labels['attachpubkeydefault'] = 'Öffentlichen Schlüssel in der Nachricht anfügen';
$labels['passwordtime'] = 'Private Schlüssel behalten für';
$labels['nminutes'] = '$m Minuten';
$labels['wholesession'] = 'die gesamte Sitzung';
$labels['createkeys'] = 'Neues Schlüsselpaar erstellen';
$labels['importkeys'] = 'Schlüssel importieren';
$labels['exportkeys'] = 'Schlüssel exportieren';
$labels['keyactions'] = 'Aktionen...';
$labels['keyremove'] = 'Entfernen';
$labels['keydisable'] = 'Deaktivieren';
$labels['keyrevoke'] = 'Widerrufen';
$labels['keysend'] = 'Öffentlichen Schlüssel versenden';
$labels['keychpass'] = 'Passwort ändern';
$labels['keyadd'] = 'Schlüssel hinzufügen';
$labels['newkeyident'] = 'Identität';
$labels['newkeypass'] = 'Passwort';
$labels['newkeypassconfirm'] = 'Passwort bestätigen';
$labels['newkeytype'] = 'Schlüsseltyp';
$labels['rsa2048'] = 'RSA - 2048 Bit';
$labels['rsa4096'] = 'RSA - 4096 Bit';
$labels['ecckeypair'] = 'ECC (Elliptische Kurve)';
$labels['keygenerating'] = 'Schlüssel generieren...';
$labels['encryptionoptions'] = 'Verschlüsselungsoptionen';
$labels['encryptmsg'] = 'Diese Nachricht verschlüsseln';
$labels['signmsg'] = 'Diese Nachricht digital signieren';
$labels['sendunencrypted'] = 'Unverschlüsselt senden';
$labels['enterkeypasstitle'] = 'Bitte Schlüssel Passwort eingeben';
$labels['enterkeypass'] = 'Ein Passwort wird benötigt um den privaten Schlüssel ($keyid) für Benutzer: $user zu entsperren';
$labels['attachpubkeymsg'] = 'Meinen öffentlichen Schlüssel anfügen';
$labels['keyexportprompt'] = 'Möchten Sie geheime Schlüssel in die gespeicherte OpenPGP-Schlüsseldatei mit aufnehmen?';
$labels['onlypubkeys'] = 'Nur öffentliche Schlüssel exportieren';
$labels['withprivkeys'] = 'Geheime Schlüssel exportieren';
$labels['findkey'] = 'Auf Schlüsselserver(n) suchen';
$labels['keyimportlabel'] = 'Aus Datei importieren';
$labels['keyimportsearchlabel'] = 'Auf Schlüsselserver(n) suchen';
$labels['managekeys'] = 'PGP-Schlüssel verwalten';
$labels['identitymatchingprivkeys'] = 'Für diesen Absender sind $nr private Schlüssel in Ihrem Schlüsselbund gespeichert:';
$labels['identitynoprivkeys'] = 'Für diesen Absender existiert noch kein PGP Schlüsselpaar in Ihrem  Schlüsselbund.';
$labels['arialabelkeyexportoptions'] = 'Optionen für Schlüsselexport';
$labels['arialabelkeysearchform'] = 'Schlüsselsuche';
$labels['arialabelkeyoptions'] = 'Schlüssel-Optionen';
$messages['sigvalid'] = 'Signatur von $sender wurde erfolgreich überprüft.';
$messages['sigvalidpartial'] = 'Signatur von $sender wurde überprüft, aber ein Teil der Nachricht wurde nicht signiert.';
$messages['siginvalid'] = 'Ungültige Signatur von $sender.';
$messages['sigunverified'] = 'Unbestätigte Signatur. Zertifikat nicht überprüft. Zertifikat-ID: $keyid. ';
$messages['signokey'] = 'Unbestätigte Signatur. Öffentlicher Schlüssel wurde nicht gefunden. Schlüssel-ID: $keyid.';
$messages['sigerror'] = 'Unbestätigte Signatur. Interner Fehler.';
$messages['decryptok'] = 'Nachricht entschlüsselt.';
$messages['decrypterror'] = 'Entschlüsselung fehlgeschlagen.';
$messages['decryptnokey'] = 'Entschlüsselung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden. Schlüssel-ID: $keyid.';
$messages['decryptnomdc'] = 'Entschlüsselung übersprungen. Nachricht ist nicht integritätsgeschützt.';
$messages['decryptbadpass'] = 'Entschlüsselung fehlgeschlagen. Passwort ungültig.';
$messages['decryptnopass'] = 'Entschlüsselung fehlgeschlagen. Schlüsselpasswort wird benötigt.';
$messages['decryptpartial'] = 'Nachricht entschlüsselt, aber ein Teil der Nachricht wurde nicht verschlüsselt.';
$messages['signerror'] = 'Signierung fehlgeschlagen.';
$messages['signnokey'] = 'Signierung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden.';
$messages['signbadpass'] = 'Signierung fehlgeschlagen. Passwort ungültig.';
$messages['signnopass'] = 'Signierung fehlgeschlagen. Schlüsselpasswort wird benötigt.';
$messages['encrypterror'] = 'Verschlüsselung fehlgeschlagen.';
$messages['encryptnokey'] = 'Verschlüsselung fehlgeschlagen. Öffentlicher Schlüssel für $email nicht gefunden';
$messages['encryptnoprivkey'] = 'Verschlüsselung fehlgeschlagen. Privater Schlüssel nicht gefunden.';
$messages['nokeysfound'] = 'Keine Schlüssel gefunden';
$messages['keynotfound'] = 'Schlüssel nicht gefunden!';
$messages['keyopenerror'] = 'Abrufen der Schlüsselinformationen nicht möglich. Interner Fehler.';
$messages['keylisterror'] = 'Auflisten der Schlüsselinformationen nicht möglich! Interner Fehler.';
$messages['keysimportfailed'] = 'Schlüsselimport fehlgeschlagen! Interner Fehler.';
$messages['keysimportsuccess'] = 'Schlüsselimport erfolgreich. Importiert: $new, unverändert: $old.';
$messages['keyremoving'] = 'Schlüssel entfernen...';
$messages['keyremoveconfirm'] = 'Bist du dir sicher, dass du die ausgewählten Schlüssel entfernen willst?';
$messages['keyremovesuccess'] = 'Schlüssel erfolgreich gelöscht.';
$messages['keyremoveerror'] = 'Löschung der Schlüssel nicht möglich.';
$messages['keyimporttext'] = 'Private und öffentliche Schlüssel sowie zurückgerufene Signaturen können im ASCII-Armor Format importiert werden.';
$messages['keyimportsearchtext'] = 'Sie können für öffentliche Schlüssel nach dem Schlüsselbezeichner, Benutzername oder der E-Mail-Adresse suchen und diese dann direkt importieren.';
$messages['keystoragenotice'] = 'Alle öffentlichen und privaten Schlüssel werden auf dem Server gespeichert.';
$messages['formerror'] = 'Bitte, alle Eingabefelder ausfüllen. Alle Eingabefelder werden benötigt!';
$messages['passwordsdiffer'] = 'Passwörter stimmen nicht überein.';
$messages['keygenerateerror'] = 'Schlüsselgenerierung fehlgeschlagen.';
$messages['keygeneratesuccess'] = 'Schlüsselpaar erfolgreich generiert und importiert.';
$messages['keygennosupport'] = 'Dein Browser unterstützt keine Kryptopgraphiefunktionen. Konnte Schlüsselpaar nicht generieren!';
$messages['noidentselected'] = 'Sie müssen mindestens eine Identität für den Schlüssel auswählen!';
$messages['nonameident'] = 'Identität muss einen Benutzernamen definiert haben.';
$labels['newkeysize'] = 'Schlüssellänge';
$labels['key2048'] = '2048 bits - standard';
$labels['key4096'] = '4096 bits - sicher';
PKwc�\��kkenigma/localization/es_419.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Nombre';
$labels['keyid'] = 'ID de la llave';
$labels['typeencrypt'] = 'Cifrar';
$labels['subkeyid'] = 'ID';
$labels['subkeycreated'] = 'Creado';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'desconocido';
$labels['userid'] = 'ID';
$labels['keychpass'] = 'Cambiar contraseña';
$labels['newkeypass'] = 'Contraseña';
PKwc�\P��==enigma/localization/uz.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Nomlanishi';
$labels['keyid'] = 'Kalit ID si';
$labels['typeencrypt'] = 'Shiffrlash';
$labels['subkeycreated'] = 'Yaratildi';
$labels['expiresnever'] = 'hech qachon';
$labels['unknown'] = 'noma’lum';
$labels['keychpass'] = 'Parolni almashtirish';
$labels['newkeypass'] = 'Parol';
PKwc�\�c�enigma/localization/hy_AM.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Անվանում';
$labels['subkeycreated'] = 'Ստեղծված';
$labels['expiresnever'] = 'երբեք';
$labels['unknown'] = 'անհայտ';
$labels['keychpass'] = 'Փոխել գաղտնաբառը';
$labels['newkeypass'] = 'Գաղտնաբառ';
PKwc�\�D8{��enigma/localization/en_CA.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Name';
$labels['subkeycreated'] = 'Created';
$labels['expiresnever'] = 'never';
$labels['unknown'] = 'unknown';
$labels['newkeypass'] = 'Password';
PKwc�\�A��AAenigma/localization/zh_TW.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = '加密';
$labels['enigmacerts'] = 'S/MIME 憑證';
$labels['enigmakeys'] = 'PGP 金鑰';
$labels['keysfromto'] = '金鑰:由 $from 至 $to (共 $count 個)';
$labels['keyname'] = '名稱';
$labels['keyid'] = '金鑰 ID';
$labels['keyuserid'] = '使用者 ID';
$labels['keytype'] = '金鑰類型';
$labels['fingerprint'] = '指紋';
$labels['subkeys'] = '子金鑰';
$labels['keyprops'] = '金鑰屬性';
$labels['basicinfo'] = '基本資訊';
$labels['userids'] = '額外使用者';
$labels['typepublickey'] = '公鑰';
$labels['typekeypair'] = '金鑰對';
$labels['keyattfound'] = '本郵件有附帶的 PGP 金鑰';
$labels['keyattimport'] = '匯入金鑰';
$labels['typesign'] = '簽署';
$labels['typeencrypt'] = '加密';
$labels['typecert'] = '認證';
$labels['typeauth'] = '身份核對';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = '演算法';
$labels['subkeycreated'] = '建立時間:';
$labels['subkeyexpires'] = '過期時間:';
$labels['subkeyusage'] = '使用情況';
$labels['expiresnever'] = '從未使用';
$labels['unknown'] = '不明';
$labels['uservalid'] = '有效';
$labels['userid'] = 'ID';
$labels['valid'] = '有效';
$labels['supportencryption'] = '啟用郵件加密及簽署';
$labels['supportsignatures'] = '啟用郵件簽名驗證';
$labels['supportdecryption'] = '啟用郵件解密';
$labels['signdefault'] = '預設簽署所有郵件';
$labels['encryptdefault'] = '預設加密所有郵件';
$labels['attachpubkeydefault'] = '預設附上我的公開 PGP 金鑰';
$labels['passwordtime'] = '為以下項目保留私密金鑰密碼:';
$labels['nminutes'] = '$m 分鐘';
$labels['wholesession'] = '整個工作階段';
$labels['createkeys'] = '建立新的金鑰對';
$labels['importkeys'] = '匯入金鑰';
$labels['exportkeys'] = '匯出金鑰';
$labels['keyactions'] = '金鑰動作...';
$labels['keyremove'] = '移除';
$labels['keydisable'] = '停用';
$labels['keyrevoke'] = '撤銷';
$labels['keysend'] = '在郵件傳送公開金鑰';
$labels['keychpass'] = '更改密碼';
$labels['keyadd'] = '加入金鑰';
$labels['newkeyident'] = '身分';
$labels['newkeypass'] = '使用者密碼';
$labels['newkeypassconfirm'] = '確認密碼';
$labels['newkeytype'] = '金鑰類型';
$labels['rsa2048'] = 'RSA - 2048 位元';
$labels['rsa4096'] = 'RSA - 4096 位元';
$labels['ecckeypair'] = 'ECC(橢圓曲線)';
$labels['keygenerating'] = '正在製作金鑰...';
$labels['encryptionoptions'] = '加密選項...';
$labels['encryptmsg'] = '加密本郵件';
$labels['signmsg'] = '數位簽署本郵件';
$labels['sendunencrypted'] = '以不加密方式傳送';
$labels['enterkeypasstitle'] = '輸入金鑰密語';
$labels['enterkeypass'] = '需要密語才能為使用者 $user 解鎖密鑰 ($keyid)';
$labels['attachpubkeymsg'] = '附上我的公開金鑰';
$labels['keyexportprompt'] = '是否包括儲存在 OpenPGP 金鑰檔案的密鑰?';
$labels['onlypubkeys'] = '僅匯出公開金鑰';
$labels['withprivkeys'] = '匯出密鑰';
$labels['findkey'] = '在金鑰伺服器搜尋';
$labels['keyimportlabel'] = '從檔案匯入';
$labels['keyimportsearchlabel'] = '在金鑰伺服器搜尋';
$labels['managekeys'] = '管理 PGP 金鑰';
$labels['identitymatchingprivkeys'] = '您的鑰匙圈有 $nr 個符合的 PGP 私鑰:';
$labels['identitynoprivkeys'] = '傳送者的身分不符合您鑰匙圈中 PGP 私鑰的任何一個。';
$labels['arialabelkeyexportoptions'] = '金鑰匯出選項';
$labels['arialabelkeysearchform'] = '金鑰搜尋表格';
$labels['arialabelkeyoptions'] = '金鑰選項';
$messages['sigvalid'] = '來自 $sender 的已驗證簽名';
$messages['sigvalidpartial'] = '來自 $sender 的已驗證簽名,但內文部分並未簽署';
$messages['siginvalid'] = '來自 $sender 的無效簽名';
$messages['sigunverified'] = '未驗證的簽名。憑證無驗證。憑證 ID:$keyid';
$messages['signokey'] = '未驗證的簽名。找不到公開金鑰。金鑰 ID:$keyid';
$messages['sigerror'] = '未驗證的簽名。內部出錯';
$messages['decryptok'] = '郵件已解密';
$messages['decrypterror'] = '解密失敗';
$messages['decryptnokey'] = '解密失敗。找不到私密金鑰。金鑰 ID:$keyid';
$messages['decryptnomdc'] = '已略過解密。郵件的整全性並未受到保護。';
$messages['decryptbadpass'] = '解密失敗。密碼無效';
$messages['decryptnopass'] = '解密失敗。必需要金鑰的密碼';
$messages['decryptpartial'] = '郵件已解密,但內文部分未有加密';
$messages['signerror'] = '簽名失敗';
$messages['signnokey'] = '簽名失敗。找不到私密金鑰';
$messages['signbadpass'] = '簽名失敗。密碼無效';
$messages['signnopass'] = '簽名失敗。必須要金鑰密碼';
$messages['encrypterror'] = '加密失敗';
$messages['encryptnokey'] = '加密失敗。找不到用於 $email 的公開金鑰';
$messages['encryptnoprivkey'] = '加密失敗。找不到私鑰。';
$messages['nokeysfound'] = '找不到金鑰';
$messages['keynotfound'] = '找不到金鑰!';
$messages['keyopenerror'] = '無法取得金鑰資訊!內部出錯';
$messages['keylisterror'] = '無法列出金鑰!內部出錯';
$messages['keysimportfailed'] = '無法匯入金鑰!內部出錯';
$messages['keysimportsuccess'] = '成功匯入金鑰。匯入:$new,不變:$old';
$messages['keyremoving'] = '正在移除金鑰...';
$messages['keyremoveconfirm'] = '是否確定要刪除所選的金鑰?';
$messages['keyremovesuccess'] = '成功刪除金鑰';
$messages['keyremoveerror'] = '無法刪除所選的金鑰';
$messages['keyimporttext'] = '可用 ASCII-Armor 格式匯入私密及公開金鑰,或撤銷金鑰';
$messages['keyimportsearchtext'] = '可用金鑰識別碼、使用者名稱或電郵位址搜尋公開金鑰,然後直接匯入';
$messages['formerror'] = '請填好表格,所有欄位都是必須的!';
$messages['passwordsdiffer'] = '密碼不符!';
$messages['keygenerateerror'] = '未能產生金鑰對';
$messages['keygeneratesuccess'] = '成功產生並匯入金鑰對';
$messages['keygennosupport'] = '您的網項瀏覽器不支援加密機制,故此無法產生金鑰對!';
$messages['noidentselected'] = '要為金鑰選取至少一個身份!';
$messages['nonameident'] = '身份必須要有使用者名稱!';
$labels['newkeysize'] = '金鑰大小';
$labels['key2048'] = '2048 位元 - 預設';
$labels['key4096'] = '4096 位元 - 較安全';
PKwc�\k��!!enigma/localization/ca_ES.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Encriptació';
$labels['enigmacerts'] = 'Certificats S/MIME';
$labels['enigmakeys'] = 'Claus PGP';
$labels['keysfromto'] = 'Claus $from a $to de $count';
$labels['keyname'] = 'Nom';
$labels['keyid'] = 'ID de la clau';
$labels['keyuserid'] = 'ID de l\'usuari';
$labels['keytype'] = 'Tipus de clau';
$labels['fingerprint'] = 'Empremta digital';
$labels['subkeys'] = 'Subclaus';
$labels['keyprops'] = 'Propietats de la clau';
$labels['basicinfo'] = 'Informació bàsica';
$labels['userids'] = 'Usuaris addicionals';
$labels['typepublickey'] = 'clau pública';
$labels['typekeypair'] = 'parella de claus';
$labels['keyattfound'] = 'Aquest missatge conté clau(s) PGP adjunt(s).';
$labels['keyattimport'] = 'Importa clau(s)';
$labels['typesign'] = 'Signa';
$labels['typeencrypt'] = 'Xifra';
$labels['typecert'] = 'Certifica';
$labels['typeauth'] = 'Autenticació';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorisme';
$labels['subkeycreated'] = 'Creat';
$labels['subkeyexpires'] = 'Caduca';
$labels['subkeyusage'] = 'Ús';
$labels['expiresnever'] = 'mai';
$labels['unknown'] = 'desconegut';
$labels['uservalid'] = 'Vàlid';
$labels['userid'] = 'ID';
$labels['valid'] = 'vàlid';
$labels['supportencryption'] = 'Activa l\'encriptació i signat del missatge';
$labels['supportsignatures'] = 'Activa la verificació de les signatures del missatge';
$labels['supportdecryption'] = 'Activa la desencriptació del missatge';
$labels['signdefault'] = 'Signa tots els missatges per defecte';
$labels['encryptdefault'] = 'Xifra tots els missatges per defecte';
$labels['attachpubkeydefault'] = 'Adjunta per defecte la meva clau pública PGP';
$labels['passwordtime'] = 'Conserva les contrasenyes de les claus privades per';
$labels['nminutes'] = '$m minut(s)';
$labels['wholesession'] = 'a tota la sessió';
$labels['createkeys'] = 'Crea un nou parell de claus';
$labels['importkeys'] = 'Importa clau(s)';
$labels['exportkeys'] = 'Exporta clau(s)';
$labels['keyactions'] = 'Accions de les claus...';
$labels['keyremove'] = 'Suprimeix';
$labels['keydisable'] = 'Desactiva';
$labels['keyrevoke'] = 'Revoca';
$labels['keysend'] = 'Envia la clau pública en un missatge';
$labels['keychpass'] = 'Canvia la contrasenya';
$labels['keyadd'] = 'Afegeix una clau';
$labels['newkeyident'] = 'Identitat';
$labels['newkeypass'] = 'Contrasenya';
$labels['newkeypassconfirm'] = 'Confirma la contrasenya';
$labels['newkeytype'] = 'Tipus de clau';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Corba El·líptica)';
$labels['keygenerating'] = 'S\'estan generant les claus...';
$labels['encryptionoptions'] = 'Opcions d\'encriptació...';
$labels['encryptmsg'] = 'Encripta aquest missatge';
$labels['signmsg'] = 'Signa digitalment aquest missatge';
$labels['sendunencrypted'] = 'Envia-ho desxifrat';
$labels['enterkeypasstitle'] = 'Introduïu la contrasenya de la clau';
$labels['enterkeypass'] = 'Cal una contrasenya per desblocar la clau secreta ($keyid) per l\'usuari: $user.';
$labels['attachpubkeymsg'] = 'Adjunta la meva clau pública';
$labels['keyexportprompt'] = 'Voleu incloure claus secretes al fitxer de claus OpenPGP desat?';
$labels['onlypubkeys'] = 'Exporta només claus públiques';
$labels['withprivkeys'] = 'Exporta claus secretes';
$labels['findkey'] = 'Cerca al(s) servidor(s) de claus';
$labels['keyimportlabel'] = 'Importa des de fitxer';
$labels['keyimportsearchlabel'] = 'Cerca al(s) servidor(s) de claus';
$labels['managekeys'] = 'Gestiona les claus PGP';
$labels['identitymatchingprivkeys'] = 'Teniu $nr claus privades PGP coincidents emmagatzemades al vostre anell de claus:';
$labels['identitynoprivkeys'] = 'Aquesta identitat del remitent encara no té cap clau privada PGP emmagatzemada al vostre anell de claus.';
$labels['arialabelkeyexportoptions'] = 'Opcions d’exportació de claus';
$labels['arialabelkeysearchform'] = 'Formulari de cerca de claus';
$labels['arialabelkeyoptions'] = 'Opcions de clau';
$messages['sigvalid'] = 'Signatura verificada des de $sender.';
$messages['sigvalidpartial'] = 'Signatura verificada des de $sender, però no s\'ha signat una part del cos.';
$messages['siginvalid'] = 'Signatura no vàlida des de $sender.';
$messages['sigunverified'] = 'Signatura no verificada. No s\'ha verificat el certificat. Identificador del certificat: $keyid.';
$messages['signokey'] = 'Signatura no verificada. No s\'ha trobat la clau pública. Identificador de clau: $keyid.';
$messages['sigerror'] = 'Signatura no verificada. Error intern.';
$messages['decryptok'] = 'Missatge desxifrat.';
$messages['decrypterror'] = 'Ha fallat el desxifratge.';
$messages['decryptnokey'] = 'Ha fallat el desxifratge. No s\'ha trobat la clau privada. Identificador de clau: $keyid.';
$messages['decryptnomdc'] = 'S\'ha omès el desxifratge. El missatge no està íntegrament protegit.';
$messages['decryptbadpass'] = 'Ha fallat el desxifratge. Contrasenya no vàlida.';
$messages['decryptnopass'] = 'Ha fallat el desxifratge. Es requereix una contrasenya clau.';
$messages['decryptpartial'] = 'El missatge s\'ha desxifrat, però una part del cos no estava encriptada.';
$messages['signerror'] = 'No s\'ha pogut signar.';
$messages['signnokey'] = 'No s\'ha pogut signar. No s\'ha trobat la clau privada.';
$messages['signbadpass'] = 'No s\'ha pogut signar. Contrasenya no vàlida.';
$messages['signnopass'] = 'No s\'ha pogut signar. Es requereix una contrasenya clau.';
$messages['encrypterror'] = 'Ha fallat el xifratge.';
$messages['encryptnokey'] = 'Ha fallat el xifratge. No s\'ha trobat la clau pública per a $email.';
$messages['encryptnoprivkey'] = 'Ha fallat el xifratge. No s\'ha trobat la clau privada.';
$messages['nokeysfound'] = 'No s\'ha trobat cap clau';
$messages['keynotfound'] = 'No s\'ha trobat la clau!';
$messages['keyopenerror'] = 'No es pot obtenir la informació clau!. Error intern.';
$messages['keylisterror'] = 'No es poden mostrar les claus!. Error intern.';
$messages['keysimportfailed'] = 'No es poden importar les claus!. Error intern.';
$messages['keysimportsuccess'] = 'Clau(s) importada/es correctament. Importades: $nou, sense canvis: $antic.';
$messages['keyremoving'] = 'S\'estan suprimint la/es clau(s)...';
$messages['keyremoveconfirm'] = 'Esteu segur de voler suprimir la/es clau(s) seleccionada/es?';
$messages['keyremovesuccess'] = 'La/es clau(s) s\'ha(n) suprimit correctament';
$messages['keyremoveerror'] = 'No es poden suprimir les claus seleccionades.';
$messages['keyimporttext'] = 'Podeu importar claus públiques i privades o signatures de revocació en format ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Podeu cercar claus públiques per l\'identificador de la clau, nom d’usuari o adreça de correu electrònic i després importar-les directament.';
$messages['keystoragenotice'] = 'Totes les claus públiques i privades s’emmagatzemen al servidor.';
$messages['formerror'] = 'Si us plau ompliu el formulari. Tots els camps són obligatoris!';
$messages['passwordsdiffer'] = 'Les contrasenyes no coincideixen!';
$messages['keygenerateerror'] = 'No s\'ha pogut generar un parell de claus';
$messages['keygeneratesuccess'] = 'S\'ha generat i importat correctament un parell de claus.';
$messages['keygennosupport'] = 'El vostre navegador web no admet la criptografia. No es pot generar un parell de claus.';
$messages['noidentselected'] = 'Heu de seleccionar almenys una identitat per a la clau!';
$messages['nonameident'] = 'La identitat ha de tenir un nom d\'usuari definit!';
$labels['newkeysize'] = 'Mida de la clau';
$labels['key2048'] = '2048 bits - per defecte';
$labels['key4096'] = '4096 bits - més segur';
PKwc�\9�D--enigma/localization/ia.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Cryptographia';
$labels['enigmacerts'] = 'Certificatos S/MIME';
$labels['enigmakeys'] = 'Claves PGP';
$labels['keysfromto'] = 'Claves $from a $to de $count';
$labels['keyname'] = 'Nomine';
$labels['keyid'] = 'ID de clave';
$labels['keyuserid'] = 'ID de usator';
$labels['keytype'] = 'Typo de clave';
$labels['fingerprint'] = 'Impression digital';
$labels['subkeys'] = 'Subclaves';
$labels['basicinfo'] = 'Information basic';
$labels['userids'] = 'Usatores additional';
$labels['typepublickey'] = 'clave public';
$labels['typekeypair'] = 'par de claves';
$labels['keyattfound'] = 'Iste message contine clave(s) PGP attachate.';
$labels['keyattimport'] = 'Importar clave(s)';
$labels['typesign'] = 'Signar';
$labels['typeencrypt'] = 'Cryptar';
$labels['typecert'] = 'Certificar';
$labels['typeauth'] = 'Authentication';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorithmo';
$labels['subkeycreated'] = 'Create';
$labels['subkeyexpires'] = 'Expira';
$labels['subkeyusage'] = 'Usage';
$labels['expiresnever'] = 'nunquam';
$labels['unknown'] = 'incognite';
$labels['uservalid'] = 'Valide';
$labels['userid'] = 'ID';
$labels['valid'] = 'valide';
$labels['supportencryption'] = 'Activar le cryptation e signatura de messages';
$labels['supportsignatures'] = 'Activar le verification de signaturas de messages';
$labels['supportdecryption'] = 'Activar le decryptation de messages';
$labels['signdefault'] = 'Signar tote le messages per option predefinite';
$labels['encryptdefault'] = 'Cryptar tote le messages per option predefinite';
$labels['attachpubkeydefault'] = 'Attachar mi clave PGP public per option predefinite';
$labels['passwordtime'] = 'Memorar le contrasignos de claves private durante';
$labels['nminutes'] = '$m minuta(s)';
$labels['wholesession'] = 'tote le session';
$labels['createkeys'] = 'Crear un nove par de claves';
$labels['importkeys'] = 'Importar clave(s)';
$labels['exportkeys'] = 'Exportar clave(s)';
$labels['keyactions'] = 'Actiones de clave...';
$labels['keyremove'] = 'Remover';
$labels['keydisable'] = 'Disactivar';
$labels['keyrevoke'] = 'Revocar';
$labels['keysend'] = 'Inviar le clave pubic in un message';
$labels['keychpass'] = 'Cambiar contrasigno';
$labels['newkeypass'] = 'Contrasigno';
$labels['newkeytype'] = 'Typo de clave';
$labels['keygenerating'] = 'Genera claves...';
$labels['encryptionoptions'] = 'Optiones de cryptation...';
$labels['encryptmsg'] = 'Cryptar iste message';
$labels['signmsg'] = 'Signar digitalmente iste message';
$labels['sendunencrypted'] = 'Inviar sin cryptation';
$labels['enterkeypasstitle'] = 'Entra le contrasigno del clave';
$labels['enterkeypass'] = 'Un contrasigno es necessari pro disblocar le clave secrete ($keyid) pro le usator: $user.';
$labels['attachpubkeymsg'] = 'Attachar mi clave public';
$labels['keyexportprompt'] = 'Includer le claves secrete in le file de claves OpenPGP a salveguardar?';
$labels['onlypubkeys'] = 'Exportar claves public solmente';
$labels['withprivkeys'] = 'Exportar claves secrete';
$labels['findkey'] = 'Cercar in servitor(es) de claves';
$labels['keyimportlabel'] = 'Importar ab file';
$labels['keyimportsearchlabel'] = 'Cercar in servitor(es) de claves';
$labels['arialabelkeyexportoptions'] = 'Optiones de exportation de claves';
$messages['sigvalid'] = 'Signatura de $sender verificate.';
$messages['sigvalidpartial'] = 'Signatura de $sender verificate, ma un parte del texto non ha essite signate.';
$messages['siginvalid'] = 'Signatura de $sender invalide.';
$messages['sigunverified'] = 'Signatura non verificate. Certificato non verificate. ID del certificato: $keyid.';
$messages['signokey'] = 'Signatura non verificate. Clave public non trovate. ID del clave: $keyid.';
$messages['sigerror'] = 'Signatura non verificate. Error interne.';
$messages['decryptok'] = 'Message decryptate.';
$messages['decrypterror'] = 'Decryptation fallite.';
$messages['decryptnokey'] = 'Decryptation fallite. Clave private non trovate. ID del clave: $keyid.';
$messages['decryptbadpass'] = 'Decryptation fallite. Contrasigno non valide.';
$messages['decryptnopass'] = 'Decryptation fallite. Contrasigno del clave requirite.';
$messages['decryptpartial'] = 'Le message ha essite decryptate, ma un parte del corpore non esseva cryptate.';
$messages['signerror'] = 'Signatura fallite.';
$messages['signnokey'] = 'Signatura fallite. Clave private non trovate.';
$messages['signbadpass'] = 'Signatura fallite. Contrasigno non valide.';
$messages['signnopass'] = 'Signatura fallite. Contrasigno del clave requirite.';
$messages['encrypterror'] = 'Cryptation fallite.';
$messages['encryptnokey'] = 'Cryptation fallite. Clave public non trovate pro $email.';
$messages['nokeysfound'] = 'Nulle clave trovate';
$messages['keynotfound'] = 'Clave non trovate!';
$messages['keyopenerror'] = 'Incapace de obtener information del clave! Error interne.';
$messages['keylisterror'] = 'Incapace de listar claves! Error interne.';
$messages['keysimportfailed'] = 'Incapace de importar clave(s)! Error interne.';
$messages['keysimportsuccess'] = 'Importation de clave(s) succedite. Importate: $new, non cambiate: $old.';
$messages['keyremoving'] = 'A remover clave(s)...';
$messages['keyremoveconfirm'] = 'Es vos secur de voler deler le clave(s) seligite?';
$messages['keyremovesuccess'] = 'Deletion del clave(s) succedite';
$messages['keyremoveerror'] = 'Incapace de deler le clave(s) seligite.';
$messages['keyimporttext'] = 'Es possibile importar clave(s) private e public o signaturas de revocation in formato "ASCII Armor".';
$messages['keyimportsearchtext'] = 'Es possibile cercar claves public per identificator, nomine de usator o adresse de e-mail e postea importar los directemente.';
$messages['formerror'] = 'Per favor, completa le formularios. Tote le campos es obligatori!';
$messages['passwordsdiffer'] = 'Le contrasignos non corresponde!';
$messages['keygenerateerror'] = 'Generation de par de claves fallite';
$messages['keygeneratesuccess'] = 'Un par de claves ha essite generate e importate con successo.';
$messages['keygennosupport'] = 'Vostre navigator del web non supporta le cryptographia. Incapace de generar un par de claves!';
$messages['noidentselected'] = 'Es necessari seliger al minus un identitate pro le clave!';
$messages['nonameident'] = 'Le identitate debe includer un nomine de usator!';
$labels['key2048'] = '2048 bits - predefinite';
$labels['key4096'] = '4096 bits - plus secur';
PKwc�\m%����enigma/localization/bs_BA.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Ime';
$labels['subkeycreated'] = 'Kreirano';
$labels['expiresnever'] = 'nikad';
$labels['unknown'] = 'nepoznato';
$labels['keychpass'] = 'Promijeni šifru';
$labels['newkeypass'] = 'Šifra';
PKwc�\�E�*�*enigma/localization/ru_RU.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Шифрование';
$labels['enigmacerts'] = 'Сертификаты S/MIME';
$labels['enigmakeys'] = 'Ключи PGP';
$labels['keysfromto'] = 'Ключи с $from по $to из $count';
$labels['keyname'] = 'Имя';
$labels['keyid'] = 'ID ключа';
$labels['keyuserid'] = 'ID пользователя';
$labels['keytype'] = 'Тип ключа';
$labels['fingerprint'] = 'Отпечаток';
$labels['subkeys'] = 'Подключи';
$labels['keyprops'] = 'Свойства ключа';
$labels['basicinfo'] = 'Базовая информация';
$labels['userids'] = 'Дополнительные ключи';
$labels['typepublickey'] = 'открытый ключ';
$labels['typekeypair'] = 'пара ключей';
$labels['keyattfound'] = 'Это сообщение содержит прикреплённый(е) PGP ключ(и).';
$labels['keyattimport'] = 'Импортировать ключ(и)';
$labels['typesign'] = 'Подписать';
$labels['typeencrypt'] = 'Зашифровать';
$labels['typecert'] = 'Удостоверить';
$labels['typeauth'] = 'Аутентификация';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Алгоритм';
$labels['subkeycreated'] = 'Создан';
$labels['subkeyexpires'] = 'Срок действия';
$labels['subkeyusage'] = 'Использование';
$labels['expiresnever'] = 'никогда';
$labels['unknown'] = 'неизвестно';
$labels['uservalid'] = 'Действительный';
$labels['userid'] = 'ID';
$labels['valid'] = 'действительный';
$labels['supportencryption'] = 'Включить шифрование и подписание сообщений';
$labels['supportsignatures'] = 'Включить проверку подписанных сообщений';
$labels['supportdecryption'] = 'Включить расшифровывание сообщений';
$labels['signdefault'] = 'Подписывать все сообщения по умолчанию';
$labels['encryptdefault'] = 'Шифровать все сообщения по умолчанию';
$labels['attachpubkeydefault'] = 'Прикрепить мой открытый ключ по умолчанию';
$labels['passwordtime'] = 'Хранить пароль закрытого ключа';
$labels['nminutes'] = '$m минут(ы)';
$labels['wholesession'] = 'весь сеанс';
$labels['createkeys'] = 'Создать новую пару ключей';
$labels['importkeys'] = 'Импортировать ключ(и)';
$labels['exportkeys'] = 'Экспортировать ключ(и)';
$labels['keyactions'] = 'Действия с ключами...';
$labels['keyremove'] = 'Удалить';
$labels['keydisable'] = 'Отключить';
$labels['keyrevoke'] = 'Отозвать';
$labels['keysend'] = 'Отправить открытый ключ в сообщении';
$labels['keychpass'] = 'Изменить пароль';
$labels['keyadd'] = 'Добавить ключ';
$labels['newkeyident'] = 'Профиль';
$labels['newkeypass'] = 'Пароль';
$labels['newkeypassconfirm'] = 'Подтвердите пароль';
$labels['newkeytype'] = 'Тип ключа';
$labels['rsa2048'] = 'RSA - 2048 бит';
$labels['rsa4096'] = 'RSA - 4096 бит';
$labels['ecckeypair'] = 'ECC (эллиптическая кривая)';
$labels['keygenerating'] = 'Создание ключей...';
$labels['encryptionoptions'] = 'Настройки шифрования...';
$labels['encryptmsg'] = 'Зашифровать это сообщение';
$labels['signmsg'] = 'Подписать это сообщение';
$labels['sendunencrypted'] = 'Отправить незашифрованным';
$labels['enterkeypasstitle'] = 'Введите фразу-пароль ключа';
$labels['enterkeypass'] = 'Фраза-пароль нужна для разблокировки секретного ключа ($keyid) пользователя: $user.';
$labels['attachpubkeymsg'] = 'Прикрепить мой открытый ключ';
$labels['keyexportprompt'] = 'Вы хотите включить закрытые ключи в файл сохранения ключей OpenPGP?';
$labels['onlypubkeys'] = 'Экспортировать только открытые ключи';
$labels['withprivkeys'] = 'Экспортировать закрытые ключи';
$labels['findkey'] = 'Поиск на сервере(-ах) ключей';
$labels['keyimportlabel'] = 'Импортировать из файла';
$labels['keyimportsearchlabel'] = 'Поиск на сервере(-ах) ключей';
$labels['managekeys'] = 'Управление ключами PGP';
$labels['identitymatchingprivkeys'] = 'У вас есть $nr подходящих закрытых PGP ключей, хранящиеся на вашей связке ключей:';
$labels['identitynoprivkeys'] = 'У этого идентификатора отправителя еще нет закрытого ключа PGP, хранящегося в вашей связке ключей.';
$labels['arialabelkeyexportoptions'] = 'Параметры экспорта ключей';
$labels['arialabelkeysearchform'] = 'Форма поиска ключей';
$labels['arialabelkeyoptions'] = 'Параметры ключа';
$messages['sigvalid'] = 'Проверенная подпись $sender.';
$messages['sigvalidpartial'] = 'Проверенная подпись $sender, но часть сообщения не подписана.';
$messages['siginvalid'] = 'Недействительная подпись $sender.';
$messages['sigunverified'] = 'Непроверенная подпись. Сертификат не проверен. ID сертификата: $keyid.';
$messages['signokey'] = 'Непроверенная подпись. Открытый ключ не найден. ID ключа: $keyid.';
$messages['sigerror'] = 'Непроверенная подпись. Внутренняя ошибка.';
$messages['decryptok'] = 'Сообщение расшифровано.';
$messages['decrypterror'] = 'Сбой расшифровки.';
$messages['decryptnokey'] = 'Сбой расшифровки. Закрытый ключ не найден. ID ключа: $keyid.';
$messages['decryptnomdc'] = 'Сообщение не расшифровано. Нарушена целостность сообщения.';
$messages['decryptbadpass'] = 'Сбой расшифровки. Неверный пароль.';
$messages['decryptnopass'] = 'Сбой расшифровки. Требуется ключ пароля.';
$messages['decryptpartial'] = 'Сообщение расшифровано, но часть сообщения не была зашифрована.';
$messages['signerror'] = 'Сбой подписания.';
$messages['signnokey'] = 'Сбой подписания. Закрытый ключ не найден.';
$messages['signbadpass'] = 'Сбой подписания. Неверный пароль.';
$messages['signnopass'] = 'Сбой подписания. Требуется ключ пароля.';
$messages['encrypterror'] = 'Сбой шифрования.';
$messages['encryptnokey'] = 'Сбой шифрования. Не найден открытый ключ для $email.';
$messages['encryptnoprivkey'] = 'Сбой шифрования. Не найден закрытый ключ.';
$messages['nokeysfound'] = 'Ключи не найдены';
$messages['keynotfound'] = 'Ключ не найден!';
$messages['keyopenerror'] = 'Невозможно получить информацию о ключе! Внутренняя ошибка.';
$messages['keylisterror'] = 'Невозможно составить список ключей! Внутренняя ошибка.';
$messages['keysimportfailed'] = 'Невозможно импортировать ключ(и)! Внутренняя ошибка.';
$messages['keysimportsuccess'] = 'Ключ(и) успешно импортирован(ы) . Импортировано: $new, без изменений: $old.';
$messages['keyremoving'] = 'Удаление ключа(ей)...';
$messages['keyremoveconfirm'] = 'Вы уверенны, что хотите удалить выделенный(е) ключ(и)?';
$messages['keyremovesuccess'] = 'Ключ(и) успешно удален(ы)';
$messages['keyremoveerror'] = 'Невозможно удалить выделенный(е) ключ(и).';
$messages['keyimporttext'] = 'Вы можете импортировать закрытый и открытый ключ(и) или подписи отзыва в формате ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Вы можете искать открытые ключи по идентификатору ключа, имени пользователя или адресу электронной почты, а затем импортировать их напрямую.';
$messages['keystoragenotice'] = 'Все открытые и закрытые ключи сохранены на сервере.';
$messages['formerror'] = 'Заполните форму. Все поля обязательны!';
$messages['passwordsdiffer'] = 'Пароли не совпадают!';
$messages['keygenerateerror'] = 'Не удалось создать пару ключей';
$messages['keygeneratesuccess'] = 'Пара ключей создана и успешно импортирована.';
$messages['keygennosupport'] = 'Ваш браузер не поддерживает шифрование. Невозможно создать пару ключей!';
$messages['noidentselected'] = 'Вы должны выбрать по крайней мере один профиль для ключа!';
$messages['nonameident'] = 'У профиля должно быть определено имя пользователя!';
$labels['newkeysize'] = 'Длина ключа';
$labels['key2048'] = '2048 бит - по умолчанию';
$labels['key4096'] = '4096 бит - более безопасный';
PKwc�\N���enigma/localization/fa_IR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'رمزگذاری';
$labels['keyname'] = 'نام';
$labels['keyid'] = 'کلید شناسه';
$labels['keyuserid'] = 'شناسه‌ی کاربری';
$labels['typeencrypt'] = 'رمزگذاری';
$labels['subkeycreated'] = 'ایجاد شده';
$labels['expiresnever'] = 'هرگز';
$labels['unknown'] = 'ناشناخته';
$labels['keychpass'] = 'تغییر گذرواژه';
$labels['newkeypass'] = 'گذرواژه';
PKwc�\�1Z�>>enigma/localization/is_IS.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Dulritun';
$labels['enigmacerts'] = 'S/MIME skilríki';
$labels['enigmakeys'] = 'PGP-lyklar';
$labels['keysfromto'] = 'Dulritunarlyklar $from til $to af $count';
$labels['keyname'] = 'Heiti';
$labels['keyid'] = 'Auðkenni lykils';
$labels['keyuserid'] = 'Notandaauðkenni';
$labels['keytype'] = 'Tegund dulritunarlykils';
$labels['fingerprint'] = 'Fingrafar';
$labels['subkeys'] = 'Undirlyklar';
$labels['keyprops'] = 'Eiginleikar lykils';
$labels['basicinfo'] = 'Grunnupplýsingar';
$labels['userids'] = 'Viðbótarnotendur';
$labels['typepublickey'] = 'dreyfilykill';
$labels['typekeypair'] = 'lyklapar';
$labels['keyattimport'] = 'Flytja inn lykil/lykla';
$labels['typesign'] = 'Undirrita';
$labels['typeencrypt'] = 'Dulrita';
$labels['typecert'] = 'Votta';
$labels['typeauth'] = 'Auðkenning';
$labels['subkeyid'] = 'Auðkenni';
$labels['subkeyalgo'] = 'Reiknirit';
$labels['subkeycreated'] = 'Búið til';
$labels['subkeyexpires'] = 'Rennur út';
$labels['subkeyusage'] = 'Notkun';
$labels['expiresnever'] = 'aldrei';
$labels['unknown'] = 'óþekkt';
$labels['uservalid'] = 'Gilt';
$labels['userid'] = 'Auðkenni';
$labels['valid'] = 'gilt';
$labels['nminutes'] = '$m mínútur';
$labels['createkeys'] = 'Búa til nýtt lyklapar';
$labels['importkeys'] = 'Flytja inn lykil/lykla';
$labels['exportkeys'] = 'Flytja út lykil/lykla';
$labels['keyremove'] = 'Fjarlægja';
$labels['keydisable'] = 'Gera óvirkt';
$labels['keyrevoke'] = 'Afturkalla';
$labels['keychpass'] = 'Breyta lykilorði';
$labels['newkeyident'] = 'Auðkenni';
$labels['newkeypass'] = 'Lykilorð';
$labels['newkeypassconfirm'] = 'Staðfestu  lykilorð';
$labels['newkeytype'] = 'Tegund dulritunarlykils';
$labels['keygenerating'] = 'Útbý dulritunarlykla...';
$labels['encryptmsg'] = 'Dulrita þessi skilaboð';
$labels['keyimportlabel'] = 'Flytja inn úr skrá';
$labels['managekeys'] = 'Sýsla með PGP-lykla';
$messages['signerror'] = 'Undirritun mistókst.';
$labels['newkeysize'] = 'Stærð lykils';
$labels['key2048'] = '2048 bita - sjálfgefið';
$labels['key4096'] = '4096 bita - öruggara';
PKwc�\��ӆ��enigma/localization/vi_VN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Tên';
$labels['subkeycreated'] = 'Được tạo';
$labels['expiresnever'] = 'không bao giờ';
$labels['unknown'] = 'Không rõ';
$labels['newkeypass'] = 'Mật khẩu';
PKwc�\�����enigma/localization/th_TH.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'ชื่อ';
$labels['keyid'] = 'คีย์ไอดี';
$labels['typeencrypt'] = 'เข้ารหัส';
$labels['subkeycreated'] = 'สร้าง';
$labels['expiresnever'] = 'ไม่ใช้';
$labels['unknown'] = 'ไม่ทราบ';
$labels['keychpass'] = 'เปลี่ยนรหัสผ่าน';
$labels['newkeypass'] = 'รหัสผ่าน';
PKwc�\�}��enigma/localization/ar_SA.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'التشفير';
$labels['enigmacerts'] = 'شهادات S / MIME';
$labels['enigmakeys'] = 'مفاتيح PGP';
$labels['keysfromto'] = 'مفاتيح $from إلى $to من $count';
$labels['keyname'] = 'الاسم';
$labels['keyid'] = 'مفتاح المعرّف';
$labels['keyuserid'] = 'معرّف المستخدم';
$labels['keytype'] = 'نوع المفتاح';
$labels['fingerprint'] = 'بصمة';
$labels['subkeys'] = 'مفاتيح فرعية';
$labels['keyprops'] = 'الخصائص الرئيسية';
$labels['basicinfo'] = 'المعلومات العامة';
$labels['userids'] = 'مستخدمون إضافيون';
$labels['typepublickey'] = 'المفتاح العام';
$labels['typekeypair'] = 'اقتران المفتاح';
$labels['keyattfound'] = 'تحتوي هذه الرسالة على مفتاح (مفاتيح) PGP مرفق.';
$labels['keyattimport'] = 'استيراد مفتاح (مفاتيح)';
$labels['typesign'] = 'علامة';
$labels['typeencrypt'] = 'تشفير';
$labels['typecert'] = 'تصديق';
$labels['typeauth'] = 'المصادقة';
$labels['subkeyid'] = 'المُعَرّف';
$labels['subkeyalgo'] = 'الخوارزمية';
$labels['subkeycreated'] = 'أُنشئ في';
$labels['subkeyexpires'] = 'تنتهي';
$labels['subkeyusage'] = 'استعمال';
$labels['expiresnever'] = 'أبداً';
$labels['unknown'] = 'مجهول';
$labels['uservalid'] = 'صالح';
$labels['userid'] = 'المُعَرّف';
$labels['valid'] = 'صالح';
$labels['supportencryption'] = 'تفعيل تشفير الرسائل والتوقيع';
$labels['supportsignatures'] = 'تفعيل التحقق من تواقيع الرسائل';
$labels['supportdecryption'] = 'تفعيل فك تشفير الرسالة';
$labels['signdefault'] = 'قم بتسجيل جميع الرسائل بشكل افتراضي';
$labels['importkeys'] = 'استيراد مفتاح (مفاتيح)';
$labels['keychpass'] = 'تغيير كلمة المرور';
$labels['newkeypass'] = 'كلمة المرور';
$labels['newkeytype'] = 'نوع المفتاح';
$labels['arialabelkeyexportoptions'] = 'خيارات تصدير المفاتيح';
$messages['decryptbadpass'] = 'فشل فك التشفير. رمز مرور خاطئ.';
$messages['signbadpass'] = 'فشل تسجيل الدخول. كلمة المرور خاطئة.';
$messages['nonameident'] = 'يجب أن يكون للهوية اسم مستخدم محدد!';
PKwc�\�1���enigma/localization/ms_MY.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'tidak pernah';
$labels['unknown'] = 'tidak diketahui';
$labels['newkeypass'] = 'Katalaluan';
PKwc�\�!HU		enigma/localization/az_AZ.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Ad';
$labels['keyid'] = 'Açar ID';
$labels['typeencrypt'] = 'Şifrələ';
$labels['subkeycreated'] = 'Yaradılma tarixi';
$labels['expiresnever'] = 'heç vaxt';
$labels['unknown'] = 'naməlum';
$labels['newkeypass'] = 'Şifrə';
PKwc�\V��|enigma/localization/id_ID.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Enkripsi';
$labels['enigmacerts'] = 'Sertifikat S/MIME';
$labels['enigmakeys'] = 'Kunci PGP';
$labels['keysfromto'] = 'Kunci $from sampai $to dari $count';
$labels['keyname'] = 'Nama';
$labels['keyid'] = 'ID Kunci';
$labels['keyuserid'] = 'ID Pengguna';
$labels['keytype'] = 'Tipe kunci';
$labels['fingerprint'] = 'Sidik jari';
$labels['subkeys'] = 'Subkunci';
$labels['keyprops'] = 'Properti untuk kunci';
$labels['basicinfo'] = 'Informasi dasar';
$labels['userids'] = 'Pengguna Tambahan';
$labels['typepublickey'] = 'kunci publik';
$labels['typekeypair'] = 'kunci pasangan';
$labels['keyattfound'] = 'Pesan ini memuat kunci PGP yang dilampirkan.';
$labels['keyattimport'] = 'Impor kunci';
$labels['typesign'] = 'Tandatangani';
$labels['typeencrypt'] = 'Enkripsi';
$labels['typecert'] = 'Sertifikasikan';
$labels['typeauth'] = 'Otentifikasi';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritma';
$labels['subkeycreated'] = 'Dibuat';
$labels['subkeyexpires'] = 'Kedaluarsa';
$labels['subkeyusage'] = 'Penggunaan';
$labels['expiresnever'] = 'tidak pernah';
$labels['unknown'] = 'tak diketahui';
$labels['uservalid'] = 'Valid';
$labels['userid'] = 'ID';
$labels['valid'] = 'valid';
$labels['supportencryption'] = 'Fungsikan enkripsi dan penandatanganan pesan';
$labels['supportsignatures'] = 'Fungsikan verifikasi tanda tangan pesan';
$labels['supportdecryption'] = 'Fungsikan dekripsi pesan';
$labels['signdefault'] = 'Tandatangani semua pesan secara baku';
$labels['encryptdefault'] = 'Enkripsikan semua pesan secara baku';
$labels['attachpubkeydefault'] = 'Lampirkan kunci PGP publik saya secara baku';
$labels['passwordtime'] = 'Simpan kata sandi kunci rahasia selama';
$labels['nminutes'] = '$m menit';
$labels['wholesession'] = 'seluruh sesi';
$labels['createkeys'] = 'Buat pasangan kunci baru';
$labels['importkeys'] = 'Impor kunci';
$labels['exportkeys'] = 'Ekspor kunci';
$labels['keyactions'] = 'Aksi kunci...';
$labels['keyremove'] = 'Hapus';
$labels['keydisable'] = 'Nonaktifkan';
$labels['keyrevoke'] = 'Cabut';
$labels['keysend'] = 'Kirim kunci publik dalam pesan';
$labels['keychpass'] = 'Ubah kata sandi';
$labels['newkeyident'] = 'Identitas';
$labels['newkeypass'] = 'Password';
$labels['newkeypassconfirm'] = 'Konfirmasi password / kata kunci';
$labels['newkeytype'] = 'Tipe kunci';
$labels['keygenerating'] = 'Membuat kunci...';
$labels['encryptionoptions'] = 'Opsi enkripsi...';
$labels['encryptmsg'] = 'Enkripsikan pesan ini';
$labels['signmsg'] = 'Tandatantani pesan ini';
$labels['sendunencrypted'] = 'Kirim dengan tidak di enskripsi';
$labels['enterkeypasstitle'] = 'Masukkan frasa sandi kunci';
$labels['enterkeypass'] = 'Frasa sandi diperlukan untuk membuka kunci rahasia ($keyid) untuk pengguna: $user.';
$labels['attachpubkeymsg'] = 'Lampirkan kunci publik saya';
$labels['keyexportprompt'] = 'Apakah Anda ingin menyertakan kunci rahasia dalam berkas kunci OpenPGP yang disimpan?';
$labels['onlypubkeys'] = 'Ekspor Kunci Publik Saja';
$labels['withprivkeys'] = 'Ekspor Kunci Rahasia';
$labels['findkey'] = 'Cari pada server kunci';
$labels['keyimportlabel'] = 'Impor dari berkas';
$labels['keyimportsearchlabel'] = 'Cari pada server kunci';
$labels['arialabelkeyexportoptions'] = 'Opsi ekspor kunci';
$messages['sigvalid'] = 'Tanda tangan terverifikasi dari $sender.';
$messages['sigvalidpartial'] = 'Tanda tangan terverifikasi dari $sender, tapi sebagian pesan tidak ditandatangani.';
$messages['siginvalid'] = 'Tanda tangan tak valid dari $sender.';
$messages['sigunverified'] = 'Tanda tangan tak terverifikasi. Sertifikat tak terverifikasi. ID sertifikat: $keyid.';
$messages['signokey'] = 'Tanda tangan tak terverifikasi. Kunci publik tak ditemukan. ID kunci: $keyid.';
$messages['sigerror'] = 'Tanda tangan tak terverifikasi. Kesalahan internal.';
$messages['decryptok'] = 'Pesan didekripsi.';
$messages['decrypterror'] = 'Dekripsi gagal.';
$messages['decryptnokey'] = 'Dekripsi gagal. Kunci privat tak ditemukan. ID kunci: $keyid.';
$messages['decryptbadpass'] = 'Dekripsi gagal. Kata sandi tidak valid.';
$messages['decryptnopass'] = 'Dekripsi gagal. Kata sandi kunci diperlukan.';
$messages['decryptpartial'] = 'Pesan didekripsi, tapi sebagian isi tidak dienkripsi.';
$messages['signerror'] = 'Penandatanganan gagal.';
$messages['signnokey'] = 'Penandatanganan gagal. Kunci privat tak ditemukan.';
$messages['signbadpass'] = 'Penandatanganan gagal. Kata sandi tidak valid.';
$messages['signnopass'] = 'Penandatanganan gagal. Kata sandi kunci diperlukan.';
$messages['encrypterror'] = 'Enkripsi gagal.';
$messages['encryptnokey'] = 'Enkripsi gagal. Kunci publik tak ditemukan untuk $email.';
$messages['nokeysfound'] = 'Tidak ada kunci yang ditemukan';
$messages['keynotfound'] = 'Kunci tidak ditemukan!';
$messages['keyopenerror'] = 'Tidak bisa memperoleh informasi kunci! Kesalahan internal.';
$messages['keylisterror'] = 'Tidak bisa membuat daftar kunci! Kesalahan internal.';
$messages['keysimportfailed'] = 'Tidak bisa mengimpor kunci! Kesalahan internal.';
$messages['keysimportsuccess'] = 'Kunci sukses diimpor. Diimpor: $new, tidak berubah: $old.';
$messages['keyremoving'] = 'Menghapus kunci...';
$messages['keyremoveconfirm'] = 'Anda yakin hendak menghapus kunci yang dipilih?';
$messages['keyremovesuccess'] = 'Kunci sukses dihapus';
$messages['keyremoveerror'] = 'Tidak bisa menghapus kunci yang dipilih.';
$messages['keyimporttext'] = 'Anda bisa mengimpor kunci privat dan publik atau tanda tangan pencabutan dalam format ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Anda dapat mencari kunci publik berdasarkan identifier kunci, nama pengguna, atau alamat surel, lalu secara langsung mengimpor mereka.';
$messages['formerror'] = 'Harap isi formulir. Semua ruas diperlukan!';
$messages['passwordsdiffer'] = 'Kata sandi tidak cocok!';
$messages['keygenerateerror'] = 'Gagal membuat suatu pasangan kunci';
$messages['keygeneratesuccess'] = 'Suatu pasangan kunci dibuat dan sukses diimpor.';
$messages['keygennosupport'] = 'Peramban web Anda tidak mendukung kriptografi. Tidak bisa membuat suatu pasangan kunci!';
$messages['noidentselected'] = 'Anda mesti memilih paling tidak satu identitas untuk kunci!';
$messages['nonameident'] = 'Identitas mesti mengandung nama pengguna!';
$labels['newkeysize'] = 'Ukuran kunci';
$labels['key2048'] = '2048 bit - baku';
$labels['key4096'] = '4096 bit - lebih aman';
PKwc�\���Tppenigma/localization/tzl.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Nómina';
$labels['unknown'] = 'inschì';
$labels['newkeypass'] = 'Teßera';
PKwc�\�et!t!enigma/localization/hu_HU.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Titkosítás';
$labels['enigmacerts'] = 'S/MIMI Tanusitványok';
$labels['enigmakeys'] = 'PGP Kulcsok';
$labels['keysfromto'] = 'Kulcsok $from - $to / $count ';
$labels['keyname'] = 'Név';
$labels['keyid'] = 'Kulcs ID';
$labels['keyuserid'] = 'Felhasználó ID';
$labels['keytype'] = 'Kulcs tipus';
$labels['fingerprint'] = 'Ujjlenyomat';
$labels['subkeys'] = 'Alkulcsok';
$labels['keyprops'] = 'Kulcs tulajdnonságai';
$labels['basicinfo'] = 'Alap információk';
$labels['userids'] = 'További felhasználok';
$labels['typepublickey'] = 'nyilvános kulcs';
$labels['typekeypair'] = 'kulcspár';
$labels['keyattfound'] = 'Ez az űzenet tartalmaz csatolt PGP kulcso(ka)t';
$labels['keyattimport'] = 'Kulcs(ok) importálása';
$labels['typesign'] = 'Aláírás';
$labels['typeencrypt'] = 'Titkosít';
$labels['typecert'] = 'Igazolni';
$labels['typeauth'] = 'Hitelesítés';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmus';
$labels['subkeycreated'] = 'Létrehozva';
$labels['subkeyexpires'] = 'Lejár';
$labels['subkeyusage'] = 'Felhasználás';
$labels['expiresnever'] = 'soha';
$labels['unknown'] = 'ismeretlen';
$labels['uservalid'] = 'Érvényes';
$labels['userid'] = 'ID';
$labels['valid'] = 'érvényes';
$labels['supportencryption'] = 'Az üzenet titkosításának és aláíásának engedélyezése';
$labels['supportsignatures'] = 'Az űzenet álírásainak ellenörzésének engedélyezése';
$labels['supportdecryption'] = 'Az üzenet ki-titkosításának engedélyezése';
$labels['signdefault'] = 'Alapértelemzetten írja alá az üzeneteket';
$labels['encryptdefault'] = 'Titkosítsa az összes üzenetet alapértelemzetten';
$labels['attachpubkeydefault'] = 'Alapértelmezetten csatolja a publikus PGP kulcsomat.';
$labels['passwordtime'] = 'Jegyezze meg a privát kulcs jelszavát a következöhöz';
$labels['nminutes'] = '$m perc';
$labels['wholesession'] = 'az egész munkamenet';
$labels['createkeys'] = 'Új kulcs pár létrehozása';
$labels['importkeys'] = 'Kulcsok importálása';
$labels['exportkeys'] = 'Kulcs(ok) exportálása';
$labels['keyactions'] = 'Kulcs műveletek';
$labels['keyremove'] = 'Eltávolítás';
$labels['keydisable'] = 'Tilt';
$labels['keyrevoke'] = 'Visszavon';
$labels['keysend'] = 'Küld el a nyilvános kulcsot az üzenetben';
$labels['keychpass'] = 'Jelszó módosítás';
$labels['keyadd'] = 'Kulcs hozzáadása';
$labels['newkeyident'] = 'Azonosító';
$labels['newkeypass'] = 'Jelszó';
$labels['newkeypassconfirm'] = 'Jelszó  megerősítése';
$labels['newkeytype'] = 'Kulcs tipus';
$labels['rsa2048'] = 'RSA - 2048 bit';
$labels['rsa4096'] = 'RSA - 4096 bit';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Kulcsok generálása…';
$labels['encryptionoptions'] = 'Titkosítási beállítások...';
$labels['encryptmsg'] = 'Titkosítsa ezt az üzenetet';
$labels['signmsg'] = 'Ennek az üzenetnek  a digtális aláírása';
$labels['sendunencrypted'] = 'Küldés titkosítatlanul';
$labels['enterkeypasstitle'] = 'Írd be a jelmondatot';
$labels['enterkeypass'] = 'Jelmondat(passphrase) szükséges a titkos kulcs ($keyid)  felhasznlóhoz ($user) feloldásához. ';
$labels['attachpubkeymsg'] = 'A nyilvános kulcsom csatolása';
$labels['keyexportprompt'] = 'A mentett OpenPGP kulcsoknál legyenek-e tárolva a titkos kulcsok is?';
$labels['onlypubkeys'] = 'Csak a nyilvános kulcsok exportálása';
$labels['withprivkeys'] = 'Titkos kucsok exportálása';
$labels['findkey'] = 'Keresés a kulcs szerver(ek)en';
$labels['keyimportlabel'] = 'Importálás fájlból';
$labels['keyimportsearchlabel'] = 'Keresés a kulcs szerver(ek)en';
$labels['managekeys'] = 'PGP kulcsok kezelése';
$labels['identitymatchingprivkeys'] = '$nr egyező PGP privát kulcs van  a kulcskarikádon: ';
$labels['identitynoprivkeys'] = 'Ennek a küldőnek még nincs meg a PGP privát kulcsa a kulcskarikádon.';
$labels['arialabelkeyexportoptions'] = 'Kulcsok exportálásához opciók';
$labels['arialabelkeysearchform'] = 'Kulcs kereső űrlap';
$labels['arialabelkeyoptions'] = 'Kulcs opciók';
$messages['sigvalid'] = 'A $sender feladó aláírása ellenőrízve.';
$messages['sigvalidpartial'] = 'A $sender feladó aláírása ellenőrízve, de részei az üzenetnek nem voltak aláírva.';
$messages['siginvalid'] = 'Érvénytelen aláírás a következő feladótól: $sender';
$messages['sigunverified'] = 'Nem ellenörzött aláírás. A tanúsítvány nem ellenőrzött. Tanusítvány ID: $keyid.';
$messages['signokey'] = 'Nem ellenörzött aláírás. Nyilvános kulcs nem található. Kulcs ID: $keyid.';
$messages['sigerror'] = 'Nem ellenörzött aláírás. Belső hiba.';
$messages['decryptok'] = 'Üzenet ki-tikosítva.';
$messages['decrypterror'] = 'Visszafejtés sikertelen.';
$messages['decryptnokey'] = 'Visszafejtés sikertelen. Nyilvános nem található. Kulcs ID: $keyid.';
$messages['decryptnomdc'] = 'Visszafejtás átugorva. Az üzenet integritása nincs védve.';
$messages['decryptbadpass'] = 'Visszafejtés sikertelen. Hibás jelszó.';
$messages['decryptnopass'] = 'Visszafejtés sikertelen. A kulcshoz jelszó kell.';
$messages['decryptpartial'] = 'Visszafejtés sikeres, de néhány része az üzenetnek nem volt titkosítva.';
$messages['signerror'] = 'Aláírás sikertelen.';
$messages['signnokey'] = 'Aláírás sikertelen. Nyilvános kulcs nem található.';
$messages['signbadpass'] = 'Aláírás sikertelen. Hibás jelszó.';
$messages['signnopass'] = 'Aláírás sikertelen. A kulcshoz jelszó kell.';
$messages['encrypterror'] = 'Titkosítás sikertelen.';
$messages['encryptnokey'] = 'Titkosítás sikertelen. Nyilvás kulcs nem található a következőhöz: $email.';
$messages['encryptnoprivkey'] = 'A titkosítás sikertelen. A magánkulcs nem található.';
$messages['nokeysfound'] = 'Nem  találhatóak kulcsok';
$messages['keynotfound'] = 'A kulcs nem található!';
$messages['keyopenerror'] = 'A kulcs információk lekérésés nem lehetséges. Belső hiba.';
$messages['keylisterror'] = 'A kulcsok listázása nem sikerült. Belső hiba.';
$messages['keysimportfailed'] = 'A kulcs(ok) importálása sikertlelen. Belső hiba.';
$messages['keysimportsuccess'] = 'A kulcs(ok) importálása sikeres. Importálva: $new, változatlan: $old.';
$messages['keyremoving'] = 'Kulcs(ok) eltávolítása...';
$messages['keyremoveconfirm'] = 'Biztosan törölni szeretnéd a kiválasztott kulcso(ka)t?';
$messages['keyremovesuccess'] = 'A kulcs(ok) sikeresen törölve';
$messages['keyremoveerror'] = 'Nem sikerült a kiválasztott kulcso(ka)t törölni.';
$messages['keyimporttext'] = 'Importálhatod a privát és nyilvános kulcsodat vagy a visszavonási aláírásokatr ASCII-Armor formátumban.';
$messages['keyimportsearchtext'] = 'A publikus kulcsokat keresheted az azonsító, a felhasználó név vagy a email cím alapján, majd közvetlenül beimportálhatod.';
$messages['keystoragenotice'] = 'Az összes publikus és privát kulcs a szerveren van tárolva.';
$messages['formerror'] = 'Tőltsd ki az ürlapot. Minden mező kitöltése kötelező!';
$messages['passwordsdiffer'] = 'A jelszavak nem egyeznek!';
$messages['keygenerateerror'] = 'Nem sikerült a kulcs-pár létrehozása';
$messages['keygeneratesuccess'] = 'A kulcs-pár létrejött és sikeresen beimportálódott.';
$messages['keygennosupport'] = 'A böngésződ nem támogatja a titkosítást. A kulcs-pár nem hozható létre!';
$messages['noidentselected'] = 'Ki kell választanod legalább egy identitást a kulcshoz!';
$messages['nonameident'] = 'Egy identitásnak kötelező felhasználó nevet beállítani!';
$labels['newkeysize'] = 'Kulcs méret';
$labels['key2048'] = '2048 bit - alapértelemzett';
$labels['key4096'] = '4096 bit - biztonságosabb';
PKwc�\��!llenigma/localization/ro_RO.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Criptare';
$labels['enigmacerts'] = 'Certificate S/MIME';
$labels['enigmakeys'] = 'Chei PGP';
$labels['keysfromto'] = 'Cheile de la $from la $to din $count';
$labels['keyname'] = 'Nume';
$labels['keyid'] = 'ID Cheie';
$labels['keyuserid'] = 'ID Utilizator';
$labels['keytype'] = 'Tip cheie';
$labels['fingerprint'] = 'Amprentă';
$labels['subkeys'] = 'Subchei';
$labels['basicinfo'] = 'Informații de bază';
$labels['userids'] = 'Utilizatori adiționali';
$labels['typepublickey'] = 'cheie publică';
$labels['typekeypair'] = 'cheie pereche';
$labels['keyattfound'] = 'Acest mesaj conține chei PGP  atașate.';
$labels['keyattimport'] = 'Importă chei';
$labels['typesign'] = 'Semnează';
$labels['typeencrypt'] = 'Criptează';
$labels['typecert'] = 'Certifică';
$labels['typeauth'] = 'Autentificare';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritm';
$labels['subkeycreated'] = 'Creat la';
$labels['subkeyexpires'] = 'Expiră la';
$labels['subkeyusage'] = 'Folosire';
$labels['expiresnever'] = 'niciodată';
$labels['unknown'] = 'necunoscut';
$labels['uservalid'] = 'Valid';
$labels['userid'] = 'ID';
$labels['valid'] = 'valid';
$labels['supportencryption'] = 'Activează criptare și semnare mesaj';
$labels['supportsignatures'] = 'Activează verificare semnături mesaj';
$labels['supportdecryption'] = 'Activează decriptare mesaj';
$labels['signdefault'] = 'Semnează toate mesajele în mod prestabilit';
$labels['encryptdefault'] = 'Criptează toate mesajele în mod prestabilit';
$labels['attachpubkeydefault'] = 'Atașează cheia mea publică PGP implicit';
$labels['passwordtime'] = 'Păstrează parola cheii private pentru';
$labels['nminutes'] = '$m minut(e)';
$labels['wholesession'] = 'toată sesiunea';
$labels['createkeys'] = 'Creează cheie pereche nouă';
$labels['importkeys'] = 'Importă chei(e)';
$labels['exportkeys'] = 'Expertă chei(e)';
$labels['keyactions'] = 'Acțiuni cheie';
$labels['keyremove'] = 'Elimină';
$labels['keydisable'] = 'Dezactivează';
$labels['keyrevoke'] = 'Revocă';
$labels['keysend'] = 'Trimite cheie publică în mesaj';
$labels['keychpass'] = 'Schimbă parola';
$labels['newkeypass'] = 'Parolă';
$labels['newkeytype'] = 'Tip cheie';
$labels['keygenerating'] = 'Se generează cheile...';
$labels['encryptionoptions'] = 'Opțiuni criptare';
$labels['encryptmsg'] = 'Criptează acest mesaj';
$labels['signmsg'] = 'Semnează digital acest mesaj';
$labels['enterkeypasstitle'] = 'Introdu fraza de acces cheie';
$labels['enterkeypass'] = 'O frază de acces este necesară pentru a debloca cheia secretă ($keyid) pentru utilizatorul: $user.';
$labels['attachpubkeymsg'] = 'Atașează cheia mea publică';
$labels['keyexportprompt'] = 'Vrei să incluzi cheile secrete în fișierul de chei OpenPGP salvat?';
$labels['onlypubkeys'] = 'Exportă doar Cheile Publice';
$labels['withprivkeys'] = 'Exportă Cheile Secrete';
$labels['findkey'] = 'Caută în serverele de chei';
$labels['keyimportlabel'] = 'Importă din fișier';
$labels['keyimportsearchlabel'] = 'Caută în serverele de chei';
$labels['arialabelkeyexportoptions'] = 'Opțiuni export chei';
$messages['sigvalid'] = 'Semnătură $sender verificată.';
$messages['sigvalidpartial'] = 'Semnătură $sender verificată, dar parte a mesajului nu a fost semnat.';
$messages['siginvalid'] = 'Semnătură nevalidă de la $sender.';
$messages['sigunverified'] = 'Semnătură neverificată. Certificat neverificat. ID Certificat: $keyid.';
$messages['signokey'] = 'Semnătură neverificată. Cheie publică negăsită. ID Cheie: $keyid.';
$messages['sigerror'] = 'Semnătura neconfirmată. Eroare internă.';
$messages['decryptok'] = 'Mesajul a fost decriptat.';
$messages['decrypterror'] = 'Decriptarea a eșuat.';
$messages['decryptnokey'] = 'Decriptarea a eșuat. Cheie privată negăsită. ID Cheie: $keyid.';
$messages['decryptbadpass'] = 'Decriptarea a eșuat. Parolă nevalidă.';
$messages['decryptnopass'] = 'Decriptarea a eșuat. Parola este obligatorie.';
$messages['decryptpartial'] = 'Mesaj decriptat, dar parte a mesajului nu a fost criptat.';
$messages['signerror'] = 'Semnarea a eșuat.';
$messages['signnokey'] = 'Semnarea a eșuat. Cheia privată nu a fost găsită.';
$messages['signbadpass'] = 'Semnarea a eșuat. Parolă nevalidă.';
$messages['signnopass'] = 'Semnarea a eșuat. Parolă cheie necesară.';
$messages['encrypterror'] = 'Criptarea a eșuat.';
$messages['encryptnokey'] = 'Criptarea a eșuat. Cheia publică nu a fost găsită pentru $email.';
$messages['nokeysfound'] = 'Nici o cheie găsită';
$messages['keynotfound'] = 'Cheia nu a fost găsită!';
$messages['keyopenerror'] = 'Imposibil de preluat informații cheie! Eroare internă.';
$messages['keylisterror'] = 'Imposibil de afișat chei! Eroare internă.';
$messages['keysimportfailed'] = 'Imposibil de importat chei(e)! Eroare internă.';
$messages['keysimportsuccess'] = 'Chei importate cu succes. Importate: $new, neschimbate: $old.';
$messages['keyremoving'] = 'Se elimină cheile...';
$messages['keyremoveconfirm'] = 'Ești sigur că vrei să ștergi cheile selectate?';
$messages['keyremovesuccess'] = 'Chei eliminate cu succes';
$messages['keyremoveerror'] = 'Imposibil de șters cheile selectate.';
$messages['keyimporttext'] = 'Poți importa chei private și publice sau semnături de revocare în format ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Poți căuta chei publice după identificatorul de cheie, numele de utilizator sau adresa de e-mail și apoi le poți importa direct.';
$messages['formerror'] = 'Te rog completează formularul. Toate câmpurile sunt necesare!';
$messages['passwordsdiffer'] = 'Parolele nu se potrivesc!';
$messages['keygenerateerror'] = 'Nu s-a putut genera cheia pereche';
$messages['keygeneratesuccess'] = 'Cheia pereche a fost generată și importată cu succes.';
$messages['keygennosupport'] = 'Browserul dvs. web nu acceptă criptografia. Imposibil de generat cheia pereche!';
$messages['noidentselected'] = 'Trebuie sa alegi cel puțin o identitate pentru cheie!';
$messages['nonameident'] = 'Identitatea trebuie să aibă definit un nume de utilizator!';
$labels['key2048'] = '2048 biți - implicit';
$labels['key4096'] = '4096 biți - mult mai sigur';
PKwc�\�қ�enigma/localization/eo.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'Kreita';
$labels['expiresnever'] = 'neniam';
$labels['unknown'] = 'nekonata';
$labels['newkeypass'] = 'Pasvorto';
PKwc�\�� M��enigma/localization/bn_BD.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'কখোনোই না';
$labels['unknown'] = 'অজানা';
$labels['newkeypass'] = 'গোপোন শব্দ (password)';
PKwc�\��&�!�!enigma/localization/fr_FR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Chiffrement';
$labels['enigmacerts'] = 'Certificats S/MIME';
$labels['enigmakeys'] = 'Clés PGP';
$labels['keysfromto'] = 'Clés $from à $to sur $count';
$labels['keyname'] = 'Nom';
$labels['keyid'] = 'ID de clé';
$labels['keyuserid'] = 'ID utilisateur';
$labels['keytype'] = 'Type de clé';
$labels['fingerprint'] = 'Empreinte';
$labels['subkeys'] = 'Sous-clés';
$labels['keyprops'] = 'Propriétés de la clé';
$labels['basicinfo'] = 'Renseignements de base';
$labels['userids'] = 'Utilisateurs supplémentaires';
$labels['typepublickey'] = 'clé publique';
$labels['typekeypair'] = 'biclé';
$labels['keyattfound'] = 'Ce courriel contient des clés PGP jointes.';
$labels['keyattimport'] = 'Importer des clés';
$labels['typesign'] = 'Signer';
$labels['typeencrypt'] = 'Chiffrer';
$labels['typecert'] = 'Certifier';
$labels['typeauth'] = 'Authentification';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorithme';
$labels['subkeycreated'] = 'Créée';
$labels['subkeyexpires'] = 'Expire le';
$labels['subkeyusage'] = 'Utilisation';
$labels['expiresnever'] = 'jamais';
$labels['unknown'] = 'inconnu';
$labels['uservalid'] = 'Valide';
$labels['userid'] = 'ID';
$labels['valid'] = 'valide';
$labels['supportencryption'] = 'Activer la signature et le chiffrement des courriels';
$labels['supportsignatures'] = 'Activer la vérification des signatures des courriels';
$labels['supportdecryption'] = 'Activer le déchiffrement des courriels';
$labels['signdefault'] = 'Par défaut, signer tous les courriels';
$labels['encryptdefault'] = 'Par défaut, chiffrer tous les courriels';
$labels['attachpubkeydefault'] = 'Par défaut, joindre ma clé PGP publique';
$labels['passwordtime'] = 'Conserver les mots de passe des clés privées pendant';
$labels['nminutes'] = '$m minute(s)';
$labels['wholesession'] = 'la session complète';
$labels['createkeys'] = 'Créer une nouvelle biclé';
$labels['importkeys'] = 'Importer des clés';
$labels['exportkeys'] = 'Exporter des clés';
$labels['keyactions'] = 'Actions des clés…';
$labels['keyremove'] = 'Supprimer';
$labels['keydisable'] = 'Désactiver';
$labels['keyrevoke'] = 'Révoquer';
$labels['keysend'] = 'Envoyer la clé publique dans un courriel';
$labels['keychpass'] = 'Changer le mot de passe';
$labels['keyadd'] = 'Ajouter une clé';
$labels['newkeyident'] = 'Identité';
$labels['newkeypass'] = 'Mot de passe';
$labels['newkeypassconfirm'] = 'Confirmer le mot de passe';
$labels['newkeytype'] = 'Type de clé';
$labels['rsa2048'] = 'RSA – 2048 bits';
$labels['rsa4096'] = 'RSA – 4096 bits';
$labels['ecckeypair'] = 'ECC (Courbe elliptique)';
$labels['keygenerating'] = 'Génération des clés…';
$labels['encryptionoptions'] = 'Options de chiffrement…';
$labels['encryptmsg'] = 'Chiffrer ce courriel';
$labels['signmsg'] = 'Signer numériquement ce courriel';
$labels['sendunencrypted'] = 'Envoyer non chiffré';
$labels['enterkeypasstitle'] = 'Saisir la phrase de passe de la clé';
$labels['enterkeypass'] = 'Un phrase de passe est nécessaire pour débloquer la clé secrète ($keyid) pour l’utilisateur : $user.';
$labels['attachpubkeymsg'] = 'Joindre ma clé publique';
$labels['keyexportprompt'] = 'Voulez-vous inclure les clés secrètes dans le fichier des clés OpenPGP enregistrées ?';
$labels['onlypubkeys'] = 'Exporter seulement les clés publiques';
$labels['withprivkeys'] = 'Exporter les clés secrètes';
$labels['findkey'] = 'Rechercher sur les serveurs de clés';
$labels['keyimportlabel'] = 'Importer d’un fichier';
$labels['keyimportsearchlabel'] = 'Rechercher sur les serveurs de clés';
$labels['managekeys'] = 'Gérer les clés PGP';
$labels['identitymatchingprivkeys'] = 'Vous avez $nr clés PGP privées correspondantes enregistrées dans votre trousseau :';
$labels['identitynoprivkeys'] = 'Cette identité d’expéditeur n’a pas encore de clé PGP privée enregistrée dans votre trousseau.';
$labels['arialabelkeyexportoptions'] = 'Options d’exportation des clés';
$labels['arialabelkeysearchform'] = 'Formulaire de recherche de clés';
$labels['arialabelkeyoptions'] = 'Options des clés';
$messages['sigvalid'] = 'Signature vérifiée de $sender.';
$messages['sigvalidpartial'] = 'La signature de $sender a été vérifiée, mais une partie du corps n’était pas signée.';
$messages['siginvalid'] = 'Signature invalide de $sender.';
$messages['sigunverified'] = 'Signature non vérifiée. Certificat non vérifié. ID de certificat : $keyid.';
$messages['signokey'] = 'Signature non vérifiée. Clé publique introuvable. ID de clé : $keyid.';
$messages['sigerror'] = 'Signature non vérifiée. Erreur interne.';
$messages['decryptok'] = 'Courriel déchiffré.';
$messages['decrypterror'] = 'Échec de déchiffrement.';
$messages['decryptnokey'] = 'Échec de déchiffrement. Clé privée introuvable. ID de clé : $keyid.';
$messages['decryptnomdc'] = 'Le déchiffrement a été ignoré. L’intégrité du message n’est pas protégée.';
$messages['decryptbadpass'] = 'Échec de déchiffrement. Le mot de passe est invalide.';
$messages['decryptnopass'] = 'Échec de déchiffrement. Le mot de passe de la clé est exigé.';
$messages['decryptpartial'] = 'Le courriel a été déchiffré, mais une partie du corps n’était pas chiffré.';
$messages['signerror'] = 'Échec de signature.';
$messages['signnokey'] = 'Échec de signature. La clé privée est introuvable.';
$messages['signbadpass'] = 'Échec de signature. Le mot de passe est invalide.';
$messages['signnopass'] = 'Échec de signature. Le mot de passe de la clé est exigé.';
$messages['encrypterror'] = 'Échec de chiffrement.';
$messages['encryptnokey'] = 'Échec de chiffrement. La clé publique est introuvable pour $email.';
$messages['encryptnoprivkey'] = 'Échec de chiffrement. La clé privée est introuvable.';
$messages['nokeysfound'] = 'Aucune clé n’a été trouvée';
$messages['keynotfound'] = 'La clé est introuvable';
$messages['keyopenerror'] = 'Impossible d’obtenir les Renseignements de la clé. Erreur interne.';
$messages['keylisterror'] = 'Impossible de lister les clés. Erreur interne.';
$messages['keysimportfailed'] = 'Impossible d’importer les clés. Erreur interne.';
$messages['keysimportsuccess'] = 'Importation de clé réussie. Importées : $new, non modifiées : $old.';
$messages['keyremoving'] = 'Suppression de des clés…';
$messages['keyremoveconfirm'] = 'Voulez-vous vraiment supprimer les clés sélectionnées ?';
$messages['keyremovesuccess'] = 'Clés supprimées avec succès';
$messages['keyremoveerror'] = 'Impossible de supprimer les clés sélectionnées';
$messages['keyimporttext'] = 'Vous pouvez importer des clés privées et publiques ou des signatures de révocation au format ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Vous pouvez chercher des clés publiques par identifiant de clé, nom d’utilisateur ou adresse courriel, et ensuite les importer directement.';
$messages['keystoragenotice'] = 'Toutes les clés publiques et privées sont stockées sur le serveur.';
$messages['formerror'] = 'Veuillez remplir le formulaire. Tous les champs sont requis.';
$messages['passwordsdiffer'] = 'Les mots de passe ne correspondent pas';
$messages['keygenerateerror'] = 'La génération de la biclé a échoué';
$messages['keygeneratesuccess'] = 'Une biclé a été générée et importée avec succès.';
$messages['keygennosupport'] = 'Votre navigateur ne prend pas en charge le chiffrement. Activez-le pour générer une biclé';
$messages['noidentselected'] = 'Vous devez choisir au moins une identité pour la clé';
$messages['nonameident'] = 'Un nom d’utilisateur doit être défini pour l’identité';
$labels['newkeysize'] = 'Taille de la clé';
$labels['key2048'] = '2048 bits – par défaut';
$labels['key4096'] = '4096 bits – plus sécurisé';
PKwc�\��Z��enigma/localization/hr_HR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Šifriranje';
$labels['enigmacerts'] = 'S/MIME certifikati';
$labels['enigmakeys'] = 'PGP ključevi';
$labels['keysfromto'] = 'Ključevi $from do $to od $count';
$labels['keyname'] = 'Naziv';
$labels['keyid'] = 'ID ključa';
$labels['keyuserid'] = 'Korisnički ID';
$labels['keytype'] = 'Vrsta ključa';
$labels['fingerprint'] = 'Otisak prsta';
$labels['subkeys'] = 'Podključevi';
$labels['keyprops'] = 'Svojstva ključa';
$labels['basicinfo'] = 'Osnovne informacije';
$labels['userids'] = 'Dodatni korisnici';
$labels['typepublickey'] = 'javni ključ';
$labels['keyattfound'] = 'Ova poruka sadrži priložen(e) PGP ključ(eve).';
$labels['keyattimport'] = 'Uvezi ključ(eve)';
$labels['typeencrypt'] = 'Šifriraj';
$labels['typeauth'] = 'Utvrđivanje identiteta';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritam';
$labels['subkeycreated'] = 'Stvoreno';
$labels['subkeyexpires'] = 'Istječe';
$labels['subkeyusage'] = 'Uporaba';
$labels['expiresnever'] = 'nikad';
$labels['unknown'] = 'nepoznato';
$labels['uservalid'] = 'Vrijedi';
$labels['userid'] = 'ID';
$labels['valid'] = 'vrijedni';
$labels['supportencryption'] = 'Omogući šifriranje i potpisivanje poruke';
$labels['supportsignatures'] = 'Omogući potvrđivanje potpisa poruke';
$labels['supportdecryption'] = 'Omogući dešifriranje poruke';
$labels['signdefault'] = 'Zadano potpisuj sve poruke';
$labels['encryptdefault'] = 'Zadano šifriraj sve poruke';
$labels['attachpubkeydefault'] = 'Zadano priloži moj javni PGP ključ';
$labels['nminutes'] = '$m minut(a)';
$labels['wholesession'] = 'cijela sesija';
$labels['importkeys'] = 'Uvezi ključ(eve)';
$labels['exportkeys'] = 'Izvezi ključ(eve)';
$labels['keyremove'] = 'Ukloni';
$labels['keydisable'] = 'Onemogući';
$labels['keyrevoke'] = 'Opozovi';
$labels['keysend'] = 'Pošalji u poruci javni ključ';
$labels['keychpass'] = 'Promjena zaporke';
$labels['newkeyident'] = 'Identitet';
$labels['newkeypass'] = 'Lozinka';
$labels['newkeypassconfirm'] = 'Potvrdi lozinku';
$labels['newkeytype'] = 'Vrsta ključa';
$labels['keygenerating'] = 'Stvaranje ključeva...';
$labels['encryptionoptions'] = 'Mogućnosti šifriranja...';
$labels['encryptmsg'] = 'Šifriraj ovu poruku';
$labels['signmsg'] = 'Digitalno potpiši ovu poruku';
$labels['sendunencrypted'] = 'Pošalji nešifrirano';
$labels['attachpubkeymsg'] = 'Priloži moj javni ključ';
$labels['keyexportprompt'] = 'Želite li uključiti tajne ključeve iz datoteke OpenPGP ključeva?';
$labels['onlypubkeys'] = 'Izvezi samo javne ključeve';
$labels['withprivkeys'] = 'Izvezi tajne ključeve';
$labels['keyimportlabel'] = 'Uvezi iz datoteke';
$labels['managekeys'] = 'Upravljaj PGP ključevima';
$labels['arialabelkeyexportoptions'] = 'Mogućnosti izvoza ključeva';
$messages['decryptok'] = 'Poruka dešifrirana.';
$messages['decrypterror'] = 'Dešifriranje neuspješno.';
$messages['decryptnokey'] = 'Dešifriranje neuspješno. Nije pronađen privatni ključ. ID ključa: $keyid.';
$messages['decryptbadpass'] = 'Dešifriranje neuspješno. Netočna lozinka.';
$messages['signerror'] = 'Potpisivanje neuspješno.';
$messages['signnokey'] = 'Potpisivanje neuspješno. Privatni ključ nije pronađen.';
$messages['signbadpass'] = 'Potpisivanje neuspješno. Netočna lozinka.';
$messages['encrypterror'] = 'Šifriranje neuspješno.';
$messages['nokeysfound'] = 'Ključevi nisu pronađeni';
$messages['keynotfound'] = 'Ključ nije pronađen!';
$messages['keyremoveconfirm'] = 'Jeste li sigurni da želite obrisati označeni(e) ključ(eve)?';
$messages['keyremovesuccess'] = 'Ključ(evi) uspješno obrisani';
$messages['keyremoveerror'] = 'Označeni(e) ključ(eve) nije moguće obrisati.';
$messages['formerror'] = 'Molimo popunite obrazac. Sva su polja obvezna!';
$messages['passwordsdiffer'] = 'Lozinke se ne podudaraju!';
$labels['newkeysize'] = 'Veličina ključa';
$labels['key2048'] = '2048 bitova - zadano';
$labels['key4096'] = '4096 bita - sigurnije';
PKwc�\�����enigma/localization/pl_PL.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Szyfrowanie';
$labels['enigmacerts'] = 'Certyfikaty S/MIME';
$labels['enigmakeys'] = 'Klucze PGP';
$labels['keysfromto'] = 'Klucze od $from do $to z $count';
$labels['keyname'] = 'Nazwa';
$labels['keyid'] = 'Id klucza';
$labels['keyuserid'] = 'Id użytkownika';
$labels['keytype'] = 'Typ klucza';
$labels['fingerprint'] = 'Odcisk palca';
$labels['subkeys'] = 'Podklucze';
$labels['keyprops'] = 'Właściwości klucza';
$labels['basicinfo'] = 'Informacje podstawowe';
$labels['userids'] = 'Dodatkowi użytkownicy';
$labels['typepublickey'] = 'klucz publiczny';
$labels['typekeypair'] = 'para kluczy';
$labels['keyattfound'] = 'Ta wiadomość zawiera załączone klucze PGP.';
$labels['keyattimport'] = 'Importuj klucz(e)';
$labels['typesign'] = 'Podpisz';
$labels['typeencrypt'] = 'Szyfruj';
$labels['typecert'] = 'Certyfikuj';
$labels['typeauth'] = 'Uwierzytelnianie';
$labels['subkeyid'] = 'Id';
$labels['subkeyalgo'] = 'Algorytm';
$labels['subkeycreated'] = 'Utworzony';
$labels['subkeyexpires'] = 'Wygasa';
$labels['subkeyusage'] = 'Zastosowanie';
$labels['expiresnever'] = 'nigdy';
$labels['unknown'] = 'nieznany';
$labels['uservalid'] = 'Ważny';
$labels['userid'] = 'Id';
$labels['valid'] = 'ważny';
$labels['supportencryption'] = 'Włącz szyfrowanie i podpisywanie wiadomości';
$labels['supportsignatures'] = 'Włącz weryfikację podpisów wiadomości';
$labels['supportdecryption'] = 'Włącz rozszyfrowywanie wiadomości';
$labels['signdefault'] = 'Domyślnie podpisuj wiadomości';
$labels['encryptdefault'] = 'Domyślnie szyfruj wiadomości';
$labels['attachpubkeydefault'] = 'Zawsze załączaj mój klucz publiczny PGP';
$labels['passwordtime'] = 'Przechowuj hasła kluczy prywatnych przez';
$labels['nminutes'] = '$m minut';
$labels['wholesession'] = 'cała sesja';
$labels['createkeys'] = 'Utwórz nową parę kluczy';
$labels['importkeys'] = 'Importuj klucz(e)';
$labels['exportkeys'] = 'Eksportuj klucz(e)';
$labels['keyactions'] = 'Akcje kluczy...';
$labels['keyremove'] = 'Usuń';
$labels['keydisable'] = 'Wyłącz';
$labels['keyrevoke'] = 'Unieważnij';
$labels['keysend'] = 'Wyślij klucz publiczny w wiadomości';
$labels['keychpass'] = 'Zmień hasło';
$labels['keyadd'] = 'Dodaj klucz';
$labels['newkeyident'] = 'Tożsamość';
$labels['newkeypass'] = 'Hasło';
$labels['newkeypassconfirm'] = 'Potwierdź hasło';
$labels['newkeytype'] = 'Typ klucza';
$labels['rsa2048'] = 'RSA - 2048 bitów';
$labels['rsa4096'] = 'RSA - 4096 bitów';
$labels['ecckeypair'] = 'ECC (krzywe eliptyczne)';
$labels['keygenerating'] = 'Generowanie kluczy...';
$labels['encryptionoptions'] = 'Opcje szyfrowania...';
$labels['encryptmsg'] = 'Szyfruj wiadomość';
$labels['signmsg'] = 'Podpisz wiadomość';
$labels['sendunencrypted'] = 'Wyślij niezaszyfrowaną';
$labels['enterkeypasstitle'] = 'Wprowadź hasło klucza';
$labels['enterkeypass'] = 'Wymagane jest hasło do klucza ($keyid) użytkownika: $user.';
$labels['attachpubkeymsg'] = 'Załącz mój klucz publiczny';
$labels['keyexportprompt'] = 'Czy chcesz dołączyć klucze prywatne do utworzonego pliku kluczy PGP?';
$labels['onlypubkeys'] = 'Eksportuj tylko klucze publiczne';
$labels['withprivkeys'] = 'Eksportuj klucze prywatne';
$labels['findkey'] = 'Wyszukaj na serwerach kluczy';
$labels['keyimportlabel'] = 'Import z pliku';
$labels['keyimportsearchlabel'] = 'Wyszukiwanie na serwerach kluczy';
$labels['managekeys'] = 'Zarządzaj kluczami PGP';
$labels['identitymatchingprivkeys'] = 'Masz $nr pasujących kluczy prywatnych PGP w bazie kluczy.';
$labels['identitynoprivkeys'] = 'Brak klucza prywatnego PGP dla wybranej tożsamości nadawcy.';
$labels['arialabelkeyexportoptions'] = 'Opcje eksportu kluczy';
$labels['arialabelkeysearchform'] = 'Formularz wyszukiwania kluczy';
$labels['arialabelkeyoptions'] = 'Opcje kluczy';
$messages['sigvalid'] = 'Zweryfikowany podpis nadawcy $sender.';
$messages['sigvalidpartial'] = 'Zweryfikowany podpis od $sender, ale część wiadomości nie została podpisana.';
$messages['siginvalid'] = 'Błędny podpis nadawcy $sender.';
$messages['sigunverified'] = 'Podpis niezweryfikowany. Certyfikat niezweryfikowany. ID certyfikatu: $keyid.';
$messages['signokey'] = 'Podpis niezweryfikowany. Brak klucza publicznego. ID klucza: $keyid.';
$messages['sigerror'] = 'Podpis niezweryfikowany. Błąd wewnętrzny.';
$messages['decryptok'] = 'Wiadomość odszyfrowana.';
$messages['decrypterror'] = 'Nie udało się odszyfrować wiadomości.';
$messages['decryptnokey'] = 'Odszyfrowanie nie powiodło się. Brak klucza prywatnego. ID klucza: $keyid.';
$messages['decryptnomdc'] = 'Pominięto szyfrowanie. Wiadomość nie posiada ochrony integralności.';
$messages['decryptbadpass'] = 'Odszyfrowanie nie powiodło się. Hasło jest nieprawidłowe.';
$messages['decryptnopass'] = 'Odszyfrowanie nie powiodło się. Hasło jest wymagane.';
$messages['decryptpartial'] = 'Wiadomość odszyfrowana, ale jej część nie była zaszyfrowana.';
$messages['signerror'] = 'Błąd podpisywania.';
$messages['signnokey'] = 'Błąd podpisywania. Nie znaleziono klucza prywatnego.';
$messages['signbadpass'] = 'Błąd podpisywania. Hasło jest nieprawidłowe.';
$messages['signnopass'] = 'Błąd podpisywania. Wymagane hasło klucza.';
$messages['encrypterror'] = 'Błąd szyfrowania.';
$messages['encryptnokey'] = 'Błąd szyfrowania. Nie znaleziono klucza publicznego dla $email.';
$messages['encryptnoprivkey'] = 'Błąd szyfrowania. Nie znaleziono klucza prywatnego.';
$messages['nokeysfound'] = 'Nie znaleziono kluczy';
$messages['keynotfound'] = 'Nie znaleziono klucza!';
$messages['keyopenerror'] = 'Nie można odczytać informacji o kluczu! Błąd wewnętrzny.';
$messages['keylisterror'] = 'Nie można odczytać listy kluczy! Błąd wewnętrzny.';
$messages['keysimportfailed'] = 'Nie można zapisać kluczy! Błąd wewnętrzny.';
$messages['keysimportsuccess'] = 'Klucze zostały zapisane. Dodane: $new, bez zmian: $old.';
$messages['keyremoving'] = 'Usuwanie kluczy...';
$messages['keyremoveconfirm'] = 'Czy na pewno chcesz usunąć wybrane klucze?';
$messages['keyremovesuccess'] = 'Klucze zostały usunięte.';
$messages['keyremoveerror'] = 'Nie można usunąć wybranych kluczy.';
$messages['keyimporttext'] = 'Możesz zaimportować klucze prywatne i publiczne oraz sygnatury unieważniające w formacie ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Możesz wyszukiwać przy użyciu identyfikatora klucza, nazwy użytkownika lub adresu email, a następnie bezpośrednio zaimportować wyszukane klucze.';
$messages['keystoragenotice'] = 'Wszystkie klucze publiczne i prywatne są przechowywane na serwerze.';
$messages['formerror'] = 'Proszę wypełnić formularz. Wszystkie pola są wymagane!';
$messages['passwordsdiffer'] = 'Hasła nie pasują!';
$messages['keygenerateerror'] = 'Generowanie pary kluczy nie powiodło się';
$messages['keygeneratesuccess'] = 'Para kluczy została zapisana.';
$messages['keygennosupport'] = 'Twoja przeglądarka nie obsługuje kryptografii. Nie można wygenerować kluczy!';
$messages['noidentselected'] = 'Należy wybrać przynajmniej jedną tożsamość!';
$messages['nonameident'] = 'Tożsamość musi zawierać nazwę użytkownika!';
$labels['newkeysize'] = 'Rozmiar klucza';
$labels['key2048'] = '2048 bitów - domyślnie';
$labels['key4096'] = '4096 bitów - bardziej bezpiecznie';
PKwc�\�Ki�enigma/localization/mr_IN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'निर्माण केलेले';
$labels['expiresnever'] = 'कधीच नाही';
$labels['unknown'] = 'माहित नसलेला';
$labels['newkeypass'] = 'परवलीचा शब्द';
PKwc�\�'��"�"enigma/localization/ja_JP.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = '暗号化';
$labels['enigmacerts'] = 'S/MIME証明書';
$labels['enigmakeys'] = 'PGPのキー';
$labels['keysfromto'] = '$count の $from から $to へのキー';
$labels['keyname'] = '名前';
$labels['keyid'] = 'キーID';
$labels['keyuserid'] = 'ユーザーID';
$labels['keytype'] = 'キーの種類';
$labels['fingerprint'] = 'フィンガープリント';
$labels['subkeys'] = '副キー';
$labels['keyprops'] = 'キーの属性';
$labels['basicinfo'] = '基本情報';
$labels['userids'] = '追加のユーザー';
$labels['typepublickey'] = '公開鍵';
$labels['typekeypair'] = '鍵ペア';
$labels['keyattfound'] = 'このメッセージは同封したPGPのキーを含んでいます。';
$labels['keyattimport'] = 'キーをインポート';
$labels['typesign'] = '署名';
$labels['typeencrypt'] = '暗号化';
$labels['typecert'] = '証明書';
$labels['typeauth'] = '認証';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'アルゴリズム';
$labels['subkeycreated'] = '作成日時';
$labels['subkeyexpires'] = '期限切れ';
$labels['subkeyusage'] = '使用法';
$labels['expiresnever'] = 'しない';
$labels['unknown'] = '不明';
$labels['uservalid'] = '有効';
$labels['userid'] = 'ID';
$labels['valid'] = '有効';
$labels['supportencryption'] = 'メッセージの暗号化と署名';
$labels['supportsignatures'] = 'メッセージの署名を検証';
$labels['supportdecryption'] = 'メッセージの復号';
$labels['signdefault'] = 'すべてのメッセージを初期設定で署名';
$labels['encryptdefault'] = 'すべてのメッセージを初期設定で暗号化';
$labels['attachpubkeydefault'] = '初期設定で自分の公開鍵を添付';
$labels['passwordtime'] = 'プライベートキーのパスワードを以下の間保持: ';
$labels['nminutes'] = '$m分';
$labels['wholesession'] = 'セッションの間中';
$labels['createkeys'] = '新しい鍵ペアを作成';
$labels['importkeys'] = 'キーをインポート';
$labels['exportkeys'] = 'キーをエクスポート';
$labels['keyactions'] = 'キーの操作...';
$labels['keyremove'] = '削除';
$labels['keydisable'] = '無効化';
$labels['keyrevoke'] = '廃止';
$labels['keysend'] = 'メッセージ中に公開鍵を送信';
$labels['keychpass'] = 'パスワードを変更';
$labels['keyadd'] = 'キーを追加';
$labels['newkeyident'] = '識別情報';
$labels['newkeypass'] = 'パスワード';
$labels['newkeypassconfirm'] = 'パスワードの確認';
$labels['newkeytype'] = 'キーの種類';
$labels['rsa2048'] = 'RSA - 2048ビット';
$labels['rsa4096'] = 'RSA - 4096ビット';
$labels['ecckeypair'] = 'ECC(楕円曲線暗号)';
$labels['keygenerating'] = 'キーを精製中...';
$labels['encryptionoptions'] = '暗号のオプション...';
$labels['encryptmsg'] = 'このメッセージを暗号化';
$labels['signmsg'] = 'このメッセージに電子署名';
$labels['sendunencrypted'] = '暗号化しないで送信';
$labels['enterkeypasstitle'] = 'キーのパスフレーズを入力';
$labels['enterkeypass'] = 'ユーザー: $userの秘密鍵($keyid)の解除にパスフレーズが必要です。';
$labels['attachpubkeymsg'] = '公開鍵を添付';
$labels['keyexportprompt'] = '保存したOpenPGPのキーファイルに秘密鍵も含めますか?';
$labels['onlypubkeys'] = '公開鍵だけエクスポート';
$labels['withprivkeys'] = '秘密鍵をエクスポート';
$labels['findkey'] = 'キーサーバーで検索';
$labels['keyimportlabel'] = 'ファイルからインポート';
$labels['keyimportsearchlabel'] = 'キーサーバーで検索';
$labels['managekeys'] = 'PGPの鍵を管理';
$labels['identitymatchingprivkeys'] = 'キーリングに$nr個の合致するPGPのプライベートキー:';
$labels['identitynoprivkeys'] = 'この送信者の識別へのPGP秘密鍵はキーリングにまだありません。';
$labels['arialabelkeyexportoptions'] = 'キーのエクスポートのオプション';
$labels['arialabelkeysearchform'] = 'キーを検索:';
$labels['arialabelkeyoptions'] = 'キーのオプション';
$messages['sigvalid'] = '$senderからの署名を検証しました。';
$messages['sigvalidpartial'] = '$senderからの署名を検証しましたが、本文の一部は署名されていません。';
$messages['siginvalid'] = '$senderからの署名は正しくありません。';
$messages['sigunverified'] = '署名を検証できません。証明書を検証できません。証明書ID: $keyid';
$messages['signokey'] = '署名を検証できません。次の公開鍵がありません: $keyid';
$messages['sigerror'] = '署名を検証できません。内部エラーです。';
$messages['decryptok'] = 'メッセージを復号しました。';
$messages['decrypterror'] = '復号できませんでした。';
$messages['decryptnokey'] = '復号できませんでした。次のキーIDの秘密鍵がありません: $keyid';
$messages['decryptnomdc'] = '復号を省きました。メッセージは完全な状態で保護されていません。';
$messages['decryptbadpass'] = '復号できませんでした。パスワードが正しくありません。';
$messages['decryptnopass'] = '復号できませんでした。キーのパスワードが必要です。';
$messages['decryptpartial'] = 'メッセージを復号しました。しかし、本文の一部は暗号化していませんでした。';
$messages['signerror'] = '署名できませんでした。';
$messages['signnokey'] = '署名できませんでした。秘密鍵がありません。';
$messages['signbadpass'] = 'サインインできませんでした。パスワードが正しくありません。';
$messages['signnopass'] = '署名できませんでした。キーのパスワードが必要です。';
$messages['encrypterror'] = '暗号化できませんでした。';
$messages['encryptnokey'] = '暗号化できませんでした。$emailへの公開鍵がありません。';
$messages['encryptnoprivkey'] = '暗号化できませんでした。秘密鍵がありません。';
$messages['nokeysfound'] = 'キーがありません。';
$messages['keynotfound'] = 'キーがありません!';
$messages['keyopenerror'] = 'キーの情報を取得できません!  内部エラーです。';
$messages['keylisterror'] = 'キーの一覧をできません!  内部エラーです。';
$messages['keysimportfailed'] = 'キーをインポートできません!  内部エラーです。';
$messages['keysimportsuccess'] = 'キーをインポートしました。$new個を新規に、$old個は変更していません。';
$messages['keyremoving'] = 'キーを削除中...';
$messages['keyremoveconfirm'] = '本当に!  秘密鍵を削除しますか?';
$messages['keyremovesuccess'] = '鍵を削除しました。';
$messages['keyremoveerror'] = '秘密鍵を削除できません。';
$messages['keyimporttext'] = '秘密鍵と公開鍵、または失効署名はASCII-Armor形式でインポートできます。';
$messages['keyimportsearchtext'] = 'キーの識別子、ユーザー名、電子メールアドレスのいずれかで公開鍵を検索して、直接インポートできます。';
$messages['keystoragenotice'] = 'すべての公開鍵と秘密鍵をサーバーに保管しています。';
$messages['formerror'] = '項目を入力してください。すべての項目は必須です!';
$messages['passwordsdiffer'] = 'パスワードが一致しません!';
$messages['keygenerateerror'] = '鍵ペアを生成できませんでした。';
$messages['keygeneratesuccess'] = '鍵ペアを生成してインポートしました。';
$messages['keygennosupport'] = 'Webブラウザーが暗号機能をサポートしていません。鍵ペアを生成できません!';
$messages['noidentselected'] = 'キーのための識別情報を少なくとも1つ選択しなければなりません!';
$messages['nonameident'] = '識別情報にはユーザー名が必須です!';
$labels['newkeysize'] = '鍵の大きさ';
$labels['key2048'] = '2048ビット(初期設定)';
$labels['key4096'] = '4096ビット(より安全)';
PKwc�\��+~~enigma/localization/ps.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'هېڅ';
$labels['unknown'] = 'نامعلوم';
$labels['newkeypass'] = 'پټنوم';
PKwc�\��0��enigma/localization/nn_NO.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'Laga';
$labels['expiresnever'] = 'aldri';
$labels['unknown'] = 'ukjent';
$labels['newkeypass'] = 'Passord';
PKwc�\ܜ�½�enigma/localization/ast.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Nome';
$labels['subkeycreated'] = 'Creáu';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'desconocíu';
$labels['newkeypass'] = 'Contraseña';
PKwc�\�.��YYenigma/localization/kab.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['unknown'] = 'arussin';
$labels['keychpass'] = 'Beddel awal uffir';
PKwc�\�_aaenigma/localization/sr_CS.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Име';
$labels['keyid'] = 'ИД кључа';
$labels['typeencrypt'] = 'Шифруј';
$labels['subkeycreated'] = 'Направљено';
$labels['expiresnever'] = 'никад';
$labels['unknown'] = 'непознато';
$labels['keychpass'] = 'Измени лозинку';
$labels['newkeypass'] = 'Лозинка';
PKwc�\��'��enigma/localization/lb_LU.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Numm';
$labels['subkeycreated'] = 'Erstallt';
$labels['expiresnever'] = 'ni';
$labels['unknown'] = 'onbekannt';
$labels['newkeypass'] = 'Passwuert';
PKwc�\�5W��enigma/localization/fa_AF.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'ایجاد شد';
$labels['expiresnever'] = 'هیچگاه';
$labels['unknown'] = 'نا شناس';
$labels['newkeypass'] = 'شفر';
PKwc�\�s~xmmenigma/localization/br.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Enrinegañ';
$labels['enigmacerts'] = 'Testenioù S/MIME';
$labels['enigmakeys'] = 'Alc\'hwezioù PGP';
$labels['keysfromto'] = 'Alc\'hwezioù $from da $to war $count';
$labels['keyname'] = 'Anv';
$labels['keyid'] = 'Naoudi an alc\'hwez';
$labels['keyuserid'] = 'Naoudi an arveriad';
$labels['keytype'] = 'Rizh an alc\'hwez';
$labels['fingerprint'] = 'Roudoù-biz';
$labels['subkeys'] = 'Is-alc\'hwez';
$labels['basicinfo'] = 'Titouroù diazez';
$labels['userids'] = 'Arveriaded ouzhpenn';
$labels['typepublickey'] = 'alc\'hwez foran';
$labels['typekeypair'] = 'daouad alc\'hwezioù';
$labels['keyattfound'] = 'Alc\'hwezioù PGP a zo staget d\'ar gemennadenn-mañ.';
$labels['keyattimport'] = 'Enporzhiañ an alc\'hwez(ioù)';
$labels['typesign'] = 'Sinañ';
$labels['typeencrypt'] = 'Enrinegañ';
$labels['typecert'] = 'Testeniañ';
$labels['typeauth'] = 'Dilesa';
$labels['subkeyid'] = 'Naoudi';
$labels['subkeyalgo'] = 'Treol';
$labels['subkeycreated'] = 'Krouet';
$labels['subkeyexpires'] = 'Diamzeriñ';
$labels['subkeyusage'] = 'Arver';
$labels['expiresnever'] = 'morse';
$labels['unknown'] = 'dianav';
$labels['uservalid'] = 'Talvoudek';
$labels['userid'] = 'Naoudi';
$labels['valid'] = 'talvoudek';
$labels['supportencryption'] = 'Gweredekaat enrinegañ ha sinañ ar c\'hemennadennoù';
$labels['supportsignatures'] = 'Gweredekaat gwiriañ sinadur ar c\'hemennadennoù';
$labels['supportdecryption'] = 'Gweredekaat ezrinegañ ar c\'hemennadennoù';
$labels['signdefault'] = 'Sinañ an goll gemennadennoù dre ziouer';
$labels['encryptdefault'] = 'Enrinegañ an holl gemennadennoù dre ziouer ';
$labels['attachpubkeydefault'] = 'Kenstagañ ma alc\'hwez foran PGP dre ziouer';
$labels['passwordtime'] = 'Mirout gerioù-tremen an alc\'hwezioù prevez e-pad ';
$labels['nminutes'] = '$m a vunutennoù';
$labels['wholesession'] = 'an estez a-bezh';
$labels['createkeys'] = 'Krouiñ un daouad alc\'hwezioù nevez';
$labels['importkeys'] = 'Enporzhiañ un alc\'hwez';
$labels['exportkeys'] = 'Ezporzhiañ un alc\'hwez';
$labels['keyactions'] = 'Gweredoù an alc\'hwez...';
$labels['keyremove'] = 'Dilemel';
$labels['keydisable'] = 'Diweredekaat';
$labels['keyrevoke'] = 'Dizorniañ';
$labels['keysend'] = 'Kas an alc\'hwez foran en ur gemennadenn';
$labels['keychpass'] = 'Kemmañ ar ger-tremen';
$labels['newkeypass'] = 'Ger-Tremen';
$labels['newkeytype'] = 'Rizh an alc\'hwez';
$labels['keygenerating'] = 'O c\'henel an alc\'hwezioù...';
$labels['encryptionoptions'] = 'Dibarzhioù enrinegañ...';
$labels['encryptmsg'] = 'Enrinegañ ar gemennadenn-mañ';
$labels['signmsg'] = 'Sinañ ent niverel ar gemennadenn-mañ';
$labels['enterkeypasstitle'] = 'Enankañ frazenn-dremen an alc\'hwez';
$labels['enterkeypass'] = 'Ur frazenn-dremen a zo dleet evit dibrennañ an alc\'hwez prevez ($keyid= evit an arveriad: $user';
$labels['attachpubkeymsg'] = 'Stagañ ma alc\'hwez foran';
$labels['keyexportprompt'] = 'Fellout a ra deoc\'h enkorfañ an alc\'hwezioù kuzh er restr alc\'hwezioù OpenPGP enrollet?';
$labels['onlypubkeys'] = 'Ezporzhiañ an alc\'hwezhioù foran hepken';
$labels['withprivkeys'] = 'Ezporzhiañ an alc\'hwezioù kuzh';
$labels['findkey'] = 'Klask war an dafariad(où) alc\'hwezioù';
$labels['keyimportsearchlabel'] = 'Klask war an dafariad(où) alc\'hwezioù';
$labels['arialabelkeyexportoptions'] = 'Dibarzhioù ezporzhiañ an alc\'hwezioù';
$messages['sigvalid'] = 'Sinadur gwiriet a-berzh $sender.';
$messages['sigvalidpartial'] = 'Sinadur gwiriet a-berzh $sender, met ul lodenn eus ar c\'horf n\'eo ket enrineget.';
$messages['siginvalid'] = 'Sinadur didalvoudek a-berzh $sender.';
$messages['sigunverified'] = 'Sinadur amwiriet. testeni amwiriet. Naoudi an testeni: $keyid.';
$messages['signokey'] = 'Sinadur amwiriet. Alc\'hwez foran ebet kavet. Naoudi an alc\'hwez: $keyid.';
$messages['sigerror'] = 'Sinadur amwiriet. Fazi diabarzh.';
$messages['decryptok'] = 'Kemennadenn ezrineget.';
$messages['decrypterror'] = 'Ezrinegañ c\'hwitet.';
$messages['decryptnokey'] = 'Ezrinegañ c\'hwitet. Alc\'hwez prevez ebet kavet. Naoudi an alc\'hwez: $keyid.';
$messages['decryptnopass'] = 'Ezrinegañ c\'hwitet. Frazenn-dremen azgoulennet.';
$messages['decryptpartial'] = 'Kemennadenn ezrineget, met ul lodenn eus ar c\'horf ne oa ket enrineget.';
$messages['signerror'] = 'Sinadur c\'hwitet.';
$messages['signnokey'] = 'Sinadur c\'hwitet. Alc\'hwez prevez ebet kavet.';
$messages['signnopass'] = 'Sinadur c\'hwitet. Frazenn-dremen azgoulennet.';
$messages['encrypterror'] = 'Enrinegañ c\'hwitet.';
$messages['encryptnokey'] = 'Enrinegañ c\'hwitet. N\'eo ket bet kavet an alc\'hwez foran evit $email.';
$messages['nokeysfound'] = 'Alc\'hwez ebet kavet';
$messages['keynotfound'] = 'N\'eo ket bet kavet an alc\'hwez!';
$messages['keyopenerror'] = 'N\'haller ket kaout titouroù an alc\'hwez! Fazi diabarzh.';
$messages['keylisterror'] = 'N\'haller ket rollañ an alc\'hwezioù! Fazi diabarzh.';
$messages['keysimportfailed'] = 'N\'haller ket enporzhiañ an alc\'hwez(ioù)! Fazi diabarzh.';
$messages['keysimportsuccess'] = 'Alc\'hwez(ioù) enporzhiet gant berzh. Enporzhiet: $new, digemm: $old.';
$messages['keyremoving'] = 'O tilemel an alc\'hwez(ioù)...';
$messages['keyremoveconfirm'] = 'Fellout a ra deoc\'h dilemel an alc\'hwez(ioù) diuzet?';
$messages['keyremovesuccess'] = 'Alc\'hwez(ioù) dilamet gant berzh';
$messages['keyremoveerror'] = 'N\'haller ket dilemel an alc\'hwez(ioù) diuzet.';
$messages['keyimporttext'] = 'Gallout a rit enporzhiañ alc\'hwez(ioù) foran ha prevez pe sinadurioù dizorniañ er mentrezh ASCII-Armor.';
$messages['formerror'] = 'Ret eo leuniañ ar furmskrid. An holl vaeziennoù a zo dleet!';
$messages['passwordsdiffer'] = 'Ne glot ket ar gerioù-tremen!';
$messages['keygenerateerror'] = 'C\'hwitadenn war ganedigezh un daouad alc\'hwezhioù';
$messages['keygeneratesuccess'] = 'Ganet hag enporzhiet eo bet un daouad alc\'hwezioù gant berzh. ';
$messages['keygennosupport'] = 'N\'eo ket skoret an enrinegañ gant ho merdeer web. N\'haller ket genel un alc\'hwez nevez.';
$messages['nonameident'] = 'Ret eo d\'ar pivelezh kaout un anv arveriad despizet!';
$labels['key2048'] = '2048 bit - dre ziouer';
$labels['key4096'] = '4096 bit - diogeloc\'h';
PKwc�\�
�G��enigma/localization/ka_GE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'სახელი';
$labels['expiresnever'] = 'არასდროს';
$labels['unknown'] = 'უცნობი';
$labels['newkeypass'] = 'პაროლი';
PKwc�\����ssenigma/localization/mk_MK.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Име ';
$labels['keyid'] = 'Клуч ID';
$labels['typeencrypt'] = 'Енкриптирај ';
$labels['subkeycreated'] = 'Создадени ';
$labels['expiresnever'] = 'никогаш';
$labels['unknown'] = 'Непознато ';
$labels['keychpass'] = 'Променете лозинка';
$labels['newkeypass'] = 'Лозинка';
PKwc�\�H�ggenigma/localization/kn_IN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'ಹೆಸರು';
$labels['newkeypass'] = 'ರಹಸ್ಯ ಪದ';
PKwc�\����enigma/localization/km_KH.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'បាន​បង្កើត';
$labels['expiresnever'] = 'មិនដែល';
$labels['unknown'] = 'មិន​ស្គាល់';
$labels['newkeypass'] = 'ពាក្យសំងាត់';
PKwc�\�_X��enigma/localization/mn_MN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'Үүссэн';
$labels['unknown'] = 'мэдэгдэхгүй';
$labels['keychpass'] = 'Нууц үг солих';
$labels['newkeypass'] = 'Нууц үг';
PKwc�\l�Mv$v$enigma/localization/he_IL.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'הצפנה';
$labels['enigmacerts'] = 'תעודות מאושרות S/MIME';
$labels['enigmakeys'] = 'מפתחות PGP';
$labels['keysfromto'] = 'מפתחות from$ עד to$ מתוך count$';
$labels['keyname'] = 'שם';
$labels['keyid'] = 'זיהוי מפתח';
$labels['keyuserid'] = 'זיהוי משתמש';
$labels['keytype'] = 'סוג מפתח';
$labels['fingerprint'] = 'טביעת אצבע';
$labels['subkeys'] = 'תת מפתח';
$labels['keyprops'] = 'אופיינים של המפתח';
$labels['basicinfo'] = 'מידע בסיסי';
$labels['userids'] = 'משתמשים נוספים';
$labels['typepublickey'] = 'מפתח ציבורי';
$labels['typekeypair'] = 'צמד מפתחות';
$labels['keyattfound'] = 'הצרופה מכילה מפתח PGP אחד או יותר';
$labels['keyattimport'] = 'ייבוא מפתח אחד או יותר';
$labels['typesign'] = 'לחתום';
$labels['typeencrypt'] = 'להצפין';
$labels['typecert'] = 'לאשר';
$labels['typeauth'] = 'וידוא מקוריות';
$labels['subkeyid'] = 'קוד זיהוי';
$labels['subkeyalgo'] = 'אלגוריתם';
$labels['subkeycreated'] = 'נוצר';
$labels['subkeyexpires'] = 'פג תוקף';
$labels['subkeyusage'] = 'שימוש';
$labels['expiresnever'] = 'אף פעם';
$labels['unknown'] = 'לא ידוע';
$labels['uservalid'] = 'בתוקף';
$labels['userid'] = 'קוד זיהוי';
$labels['valid'] = 'בתוקף';
$labels['supportencryption'] = 'הפעלה של הצפנת הודעה וחתימתה';
$labels['supportsignatures'] = 'הפעלה של וידוא חתימות הודעה';
$labels['supportdecryption'] = 'הפעלה של פיענוח הודעה';
$labels['signdefault'] = 'חתימה של כל הודעה כברירת מחדל';
$labels['encryptdefault'] = 'הצפנה של כל הודעה כברירת מחדל';
$labels['attachpubkeydefault'] = 'צירוף המפתח הציבורי שלי כברירת מחדל';
$labels['passwordtime'] = 'אחסון סיסמאות של מפתח פרטי עבור';
$labels['nminutes'] = 'm$ דקות';
$labels['wholesession'] = 'כל משך ההתקשרות';
$labels['createkeys'] = 'יצירה של צמד מפתחות';
$labels['importkeys'] = 'ייבוא מפתח אחד או יותר';
$labels['exportkeys'] = 'ייצוא מפתח אחד או יותר';
$labels['keyactions'] = 'פעולות אפשריות למפתח...';
$labels['keyremove'] = 'הסר';
$labels['keydisable'] = 'חסום';
$labels['keyrevoke'] = 'הפקעה';
$labels['keysend'] = 'משלוח מפתח ציבורי בהודעה';
$labels['keychpass'] = 'שינוי סיסמה';
$labels['keyadd'] = 'הוספת מפתח';
$labels['newkeyident'] = 'זהות';
$labels['newkeypass'] = 'סיסמה';
$labels['newkeypassconfirm'] = 'אישור סיסמה';
$labels['newkeytype'] = 'סוג מפתח';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'מפתחות נוצרים...';
$labels['encryptionoptions'] = 'אפשרויות הצפנה...';
$labels['encryptmsg'] = 'הצפנה של הודעה זו';
$labels['signmsg'] = 'חתימה דיגיטלית של הודעה זו';
$labels['sendunencrypted'] = 'לשלוח ללא הצפנה';
$labels['enterkeypasstitle'] = 'נא להקיש צרור אותיות וסימנים ליצירת מפתח';
$labels['enterkeypass'] = 'יש להקיש צרור אותיות וסימנים שנבחרו קודם כדי לשחרר נעילה של המפתח הסודי  (keyid$)  של משתמש  user$';
$labels['attachpubkeymsg'] = 'צירוף המפתח הציבורי שלי';
$labels['keyexportprompt'] = 'האם ברצונך לכלול מפתחות סודיים בקובץ השמור של המפתחות ?';
$labels['onlypubkeys'] = 'ייצוא מפתחות ציבוריים בלבד';
$labels['withprivkeys'] = 'ייצוא מפתחות סודיים';
$labels['findkey'] = 'חיפוש בשרת(י) מפתח';
$labels['keyimportlabel'] = 'ייבוא מקובץ';
$labels['keyimportsearchlabel'] = 'חיפוש בשרת(י) מפתח';
$labels['managekeys'] = 'ניהול מפתחות הצפנה';
$labels['identitymatchingprivkeys'] = 'קיימים $nr  מפתחות הצפנה פרטיים תואמים בצרור המפתחות שלך';
$labels['identitynoprivkeys'] = 'לזהות השולחת אין עדיין מפתח הצפנה פרטי בצרור המפתחות שלך';
$labels['arialabelkeyexportoptions'] = 'אפשרויות ייצוא של מפתחות';
$labels['arialabelkeysearchform'] = 'טופס חיפוש מפתח';
$labels['arialabelkeyoptions'] = 'אפשרויות מפתח';
$messages['sigvalid'] = 'אימות חתימה מ sender$';
$messages['sigvalidpartial'] = 'אומתה חתימה של sender$ אבל חלק מגוף ההודעה לא נחתם';
$messages['siginvalid'] = 'חתימה לא תקינה מ sender$';
$messages['sigunverified'] = 'חתימה לא מאומתת. התעודה לא אומתה. קוד תעודה: keyid$.';
$messages['signokey'] = 'חתימה לא מאומתת. לא נמצא מפתח ציבורי. קוד מפתח: keyid$.';
$messages['sigerror'] = 'חתימה לא מאומתת. שגיאה פנימית.';
$messages['decryptok'] = 'הודעה פוענחה.';
$messages['decrypterror'] = 'הפיענוח נכשל.';
$messages['decryptnokey'] = 'הפיענוח נכשל. לא נמצא מפתח פרטי. קוד מפתח: keyid$.';
$messages['decryptnomdc'] = 'לא בוצע הפיענוח.  אין להודעה הגנת שלמות.';
$messages['decryptbadpass'] = 'פיענוח נכשל. סיסמה שגויה.';
$messages['decryptnopass'] = 'פענוח נכשל. נדרשת סיסמת מפתח.';
$messages['decryptpartial'] = 'ההודעה פוענחה אבל חלק מגוף ההודעה כלל לא הוצפן';
$messages['signerror'] = 'חתימה נכשלה.';
$messages['signnokey'] = 'חתימה נכשלה. לא נמצא מפתח פרטי.';
$messages['signbadpass'] = 'חתימה נכשלה. סיסמה שגויה.';
$messages['signnopass'] = 'חיתום נכשל. נדרשת סיסמת מפתח.';
$messages['encrypterror'] = 'הצפנה נכשלה.';
$messages['encryptnokey'] = 'הצפנה נכשלה. לא נמצא מפתח ציבורי עבור mail$.';
$messages['encryptnoprivkey'] = 'הצפנה נכשלה. לא נמצא מפתח פרטי.';
$messages['nokeysfound'] = 'לא נמצאו מפתחות.';
$messages['keynotfound'] = 'לא נמצא מפתח !';
$messages['keyopenerror'] = 'לא ניתן להשיג מידע על מפתח! שגיאה פנימית.';
$messages['keylisterror'] = 'לא ניתן להציג רשימת מפתחות! שגיאה פנימית.';
$messages['keysimportfailed'] = 'לא ניתן לייבא מפתח אחד או יותר !   שגיאה פנימית.';
$messages['keysimportsuccess'] = 'מפתחות יובאו בהצלחה. יובא: new$, לא שינוי: old$.';
$messages['keyremoving'] = 'הסרת מפתחות...';
$messages['keyremoveconfirm'] = 'האם למחוק את המפתחות שנבחרו?';
$messages['keyremovesuccess'] = 'מפתח(ות) נמחק(ו) בהצלחה';
$messages['keyremoveerror'] = 'לא ניתן למחוק את המפתחות שנבחרו.';
$messages['keyimporttext'] = 'ניתן לייבא מפתחות פרטיים וציבוריים או חתימות ביטול בםפורמט ASCII-Armor';
$messages['keyimportsearchtext'] = 'ניתן לחפש מפתחות ציבוריים לפי מזהה מפתח, שם משתמש או כתובת דוא"ל ואח"כ לייבא אותם ישירות.';
$messages['keystoragenotice'] = 'כל המפתחות הציבוריים והפרטיים מאוחסנים על השרת';
$messages['formerror'] = 'נא למלא את כל השדות בטופס !';
$messages['passwordsdiffer'] = 'הסיסמאות לא תואמות!';
$messages['keygenerateerror'] = 'נכשלה יצירה של צמד המפתחות';
$messages['keygeneratesuccess'] = 'נוצר צמד מפתחות ויובא בהצלחה.';
$messages['keygennosupport'] = 'הדפדפן הזה אינו תומך בהצפנה. לא ניתן לייצר צמד מפתחות !';
$messages['noidentselected'] = 'יש לבחור לפחות זהות אחת עבור המפתח';
$messages['nonameident'] = 'יש להגדיר שם משתמש בהגדרת הזהות !';
$labels['newkeysize'] = 'גודל מפתח';
$labels['key2048'] = 'ברירת מחדל - 2048 סיביות';
$labels['key4096'] = '4096 סיביות - יותר בטוח';
PKwc�\+N^�		enigma/localization/ga_IE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Criptiúchán';
$labels['keyname'] = 'Ainm';
$labels['fingerprint'] = 'Méarlorg';
$labels['basicinfo'] = 'An fhaisnéis bhunúsach';
$labels['userids'] = 'Úsáideoirí breise';
$labels['typepublickey'] = 'eochair phoiblí';
$labels['typesign'] = 'Sínigh';
$labels['typeencrypt'] = 'Criptigh';
$labels['typecert'] = 'Deimhnigh';
$labels['typeauth'] = 'Fíordheimhniú';
$labels['subkeyid'] = 'Aitheantas';
$labels['subkeyalgo'] = 'Algartam';
$labels['subkeycreated'] = 'Cruthaithe';
$labels['subkeyexpires'] = 'Éagann sé';
$labels['subkeyusage'] = 'Úsáid';
$labels['expiresnever'] = 'riamh';
$labels['unknown'] = 'anaithnid';
$labels['uservalid'] = 'Bailí';
$labels['userid'] = 'Aitheantas';
$labels['valid'] = 'bailí';
$labels['signdefault'] = 'Sínigh gach teachtaireacht mar réamhshocrú';
$labels['encryptdefault'] = 'Criptigh gach teachtaireacht mar réamhshocrú';
$labels['nminutes'] = '$m nóiméad';
$labels['wholesession'] = 'an dreas ar fad';
$labels['keyremove'] = 'Bain';
$labels['keydisable'] = 'Díchumasaigh';
$labels['keyrevoke'] = 'Aisghairm';
$labels['keysend'] = 'Seol eochair phoiblí i dteachtaireacht';
$labels['keychpass'] = 'Athraigh d\'fhocal faire';
$labels['newkeypass'] = 'Pasfhocal';
$labels['newkeypassconfirm'] = 'Deimhnigh an focal faire';
$labels['keygenerating'] = 'Ag cruthú eochracha...';
$labels['encryptmsg'] = 'Criptigh an teachtaireacht seo';
$labels['signmsg'] = 'Sínigh an teachtaireacht seo go digiteach';
$labels['attachpubkeymsg'] = 'Ceangail m\'eochair phoiblí';
$labels['keyimportlabel'] = 'Tabhair isteach ó chomhad';
$messages['decrypterror'] = 'Theip ar an díchriptiú';
$messages['signerror'] = 'Theip ar an síniú.';
$messages['encrypterror'] = 'Theip ar an gcriptiú.';
$messages['nokeysfound'] = 'Níor aimsíodh aon eochair';
$messages['keynotfound'] = 'Níor aimsíodh an eochair!';
$messages['passwordsdiffer'] = 'Ní hionann na focail fhaire!';
$labels['newkeysize'] = 'Méid na heochrach';
$labels['key2048'] = '2048 beart - an réamhshocrú';
PKwc�\�k���enigma/localization/da_DK.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Kryptering';
$labels['enigmacerts'] = 'S/MIME Certifikater';
$labels['enigmakeys'] = 'PGP Nøgler';
$labels['keysfromto'] = 'Nøgler $from $to af $count';
$labels['keyname'] = 'Navn';
$labels['keyid'] = 'NøgleID';
$labels['keyuserid'] = 'Bruger ID';
$labels['keytype'] = 'Nøgletype';
$labels['fingerprint'] = 'Fingeravtryk';
$labels['subkeys'] = 'Undernøgler';
$labels['keyprops'] = 'Nøgleegenskaber';
$labels['basicinfo'] = 'Grundlæggende Oplysninger';
$labels['userids'] = 'Yderligere Brugere';
$labels['typepublickey'] = 'offentlig nøgle';
$labels['typekeypair'] = 'nøglepar';
$labels['keyattfound'] = 'Denne meddelelse indeholder vedhæftede PGP nøgl(er).';
$labels['keyattimport'] = 'Importer nøgl(er)';
$labels['typeencrypt'] = 'Krypter';
$labels['typeauth'] = 'Godkendelse';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritme';
$labels['subkeycreated'] = 'Oprettet';
$labels['subkeyexpires'] = 'Udløber';
$labels['subkeyusage'] = 'Anvendelse';
$labels['expiresnever'] = 'aldrig';
$labels['unknown'] = 'ukendt';
$labels['uservalid'] = 'Gyldig';
$labels['userid'] = 'ID';
$labels['valid'] = 'gyldig';
$labels['supportencryption'] = 'Aktiver beskedkryptering og meddelelsessignatur';
$labels['supportsignatures'] = 'Aktiver verificering af meddelelsessignaturer';
$labels['supportdecryption'] = 'Aktiver beskeddekryptering';
$labels['signdefault'] = 'Underskriv alle meddelelser som standard';
$labels['encryptdefault'] = 'Krypter alle meddelelser som standard';
$labels['attachpubkeydefault'] = 'Vedhæft min offentlige PGP nøgle som standard';
$labels['passwordtime'] = ' 
Behold adgangskoder til private nøgler for';
$labels['nminutes'] = '$m minut(er)';
$labels['wholesession'] = 'hele sessionen';
$labels['createkeys'] = 'Opret et nyt nøglepar';
$labels['importkeys'] = 'Importer nøgl(er)';
$labels['exportkeys'] = 'Eksporter nøgl(er)';
$labels['keyactions'] = 'Nøglehandlinger...';
$labels['keyremove'] = 'Fjern';
$labels['keydisable'] = 'Deaktiver';
$labels['keyrevoke'] = 'Tilbagekald';
$labels['keysend'] = 'Send offentlig nøgle i en besked';
$labels['keychpass'] = 'Skift kodeord:';
$labels['keyadd'] = 'Tilføj nøgle';
$labels['newkeyident'] = 'Identificer';
$labels['newkeypass'] = 'Adgangskode';
$labels['newkeypassconfirm'] = 'Bekræft password';
$labels['newkeytype'] = 'Nøgletype';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Genererer nøgler...';
$labels['encryptionoptions'] = 'Krypteringsmuligheder...';
$labels['encryptmsg'] = 'Krypter denne meddelelse';
$labels['signmsg'] = 'Underskriv denne meddelelse digitalt';
$labels['sendunencrypted'] = 'Send ukrypteret';
$labels['enterkeypasstitle'] = 'Indtast nøgleordet';
$labels['enterkeypass'] = 'En adgangssætning er nødvendig for at låse den hemmelige nøgle op ($keyid) for bruger: $user.';
$labels['attachpubkeymsg'] = 'Vedhæft min offentlige nøgle';
$labels['keyexportprompt'] = 'Vil du inkludere hemmelige nøgler i den gemte OpenPGP nøglefil?';
$labels['onlypubkeys'] = 'Eksporter kun offentlige nøgler';
$labels['withprivkeys'] = 'Eksporter hemmelige nøgler';
$labels['findkey'] = 'Søg på nøgleserv(er)';
$labels['keyimportlabel'] = 'Importer fra fil';
$labels['keyimportsearchlabel'] = 'Søg på nøgleserv(er)';
$labels['managekeys'] = 'Administrer PGP nøgler';
$labels['identitymatchingprivkeys'] = 'Du har $nr matchende PGP private nøgler gemt i din nøglering:';
$labels['identitynoprivkeys'] = 'Denne afsenderidentitet har endnu ikke en privat PGP nøgle gemt i din nøglering.';
$labels['arialabelkeyexportoptions'] = 'Nøgler eksport muligheder';
$labels['arialabelkeysearchform'] = 'Nøglesøgningsformular';
$labels['arialabelkeyoptions'] = 'Nøglemuligheder';
$messages['sigvalid'] = 'Verificeret signatur fra $sender.';
$messages['siginvalid'] = ' 
Ugyldig signatur fra $sender.';
$messages['sigunverified'] = 'Ubekræftet signatur. Certifikat ikke verificeret. Certifikat ID: $keyid.';
$messages['signokey'] = 'Ubekræftet signatur. Offentlig nøgle blev ikke fundet. Nøgle ID: $keyid.';
$messages['sigerror'] = 'Ubekræftet signatur. Intern fejl.';
$messages['decryptok'] = 'Meddelelse dekrypteret.';
$messages['decrypterror'] = 'Dekryptering mislykkedes.';
$messages['decryptnokey'] = 'Dekryptering mislykkedes. Privat nøgle ikke fundet. Nøgle ID: $keyid.';
$messages['decryptnomdc'] = 'Dekryptering sprunget over. Beskeden er ikke integritetsbeskyttet.';
$messages['decryptbadpass'] = 'Dekryptering mislykkedes. Forkert kodeord.';
$messages['decryptnopass'] = 'Dekryptering mislykkedes. Nøgleadgangskode påkrævet.';
$messages['signerror'] = 'Signering mislykkedes.';
$messages['signnokey'] = 'Signering mislykkedes. Privat nøgle ikke fundet.';
$messages['signbadpass'] = 'Signering mislykkedes. Forkert kodeord.';
$messages['signnopass'] = 'Signering mislykkedes. Nøgleadgangskode påkrævet.';
$messages['encrypterror'] = 'Kryptering mislykkedes.';
$messages['encryptnokey'] = 'Kryptering mislykkedes. Offentlig nøgle ikke fundet til $email.';
$messages['encryptnoprivkey'] = 'Kryptering mislykkedes. Privat nøgle ikke fundet.';
$messages['nokeysfound'] = 'Ingen nøgler fundet';
$messages['keynotfound'] = 'Nøglen blev ikke fundet!';
$messages['keyopenerror'] = 'Kan ikke få nøgle oplysninger! Intern fejl.';
$messages['keylisterror'] = 'Kan ikke angive nøgler! Intern fejl.';
$messages['keysimportfailed'] = 'Kan ikke importere nøgl(er)! Intern fejl.';
$messages['keysimportsuccess'] = 'Nøgl(er) blev succesfuldt Importeret: $new, uændret: $old.';
$messages['keyremoving'] = 'Slettet nøgl(er)...';
$messages['keyremoveconfirm'] = 'Er du sikker på, at du vil slette valgte nøgl(er)?';
$messages['keyremovesuccess'] = 'Nøgl(er) blev slettet';
$messages['keyremoveerror'] = 'Kunne ikke slette de valgte nøgl(er).';
$messages['keyimportsearchtext'] = 'Du kan søge efter offentlige nøgler efter nøgle id, brugernavn eller e -mail adresse og derefter importere dem direkte.';
$messages['keystoragenotice'] = 'Alle offentlige og private nøgler gemmes på serveren';
$messages['formerror'] = 'Venligst udfyld formularen. Alle felter skal udfyldes!';
$messages['passwordsdiffer'] = 'Adgangskoderne stemmer ikke overens!';
$messages['keygenerateerror'] = 'Det lykkedes ikke at generere et nøglepar';
$messages['keygeneratesuccess'] = 'Et nøglepar blev genereret og importeret.';
$messages['keygennosupport'] = 'Din webbrowser understøtter ikke kryptografi. Kan ikke generere et nøglepar!';
$messages['noidentselected'] = 'Du skal vælge mindst én identitet til nøglen!';
$messages['nonameident'] = 'Identitet skal have et brugernavn defineret!';
$labels['newkeysize'] = 'Nøglestørrelse';
$labels['key2048'] = '2048 bits - standard';
$labels['key4096'] = '4096 bits - mere sikker';
PKwc�\-'
��enigma/localization/sl_SI.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Šifriranje';
$labels['keyname'] = 'Ime';
$labels['keyid'] = 'ID ključa';
$labels['typeencrypt'] = 'Šifriraj';
$labels['subkeycreated'] = 'Ustvarjen';
$labels['expiresnever'] = 'nikoli';
$labels['unknown'] = 'neznan';
$labels['createkeys'] = 'Ustvari nov par ključev';
$labels['keychpass'] = 'Spremenjeno geslo';
$labels['newkeypass'] = 'Geslo';
$labels['keyimportlabel'] = 'Uvozi iz dokumenta';
PKwc�\�����enigma/localization/ar.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'التشفير';
$labels['enigmakeys'] = 'مفاتيح PGP';
$labels['keyname'] = 'الإسم';
$labels['keytype'] = 'نوع المفتاح';
$labels['fingerprint'] = 'البصمة';
$labels['typeencrypt'] = 'تعمية';
$labels['typeauth'] = 'المصادقة';
$labels['expiresnever'] = 'أبداً';
$labels['unknown'] = 'مجهول';
$labels['createkeys'] = 'إنشاء زوج مِن المفاتيح';
$labels['keychpass'] = 'تغيير كلمة المرور';
$labels['newkeyident'] = 'الهوية';
$labels['newkeypass'] = 'كلمة المرور';
$labels['newkeypassconfirm'] = 'تأكيد الكلمة السرية';
$labels['newkeytype'] = 'نوع المفتاح';
$labels['keygenerating'] = 'جارٍ توليد المفاتيح...';
$labels['managekeys'] = 'إدارة مفاتيح PGP';
$labels['newkeysize'] = 'حجم المفتاح';
$labels['key2048'] = '2048 bits - افتراضي';
$labels['key4096'] = '4096 bits - أكثر أمانا';
PKwc�\!R�W��enigma/localization/si_LK.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['expiresnever'] = 'කිසි විටෙකත් නැති';
$labels['unknown'] = 'නොදනී';
$labels['newkeypass'] = 'මුරපදය';
PKwc�\<c�|2"2"enigma/localization/de_DE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Verschlüsselung';
$labels['enigmacerts'] = 'S/MIME-Zertifikate';
$labels['enigmakeys'] = 'PGP-Schlüssel';
$labels['keysfromto'] = 'Schlüssel $from bis $to von $count';
$labels['keyname'] = 'Schlüssel';
$labels['keyid'] = 'Schlüsselkennung';
$labels['keyuserid'] = 'Benutzerkennung';
$labels['keytype'] = 'Schlüsseltyp';
$labels['fingerprint'] = 'Fingerabdruck';
$labels['subkeys'] = 'Unterschlüssel';
$labels['keyprops'] = 'Schlüssel-Eigenschaften';
$labels['basicinfo'] = 'Allgemeine Informationen';
$labels['userids'] = 'Zusätzliche Benutzer';
$labels['typepublickey'] = 'Öffentlicher Schlüssel';
$labels['typekeypair'] = 'Schlüsselpaar';
$labels['keyattfound'] = 'Diese Nachricht enthält angehängte PGP-Schlüssel.';
$labels['keyattimport'] = 'Schlüssel importieren';
$labels['typesign'] = 'Signieren';
$labels['typeencrypt'] = 'Verschlüsseln';
$labels['typecert'] = 'Bestätigen';
$labels['typeauth'] = 'Authentifizierung';
$labels['subkeyid'] = 'Kennung';
$labels['subkeyalgo'] = 'Algorithmus';
$labels['subkeycreated'] = 'Erstellt am';
$labels['subkeyexpires'] = 'Läuft aus';
$labels['subkeyusage'] = 'Verwendet für';
$labels['expiresnever'] = 'nie';
$labels['unknown'] = 'unbekannt';
$labels['uservalid'] = 'Gültigkeit';
$labels['userid'] = 'Kennung';
$labels['valid'] = 'gültig';
$labels['supportencryption'] = 'Nachrichtenverschlüsselung und Signierung aktivieren';
$labels['supportsignatures'] = 'Verifizierung der Nachrichtensignatur aktivieren';
$labels['supportdecryption'] = 'Entschlüsselung von Nachrichten aktivieren';
$labels['signdefault'] = 'Nachrichten immer signieren';
$labels['encryptdefault'] = 'Nachrichten immer verschlüsseln';
$labels['attachpubkeydefault'] = 'Öffentlichen Schlüssel in der Nachricht anfügen';
$labels['passwordtime'] = 'Private Schlüssel behalten für';
$labels['nminutes'] = '$m Minuten';
$labels['wholesession'] = 'die gesamte Sitzung';
$labels['createkeys'] = 'Neues Schlüsselpaar erstellen';
$labels['importkeys'] = 'Schlüssel importieren';
$labels['exportkeys'] = 'Schlüssel exportieren';
$labels['keyactions'] = 'Aktionen …';
$labels['keyremove'] = 'Entfernen';
$labels['keydisable'] = 'Deaktivieren';
$labels['keyrevoke'] = 'Widerrufen';
$labels['keysend'] = 'Öffentlichen Schlüssel versenden';
$labels['keychpass'] = 'Passwort ändern';
$labels['keyadd'] = 'Schlüssel hinzufügen';
$labels['newkeyident'] = 'Identität';
$labels['newkeypass'] = 'Passwort';
$labels['newkeypassconfirm'] = 'Passwort bestätigen';
$labels['newkeytype'] = 'Schlüsseltyp';
$labels['rsa2048'] = 'RSA - 2048 Bit';
$labels['rsa4096'] = 'RSA - 4096 Bit';
$labels['ecckeypair'] = 'EKK (Elliptische Kurve)';
$labels['keygenerating'] = 'Schlüssel werden erstellt …';
$labels['encryptionoptions'] = 'Verschlüsselungsoptionen';
$labels['encryptmsg'] = 'Diese Nachricht verschlüsseln';
$labels['signmsg'] = 'Diese Nachricht digital signieren';
$labels['sendunencrypted'] = 'Unverschlüsselt senden';
$labels['enterkeypasstitle'] = 'Bitte Schlüsselpasswort eingeben';
$labels['enterkeypass'] = 'Ein Passwort wird benötigt, um den privaten Schlüssel ($keyid) für Benutzer »$user« zu entsperren.';
$labels['attachpubkeymsg'] = 'Meinen öffentlichen Schlüssel anfügen';
$labels['keyexportprompt'] = 'Möchten Sie geheime Schlüssel in die gespeicherte OpenPGP-Schlüsseldatei mit aufnehmen?';
$labels['onlypubkeys'] = 'Nur öffentliche Schlüssel exportieren';
$labels['withprivkeys'] = 'Geheime Schlüssel exportieren';
$labels['findkey'] = 'Auf Schlüsselserver(n) suchen';
$labels['keyimportlabel'] = 'Aus Datei importieren';
$labels['keyimportsearchlabel'] = 'Auf Schlüsselserver(n) suchen';
$labels['managekeys'] = 'PGP-Schlüssel verwalten';
$labels['identitymatchingprivkeys'] = 'Sie haben $nr passende private Schlüssel in Ihrem Schlüsselverzeichnis:';
$labels['identitynoprivkeys'] = 'Für diese Absender-Identität ist bis jetzt kein privater PGP-Schlüsselverzeichnis gespeichert.';
$labels['arialabelkeyexportoptions'] = 'Optionen für Schlüsselexport';
$labels['arialabelkeysearchform'] = 'Suchmaske für Schlüssel';
$labels['arialabelkeyoptions'] = 'Schlüsseloptionen';
$messages['sigvalid'] = 'Signatur von $sender wurde erfolgreich überprüft.';
$messages['sigvalidpartial'] = 'Signatur von $sender wurde überprüft, aber ein Teil der Nachricht wurde nicht signiert.';
$messages['siginvalid'] = 'Ungültige Signatur von $sender.';
$messages['sigunverified'] = 'Unbestätigte Signatur. Zertifikat nicht überprüft. Zertifikatkennung: $keyid. ';
$messages['signokey'] = 'Unbestätigte Signatur. Öffentlicher Schlüssel wurde nicht gefunden. Schlüsselkennung: $keyid.';
$messages['sigerror'] = 'Unbestätigte Signatur. Interner Fehler.';
$messages['decryptok'] = 'Nachricht entschlüsselt.';
$messages['decrypterror'] = 'Entschlüsselung fehlgeschlagen.';
$messages['decryptnokey'] = 'Entschlüsselung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden. Schlüsselkennung: $keyid.';
$messages['decryptnomdc'] = 'Entschlüsselung übersprungen. Nachricht ist nicht integritätsgeschützt.';
$messages['decryptbadpass'] = 'Entschlüsselung fehlgeschlagen. Passwort ungültig.';
$messages['decryptnopass'] = 'Entschlüsselung fehlgeschlagen. Schlüsselpasswort wird benötigt.';
$messages['decryptpartial'] = 'Nachricht entschlüsselt, aber ein Teil der Nachricht wurde nicht verschlüsselt.';
$messages['signerror'] = 'Signierung fehlgeschlagen.';
$messages['signnokey'] = 'Signierung fehlgeschlagen. Privater Schlüssel wurde nicht gefunden.';
$messages['signbadpass'] = 'Signierung fehlgeschlagen. Passwort ungültig.';
$messages['signnopass'] = 'Signierung fehlgeschlagen. Schlüsselpasswort wird benötigt.';
$messages['encrypterror'] = 'Verschlüsselung fehlgeschlagen.';
$messages['encryptnokey'] = 'Verschlüsselung fehlgeschlagen. Öffentlicher Schlüssel für $email nicht gefunden';
$messages['encryptnoprivkey'] = 'Verschlüsselung fehlgeschlagen. Privater Schlüssel nicht gefunden.';
$messages['nokeysfound'] = 'Keine Schlüssel gefunden';
$messages['keynotfound'] = 'Schlüssel nicht gefunden!';
$messages['keyopenerror'] = 'Abrufen der Schlüsselinformationen nicht möglich. Interner Fehler.';
$messages['keylisterror'] = 'Auflisten der Schlüsselinformationen nicht möglich! Interner Fehler.';
$messages['keysimportfailed'] = 'Schlüsselimport fehlgeschlagen! Interner Fehler.';
$messages['keysimportsuccess'] = 'Schlüsselimport erfolgreich. Importiert: $new, unverändert: $old.';
$messages['keyremoving'] = 'Schlüssel werden entfernt …';
$messages['keyremoveconfirm'] = 'Sind Sie sich sicher, dass Sie die ausgewählten Schlüssel entfernen wollen?';
$messages['keyremovesuccess'] = 'Schlüssel erfolgreich gelöscht.';
$messages['keyremoveerror'] = 'Löschung der Schlüssel nicht möglich.';
$messages['keyimporttext'] = 'Private und öffentliche Schlüssel sowie zurückgerufene Signaturen können im ASCII-Armor Format importiert werden.';
$messages['keyimportsearchtext'] = 'Sie können für öffentliche Schlüssel nach dem Schlüsselbezeichner, Benutzername oder der E-Mail-Adresse suchen und diese dann direkt importieren.';
$messages['formerror'] = 'Bitte, alle Eingabefelder ausfüllen. Alle Eingabefelder werden benötigt!';
$messages['passwordsdiffer'] = 'Passwörter stimmen nicht überein.';
$messages['keygenerateerror'] = 'Schlüsselgenerierung fehlgeschlagen.';
$messages['keygeneratesuccess'] = 'Schlüsselpaar erfolgreich generiert und importiert.';
$messages['keygennosupport'] = 'Dein Browser unterstützt keine Kryptopgraphiefunktionen. Konnte Schlüsselpaar nicht generieren!';
$messages['noidentselected'] = 'Sie müssen mindestens eine Identität für den Schlüssel auswählen!';
$messages['nonameident'] = 'Identität muss einen Benutzernamen definiert haben.';
$labels['newkeysize'] = 'Schlüssel-Größe';
$labels['key2048'] = '2048 Bit - Vorgabe';
$labels['key4096'] = '4096 Bit - mehr Sicherheit';
PKwc�\�@@enigma/localization/sv_SE.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Kryptering';
$labels['enigmacerts'] = 'S/MIME-certifikat';
$labels['enigmakeys'] = 'PGP-nycklar';
$labels['keysfromto'] = 'Nyckel $from till $to av $count';
$labels['keyname'] = 'Namn';
$labels['keyid'] = 'Nyckel-ID';
$labels['keyuserid'] = 'Användar-ID';
$labels['keytype'] = 'Nyckeltyp';
$labels['fingerprint'] = 'Fingeravtryck';
$labels['subkeys'] = 'Undernycklar';
$labels['keyprops'] = 'Nyckelegenskaper';
$labels['basicinfo'] = 'Grundläggande information';
$labels['userids'] = 'Ytterligare användare';
$labels['typepublickey'] = 'offentlig nyckel';
$labels['typekeypair'] = 'nyckelpar';
$labels['keyattfound'] = 'Meddelandet innehåller en eller flera bifogade PGP-nycklar.';
$labels['keyattimport'] = 'Importera nyckel';
$labels['typesign'] = 'Signera';
$labels['typeencrypt'] = 'Kryptera';
$labels['typecert'] = 'Intyga';
$labels['typeauth'] = 'Autentisering';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritm';
$labels['subkeycreated'] = 'Skapad';
$labels['subkeyexpires'] = 'Utgår';
$labels['subkeyusage'] = 'Användning';
$labels['expiresnever'] = 'aldrig';
$labels['unknown'] = 'okänd';
$labels['uservalid'] = 'Giltig';
$labels['userid'] = 'ID';
$labels['valid'] = 'giltig';
$labels['supportencryption'] = 'Aktivera kryptering och signering av meddelanden';
$labels['supportsignatures'] = 'Aktivera signaturverifiering i meddelanden';
$labels['supportdecryption'] = 'Aktivera dekryptering av meddelanden';
$labels['signdefault'] = 'Signera alla meddelanden';
$labels['encryptdefault'] = 'Kryptera alla meddelanden';
$labels['attachpubkeydefault'] = 'Bifoga alltid min offentliga nyckel';
$labels['passwordtime'] = 'Använd lösenord till privat nyckel under';
$labels['nminutes'] = '$m min';
$labels['wholesession'] = 'Hela sessionen';
$labels['createkeys'] = 'Nytt nyckelpar ';
$labels['importkeys'] = 'Importera nycklar';
$labels['exportkeys'] = 'Exportera nycklar';
$labels['keyactions'] = 'Hantera nycklar...';
$labels['keyremove'] = 'Ta bort';
$labels['keydisable'] = 'Inaktivera';
$labels['keyrevoke'] = 'Upphäv';
$labels['keysend'] = 'Skicka offentlig nyckel i meddelande';
$labels['keychpass'] = 'Ändra lösenord';
$labels['keyadd'] = 'Lägg till nyckel';
$labels['newkeyident'] = 'Identitet';
$labels['newkeypass'] = 'Lösenord';
$labels['newkeypassconfirm'] = 'Bekräfta lösenord';
$labels['newkeytype'] = 'Nyckeltyp';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptisk kurva)';
$labels['keygenerating'] = 'Skapar nycklar...';
$labels['encryptionoptions'] = 'Krypteringsalternativ...';
$labels['encryptmsg'] = 'Kryptera meddelandet';
$labels['signmsg'] = 'Signera meddelandet';
$labels['sendunencrypted'] = 'Skicka okrypterat';
$labels['enterkeypasstitle'] = 'Ange nyckelns lösenord';
$labels['enterkeypass'] = 'Lösenord behövs för att låsa upp den privata nyckeln ($keyid) för användare $user.';
$labels['attachpubkeymsg'] = 'Bifoga min offentliga nyckel';
$labels['keyexportprompt'] = 'Inkludera privata nycklar i den sparade nyckelfilen för OpenPGP?';
$labels['onlypubkeys'] = 'Exportera endast offentliga nycklar';
$labels['withprivkeys'] = 'Exportera privata nycklar';
$labels['findkey'] = 'Sök nyckel på en eller flera servrar';
$labels['keyimportlabel'] = 'Importera från fil';
$labels['keyimportsearchlabel'] = 'Sök nyckel på en eller flera servrar';
$labels['managekeys'] = 'Hantera PGP-nycklar';
$labels['identitymatchingprivkeys'] = 'Du har $nr passande privata PGP-nycklar lagrade i nyckelringen:';
$labels['identitynoprivkeys'] = 'Avsändaridentiteten har ännu ingen privat PGP-nyckel lagrad i nyckelringen.';
$labels['arialabelkeyexportoptions'] = 'Exportalternativ för nycklar';
$labels['arialabelkeysearchform'] = 'Sökformulär för nycklar';
$labels['arialabelkeyoptions'] = 'Alternativ för nycklar';
$messages['sigvalid'] = 'Signatur verifierad för $sender.';
$messages['sigvalidpartial'] = 'Signatur verifierad för $sender, men meddelandet var delvis osignerat.';
$messages['siginvalid'] = 'Ogiltig signatur från $sender.';
$messages['sigunverified'] = 'Overifierad signatur. Certifikatet är inte verifierat. Certifikat-ID: $keyid.';
$messages['signokey'] = 'Overifierad signatur. Offentlig nyckel otillgänglig. Nyckel-ID: $keyid.';
$messages['sigerror'] = 'Overifierad signatur. Internt fel.';
$messages['decryptok'] = 'Meddelandet är dekrypterat.';
$messages['decrypterror'] = 'Dekrypteringen misslyckades.';
$messages['decryptnokey'] = 'Dekrypteringen misslyckades. Privat nyckel otillgänglig. Nyckel-ID: $keyid.';
$messages['decryptnomdc'] = 'Dekryptering behövs inte. Meddelandet är inte skyddat.';
$messages['decryptbadpass'] = 'Dekrypteringen misslyckades. Fel lösenord.';
$messages['decryptnopass'] = 'Dekrypteringen misslyckades. Ange nyckelns lösenord.';
$messages['decryptpartial'] = 'Meddelandet är dekrypterat, men meddelandet var delvis okrypterat.';
$messages['signerror'] = 'Signeringen misslyckades.';
$messages['signnokey'] = 'Signeringen misslyckades. Privat nyckel otillgänglig.';
$messages['signbadpass'] = 'Signeringen misslyckades. Fel lösenord.';
$messages['signnopass'] = 'Signeringen misslyckades. Ange nyckelns lösenord.';
$messages['encrypterror'] = 'Krypteringen misslyckades.';
$messages['encryptnokey'] = 'Krypteringen misslyckades. Offentlig nyckel otillgänglig för $email.';
$messages['encryptnoprivkey'] = 'Krypteringen misslyckades. Offentlig nyckel kunde inte hittas.';
$messages['nokeysfound'] = 'Inga nycklar hittades.';
$messages['keynotfound'] = 'Nyckeln hittades inte!';
$messages['keyopenerror'] = 'Nyckelinformation kunde inte hämtas. Internt fel.';
$messages['keylisterror'] = 'Nycklar kunde inte listas. Internt fel.';
$messages['keysimportfailed'] = 'Nycklar kunde inte importeras. Internt fel.';
$messages['keysimportsuccess'] = 'Nycklar har importerats. Importerade: $new, oförändrade: $old.';
$messages['keyremoving'] = 'Tar bort nycklar...';
$messages['keyremoveconfirm'] = 'Vill du ta bort markerade nycklar?';
$messages['keyremovesuccess'] = 'Nycklar borttagna.';
$messages['keyremoveerror'] = 'Nycklarna kunde inte tas bort.';
$messages['keyimporttext'] = 'Privata och offentliga nycklar eller återkallande av signaturer kan importeras i formatet ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Offentlig nyckel kan sökas genom att ange identifierare, användarnamn eller mailadress, för att sedan importeras direkt.';
$messages['keystoragenotice'] = 'Samtliga offentliga och privata nycklar lagras på servern.';
$messages['formerror'] = 'Fyll i formulärets samtliga fält.';
$messages['passwordsdiffer'] = 'Bekräftelsen av lösenordet stämmer inte.';
$messages['keygenerateerror'] = 'Nyckelpar kunde inte skapas';
$messages['keygeneratesuccess'] = 'Nyckelpar skapat och importerat.';
$messages['keygennosupport'] = 'Webbläsaren saknar krypteringsfunktion. Nyckelpar kunde inte skapas.';
$messages['noidentselected'] = 'Minst en identitet till nyckeln måste väljas!';
$messages['nonameident'] = 'Användarnamn måste anges.';
$labels['newkeysize'] = 'Nyckelstorlek';
$labels['key2048'] = '2048 bitar - standard';
$labels['key4096'] = '4096 bitar - säkrare';
PKwc�\��,�,enigma/localization/ug.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'شىفىرلاش';
$labels['enigmacerts'] = 'S/MIME ئىجازەتنامىسى';
$labels['enigmakeys'] = 'PGP ئاچقۇچلىرى';
$labels['keysfromto'] = 'from$دىن to$غا count$ ئاچقۇچلار';
$labels['keyname'] = 'ئىسمى';
$labels['keyid'] = 'ئاچقۇچ نۇمۇرى';
$labels['keyuserid'] = 'ئىشلەتكۈچى نۇمۇرى';
$labels['keytype'] = 'ئاچقۇچ تۈرى';
$labels['fingerprint'] = 'بارماق ئىزى';
$labels['subkeys'] = 'بالا-ئاچقۇچلار';
$labels['keyprops'] = 'ئاچقۇچ خاسلىقلىرى';
$labels['basicinfo'] = 'ئادەتتىكى ئۇچۇر';
$labels['userids'] = 'قۇشۇمچە ئىشلەتكۈچىلەر';
$labels['typepublickey'] = 'ئاممىۋىي ئاچقۇچ';
$labels['typekeypair'] = 'ئاچقۇچ جۈپى';
$labels['keyattfound'] = 'بۇ ئۇچۇرغا PGP ئاچقۇچ(لار)ى قىستۇرۇلغان.';
$labels['keyattimport'] = 'ئاچقۇچ(لار)نى كىرگۈزۈش';
$labels['typesign'] = 'ئىمزا قۇيۇش';
$labels['typeencrypt'] = 'شىفىرلەش';
$labels['typecert'] = 'ئىجازەت بېرىش';
$labels['typeauth'] = 'دەلىللەش';
$labels['subkeyid'] = 'نۇمۇر';
$labels['subkeyalgo'] = 'ئالگىرىزىم';
$labels['subkeycreated'] = 'قۇرۇلدى';
$labels['subkeyexpires'] = 'ۋاقتى ئۆتتى';
$labels['subkeyusage'] = 'ئىشلىتىش';
$labels['expiresnever'] = 'ھەرگىز';
$labels['unknown'] = 'ناتۇنۇش';
$labels['uservalid'] = 'ئىناۋەتلىك';
$labels['userid'] = 'نۇمۇر';
$labels['valid'] = 'ئىناۋەتلىك';
$labels['supportencryption'] = 'ئۇچۇر شىفىرلاشنى بار قىلىش ھەمدە ئىمزا قۇيۇش';
$labels['supportsignatures'] = 'ئۇچۇر ئىمزاسىنى تەكشۈرۈشنى بار قىلىش';
$labels['supportdecryption'] = 'ئۇچۇر شىفىرسىزلەشنى بار قىلىش';
$labels['signdefault'] = 'سۈكۈت ھالەتتە ھەممە ئۇچۇرغا ئىمزا قۇيۇش';
$labels['encryptdefault'] = 'سۈكۈت ھالەتتە ھەممە ئۇچۇرنى شىفىرلاش';
$labels['attachpubkeydefault'] = 'سۈكۈت ھالەتتە مېنىڭ ئاممىۋىي PGP ئاچقۇچۇمنى قىستۇرۇش';
$labels['passwordtime'] = 'شەخسىي ئاچقۇچ مەخپىي نۇمۇرۇمنى ساقلاپ قېلىش';
$labels['nminutes'] = 'm$ مىنۇت(لار)';
$labels['wholesession'] = 'بارلىق باسقۇچ';
$labels['createkeys'] = 'بىر يېڭى ئاچقۇچ جۈپى ياساش';
$labels['importkeys'] = 'ئاچقۇچ(لار)نى كىرگۈزۈش';
$labels['exportkeys'] = 'ئاچقۇچ(لار)نى چىقىرىش';
$labels['keyactions'] = 'ئاچقۇچ ھەركەتلىرى...';
$labels['keyremove'] = 'ئۆچۈرۈش';
$labels['keydisable'] = 'يوق-قىلىش';
$labels['keyrevoke'] = 'تارتىۋېلىش';
$labels['keysend'] = 'ئۇچۇردا ئاممىۋىي ئاچقۇچنى ئەۋەتىش';
$labels['keychpass'] = 'مەخپىي نۇمۇرنى ئۆزگەرتىش';
$labels['keyadd'] = 'ئاچقۇچ قېتىش';
$labels['newkeyident'] = 'كىملىك';
$labels['newkeypass'] = 'مەخپىي نۇمۇر';
$labels['newkeypassconfirm'] = 'مەخپىي نۇمۇرنى جەزىملەشتۈرۈش';
$labels['newkeytype'] = 'ئاچقۇچ تۈرى';
$labels['rsa2048'] = '2048 بىتلىق RSA';
$labels['rsa4096'] = '4096 بىتلىق RSA';
$labels['ecckeypair'] = 'ECC (ئىللىپتىك ياي)';
$labels['keygenerating'] = 'ئاچقۇچلارنى ياساۋاتىدۇ...';
$labels['encryptionoptions'] = 'شىفىرلاش تاللانمىلىرى...';
$labels['encryptmsg'] = 'بۇ ئۇچۇرنى شىفىرلاش';
$labels['signmsg'] = 'بۇ ئۇچۇرغا رەقەملىك ئىمزا قۇيۇش';
$labels['sendunencrypted'] = 'شىفىرسىز ئەۋەتىش';
$labels['enterkeypasstitle'] = 'ئاچقۇچ پارولىنى كىرگۈزۈش';
$labels['enterkeypass'] = 'بۇ ئىشلەتكۈچى ئۈچۈن مەخپىي ئاچقۇچ (keyid$)نى بوشىتىشقا پارول كېرەك بولىدۇ: user$.';
$labels['attachpubkeymsg'] = 'مېنىڭ ئاممىۋىي ئاچقۇچۇمنى قىستۇرۇش';
$labels['keyexportprompt'] = 'سىز مەخپىي ئاچقۇچلارنىڭ ساقلانغان OpenPGP ئاچقۇچ ھۆججىتىدە بۇلىشىنى خالامسىز؟';
$labels['onlypubkeys'] = 'پەقەتلا ئاممىۋىي ئاچقۇچلارنى چىقىرىش';
$labels['withprivkeys'] = 'مەخپىي ئاچقۇچلارنى چىقىرىش';
$labels['findkey'] = 'ئاچقۇچ مۇلازىمېتىر(لار)ىدىن ئىزدەش';
$labels['keyimportlabel'] = 'ھۆججەتتىن كىرگۈزۈش';
$labels['keyimportsearchlabel'] = 'ئاچقۇچ مۇلازىمېتىر(لار)ىدىن ئىزدەش';
$labels['managekeys'] = 'PGP ئاچقۇچلىرىنى باشقۇرۇش';
$labels['identitymatchingprivkeys'] = 'سىزنىڭ ئاچقۇچ زەنجىرىڭىزدە nr$ ماس كىلىدىغان PGP شەخسىي ئاچقۇچلىرىڭىز ساقلانغان:';
$labels['identitynoprivkeys'] = 'بۇ ئەۋەتكۈچىنىڭ كىملىكىدە تېخى سىزنىڭ ئاچقۇچ زەنجىرىڭىزدە ساقلانغان شەخسىيپ PGP ئاچقۇچى يوق.';
$labels['arialabelkeyexportoptions'] = 'ئاچقۇچ چىقىرىش تاللانمىلىرى';
$labels['arialabelkeysearchform'] = 'ئاچقۇچ ئىزدەش جەدىۋېلى';
$labels['arialabelkeyoptions'] = 'ئاچقۇچ تاللانمىلىرى';
$messages['sigvalid'] = 'sender$ نىڭ دەلىللەنگەن ئىمزاسى';
$messages['sigvalidpartial'] = 'sender$ نىڭ دەلىللەنگەن ئىمزاسى، مەزمۇننىڭ بىر قىسمى ئىمزالانمىغان';
$messages['siginvalid'] = 'sender$ نىڭ ئىناۋەتسىز ئىمزاسى بار';
$messages['sigunverified'] = 'دەلىللەنمىگەن ئىمزا. كىنىشكا دەلىللەنمىدى. كىنىشكا نۇمۇرى: keyid$';
$messages['signokey'] = 'دەلىللەنمىگەن ئىمزا. ئاممىۋىي ئاچقۇچ تېپىلمىدى. ئاچقۇچ نۇمۇرى: keyid$.';
$messages['sigerror'] = 'دەلىللەنمىگەن ئىمزا. ئىچكى خاتالىق.';
$messages['decryptok'] = 'ئۇچۇر شىفىرسىزلاندى.';
$messages['decrypterror'] = 'شىفىرسىزلاش مەغلۇپ بولدى.';
$messages['decryptnokey'] = 'شىفىرسىزلاش مەغلۇپ بولدى. شەخسىي ئاچقۇچ تېپىلمىدى. ئاچقۇچ نۇمۇرى: keyid$.';
$messages['decryptnomdc'] = 'شىفىرسىزلاش ئۆتكۈزۈلدى. ئۇچۇر توغرىلىقى قوغدالمىدى.';
$messages['decryptbadpass'] = 'شىفىرسىزلاش مەغلۇپ بولدى. ئىناۋەتسىز مەخپىي نۇمۇر.';
$messages['decryptnopass'] = 'شىفىرسىزلاش مەغلۇپ بولدى. ئاچقۇچ پارولى تەلەپ قىلىندى.';
$messages['decryptpartial'] = 'ئۇچۇر شىفىرسىزلەندى، لىكىن بىر قىسمى شىفىرلانمىغان.';
$messages['signerror'] = 'ئىمزا-قۇيۇش مەغلۇپ بولدى.';
$messages['signnokey'] = 'ئىمزا-قۇيۇش مەغلۇپ بولدى. شەخسىي ئاچقۇچ تېپىلمىدى.';
$messages['signbadpass'] = 'ئىمزا-قۇيۇش مەغلۇپ بولدى. ئىناۋەتسىز مەخپىي نۇمۇر.';
$messages['signnopass'] = 'ئىمزا-قۇيۇش مەغلۇپ بولدى. ئاچقۇچ پارولى تەلەپ قىلىندى.';
$messages['encrypterror'] = 'شىفىرلاش مەغلۇپ بولدى.';
$messages['encryptnokey'] = 'شىفىرلاش مەغلۇپ بولدى. ئاممىۋىي ئاچقۇچ email$ ئۈچۈن تېپىلمىدى.';
$messages['encryptnoprivkey'] = 'شىفىرلاش مەغلۇپ بولدى. شەخسىي ئاچقۇچ تېپىلمىدى.';
$messages['nokeysfound'] = 'ھېچقانداق ئاچقۇچ تېپىلمىدى';
$messages['keynotfound'] = 'ئاچقۇچ تېپىلمىدى!';
$messages['keyopenerror'] = 'ئاچقۇچ ئۇچۇرىغا ئېرىشكىلى بولمىدى! ئىچكىي خاتالىق.';
$messages['keylisterror'] = 'ئاچقۇچلارنى تىزغىلى بولمىدى! ئىچكىي خاتالىق.';
$messages['keysimportfailed'] = 'ئاچقۇچ(لار)نى كىرگۈزگىلى بولمىدى! ئىچكىي خاتالىق.';
$messages['keysimportsuccess'] = 'ئاچقۇچ(لار) مۇۋاپىقىيەتلىك كىرگۈزۈلدى. كىرگۈزدى: new$، ئۆزگەرمىدى: old$.';
$messages['keyremoving'] = 'ئاچقۇچ(لار)نى ئۆچۈرىۋاتىدۇ...';
$messages['keyremoveconfirm'] = 'تاللانغان ئاچقۇچ(لار)نى ئۆچۈرۈشنى جەزىملەشتۈرەمسىز؟';
$messages['keyremovesuccess'] = 'ئاچقۇچ(لار) مۇۋاپىقىيەتلىك ئۆچۈرۈلدى';
$messages['keyremoveerror'] = 'ئاچقۇچ(لار)نى ئۆچۈرۈشكە بولمىدى.';
$messages['keyimporttext'] = 'سىز شەخسىي ھەمدە ئاممىۋىي ئاچقۇچ(لار)نى ياكى ASCII-Armor تىپىدىكى تارتىۋېلىش ئىمزالىرىنى كىرگۈزەلەيسىز.';
$messages['keyimportsearchtext'] = 'سىز ئاممىۋىي ئاچقۇچلارنى ئاچقۇچ بەلگىسى، ئىشلەتكۈچى ئىسمى، ئېلىخەت ئادىرسى بىلەن ئىزدىيەلەيسىز ھەمدە ئۇلارنى بىۋاستە كىرگۈزەلەيسىز.';
$messages['keystoragenotice'] = 'بارلىق ئاممىۋىي ھەمدە شەخسىي ئاچقۇچلار بۇ مۇلازىمېتىردا ساقلىندۇ.';
$messages['formerror'] = 'بۇ جەدىۋەلنى تولدۇرۇڭ. ھەممە كاتەكچىلەر مەجبۇرىي!';
$messages['passwordsdiffer'] = 'مەخپىي نۇمۇرلار ماس كەلمىدى!';
$messages['keygenerateerror'] = 'ئاچقۇچ جۈپىنى ياسىغىلى بولمىدى';
$messages['keygeneratesuccess'] = 'ئاچقۇچ جۈپى مۇۋاپىقىيەتلىك ياسالدى ھەمدە كىرگۈزۈلدى.';
$messages['keygennosupport'] = 'سىزنىڭ تور كۆرگۈچىڭىز شىفىرلاشنى قوللىمايدۇ. ئاچقۇچ جۈپىنى ياسىغىلى بولمىدى!';
$messages['noidentselected'] = 'سىز بۇ ئاچقۇچقا ئەڭ ئاز دىگەندە بىر كىملىكنى تاللىشىڭىز كېرەك!';
$messages['nonameident'] = 'كىملىكتە چۇقۇم بىر ئىشلەتكۈچى ئىسمى بەلگىلەنگەن بۇلىشى كېرەك!';
$labels['newkeysize'] = 'ئاچقۇچ چوڭلۇقى';
$labels['key2048'] = 'سۈكۈت - 2048 بىت';
$labels['key4096'] = 'بەكرەك بىخەتەر - 4096 بىت';
PKwc�\m-��� � enigma/localization/ko_KR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = '암호화';
$labels['enigmacerts'] = 'S/MIME 인증서';
$labels['enigmakeys'] = 'PGP 키';
$labels['keysfromto'] = '키 총 $count개 중 $from 번째 부터 $to 번째까지';
$labels['keyname'] = '이름';
$labels['keyid'] = '키 ID';
$labels['keyuserid'] = '사용자 ID';
$labels['keytype'] = '키 유형';
$labels['fingerprint'] = '지문';
$labels['subkeys'] = '하위 키';
$labels['keyprops'] = '키 속성';
$labels['basicinfo'] = '기본 정보';
$labels['userids'] = '추가 사용자';
$labels['typepublickey'] = '공개 키';
$labels['typekeypair'] = '키 페어';
$labels['keyattfound'] = '이 메시지는 첨부된 PGP 키를 포함합니다.';
$labels['keyattimport'] = '키 가져오기';
$labels['typesign'] = '서명';
$labels['typeencrypt'] = '암호화';
$labels['typecert'] = '인증';
$labels['typeauth'] = '인증';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = '알고리즘';
$labels['subkeycreated'] = '생성일';
$labels['subkeyexpires'] = '만료일';
$labels['subkeyusage'] = '사용도';
$labels['expiresnever'] = '하지 않음';
$labels['unknown'] = '알 수 없음';
$labels['uservalid'] = '유효';
$labels['userid'] = 'ID';
$labels['valid'] = '유효';
$labels['supportencryption'] = '메시지 암호화 및 서명 추가 활성화';
$labels['supportsignatures'] = '메시지 서명 검증 활성화';
$labels['supportdecryption'] = '메시지 복호화 활성화';
$labels['signdefault'] = '기본적으로 모든 메시지에 서명 추가';
$labels['encryptdefault'] = '기본적으로 모든 메시지 암호화';
$labels['attachpubkeydefault'] = '내 공개 PGP 키를 기본으로 첨부';
$labels['passwordtime'] = '비공개 키 암호를 다음 기간동안 유지';
$labels['nminutes'] = '$m분';
$labels['wholesession'] = '전체 세션';
$labels['createkeys'] = '새로운 키 페어 생성';
$labels['importkeys'] = '키 가져오기';
$labels['exportkeys'] = '키 내보내기';
$labels['keyactions'] = '키 동작...';
$labels['keyremove'] = '제거';
$labels['keydisable'] = '비활성화';
$labels['keyrevoke'] = '폐기';
$labels['keysend'] = '메시지에 공개 키 전송';
$labels['keychpass'] = '암호 변경';
$labels['keyadd'] = '키 추가';
$labels['newkeyident'] = '신원';
$labels['newkeypass'] = '암호';
$labels['newkeypassconfirm'] = '암호 확인';
$labels['newkeytype'] = '키 유형';
$labels['rsa2048'] = 'RSA - 2048 비트';
$labels['rsa4096'] = 'RSA - 4096 비트';
$labels['ecckeypair'] = 'ECC (타원 곡선)';
$labels['keygenerating'] = '키를 생성하는 중...';
$labels['encryptionoptions'] = '암호화 옵션...';
$labels['encryptmsg'] = '이 메시지를 암호화';
$labels['signmsg'] = '이 메시지에 디지털 서명 추가';
$labels['sendunencrypted'] = '암호화하지 않은 채로 전송';
$labels['enterkeypasstitle'] = '키 암호문 입력';
$labels['enterkeypass'] = '다음 사용자에 대한 비밀 키($keyid)의 잠금을 해제하려면 암호문이 필요합니다: $user.';
$labels['attachpubkeymsg'] = '내 공개 키 첨부';
$labels['keyexportprompt'] = '암호 키를 저장된 OpenPGP 키 파일에 포함하시겠습니까?';
$labels['onlypubkeys'] = '공개 키만 내보내기';
$labels['withprivkeys'] = '비밀 키 내보내기';
$labels['findkey'] = '키 서버에서 검색';
$labels['keyimportlabel'] = '파일에서 가져오기';
$labels['keyimportsearchlabel'] = '키 서버에서 검색';
$labels['managekeys'] = 'PGP 키 관리';
$labels['identitymatchingprivkeys'] = '열쇠고리에 저장된 PGP 개인 키 중 $nr개 일치하는 키가 있습니다:';
$labels['identitynoprivkeys'] = '현재 보내는 사람 신원에는 열쇠고리에 저장된 PGP 개인 키가 없습니다.';
$labels['arialabelkeyexportoptions'] = '키 내보내기 옵션';
$labels['arialabelkeysearchform'] = '키 검색 상자';
$labels['arialabelkeyoptions'] = '키 옵션';
$messages['sigvalid'] = '$sender이(가) 보낸 검증된 서명.';
$messages['sigvalidpartial'] = '$sender의 검증된 서명이긴 하나, 본문 일부가 서명되지 않았습니다.';
$messages['siginvalid'] = '$sender이(가) 보낸 검증되지 않은 서명.';
$messages['sigunverified'] = '검증되지 않은 서명. 인증서가 검증되지 않음. 인증서 ID: $keyid.';
$messages['signokey'] = '검증되지 않은 서명. 공개 키를 찾을 수 없습니다. 키 ID: $keyid.';
$messages['sigerror'] = '검증되지 않은 서명. 내부 오류.';
$messages['decryptok'] = '메시지가 복호화됨.';
$messages['decrypterror'] = '복호화에 실패함.';
$messages['decryptnokey'] = '복호화에 실패함. 비공개 키를 찾을 수 없음. 키 ID: $keyid.';
$messages['decryptnomdc'] = '복호화를 건너뛰었습니다. 메시지 무결성이 보호되지 않습니다.';
$messages['decryptbadpass'] = '복호화에 실패함. 잘못된 암호.';
$messages['decryptnopass'] = '복호화에 실패함. 키 암호가 필요합니다.';
$messages['decryptpartial'] = '메시지가 복호화됐지만 본문 일부가 암호화 되지 않았습니다.';
$messages['signerror'] = '서명 추가에 실패함.';
$messages['signnokey'] = '서명 추가에 실패함. 비공개 키를 찾을 수 없음.';
$messages['signbadpass'] = '서명에 실패함. 잘못된 암호.';
$messages['signnopass'] = '서명 추가에 실패함. 키 암호가 필요합니다.';
$messages['encrypterror'] = '암호화에 실패함.';
$messages['encryptnokey'] = '암호화에 실패함. $email에 대한 공개 키를 찾을 수 없음.';
$messages['encryptnoprivkey'] = '암호화에 실패했습니다. 비공개 키를 찾을 수 없습니다.';
$messages['nokeysfound'] = '키를 찾을 수 없음';
$messages['keynotfound'] = '키를 발견하지 못함!';
$messages['keyopenerror'] = '키 정보를 얻을 수 없음! 내부 오류.';
$messages['keylisterror'] = '키 목록을 표시할 수 없음! 내부 오류.';
$messages['keysimportfailed'] = '키를 가져올 수 없음! 내부 오류.';
$messages['keysimportsuccess'] = '키를 성공적으로 가져옴. 가져옴: $new개, 변경되지 않음: $old개.';
$messages['keyremoving'] = '키를 제거하는 중...';
$messages['keyremoveconfirm'] = '정말로 선택한 키를 삭제하시겠습니까?';
$messages['keyremovesuccess'] = '키가 성공적으로 삭제되었습니다';
$messages['keyremoveerror'] = '선택한 키를 삭제하지 못함.';
$messages['keyimporttext'] = '비공개 및 공개 키 또는 폐기 서명을 ASCII-Armor 형식으로 가져올 수 있습니다.';
$messages['keyimportsearchtext'] = '키 식별자, 사용자명 또는 이메일 주소로 공개 키를 검색하신 후에, 직접 가져오실 수 있습니다.';
$messages['keystoragenotice'] = '모든 공개 및 비밀 키는 서버에 저장됩니다.';
$messages['formerror'] = '양식을 작성해주세요. 모든 필드가 채워져야 합니다!';
$messages['passwordsdiffer'] = '암호가 일치하지 않음!';
$messages['keygenerateerror'] = '키 페어 생성을 실패함';
$messages['keygeneratesuccess'] = '키 페어가 성공적으로 생성되었고 가져왔습니다.';
$messages['keygennosupport'] = '웹 브라우저가 암호화를 지원하지 않습니다. 키 페어를 생성하지 못함!';
$messages['noidentselected'] = '적어도 키에 대한 하나 이상의 신원을 선택하셔야 합니다!';
$messages['nonameident'] = '신원에는 사용자명이 정의되어야 합니다!';
$labels['newkeysize'] = '키 크기';
$labels['key2048'] = '2048 비트 - 기본';
$labels['key4096'] = '4096 비트 - 보안 강화';
PKwc�\������enigma/localization/gl_ES.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['keyname'] = 'Nome';
$labels['subkeycreated'] = 'Creado';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'descoñecido';
$labels['keychpass'] = 'Cambiar contrasinal';
$labels['newkeypass'] = 'Contrasinal';
PKwc�\�~'�( ( enigma/localization/it_IT.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Criptare';
$labels['enigmacerts'] = 'Certificati S/MIME';
$labels['enigmakeys'] = 'Chiavi PGP';
$labels['keysfromto'] = 'Chiavi da $from a $to di $count';
$labels['keyname'] = 'Nome';
$labels['keyid'] = 'ID della chiave';
$labels['keyuserid'] = 'ID utente';
$labels['keytype'] = 'Tipo chiave';
$labels['fingerprint'] = 'Fingerprint';
$labels['subkeys'] = 'Sottochiavi';
$labels['keyprops'] = 'Proprietà chiave';
$labels['basicinfo'] = 'Informazioni base';
$labels['userids'] = 'Utenti aggiuntivi';
$labels['typepublickey'] = 'chiave pubblica';
$labels['typekeypair'] = 'coppia di chiavi';
$labels['keyattfound'] = 'Questo messaggio contiene chiavi PGP in allegato.';
$labels['keyattimport'] = 'Importa chiave(i)';
$labels['typesign'] = 'Firma';
$labels['typeencrypt'] = 'Cifra';
$labels['typecert'] = 'Certifica';
$labels['typeauth'] = 'Autenticazione';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmo';
$labels['subkeycreated'] = 'Creazione';
$labels['subkeyexpires'] = 'Scadenza';
$labels['subkeyusage'] = 'Utilizzo';
$labels['expiresnever'] = 'mai';
$labels['unknown'] = 'sconosciuto';
$labels['uservalid'] = 'Valido';
$labels['userid'] = 'ID';
$labels['valid'] = 'valido';
$labels['supportencryption'] = 'Abilita cifratura firma del messaggio';
$labels['supportsignatures'] = 'Abilita la verifica delle firme dei messaggi';
$labels['supportdecryption'] = 'Abilita la decifrazione del messaggio';
$labels['signdefault'] = 'Firma tutti i messaggi in modo predefinito';
$labels['encryptdefault'] = 'Cifra tutti i messaggi in modo predefinito';
$labels['attachpubkeydefault'] = 'Allega la mia chiave pubblica PGP in modo predefinito';
$labels['passwordtime'] = 'Mantiene le password delle chiavi private per ';
$labels['nminutes'] = '$m minuti';
$labels['wholesession'] = 'l\'intera sessione';
$labels['createkeys'] = 'Crea una nuova coppia di chiavi';
$labels['importkeys'] = 'Importa chiave(i)';
$labels['exportkeys'] = 'Esporta chiave(i)';
$labels['keyactions'] = 'Azione chiave...';
$labels['keyremove'] = 'Rimuovi';
$labels['keydisable'] = 'Disabilita';
$labels['keyrevoke'] = 'Revoca';
$labels['keysend'] = 'Invia una chiave pubblica in un messaggio';
$labels['keychpass'] = 'Cambia password';
$labels['keyadd'] = 'Aggiungi chiave';
$labels['newkeyident'] = 'Identità';
$labels['newkeypass'] = 'Password';
$labels['newkeypassconfirm'] = 'Conferma password';
$labels['newkeytype'] = 'Tipo chiave';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Generazione chiavi...';
$labels['encryptionoptions'] = 'Opzioni di cifratura...';
$labels['encryptmsg'] = 'Cifra questo messaggio';
$labels['signmsg'] = 'Firma digitalmente questo messaggio';
$labels['sendunencrypted'] = 'Invia non cifrato';
$labels['enterkeypasstitle'] = 'Inserisci frase sicura della chiave';
$labels['enterkeypass'] = 'È richiesta una frase segreta per sbloccare la chiave ($keyid) per l\'utente: $user.';
$labels['attachpubkeymsg'] = 'Allega la mia chiave pubblica';
$labels['keyexportprompt'] = 'Vuoi includere le chiavi segrete nel file delle chiavi OpenPGP salvato?';
$labels['onlypubkeys'] = 'Esporta solo chiavi pubbliche';
$labels['withprivkeys'] = 'Esporta chiavi segrete';
$labels['findkey'] = 'Cerca nei server';
$labels['keyimportlabel'] = 'Importa da file';
$labels['keyimportsearchlabel'] = 'Cerca nei server';
$labels['managekeys'] = 'Gestisci chiavi PGP';
$labels['identitymatchingprivkeys'] = 'Hai $nr chiavi private PGP corrispondenti memorizzate nel tuo portachiavi:';
$labels['identitynoprivkeys'] = 'L\'identità del mittente non ha ancora una chiave privata PGP memorizzata nel tuo portachiavi.';
$labels['arialabelkeyexportoptions'] = 'Opzioni esportazione chiave';
$labels['arialabelkeysearchform'] = 'Modulo di ricerca chiavi';
$labels['arialabelkeyoptions'] = 'Opzioni Chiave';
$messages['sigvalid'] = 'Firma da $sender verificata.';
$messages['sigvalidpartial'] = 'Firma da $sender verificata, ma parte del corpo del messaggio non è firmata.';
$messages['siginvalid'] = 'Firma non valida da $sender.';
$messages['sigunverified'] = 'Firma non verificata. Certificato non verificato. ID certificato: $keyid.';
$messages['signokey'] = 'Firma non verificata. Chiave pubblica non trovata. ID chiave: $keyid.';
$messages['sigerror'] = 'Firma non verificata. Errore interno.';
$messages['decryptok'] = 'Messaggio decifrato.';
$messages['decrypterror'] = 'Decifrazione non riuscita.';
$messages['decryptnokey'] = 'Decifrazione non riuscita. Chiave privata non trovata. ID chiave: $keyid.';
$messages['decryptnomdc'] = 'Decrittazione esclusa. L\'integrità del messaggio non è protetta.';
$messages['decryptbadpass'] = 'Decifrazione non riuscita. Password non valida.';
$messages['decryptnopass'] = 'Decifrazione non riuscita. Password della chiave richiesta.';
$messages['decryptpartial'] = 'Messaggio decifrato, ma parte del corpo del messaggio non è firmata.';
$messages['signerror'] = 'Firma non riuscita.';
$messages['signnokey'] = 'Firma non riuscita. Chiave privata non trovata.';
$messages['signbadpass'] = 'Firma non riuscita. Password non valida.';
$messages['signnopass'] = 'Firma non riuscita. Password della chiave richiesta.';
$messages['encrypterror'] = 'Cifratura non riuscita.';
$messages['encryptnokey'] = 'Cifratura non riuscita. Chiave pubblica non trovata per $email.';
$messages['encryptnoprivkey'] = 'Crittografia fallita. Chiave privata non trovata.';
$messages['nokeysfound'] = 'Nessuna chiave trovata';
$messages['keynotfound'] = 'Chiave non trovata!';
$messages['keyopenerror'] = 'Impossibile ottenere informazioni sulla chiave. Errore interno.';
$messages['keylisterror'] = 'Impossibile elencare le chiavi. Errore interno.';
$messages['keysimportfailed'] = 'Impossibile importare la/le chiave/i. Errore interno.';
$messages['keysimportsuccess'] = 'Chiave/i importata/e correttamente. Importate: $new, non modificate: $old.';
$messages['keyremoving'] = 'Rimozione chiave/i...';
$messages['keyremoveconfirm'] = 'Sei sicuro di volere eliminare la/le chiave/i selezionata/e?';
$messages['keyremovesuccess'] = 'Chiave/i eliminata/e correttamente';
$messages['keyremoveerror'] = 'Impossibile eliminare la/le chiave/i selezionata/e.';
$messages['keyimporttext'] = 'Puoi importare chiavi private e pubbliche o firme di revoca in formato ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Puoi cercare chiavi pubbliche in base all\'identificatore della chiave, per nome utente o indirizzo di posta elettronica e quindi importarle direttamente.';
$messages['keystoragenotice'] = 'Tutte le chiavi pubbliche e private sono memorizzate sul server.';
$messages['formerror'] = 'Riempire il modulo. Tutti i campi sono richiesti.';
$messages['passwordsdiffer'] = 'Le password non corrispondono.';
$messages['keygenerateerror'] = 'Generazione di una coppia di chiavi non riuscita';
$messages['keygeneratesuccess'] = 'Una coppia di chiavi generata e importata correttamente.';
$messages['keygennosupport'] = 'Il browser non supporta la crittografia. Impossibile generare una coppia di chiavi.';
$messages['noidentselected'] = 'Devi selezionare almeno un\'identità per la chiave.';
$messages['nonameident'] = 'L\'identità deve avere un nome utente definito.';
$labels['newkeysize'] = 'Dimensione chiave';
$labels['key2048'] = '2048 bit - predefinito';
$labels['key4096'] = '4096 bit - più sicuro';
PKwc�\g_y�o o enigma/localization/es_ES.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Cifrado';
$labels['enigmacerts'] = 'Certificados S/MIME';
$labels['enigmakeys'] = 'Claves PGP';
$labels['keysfromto'] = 'Claves $from hasta $to de $count';
$labels['keyname'] = 'Nombre';
$labels['keyid'] = 'ID de Clave';
$labels['keyuserid'] = 'ID de Usuario';
$labels['keytype'] = 'Tipo de Clave';
$labels['fingerprint'] = 'Huella dactilar';
$labels['subkeys'] = 'Subclaves';
$labels['keyprops'] = 'Propiedades de la clave';
$labels['basicinfo'] = 'Información Básica';
$labels['userids'] = 'Usuarios Adicionales';
$labels['typepublickey'] = 'clave pública';
$labels['typekeypair'] = 'par de claves';
$labels['keyattfound'] = 'Este mensaje contiene adjunto una(s) clave(s) PGP.';
$labels['keyattimport'] = 'Importar clave(s)';
$labels['typesign'] = 'Firmar';
$labels['typeencrypt'] = 'Cifrar';
$labels['typecert'] = 'Certificar';
$labels['typeauth'] = 'Autentificación';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmo';
$labels['subkeycreated'] = 'Creado';
$labels['subkeyexpires'] = 'Expira';
$labels['subkeyusage'] = 'Uso';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'desconocido';
$labels['uservalid'] = 'Válido';
$labels['userid'] = 'ID';
$labels['valid'] = 'válido';
$labels['supportencryption'] = 'Habilitar el cifrado de mensajes y firma';
$labels['supportsignatures'] = 'Activar la verificación de firmas de mensajes';
$labels['supportdecryption'] = 'Habilitar descifrado de mensaje';
$labels['signdefault'] = 'Firmar todos los mensajes por defecto';
$labels['encryptdefault'] = 'Cifrar todos los mensajes por defecto';
$labels['attachpubkeydefault'] = 'Adjuntar mi clave PGP pública por defecto';
$labels['passwordtime'] = 'Mantenga las contraseñas de clave privada durante';
$labels['nminutes'] = '$m minuto(s)';
$labels['wholesession'] = 'toda la sesión';
$labels['createkeys'] = 'Crear un nuevo par de claves';
$labels['importkeys'] = 'Importar clave(s)';
$labels['exportkeys'] = 'Exportar clave(s)';
$labels['keyactions'] = 'Acciones sobre la clave...';
$labels['keyremove'] = 'Eliminar';
$labels['keydisable'] = 'Deshabilitar';
$labels['keyrevoke'] = 'Revocar';
$labels['keysend'] = 'Enviar clave pública en un mensaje';
$labels['keychpass'] = 'Cambiar contraseña';
$labels['keyadd'] = 'Agregar clave';
$labels['newkeyident'] = 'Identidad';
$labels['newkeypass'] = 'Contraseña';
$labels['newkeypassconfirm'] = 'Confirmar contraseña';
$labels['newkeytype'] = 'Tipo de clave';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Curva elíptica)';
$labels['keygenerating'] = 'Generando claves...';
$labels['encryptionoptions'] = 'Opciones de cifrado...';
$labels['encryptmsg'] = 'Cifrar este mensaje';
$labels['signmsg'] = 'Firmar digitalmente este mensaje';
$labels['sendunencrypted'] = 'Enviar sin cifrar';
$labels['enterkeypasstitle'] = 'Escriba la frase de contraseña';
$labels['enterkeypass'] = 'Se necesita una contraseña para desbloquear la clave secreta ($keyid) para el usuario: $user.';
$labels['attachpubkeymsg'] = 'Adjuntar mi clave pública';
$labels['keyexportprompt'] = '¿Quiere incluir claves secretas en el archivo guardado de claves OpenPGP?';
$labels['onlypubkeys'] = 'Exportar Sólo las Claves Públicas';
$labels['withprivkeys'] = 'Exportar las Claves Secretas';
$labels['findkey'] = 'Buscar en servidor(es) de claves';
$labels['keyimportlabel'] = 'Importar desde archivo';
$labels['keyimportsearchlabel'] = 'Buscar en servidor(es) de claves';
$labels['managekeys'] = 'Gestionar claves PGP';
$labels['identitymatchingprivkeys'] = 'Tiene $nr claves privadas PGP coincidentes en el anillo de claves:';
$labels['identitynoprivkeys'] = 'Esta identidad remitente no tiene aún una clave privada almacenada en el anillo de claves.';
$labels['arialabelkeyexportoptions'] = 'Opciones de claves de exportación';
$labels['arialabelkeysearchform'] = 'Formulario de búsqueda de claves';
$labels['arialabelkeyoptions'] = 'Opciones de clave';
$messages['sigvalid'] = 'Firma verificada de $sender.';
$messages['sigvalidpartial'] = 'Firma verificada de $sender, pero parte parte del cuerpo no estaba firmado.';
$messages['siginvalid'] = 'Firma inválida de $sender.';
$messages['sigunverified'] = 'Firma no verificada. Error interno. Clave pública no encontrada. ID del Certificado: $keyid.';
$messages['signokey'] = 'Firma no verificada. Error interno. Clave pública no encontrada. ID de Clave: $keyid.';
$messages['sigerror'] = 'Firma no verificada. Error interno.';
$messages['decryptok'] = 'Mensaje descifrado.';
$messages['decrypterror'] = 'Descifrado fallido.';
$messages['decryptnokey'] = 'Descifrado fallido. Clave privada no encontrada. ID de Clave: $keyid.';
$messages['decryptnomdc'] = 'Se ha saltado el descifrado. La integridad del mensaje no está protegida.';
$messages['decryptbadpass'] = 'Descifrado fallido. Contraseña inválida.';
$messages['decryptnopass'] = 'Descifrado fallido. Contraseña requerida.';
$messages['decryptpartial'] = 'Mensaje descifrado, pero parte del cuerpo no estaba cifrado.';
$messages['signerror'] = 'Falló la firma.';
$messages['signnokey'] = 'Falló la firma. Clave privada no encontrada.';
$messages['signbadpass'] = 'Falló la firma. Contraseña inválida.';
$messages['signnopass'] = 'Falló la firma. Contraseña requerida.';
$messages['encrypterror'] = 'Cifrado fallido.';
$messages['encryptnokey'] = 'Cifrado fallido. Clave pública no encontrada para $email.';
$messages['encryptnoprivkey'] = 'Cifrado fallido. No se encontró la clave privada.';
$messages['nokeysfound'] = 'No se encontraron claves';
$messages['keynotfound'] = '¡Clave no encontrada!';
$messages['keyopenerror'] = '¡No se puede obtener la información de clave! Error interno.';
$messages['keylisterror'] = '¡No es posible enumerar las claves! Error interno.';
$messages['keysimportfailed'] = '¡No se puede(n) importar la(s) clave(s)! Error interno.';
$messages['keysimportsuccess'] = 'Clave(s) importada(s) correctamente. Importado: $new, sin cambios: $old.';
$messages['keyremoving'] = 'Eliminando clave(s)...';
$messages['keyremoveconfirm'] = '¿Seguro que quiere eliminar la(s) clave(s) seleccionada(s)?';
$messages['keyremovesuccess'] = 'Clave(s) eliminada(s) correctamente.';
$messages['keyremoveerror'] = 'No se han podido borrar las clave(s) seleccionadas.';
$messages['keyimporttext'] = 'Puede importar la(s) clave(s) privada(s) y pública(s) o firmas de revocación en formato ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Puede buscar claves por identificador de clave, nombre de usuario o dirección de email y después importarlas directamente.';
$messages['keystoragenotice'] = 'Todas las claves públicas y privadas son guardadas en el servidor.';
$messages['formerror'] = 'Por favor rellene el formulario. ¡Todos los campos son obligatorios!';
$messages['passwordsdiffer'] = '¡Las contraseñas no coinciden!';
$messages['keygenerateerror'] = 'No se ha podido generar un par de claves';
$messages['keygeneratesuccess'] = 'Un par de claves generadas e importadas correctamente.';
$messages['keygennosupport'] = 'Su navegador web no soporta criptografía. ¡No se puede generar un par de claves!';
$messages['noidentselected'] = '¡Tiene que seleccionar al menos una identidad para la clave!';
$messages['nonameident'] = '¡La identidad debe de tener un nombre de usuario definido!';
$labels['newkeysize'] = 'Tamaño de clave';
$labels['key2048'] = '2048 bits - por defecto';
$labels['key4096'] = '4096 bits - más seguro';
PKwc�\��3XXenigma/localization/ml_IN.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['subkeycreated'] = 'നിര്‍മ്മിച്ചു';
$labels['expiresnever'] = 'ഒരിക്കലുമില്ല';
$labels['unknown'] = 'അറിയാത്ത';
$labels['keychpass'] = 'രഹസ്യവാക്ക് മാറ്റുക';
$labels['newkeypass'] = 'രഹസ്യവാക്ക്';
PKwc�\�����enigma/localization/nl_NL.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Versleuteling';
$labels['enigmacerts'] = 'S/MIME-certificaten';
$labels['enigmakeys'] = 'PGP-sleutels';
$labels['keysfromto'] = 'Sleutels $from t/m $to van $count';
$labels['keyname'] = 'Naam';
$labels['keyid'] = 'Sleutel-ID';
$labels['keyuserid'] = 'Gebruiker-ID';
$labels['keytype'] = 'Sleuteltype';
$labels['fingerprint'] = 'Vingerafdruk';
$labels['subkeys'] = 'Subsleutels';
$labels['keyprops'] = 'Sleutel eigenschappen';
$labels['basicinfo'] = 'Algemene informatie';
$labels['userids'] = 'Extra gebruikers';
$labels['typepublickey'] = 'publieke sleutel';
$labels['typekeypair'] = 'sleutelpaar';
$labels['keyattfound'] = 'Dit bericht bevat bijgevoegde PGP-sleutel(s).';
$labels['keyattimport'] = 'Importeer sleutel(s)';
$labels['typesign'] = 'Onderteken';
$labels['typeencrypt'] = 'Versleutel';
$labels['typecert'] = 'Certificeren';
$labels['typeauth'] = 'Authenticatie';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritme';
$labels['subkeycreated'] = 'Aangemaakt';
$labels['subkeyexpires'] = 'Verloopt';
$labels['subkeyusage'] = 'Gebruik';
$labels['expiresnever'] = 'nooit';
$labels['unknown'] = 'onbekend';
$labels['uservalid'] = 'Geldig';
$labels['userid'] = 'ID';
$labels['valid'] = 'geldig';
$labels['supportencryption'] = 'Berichtversleuteling en -ondertekening inschakelen';
$labels['supportsignatures'] = 'Verificatie van berichtondertekening inschakelen';
$labels['supportdecryption'] = 'Berichtontsleuteling inschakelen';
$labels['signdefault'] = 'Onderteken standaard alle berichten';
$labels['encryptdefault'] = 'Versleutel standaard alle berichten';
$labels['attachpubkeydefault'] = 'Voeg mijn publieke PGP-sleutel standaard bij';
$labels['passwordtime'] = 'Onthoud geheime sleutelwachtwoorden voor';
$labels['nminutes'] = '$m minuten';
$labels['wholesession'] = 'de hele sessie';
$labels['createkeys'] = 'Maak een nieuw sleutelpaar aan';
$labels['importkeys'] = 'Importeer sleutel(s)';
$labels['exportkeys'] = 'Exporteer sleutel(s)';
$labels['keyactions'] = 'Sleutelacties...';
$labels['keyremove'] = 'Verwijderen';
$labels['keydisable'] = 'Uitschakelen';
$labels['keyrevoke'] = 'Intrekken';
$labels['keysend'] = 'Verstuur publieke sleutel in een bericht';
$labels['keychpass'] = 'Wijzig wachtwoord';
$labels['newkeyident'] = 'identiteit';
$labels['newkeypass'] = 'Wachtwoord';
$labels['newkeypassconfirm'] = 'Wachtwoord bevestigen';
$labels['newkeytype'] = 'Sleuteltype';
$labels['keygenerating'] = 'Sleutels genereren...';
$labels['encryptionoptions'] = 'Versleutelingsopties...';
$labels['encryptmsg'] = 'Versleutel dit bericht';
$labels['signmsg'] = 'Onderteken dit bericht digitaal';
$labels['sendunencrypted'] = 'Niet versleuteld versturen';
$labels['enterkeypasstitle'] = 'Voer sleutelwachtwoord in';
$labels['enterkeypass'] = 'Een wachtwoord is vereist om de geheime sleutel ($keyid) te openen voor gebruiker: $user.';
$labels['attachpubkeymsg'] = 'Voeg mijn publieke sleutel bij';
$labels['keyexportprompt'] = 'Wilt u geheime sleutels bewaren in het opgeslagen OpenPGP-sleutelbestand?';
$labels['onlypubkeys'] = 'Alleen publieke sleutels exporteren';
$labels['withprivkeys'] = 'Geheime sleutels exporteren';
$labels['findkey'] = 'Zoek op keyserver(s)';
$labels['keyimportlabel'] = 'Importeer van bestand';
$labels['keyimportsearchlabel'] = 'Zoek op sleutel server(s)';
$labels['managekeys'] = 'PGP sleutels beheren';
$labels['identitymatchingprivkeys'] = 'U heeft $nr overeenkomende PGP-privésleutels opgeslagen.';
$labels['identitynoprivkeys'] = 'De afzender heeft (nog) geen PGP-privésleutel opgeslagen.';
$labels['arialabelkeyexportoptions'] = 'Opties voor sleutels exporteren';
$messages['sigvalid'] = 'Ondertekening van $sender geverifieerd.';
$messages['sigvalidpartial'] = 'Ondertekening van $sender geverifieerd, maar een deel van de inhoud was niet ondertekend.';
$messages['siginvalid'] = 'Ongeldige ondertekening van $sender.';
$messages['sigunverified'] = 'Niet-geverifieerde ondertekening. Certificaat niet geverifieerd. Certificaat-ID: $keyid.';
$messages['signokey'] = 'Niet-geverifieerde ondertekening. Publieke sleutel niet gevonden. Sleutel-ID: $keyid.';
$messages['sigerror'] = 'Niet-geverifieerde ondertekening. Interne fout.';
$messages['decryptok'] = 'Bericht ontsleuteld.';
$messages['decrypterror'] = 'Ontsleutelen mislukt.';
$messages['decryptnokey'] = 'Ontsleutelen mislukt. Geheime sleutel niet gevonden. Sleutel-ID: $keyid.';
$messages['decryptnomdc'] = 'Ontsleutelen overgeslaan. Het bericht is niet correct versleuteld.';
$messages['decryptbadpass'] = 'Ontsleutelen mislukt. Wachtwoord onjuist.';
$messages['decryptnopass'] = 'Ontsleutelen mislukt. Sleutelwachtwoord vereist.';
$messages['decryptpartial'] = 'Bericht ontsleuteld, maar een deel van de inhoud was niet versleuteld.';
$messages['signerror'] = 'Ondertekenen mislukt.';
$messages['signnokey'] = 'Ondertekenen mislukt. Geheime sleutel niet gevonden.';
$messages['signbadpass'] = 'Ondertekenen mislukt. Wachtwoord onjuist.';
$messages['signnopass'] = 'Ondertekenen mislukt. Sleutelwachtwoord vereist.';
$messages['encrypterror'] = 'Versleutelen mislukt.';
$messages['encryptnokey'] = 'Onsleutelen mislukt. Publieke sleutel niet gevonden voor $email.';
$messages['encryptnoprivkey'] = 'Versleutelen mislukt. Geheime sleutel niet gevonden';
$messages['nokeysfound'] = 'Geen sleutels gevonden';
$messages['keynotfound'] = 'Sleutel niet gevonden';
$messages['keyopenerror'] = 'Sleutelinformatie kan niet worden opgehaald! Interne fout.';
$messages['keylisterror'] = 'Sleutels kunnen niet worden weergegeven! Interne fout.';
$messages['keysimportfailed'] = 'Sleutel(s) kunnen niet worden geïmporteerd! Interne fout.';
$messages['keysimportsuccess'] = 'Sleutel(s) succesvol geïmporteerd. Geïmporteerd: $new, ongewijzigd: $old.';
$messages['keyremoving'] = 'Sleutel(s) verwijderen...';
$messages['keyremoveconfirm'] = 'Weet u zeker dat u de geselecteerde sleutel(s) wilt verwijderen?';
$messages['keyremovesuccess'] = 'Sleutel(s) succesvol verwijderd';
$messages['keyremoveerror'] = 'Geselecteerde sleutel(s) kunnen niet worden verwijderd.';
$messages['keyimporttext'] = 'U kunt geheime en publieke sleutel(s) of intrek-ondertekeningen importeren in ASCII-Armor formaat.';
$messages['keyimportsearchtext'] = 'U kunt naar publieke sleutels zoeken op basis van sleutel identifier, gebruikersnaam of e-mailadres en ze vervolgens direct importeren.';
$messages['formerror'] = 'Vul alstublieft het formulier in. Alle velden zijn vereist!';
$messages['passwordsdiffer'] = 'Wachtwoorden komen niet overeen!';
$messages['keygenerateerror'] = 'Genereren van een sleutelpaar is mislukt';
$messages['keygeneratesuccess'] = 'Een sleutelpaar is succesvol gegenereerd en geïmporteerd.';
$messages['keygennosupport'] = 'Uw webbrowser ondersteunt geen cryptografie. Sleutelpaar genereren is mislukt!';
$messages['noidentselected'] = 'Je dient minimaal een identiteit te selecteren voor de sleutel!';
$messages['nonameident'] = 'Identiteit moet een gebruikersnaam hebben!';
$labels['newkeysize'] = 'Sleutel grootte';
$labels['key2048'] = '2048 bits - standaard';
$labels['key4096'] = '4096 bits - veiliger';
PKwc�\�_t��enigma/localization/cy_GB.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Amgryptiad';
$labels['enigmacerts'] = 'Tystysgrifau S/MIME';
$labels['enigmakeys'] = 'Allweddi PGP';
$labels['keysfromto'] = 'Allweddi $from i $to o $count';
$labels['keyname'] = 'Enw';
$labels['keyid'] = 'ID Allwedd';
$labels['keyuserid'] = 'ID Defnyddiwr';
$labels['keytype'] = 'Math o allwedd';
$labels['fingerprint'] = 'Olion bys';
$labels['subkeys'] = 'Isallweddi';
$labels['keyprops'] = 'Nodweddion allwed';
$labels['basicinfo'] = 'Gwybodaeth sylfaenol';
$labels['userids'] = 'Defnyddwyr Ychwanegol';
$labels['typepublickey'] = 'allwedd gyhoeddus';
$labels['typekeypair'] = 'pâr allweddi';
$labels['keyattfound'] = 'Mae\'r neges hwn yn cynnwys allwedd(i) PGP.';
$labels['keyattimport'] = 'Mewnforio allwedd(i)';
$labels['typesign'] = 'Llofnodi';
$labels['typeencrypt'] = 'Amgryptio';
$labels['typecert'] = 'Tystio';
$labels['typeauth'] = 'Dilysiad';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorithm';
$labels['subkeycreated'] = 'Crëwyd';
$labels['subkeyexpires'] = 'Yn darfod';
$labels['subkeyusage'] = 'Defnydd';
$labels['expiresnever'] = 'byth';
$labels['unknown'] = 'anhysbys';
$labels['uservalid'] = 'Dilys';
$labels['userid'] = 'ID';
$labels['valid'] = 'dilys';
$labels['supportencryption'] = 'Galluogi amgryptio neges a llofnodi';
$labels['supportsignatures'] = 'Galluogi dilys llofnodion neges';
$labels['supportdecryption'] = 'Galluogi dadgryptio neges';
$labels['signdefault'] = 'Llofnodi pob neges yn ddiofyn';
$labels['encryptdefault'] = 'Amgryptio pob neges yn ddiofyn';
$labels['attachpubkeydefault'] = 'Atodi fy allwedd PGP cyhoeddus yn ddiofyn';
$labels['passwordtime'] = 'Cadw cyfrineiriau allweddi preifat am';
$labels['nminutes'] = '$m munud';
$labels['wholesession'] = 'y sesiwn i gyd';
$labels['createkeys'] = 'Creu pâr allweddi newydd';
$labels['importkeys'] = 'Mewnforio allwedd(i)';
$labels['exportkeys'] = 'Allforio allwedd(i)';
$labels['keyactions'] = 'Gweithredoedd allwedd...';
$labels['keyremove'] = 'Dileu';
$labels['keydisable'] = 'Analluogi';
$labels['keyrevoke'] = 'Dirymu';
$labels['keysend'] = 'Danfon allwedd gyhoeddus mewn neges';
$labels['keychpass'] = 'Newid cyfrinair';
$labels['keyadd'] = 'Ychwanegu allwedd';
$labels['newkeyident'] = 'Hunaniaeth';
$labels['newkeypass'] = 'Cyfrinair';
$labels['newkeypassconfirm'] = 'Cadarnhau cyfrinair';
$labels['newkeytype'] = 'Math o allwedd';
$labels['rsa2048'] = 'RSA - 2048 did';
$labels['rsa4096'] = 'RSA - 4096 did';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Yn creu allweddi...';
$labels['encryptionoptions'] = 'Dewisiadau amgryptio...';
$labels['encryptmsg'] = 'Amgryptio\'r neges hwn';
$labels['signmsg'] = 'Llofnodi\'r neges yma yn ddigidol';
$labels['sendunencrypted'] = 'Danfon heb amgodi';
$labels['enterkeypasstitle'] = 'Rhowch yr ymadrodd cyfrin';
$labels['enterkeypass'] = 'Mae angen ymadrodd cyfrin i ddatgloi allwedd breifat ($keyid) ar gyfer defnyddiwr: $user:';
$labels['attachpubkeymsg'] = 'Atodi fy allwedd cyhoeddus';
$labels['keyexportprompt'] = 'Ydych eisiau cynnwys allweddi cyfrinachol yn y ffeil OpenPGP i\'w gadw?';
$labels['onlypubkeys'] = 'Allforio Allweddi Cyhoeddus yn unig';
$labels['withprivkeys'] = 'Allforio Allweddi Cyfrinachol';
$labels['findkey'] = 'Chwilio ar weinydd(wyr) allweddi';
$labels['keyimportlabel'] = 'Mewnforio o ffeil';
$labels['keyimportsearchlabel'] = 'Chwilio ar weinydd(wyr) allweddi';
$labels['managekeys'] = 'Rheoli allweddi PGP';
$labels['identitymatchingprivkeys'] = 'Mae gennych $nr allwedd preifat cyfatebol wedi eu storio yn eich cylch allwedd:';
$labels['identitynoprivkeys'] = 'Nid oes gan y danfonwr hwn allwedd preifat PGP wedi ei storio yn eich estyniad cylch allwedd.';
$labels['arialabelkeyexportoptions'] = 'Dewisiadau allforio allweddi';
$labels['arialabelkeysearchform'] = 'Ffurflen chwilio Allweddi';
$labels['arialabelkeyoptions'] = 'Dewisiadau allwedd';
$messages['sigvalid'] = 'Llofnod wedi ddilysu o $sender.';
$messages['sigvalidpartial'] = 'Llofnod wedi ddilysu o $sender, ond ni arwyddywyd rhan o gorff y neges';
$messages['siginvalid'] = 'Llofnod annilys o $sender.';
$messages['sigunverified'] = 'Llofnod heb ei ddilysu. Tystysgrif heb ei ddilys. ID Tystysgrif: $keyid.';
$messages['signokey'] = 'Llofnod heb ei ddilysu. Allwedd gyhoeddus heb ei ganfod. ID Allwedd: $keyid.';
$messages['sigerror'] = 'Llofnod heb ei ddilysu. Gwall mewnol.';
$messages['decryptok'] = 'Neges wedi ei ddadgryptio.';
$messages['decrypterror'] = 'Dadgryptio wedi methu.';
$messages['decryptnokey'] = 'Dadgryptio wedi methu. Allwedd breifat heb ei ganfod: ID Allwedd: $keyid.';
$messages['decryptnomdc'] = 'Hepgorwyd y dadgryptio. Nid yw cywirdeb y neges wedi ei wirio.';
$messages['decryptbadpass'] = 'Dadgryptio wedi methu. Cyfrinair annilys.';
$messages['decryptnopass'] = 'Dadgryptio wedi methu. Mae angen cyfrinair.';
$messages['decryptpartial'] = 'Dadgryptiwyd y neges, ond roedd darn o gorff y neges heb ei amgryptio';
$messages['signerror'] = 'Llofnodi wedi methu.';
$messages['signnokey'] = 'Llofnodi wedi methu. Allwedd breifat heb ei ganfod.';
$messages['signbadpass'] = 'Llofnodi wedi methu. Cyfrinair annilys.';
$messages['signnopass'] = 'Llofnodi wedi methu. Mae angen cyfrinair.';
$messages['encrypterror'] = 'Amgryptio wedi methu.';
$messages['encryptnokey'] = 'Amgryptio wedi methu. Allwedd cyhoeddus heb ei ganfod ar gyfer $email.';
$messages['encryptnoprivkey'] = 'Dadgryptio wedi methu. Allwedd breifat heb ei ganfod.';
$messages['nokeysfound'] = 'Ni ganfuwyd unrhyw allweddi';
$messages['keynotfound'] = 'Ni ganfuwyd yr allwedd!';
$messages['keyopenerror'] = 'Methwyd cael gwybodaeth allwedd! Gwall mewnol.';
$messages['keylisterror'] = 'Methwyd cael rhestr allweddi! Gwall mewnol';
$messages['keysimportfailed'] = 'Methwyd mewnforio allwedd(i)! Gwall mewnol.';
$messages['keysimportsuccess'] = 'Mewnforiwyd allwedd(i) yn llwyddiannus. Mewnforiwyd: $new, heb newid: $old.';
$messages['keyremoving'] = 'Yn dileu allwedd(i)...';
$messages['keyremoveconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu yr allwedd(i) dewiswyd?';
$messages['keyremovesuccess'] = 'Allwedd(i) wedi ei dileu yn llwyddiannus';
$messages['keyremoveerror'] = 'Methwyd dileu yr allwedd(i) dewiswyd.';
$messages['keyimporttext'] = 'Fe allwch chi mewnforio allwedd(i) preifat a chyhoeddus neu lofnodion pallu mewn fformat ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Gallwch chwilio am allweddi cyhoeddus yn ol adnabydd allwedd, enw defnyddiwr neu gyfeiriad ebost ac yna eu mewnforio yn uniongyrchol.';
$messages['keystoragenotice'] = 'Mae\'r holl allweddi cyhoeddus a preifat yn cael eu stori ar y gweinydd.';
$messages['formerror'] = 'Llenwch y ffurflen os gwelwch yn dda. Mae angen llenwi pob maes!';
$messages['passwordsdiffer'] = 'Nid yw\'r cyfrineiriau yn cyfateb!';
$messages['keygenerateerror'] = 'Methwyd creu pâr allweddi';
$messages['keygeneratesuccess'] = 'Creuwyd a mewnforiwyd pâr allweddi yn llwyddiannus.';
$messages['keygennosupport'] = 'Nid yw\'ch porwr gwe yn cefnogi amgryptio. Methwyd creu pâr allweddi!';
$messages['noidentselected'] = 'Rhaid i chi ddewis o leiaf un hunaniaeth i\'r allwedd!';
$messages['nonameident'] = 'Rhaid i\'r personoliaeth gael enw defnyddiwr wedi ei ddiffinio!';
$labels['newkeysize'] = 'Maint allwedd';
$labels['key2048'] = '2048 did - diofyn';
$labels['key4096'] = '4096 did - mwy cadarn';
PKwc�\�'ٙ�enigma/localization/en_GB.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Encryption';
$labels['enigmacerts'] = 'S/MIME Certificates';
$labels['enigmakeys'] = 'PGP Keys';
$labels['keysfromto'] = 'Keys $from to $to of $count';
$labels['keyname'] = 'Name';
$labels['keyid'] = 'Key ID';
$labels['keyuserid'] = 'User ID';
$labels['keytype'] = 'Key type';
$labels['fingerprint'] = 'Fingerprint';
$labels['subkeys'] = 'Subkeys';
$labels['keyprops'] = 'Key properties';
$labels['basicinfo'] = 'Basic Information';
$labels['userids'] = 'Additional Users';
$labels['typepublickey'] = 'public key';
$labels['typekeypair'] = 'key pair';
$labels['keyattfound'] = 'This message contains attached PGP key(s).';
$labels['keyattimport'] = 'Import key(s)';
$labels['typesign'] = 'Sign';
$labels['typeencrypt'] = 'Encrypt';
$labels['typecert'] = 'Certify';
$labels['typeauth'] = 'Authentication';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algorithm';
$labels['subkeycreated'] = 'Created';
$labels['subkeyexpires'] = 'Expires';
$labels['subkeyusage'] = 'Usage';
$labels['expiresnever'] = 'never';
$labels['unknown'] = 'unknown';
$labels['uservalid'] = 'Valid';
$labels['userid'] = 'ID';
$labels['valid'] = 'valid';
$labels['supportencryption'] = 'Enable message encryption and signing';
$labels['supportsignatures'] = 'Enable message signatures verification';
$labels['supportdecryption'] = 'Enable message decryption';
$labels['signdefault'] = 'Sign all messages by default';
$labels['encryptdefault'] = 'Encrypt all messages by default';
$labels['attachpubkeydefault'] = 'Attach my public PGP key by default';
$labels['passwordtime'] = 'Keep private key passwords for';
$labels['nminutes'] = '$m minute(s)';
$labels['wholesession'] = 'the whole session';
$labels['createkeys'] = 'Create a new key pair';
$labels['importkeys'] = 'Import key(s)';
$labels['exportkeys'] = 'Export key(s)';
$labels['keyactions'] = 'Key actions...';
$labels['keyremove'] = 'Remove';
$labels['keydisable'] = 'Disable';
$labels['keyrevoke'] = 'Revoke';
$labels['keysend'] = 'Send public key in a message';
$labels['keychpass'] = 'Change password';
$labels['keyadd'] = 'Add key';
$labels['newkeyident'] = 'Identity';
$labels['newkeypass'] = 'Password';
$labels['newkeypassconfirm'] = 'Confirm password';
$labels['newkeytype'] = 'Key type';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Generating keys...';
$labels['encryptionoptions'] = 'Encryption options...';
$labels['encryptmsg'] = 'Encrypt this message';
$labels['signmsg'] = 'Digitally sign this message';
$labels['sendunencrypted'] = 'Send unencrypted';
$labels['enterkeypasstitle'] = 'Enter key passphrase';
$labels['enterkeypass'] = 'A passphrase is needed to unlock the secret key ($keyid) for user: $user.';
$labels['attachpubkeymsg'] = 'Attach my public key';
$labels['keyexportprompt'] = 'Do you want to include secret keys in the saved OpenPGP keys file?';
$labels['onlypubkeys'] = 'Export Public Keys Only';
$labels['withprivkeys'] = 'Export Secret Keys';
$labels['findkey'] = 'Search on key server(s)';
$labels['keyimportlabel'] = 'Import from file';
$labels['keyimportsearchlabel'] = 'Search on key server(s)';
$labels['managekeys'] = 'Manage PGP keys';
$labels['identitymatchingprivkeys'] = 'You have $nr matching PGP private keys stored in your keyring:';
$labels['identitynoprivkeys'] = 'This sender identity doesn\'t yet have a PGP private key stored in your keyring.';
$labels['arialabelkeyexportoptions'] = 'Keys export options';
$labels['arialabelkeysearchform'] = 'Keys search form';
$labels['arialabelkeyoptions'] = 'Key options';
$messages['sigvalid'] = 'Verified signature from $sender.';
$messages['sigvalidpartial'] = 'Verified signature from $sender, but part of the body was not signed.';
$messages['siginvalid'] = 'Invalid signature from $sender.';
$messages['sigunverified'] = 'Unverified signature. Certificate not verified. Certificate ID: $keyid.';
$messages['signokey'] = 'Unverified signature. Public key not found. Key ID: $keyid.';
$messages['sigerror'] = 'Unverified signature. Internal error.';
$messages['decryptok'] = 'Message decrypted.';
$messages['decrypterror'] = 'Decryption failed.';
$messages['decryptnokey'] = 'Decryption failed. Private key not found. Key ID: $keyid.';
$messages['decryptnomdc'] = 'Decryption skipped. Message is not integrity protected.';
$messages['decryptbadpass'] = 'Decryption failed. Invalid password.';
$messages['decryptnopass'] = 'Decryption failed. Key password required.';
$messages['decryptpartial'] = 'Message decrypted, but part of the body was not encrypted.';
$messages['signerror'] = 'Signing failed.';
$messages['signnokey'] = 'Signing failed. Private key not found.';
$messages['signbadpass'] = 'Signing failed. Invalid password.';
$messages['signnopass'] = 'Signing failed. Key password required.';
$messages['encrypterror'] = 'Encryption failed.';
$messages['encryptnokey'] = 'Encryption failed. Public key not found for $email.';
$messages['encryptnoprivkey'] = 'Encryption failed. Private key not found.';
$messages['nokeysfound'] = 'No keys found';
$messages['keynotfound'] = 'Key not found!';
$messages['keyopenerror'] = 'Unable to get key information! Internal error.';
$messages['keylisterror'] = 'Unable to list keys! Internal error.';
$messages['keysimportfailed'] = 'Unable to import key(s)! Internal error.';
$messages['keysimportsuccess'] = 'Key(s) imported successfully. Imported: $new, unchanged: $old.';
$messages['keyremoving'] = 'Removing key(s)...';
$messages['keyremoveconfirm'] = 'Are you sure, you want to delete selected key(s)?';
$messages['keyremovesuccess'] = 'Key(s) deleted successfully';
$messages['keyremoveerror'] = 'Unable to delete selected key(s).';
$messages['keyimporttext'] = 'You can import private and public key(s) or revocation signatures in ASCII-Armor format.';
$messages['keyimportsearchtext'] = 'You can search for public keys by key identifier, user name or email address and then import them directly.';
$messages['keystoragenotice'] = 'All public and private keys are stored on the server.';
$messages['formerror'] = 'Please fill in the form. All fields are required!';
$messages['passwordsdiffer'] = 'Passwords do not match!';
$messages['keygenerateerror'] = 'Failed to generate a key pair';
$messages['keygeneratesuccess'] = 'A key pair generated and imported successfully.';
$messages['keygennosupport'] = 'Your web browser does not support cryptography. Unable to generate a key pair!';
$messages['noidentselected'] = 'You have to select at least one identity for the key!';
$messages['nonameident'] = 'Identity must have a user name defined!';
$labels['newkeysize'] = 'Key size';
$labels['key2048'] = '2048 bits - default';
$labels['key4096'] = '4096 bits - more secure';
PKwc�\1����enigma/localization/fo_FO.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Brongla';
$labels['enigmacerts'] = 'S/MIME skjal';
$labels['enigmakeys'] = 'PGP lyklar';
$labels['keysfromto'] = 'Lyklar frá $from til $to av $count';
$labels['keyname'] = 'Navn';
$labels['keyid'] = 'Lykla ID';
$labels['keyuserid'] = 'Brúkara ID';
$labels['keytype'] = 'Lykla týpa';
$labels['fingerprint'] = 'Fingramerki';
$labels['subkeys'] = 'Undir lyklar';
$labels['basicinfo'] = 'Grund upplýsingar';
$labels['userids'] = 'Eyka brúkarar';
$labels['typepublickey'] = 'almenna lykil';
$labels['typekeypair'] = 'lykla par';
$labels['keyattfound'] = 'Hesi boð innihalda viðheftar PGP lyklar';
$labels['keyattimport'] = 'Innflyt lyk(lar/il)';
$labels['typesign'] = 'Undirskriva';
$labels['typeencrypt'] = 'Brongla';
$labels['typecert'] = 'Vátta';
$labels['typeauth'] = 'Samgildi';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritma';
$labels['subkeycreated'] = 'Stovna';
$labels['subkeyexpires'] = 'Gongur út';
$labels['subkeyusage'] = 'Brúksla';
$labels['expiresnever'] = 'aldrin';
$labels['unknown'] = 'ókent';
$labels['uservalid'] = 'Gildigt';
$labels['userid'] = 'ID';
$labels['valid'] = 'Gildigt';
$labels['supportencryption'] = 'Tendra boð brongling og undirskriving';
$labels['supportsignatures'] = 'Tendra váttan av undirskriftum';
$labels['supportdecryption'] = 'Tendra boð óbrongsling';
$labels['signdefault'] = 'Undirskriva øll boð vanliga';
$labels['encryptdefault'] = 'Brongla øll boð vanligt';
$labels['passwordtime'] = 'Goym loyniorð hjá loyndarlykilum fyri';
$labels['nminutes'] = '$m minutt(ir)';
$labels['wholesession'] = 'øll setanin';
$labels['createkeys'] = 'Skapa nýtt lykla par';
$labels['importkeys'] = 'Innflyt lyk(lar/il)';
$labels['exportkeys'] = 'Flyt út lyklar';
$labels['keyactions'] = 'Lykla gerðir';
$labels['keyremove'] = 'Strika';
$labels['keydisable'] = 'Sløkk';
$labels['keyrevoke'] = 'Sig úr gildi';
$labels['keysend'] = 'Send almennan lykil í einum boðum';
$labels['keychpass'] = 'Broyt loyniorð';
$labels['newkeypass'] = 'Loyniorð';
$labels['newkeytype'] = 'Lykla týpa';
$labels['keygenerating'] = 'Framleiður lyklar...';
$labels['encryptionoptions'] = 'Bronglu møguleikar';
$labels['encryptmsg'] = 'Brongla hesi boð';
$labels['signmsg'] = 'Undirskriva hesi boð';
$labels['enterkeypasstitle'] = 'Skriva loyniorð';
$labels['enterkeypass'] = 'Tað er tørvur á einum loyniorðið fyri at stongja upp loyndar-lykilin ($keyid) hjá brúkara:';
$labels['keyimportlabel'] = 'Inflyt frá fílu';
$labels['arialabelkeyexportoptions'] = 'Lykla út flytingar møguleikar';
$messages['sigvalid'] = 'Váttað undirskrift frá $sender.';
$messages['siginvalid'] = 'Ógildig undirskrift frá $sender.';
$messages['sigunverified'] = 'Óvátta undirskrift: skjal er ikki vátta. Skjal ID: $keyid.';
$messages['signokey'] = 'Óvátta undirskrift. Almennur lykil var ikki funnin. Lykla ID: $keyid.';
$messages['sigerror'] = 'Óvátta boð. Innanhýsis feilur.';
$messages['decryptok'] = 'Boðini eru óbrongla';
$messages['decrypterror'] = 'Feilur kom í óbrongslingina.';
$messages['decryptnokey'] = 'Óbrongsling riggaði ikki. Loyndarlykilin var ikki funnin. Lykila ID: $keyid.';
$messages['decryptnopass'] = 'Óbrongslan riggaði ikki. Lykla loyniorð er neyðugt.';
$messages['signerror'] = 'Undirskriving riggaði ikki.';
$messages['signnokey'] = 'Undirskriving riggaði ikki. Eingin privat lyki funnin';
$messages['signnopass'] = 'Undirskriving riggaði ikki. Lykla loyniorð er neyðugt.';
$messages['encrypterror'] = 'Brongsling riggaði ikk';
$messages['encryptnokey'] = 'Brongsling riggaði ikki. Almennur lykil var ikki funnin fyri $email';
$messages['nokeysfound'] = 'Eingir lyklar vóru funnir';
$messages['keyopenerror'] = 'Bar ikki til at fáa upplýsingar um lyklar! Innanhýsis feilur';
$messages['keylisterror'] = 'Bar ikki til at lista lyklar! Innanhýsis feilur';
$messages['keysimportfailed'] = 'Bar ikki til at innflyta lyk(il/lar)! Innanhýsis feilur';
$messages['keysimportsuccess'] = 'Lykar innfluttir. Innflutt: $new, óbroyttir: $old.';
$messages['keyremoving'] = 'Strikar lyk(il/lar)';
$messages['keyremoveconfirm'] = 'Ert tú vísur í, at tú vilt strika hesar lyklar?';
$messages['keyremovesuccess'] = 'Lyk(il/lar) eru strikaðir';
$messages['keyremoveerror'] = 'Ber ikki til at strika lyk(il/lar)';
$messages['keyimporttext'] = 'Tú kanst innflyta almennar og privat lyklar ella taka aftur undirskriftir í ASCII-Armor formati';
$messages['formerror'] = 'Vinarliga fylla allan formin. Øll felt eru kravd!';
$messages['passwordsdiffer'] = 'Loyniorðini eru ikki eins!';
$messages['keygenerateerror'] = 'Feilur kom í, tá roynt var at framleiða lykla par';
$messages['keygeneratesuccess'] = 'Eitt lykla-par var framleitt og inn flutt';
$messages['keygennosupport'] = 'Tín kagari dugur ikki dulmálsvísindi. Ber ikki til at framleiða lykla par';
$messages['nonameident'] = 'samleiki má hava eitt brúkaranavn';
$labels['key2048'] = '2048 bit - vanligt';
$labels['key4096'] = '4096 bits - meiri trygt';
PKwc�\b�<�; ; enigma/localization/lt_LT.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Šifravimas';
$labels['enigmacerts'] = 'S/MIME liudijimai';
$labels['enigmakeys'] = 'PGP raktai';
$labels['keysfromto'] = '$from – $to raktai iš $count';
$labels['keyname'] = 'Vardas';
$labels['keyid'] = 'Rakto ID';
$labels['keyuserid'] = 'Naudotojo ID';
$labels['keytype'] = 'Rakto tipas';
$labels['fingerprint'] = 'Kontrolinis kodas';
$labels['subkeys'] = 'Porakčiai';
$labels['keyprops'] = 'Rakto savybės';
$labels['basicinfo'] = 'Pagrindinė informacija';
$labels['userids'] = 'Papildomi naudotojai';
$labels['typepublickey'] = 'viešasis raktas';
$labels['typekeypair'] = 'raktų pora';
$labels['keyattfound'] = 'Šiame laiške aptiktas PGP raktas (raktai).';
$labels['keyattimport'] = 'Importuoti raktą (raktus)';
$labels['typesign'] = 'Pasirašyti';
$labels['typeencrypt'] = 'Šifruoti';
$labels['typecert'] = 'Liudyti';
$labels['typeauth'] = 'Autentikacija';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmas';
$labels['subkeycreated'] = 'Sukurtas';
$labels['subkeyexpires'] = 'Galioja iki';
$labels['subkeyusage'] = 'Naudotinas';
$labels['expiresnever'] = 'neterminuotai';
$labels['unknown'] = 'nežinoma';
$labels['uservalid'] = 'Galioja';
$labels['userid'] = 'ID';
$labels['valid'] = 'galioja';
$labels['supportencryption'] = 'Įgalinti laiškų šifravimą ir pasirašymą';
$labels['supportsignatures'] = 'Įgalinti laiškų parašų tikrinimą';
$labels['supportdecryption'] = 'Įgalinti laiškų iššifravimą';
$labels['signdefault'] = 'Numatytai pasirašinėti visus laiškus';
$labels['encryptdefault'] = 'Numatytai šifruoti visus laiškus';
$labels['attachpubkeydefault'] = 'Visada prisegti mano viešąjį raktą prie laiško.';
$labels['passwordtime'] = 'Saugoti privačiųjų raktų slaptažodžius';
$labels['nminutes'] = '$m min.';
$labels['wholesession'] = 'visą seanso laiką';
$labels['createkeys'] = 'Kurti naują raktų porą';
$labels['importkeys'] = 'Importuoti raktus';
$labels['exportkeys'] = 'Eksportuoti raktus';
$labels['keyactions'] = 'Raktų veiksmai…';
$labels['keyremove'] = 'Šalinti';
$labels['keydisable'] = 'Išjungti';
$labels['keyrevoke'] = 'Atšaukti';
$labels['keysend'] = 'Siųsti viešąjį raktą kartu su laišku';
$labels['keychpass'] = 'Keisti slaptažodį';
$labels['keyadd'] = 'Pridėti raktą';
$labels['newkeyident'] = 'Tapatybė';
$labels['newkeypass'] = 'Slaptažodis';
$labels['newkeypassconfirm'] = 'Pakartokite slaptažodį';
$labels['newkeytype'] = 'Rakto tipas';
$labels['rsa2048'] = 'RSA - 2048 bitų';
$labels['rsa4096'] = 'RSA - 4096 bitų';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Raktai generuojami…';
$labels['encryptionoptions'] = 'Šifravimo parinktys…';
$labels['encryptmsg'] = 'Šifruoti šį laišką';
$labels['signmsg'] = 'Pasirašyti šį laišką';
$labels['sendunencrypted'] = 'Siųsti nešifruotą';
$labels['enterkeypasstitle'] = 'Įveskite rakto slaptafrazę';
$labels['enterkeypass'] = 'Naudotojo $user slaptajam raktui ($keyid) atrakinti reikalinga slaptafrazė.';
$labels['attachpubkeymsg'] = 'Prisegti mano viešąjį raktą';
$labels['keyexportprompt'] = 'Ar norite įkelti privačiuosius raktus, saugojamus OpenPGP raktų faile?';
$labels['onlypubkeys'] = 'Eksportuoti tik viešuosius raktus';
$labels['withprivkeys'] = 'Eksportuoti privačiuosius raktus';
$labels['findkey'] = 'Ieškoti raktų serveryje(-iuose)';
$labels['keyimportlabel'] = 'Importuoti iš failo';
$labels['keyimportsearchlabel'] = 'Ieškoti raktų serveryje(-iuose)';
$labels['managekeys'] = 'Tvarkyti PGP raktus';
$labels['identitymatchingprivkeys'] = 'Turite $nr atitinkančius PGP privačiuosius raktus, saugomus jūsų raktinėje:';
$labels['identitynoprivkeys'] = 'Šio siuntėjo tapatybė kol kas neturi jūsų raktinėje saugomo PGP privačiojo rakto.';
$labels['arialabelkeyexportoptions'] = 'Raktų eksportavimo parinktys';
$labels['arialabelkeysearchform'] = 'Raktų paieškos forma';
$labels['arialabelkeyoptions'] = 'Rakto parinktys';
$messages['sigvalid'] = 'Galiojantis $sender parašas.';
$messages['sigvalidpartial'] = '$sender parašas patvirtintas, bet už dalį laiško nebuvo pasirašyta.';
$messages['siginvalid'] = 'Negaliojantis $sender parašas.';
$messages['sigunverified'] = 'Parašo galiojimas nepatikrintas. Nepatvirtintas liudijimas. Liudijimo ID: $keyid.';
$messages['signokey'] = 'Parašo galiojimas nepatikrintas. Nerastas viešasis raktas. Rakto ID: $keyid.';
$messages['sigerror'] = 'Parašo galiojimas nepatikrintas. Įvyko vidinė klaida.';
$messages['decryptok'] = 'Laiškas iššifruotas.';
$messages['decrypterror'] = 'Iššifruoti nepavyko.';
$messages['decryptnokey'] = 'Iššifruoti nepavyko. Nerastas privatusis raktas. Rakto ID: $keyid.';
$messages['decryptnomdc'] = 'Iššifravimas praleistas. Laiškas nėra apsaugotas vientisumu.';
$messages['decryptbadpass'] = 'Iššifravimas nepavyko. Neteisingas slaptažodis.';
$messages['decryptnopass'] = 'Nepavyko iššifruoti, reikalingas rakto slaptažodis.';
$messages['decryptpartial'] = 'Laiškas iššifruotas, nors dalis laiško ir nebuvo užšifruota.';
$messages['signerror'] = 'Pasirašyti nepavyko.';
$messages['signnokey'] = 'Pasirašyti nepavyko. Nerastas privatusis raktas.';
$messages['signbadpass'] = 'Pasirašyti nepavyko. Neteisingas slaptažodis.';
$messages['signnopass'] = 'Nepavyko pasirašyti, reikalingas rakto slaptažodis.';
$messages['encrypterror'] = 'Užšifruoti nepavyko.';
$messages['encryptnokey'] = 'Užšifruoti nepavyko. Nerastas viešasis $email raktas.';
$messages['encryptnoprivkey'] = 'Šifravimas nepavyko. Nerastas privatusis raktas.';
$messages['nokeysfound'] = 'Raktų nerasta';
$messages['keynotfound'] = 'Raktas nerastas!';
$messages['keyopenerror'] = 'Nepavyko gauti rakto duomenų! Įvyko vidinė klaida.';
$messages['keylisterror'] = 'Nepavyko išvardinti raktų! Įvyko vidinė klaida.';
$messages['keysimportfailed'] = 'Nepavyko importuoti rakto (raktų)! Įvyko vidinė klaida.';
$messages['keysimportsuccess'] = 'Raktai importuoti sėkmingai. Nauji raktai: $new, nepakitę: $old.';
$messages['keyremoving'] = 'Raktų šalinimas…';
$messages['keyremoveconfirm'] = 'Ar tikrai norite pašalinti pažymėtus raktus?';
$messages['keyremovesuccess'] = 'Raktai sėkmingai pašalinti';
$messages['keyremoveerror'] = 'Pasirinktų raktų pašalinti nepavyko.';
$messages['keyimporttext'] = 'Galite importuoti „ASCII-Armor“ formato privačiuosius ir viešuosius raktus bei atšaukimo liudijimus.';
$messages['keyimportsearchtext'] = 'Galite ieškoti viešųjų raktų pagal rakto identifikatorių, vartotojo vardą arba el. pašto adresą ir juos tiesiogiai importuoti.';
$messages['keystoragenotice'] = 'Visi viešieji ir privatieji raktai yra laikomi serveryje.';
$messages['formerror'] = 'Prašome užpildyti formą. Visi laukai privalomi!';
$messages['passwordsdiffer'] = 'Slaptažodžiai nesutampa!';
$messages['keygenerateerror'] = 'Nepavyko sugeneruoti raktų poros.';
$messages['keygeneratesuccess'] = 'Raktų pora sėkmingai sugeneruota ir importuota.';
$messages['keygennosupport'] = 'Jūsų naršyklėje kriptografija nepalaikoma. Raktų poros sugeneruoti nepavyko!';
$messages['noidentselected'] = 'Jūs turite raktui pasirinkti bent vieną tapatybę!';
$messages['nonameident'] = 'Tapatybei turi būti nurodytas naudotojo vardas!';
$labels['newkeysize'] = 'Rakto dydis';
$labels['key2048'] = '2048 bitai – numatytasis';
$labels['key4096'] = '4096 bitai – saugesnis';
PKwc�\�|F� � enigma/localization/pt_PT.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Encriptação';
$labels['enigmacerts'] = 'Certificados S/MIME';
$labels['enigmakeys'] = 'Chaves PGP';
$labels['keysfromto'] = 'Chave de $from a $to de $count';
$labels['keyname'] = 'Nome';
$labels['keyid'] = 'ID da Chave';
$labels['keyuserid'] = 'ID do Utilizador';
$labels['keytype'] = 'Tipo de chave';
$labels['fingerprint'] = 'Impressão digital';
$labels['subkeys'] = 'Sub-chaves';
$labels['keyprops'] = 'Propriedades da chave';
$labels['basicinfo'] = 'Informação básica';
$labels['userids'] = 'Utilizadores adicionais';
$labels['typepublickey'] = 'chave publica';
$labels['typekeypair'] = 'par de chaves';
$labels['keyattfound'] = 'Esta mensagem contém chave(s) PGP anexada(s).';
$labels['keyattimport'] = 'Importar chave(s)';
$labels['typesign'] = 'Assinar';
$labels['typeencrypt'] = 'Encriptar';
$labels['typecert'] = 'Certificar';
$labels['typeauth'] = 'Autenticação';
$labels['subkeyid'] = 'ID';
$labels['subkeyalgo'] = 'Algoritmo';
$labels['subkeycreated'] = 'Criado';
$labels['subkeyexpires'] = 'Expira';
$labels['subkeyusage'] = 'Uso';
$labels['expiresnever'] = 'nunca';
$labels['unknown'] = 'desconhecido';
$labels['uservalid'] = 'Válido';
$labels['userid'] = 'ID';
$labels['valid'] = 'válido';
$labels['supportencryption'] = 'Activar a encriptação de mensagens e assinatura';
$labels['supportsignatures'] = 'Activar a verificação de assinaturas de mensagens';
$labels['supportdecryption'] = 'Activar desencriptação de mensagem';
$labels['signdefault'] = 'Assinar todas as mensagens por defeito';
$labels['encryptdefault'] = 'Encriptar todas as mensagens por defeito';
$labels['attachpubkeydefault'] = 'Anexar a minha chave pública PGP por defeito';
$labels['passwordtime'] = 'Manter senhas de chave privada para';
$labels['nminutes'] = '$m minuto(s)';
$labels['wholesession'] = 'toda a sessão';
$labels['createkeys'] = 'Criar um novo par de chaves';
$labels['importkeys'] = 'Importar chave(s)';
$labels['exportkeys'] = 'Exportar chave(s)';
$labels['keyactions'] = 'Acções das chaves...';
$labels['keyremove'] = 'Remover';
$labels['keydisable'] = 'Desactivar';
$labels['keyrevoke'] = 'Revogar';
$labels['keysend'] = 'Enviar chave pública numa mensagem';
$labels['keychpass'] = 'Alterar senha';
$labels['keyadd'] = 'Adicionar chave';
$labels['newkeyident'] = 'Identidade';
$labels['newkeypass'] = 'Senha';
$labels['newkeypassconfirm'] = 'Confirmar senha';
$labels['newkeytype'] = 'Tipo de chave';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Curva Elíptica)';
$labels['keygenerating'] = 'A gerar chaves...';
$labels['encryptionoptions'] = 'Opções de encriptação...';
$labels['encryptmsg'] = 'Encriptar esta mensagem';
$labels['signmsg'] = 'Assinar digitalmente esta mensagem';
$labels['sendunencrypted'] = 'Enviar desencriptado';
$labels['enterkeypasstitle'] = 'Digite chave de frase de acesso';
$labels['enterkeypass'] = 'É necessária uma frase de acesso para desbloquear a chave secreta ($keyid) do utilizador: $user.';
$labels['attachpubkeymsg'] = 'Anexar a minha chave pública';
$labels['keyexportprompt'] = 'Deseja incluir as chaves secretas no ficheiro, guardado, de chaves OpenPGP?';
$labels['onlypubkeys'] = 'Exportar apenas Chaves Públicas';
$labels['withprivkeys'] = 'Exportar chaves secretas';
$labels['findkey'] = 'Pesquisar no(s) servidor(es) de chaves';
$labels['keyimportlabel'] = 'Importar do ficheiro';
$labels['keyimportsearchlabel'] = 'Pesquisar no(s) servidor(es) de chaves';
$labels['managekeys'] = 'Gerir chaves PGP';
$labels['identitymatchingprivkeys'] = 'Tem $nr correspondências de chaves PGP privadas armazenadas no seu porta-chaves:';
$labels['identitynoprivkeys'] = 'Esta identidade do remetente ainda não tem uma chave PGP privada armazenada no seu porta-chaves.';
$labels['arialabelkeyexportoptions'] = 'Opções de exportação de chaves';
$labels['arialabelkeysearchform'] = 'Formulário de pesquisa de chaves';
$labels['arialabelkeyoptions'] = 'Opções da chave';
$messages['sigvalid'] = 'Assinatura verificada de $sender.';
$messages['sigvalidpartial'] = 'Assinatura verificada a partir de $sender, mas parte do corpo não foi assinado.';
$messages['siginvalid'] = 'Assinatura inválida de $sender.';
$messages['sigunverified'] = 'Assinatura não verificada. Certificado não verificado. ID do certificado: $keyid.';
$messages['signokey'] = 'Assinatura não verificada. Chave pública não encontrada. ID da chave: $keyid.';
$messages['sigerror'] = 'Assinatura não verificada. Erro interno.';
$messages['decryptok'] = 'Mensagem desencriptada.';
$messages['decrypterror'] = 'A desencriptação falhou.';
$messages['decryptnokey'] = 'A desencriptação falhou. Chave privada não encontrada. ID da chave: $keyid.';
$messages['decryptnomdc'] = 'Desencriptação ignorada. A mensagem não está protegida na sua integridade.';
$messages['decryptbadpass'] = 'A desencriptação falhou. Senha inválida.';
$messages['decryptnopass'] = 'A desencriptação falhou. Chave necessária.';
$messages['decryptpartial'] = 'Mensagem desencriptada, mas parte do corpo não foi encriptado.';
$messages['signerror'] = 'A assinatura falhou.';
$messages['signnokey'] = 'A assinatura falhou. Chave privada não encontrada.';
$messages['signbadpass'] = 'A assinatura falhou. Senha inválida.';
$messages['signnopass'] = 'A assinatura falhou. Chave necessária.';
$messages['encrypterror'] = 'A encriptação falhou.';
$messages['encryptnokey'] = 'A encriptação falhou. Chave pública não encontrada para $email.';
$messages['encryptnoprivkey'] = 'A encriptação falhou. A chave privada não foi encontrada.';
$messages['nokeysfound'] = 'Não foram encontradas chaves';
$messages['keynotfound'] = 'Chave não encontrada!';
$messages['keyopenerror'] = 'Não foi possível obter informações sobre a chave! Erro interno.';
$messages['keylisterror'] = 'Não foi possível listar as chaves! Erro interno.';
$messages['keysimportfailed'] = 'Não foi possível importar a(s) chave(s)! Erro interno.';
$messages['keysimportsuccess'] = 'Chave(s) importada(s) com sucesso. Importada: $new, inalterada: $old.';
$messages['keyremoving'] = 'A remover chave(s)...';
$messages['keyremoveconfirm'] = 'Tem a certeza que pretende eliminar a(s) chave(s) selecionada(s)?';
$messages['keyremovesuccess'] = 'Chave(s) eliminada(s) com sucesso.';
$messages['keyremoveerror'] = 'Não foi possível eliminar a(s) chave(s) selecionada(s).';
$messages['keyimporttext'] = 'Pode importar chaves privadas e públicas ou de revogação de assinaturas em formato ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Pode procurar por chaves públicas através de identificadores de chave, nome de utilizador ou endereço de email e, em seguida, importá-las directamente.';
$messages['keystoragenotice'] = 'Todas as chaves públicas e privadas são armazenadas no servidor.';
$messages['formerror'] = 'Por favor, preencha o formulário. Todos os campos são obrigatórios!';
$messages['passwordsdiffer'] = 'As senhas não coincidem!';
$messages['keygenerateerror'] = 'Falha ao gerar o par de chaves';
$messages['keygeneratesuccess'] = 'Foi gerado e importado, com sucesso, um par de chaves.';
$messages['keygennosupport'] = 'O seu navegador não suporta criptografia. Não foi possível gerar um par de chaves!';
$messages['noidentselected'] = 'Tem de seleccionar pelo menos uma identidade para a chave!';
$messages['nonameident'] = 'A identidade deve ter um nome de utilizador definido!';
$labels['newkeysize'] = 'Tamanho da chave';
$labels['key2048'] = '2048 bits - predefinição';
$labels['key4096'] = '4096 bits - mais seguro';
PKwc�\8x#�k/k/enigma/localization/el_GR.incnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Enigma plugin              |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/roundcube/roundcube-webmail/plugin-enigma/
*/

$labels['encryption'] = 'Κρυπτογράφηση';
$labels['enigmacerts'] = 'Πιστοποιητικά S/MIME';
$labels['enigmakeys'] = 'PGP Κλειδιά';
$labels['keysfromto'] = 'Κλειδιά $from έως $to από $count';
$labels['keyname'] = 'Όνομα';
$labels['keyid'] = 'Ταυτότητα κλειδιού';
$labels['keyuserid'] = 'Ταυτότητα Χρήστη';
$labels['keytype'] = 'Τύπος κλειδιού';
$labels['fingerprint'] = 'Δακτυλικό αποτύπωμα';
$labels['subkeys'] = 'Υποκλειδιά';
$labels['keyprops'] = 'Ιδιότητες κλειδιού';
$labels['basicinfo'] = 'Βασικές πληροφορίες';
$labels['userids'] = 'Επιπλέον Χρήστες';
$labels['typepublickey'] = 'δημόσιο κλειδί';
$labels['typekeypair'] = 'ζεύγος κλειδιού';
$labels['keyattfound'] = 'Αυτό το μήνυμα περιέχει συνημμένο(α) κλειδί(ά) PGP.';
$labels['keyattimport'] = 'Εισαγωγή κλειδιού(ών)';
$labels['typesign'] = 'Υπογραφή';
$labels['typeencrypt'] = 'Κρυπτογράφηση';
$labels['typecert'] = 'Πιστοποίηση';
$labels['typeauth'] = 'Επαλήθευση';
$labels['subkeyid'] = 'Ταυτότητα';
$labels['subkeyalgo'] = 'Αλγόριθμος';
$labels['subkeycreated'] = 'Δημιουργήθηκε';
$labels['subkeyexpires'] = 'Λήγει';
$labels['subkeyusage'] = 'Χρήση';
$labels['expiresnever'] = 'ποτέ';
$labels['unknown'] = 'άγνωστο';
$labels['uservalid'] = 'Έγκυρο';
$labels['userid'] = 'Ταυτότητα';
$labels['valid'] = 'έγκυρο';
$labels['supportencryption'] = 'Ενεργοποιήστε την κρυπτογράφηση και υπογραφή μηνυμάτων';
$labels['supportsignatures'] = 'Ενεργοποίηση επαλήθευσης υπογραφών μηνύματος';
$labels['supportdecryption'] = 'Ενεργοποιήστε την κρυπτογράφηση μηνυμάτων';
$labels['signdefault'] = 'Υπογραφή όλων των μηνυμάτων από προεπιλογή';
$labels['encryptdefault'] = 'Κρυπτογράφηση όλων των μηνυμάτων από προεπιλογή';
$labels['attachpubkeydefault'] = 'Επισύναψη του δημόσιου PGP κλειδιού μου από προεπιλογή';
$labels['passwordtime'] = 'Διατήρηση των κωδικών του ιδιωτικού κλειδιού για';
$labels['nminutes'] = '$m λεπτό(ά)';
$labels['wholesession'] = 'ολόκληρη τη συνεδρία';
$labels['createkeys'] = 'Δημιουργία νέου ζεύγους κλειδιού';
$labels['importkeys'] = 'Εισαγωγή κλειδιού(ών)';
$labels['exportkeys'] = 'Εξαγωγή κλειδιού(ών)';
$labels['keyactions'] = 'Ενέργειες κλειδιού...';
$labels['keyremove'] = 'Διαγραφή';
$labels['keydisable'] = 'Απενεργοποίηση';
$labels['keyrevoke'] = 'Απόσυρση';
$labels['keysend'] = 'Αποστολή δημοσίου κλειδιού στο μήνυμα';
$labels['keychpass'] = 'Αλλαγή κωδικού';
$labels['keyadd'] = 'Προσθήκη κλειδιού';
$labels['newkeyident'] = 'Ταυτότητα';
$labels['newkeypass'] = 'Κωδικός Πρόσβασης';
$labels['newkeypassconfirm'] = 'Επιβέβαιωση κωδικού πρόσβασης';
$labels['newkeytype'] = 'Τύπος κλειδιού';
$labels['rsa2048'] = 'RSA - 2048 bits';
$labels['rsa4096'] = 'RSA - 4096 bits';
$labels['ecckeypair'] = 'ECC (Elliptic Curve)';
$labels['keygenerating'] = 'Δημιουργία κλειδιών...';
$labels['encryptionoptions'] = 'Επιλογές κρυπτογράφησης...';
$labels['encryptmsg'] = 'Κρυπτογράφηση του μηνύματος';
$labels['signmsg'] = 'Ψηφιακή υπογραφή του μηνύματος';
$labels['sendunencrypted'] = 'Αποστολή χωρίς κρυπτογράφηση';
$labels['enterkeypasstitle'] = 'Εισάσετε τον κωδικό του κλειδιού';
$labels['enterkeypass'] = 'Απαιτείται ένας κωδικός για το ξεκλειδωμα του κρυφού κλειδιού ($keyid) του χρήστη: $user.';
$labels['attachpubkeymsg'] = 'Επισύναψη του δημόσιου κλειδιού μου';
$labels['keyexportprompt'] = 'Θέλετε να συμπεριληφθούν τα μυστικά κλειδικά στο αποθηκευμένο αρχείο κλειδιών OpenPGP;';
$labels['onlypubkeys'] = 'Εξαγωγή Δημοσίων Κλειδιών Μόνο';
$labels['withprivkeys'] = 'Εξαγωγή Μυστικών Κλειδιών';
$labels['findkey'] = 'Αναζήτηση στον(ους) εξυπηρετητή(ές) κλειδιών';
$labels['keyimportlabel'] = 'Εισαγωγή από αρχείο';
$labels['keyimportsearchlabel'] = 'Αναζήτηση στον(ους) εξυπηρετητή(ές) κλειδιών';
$labels['managekeys'] = 'Διαχείριση PGP κλειδιών';
$labels['identitymatchingprivkeys'] = 'Έχετε $nr παρόμοια ιδιωτικά κλειδιά αποθηκευμένα στην κλειδοθήκη σας:';
$labels['identitynoprivkeys'] = 'Αυτός ο αποστολέας δε διαθέτει ακόμη ιδιωτικό κλειδί PGP αποθηκευμένο στην κλειδοθήκη σας.';
$labels['arialabelkeyexportoptions'] = 'Επιλογές εξαγωγής κλειδιών';
$labels['arialabelkeysearchform'] = 'Φόρμα αναζήτησης κλειδιών';
$labels['arialabelkeyoptions'] = 'Επιλογές κλειδιών';
$messages['sigvalid'] = 'Επαληθευμένη υπογραφή από τον  $sender.';
$messages['sigvalidpartial'] = 'Επαληθευμένη υπογραφή από τον $sender, αλλά τμήμα του κειμένου δεν έχει υπογραφεί.';
$messages['siginvalid'] = 'Άκυρη υπογραφή από τον $sender.';
$messages['sigunverified'] = 'Ανεπαλήθευτη υπογραφή. Το πιστοποιητικό δεν έχει επαληθευτεί. Ταυτότητα πιστοποιητικού: $keyid.';
$messages['signokey'] = 'Ανεπαλήθευτη υπογραφή. Το δημόσιο κλειδί δε βρέθηκε. Ταυτότητα κλειδιού: $keyid.';
$messages['sigerror'] = 'Ανεπαλήθευτη υπογραφή. Εσωτερικό σφάλμα.';
$messages['decryptok'] = 'Το μήνυμα αποκρυπτογραφήθηκε.';
$messages['decrypterror'] = 'Η αποκρυπτογράφηση απέτυχε.';
$messages['decryptnokey'] = 'Η αποκρυπτογράφηση απέτυχε. Το ιδιωτικό κλειδί δε βρέθηκε. Ταυτότητα κλειδιού: $keyid.';
$messages['decryptnomdc'] = 'Η αποκρυπτογράφηση παραλείφθηκε. Το μήνυμα δε διαθέτει προστασία ακεραιότητας.';
$messages['decryptbadpass'] = 'Η αποκρυπτογράφηση απέτυχε. Μη έγκυρος κωδικός πρόσβασης.';
$messages['decryptnopass'] = 'Η αποκρυπτογράφηση απέτυχε. Απαιτείται ο κωδικός του κλειδιού.';
$messages['decryptpartial'] = 'Το μήνυμα αποκρυπτογραφήθηκε, αλλά τμήμα του μηνύματος δεν ήταν κρυπτογραφημένο.';
$messages['signerror'] = 'Η υπογραφή απέτυχε.';
$messages['signnokey'] = 'Η υπογραφή απέτυχε. Το ιδιωτικό κλειδί δε βρέθηκε.';
$messages['signbadpass'] = 'Η υπογραφή απέτυχε. Λάθος κωδικός πρόσβασης.';
$messages['signnopass'] = 'Η υπογραφή απέτυχε. Απαιτείται ο κωδικός του κλειδιού.';
$messages['encrypterror'] = 'Η κρυπτογράφηση απέτυχε.';
$messages['encryptnokey'] = 'Η κρυπτογράφηση απέτυχε. Το δημόσιο κλειδί του $email δε βρέθηκε.
 ';
$messages['encryptnoprivkey'] = 'Η κρυπτογράφηση απέτυχε. Το ιδιωτικό κλειδί δε βρέθηκε.';
$messages['nokeysfound'] = 'Δε βρέθηκαν κλειδιά';
$messages['keynotfound'] = 'Το κλειδί δε βρέθηκε!';
$messages['keyopenerror'] = 'Αδυναμία ανάκτησης των πληροφοριών του κλειδιού! Εσωτερικό σφάλμα.';
$messages['keylisterror'] = 'Αδυναμία ανάκτησης λίστας κλειδιού! Εσωτερικό σφάλμα.';
$messages['keysimportfailed'] = 'Αδυναμία εισαγωγής του κλειδιού(ών)! Εσωτερικό σφάλμα.';
$messages['keysimportsuccess'] = 'Το κλειδί(ά) εισήχθη επιτυχώς. Εισήχθη: $new, αναλλοίωτο: $old.';
$messages['keyremoving'] = 'Διαφραφή κλειδιού(ών)...';
$messages['keyremoveconfirm'] = 'Θέλετε σίγουρα να διαγράψετε το επιλεγμένο κλειδί(ά);';
$messages['keyremovesuccess'] = 'Το κλειδί(ά) διαγράφηκε επιτυχώς.';
$messages['keyremoveerror'] = 'Αδυναμία διαγραφής του επιλεγμένου κλειδιού(ών).';
$messages['keyimporttext'] = 'Μπορείτε να εισάγετε ιδιωτικά ή δημόσια κλειδιά ή να ανακτήσετε υπογραφές σε μοργή ASCII-Armor.';
$messages['keyimportsearchtext'] = 'Μπορείτε να αναζητήσετε δημόσια κλειδιά βάσει του αναγνωριστικό κλειδιού, του ονόματος χρήστη ή της διεύθυνσης ηλ/νικού ταχυδρομείου και, στη συνέχεια, να τα εισαγάγετε απευθείας.';
$messages['keystoragenotice'] = 'Όλα τα δημόσια και ιδιωτικά κλειδιά είναι αποθηκευμένα στο διακομιστή.';
$messages['formerror'] = 'Παρακαλώ συμπληρώστε όλα τα πεδία της φόρμας!';
$messages['passwordsdiffer'] = 'Οι κωδικοί δεν ταιριάζουν μεταξύ τους!';
$messages['keygenerateerror'] = 'Αποτυχία δημιουργίας ζεύγους κλειδιών.';
$messages['keygeneratesuccess'] = 'Το ζεύγος κλειδιών δημιουργήθηκε και εισήχθη επιτυχώς.';
$messages['keygennosupport'] = 'To πρόγραμμα περιήγησής σας δεν υποστηρίζει κρυπτογράφηση. Δεν ήταν δυνατή η δημιουργία ενός ζεύγος κλειδιών!';
$messages['noidentselected'] = 'Πρέπει να επιλέξετε τουλάχιστον μια ταυτότητα για το κλειδί!';
$messages['nonameident'] = 'Η Ταυτότητα πρέπει να έχει ορισμένο όνομα χρήστη!';
$labels['newkeysize'] = 'Μέγεθος κλειδιού';
$labels['key2048'] = '2048 bits - προκαθορισμένο';
$labels['key4096'] = '4096 bits - ασφαλέστερο';
PKwc�\k���
�
enigma/config.inc.php.distnu�[���<?php

// Enigma Plugin options
// --------------------

// A driver to use for PGP. Default: "gnupg".
$config['enigma_pgp_driver'] = 'gnupg';

// A driver to use for S/MIME. Default: "phpssl".
$config['enigma_smime_driver'] = 'phpssl';

// Enables logging of enigma operations (including Crypt_GPG debug info)
$config['enigma_debug'] = false;

// REQUIRED! Keys directory for all users.
// Must be writeable by PHP process, and not in the web server document root
$config['enigma_pgp_homedir'] = null;

// Location of gpg binary. By default it will be auto-detected.
// This is also a way to force gpg2 use if there are both 1.x and 2.x on the system.
$config['enigma_pgp_binary'] = '';

// Location of gpg-agent binary. By default it will be auto-detected.
// It's used with GnuPG 2.x.
$config['enigma_pgp_agent'] = '';

// Location of gpgconf binary. By default it will be auto-detected.
// It's used with GnuPG >= 2.1.
$config['enigma_pgp_gpgconf'] = '';

// Name of the PGP symmetric cipher algorithm.
// Run gpg --version to see the list of supported algorithms
$config['enigma_pgp_cipher_algo'] = null;

// Name of the PGP digest (hash) algorithm.
// Run gpg --version to see the list of supported algorithms
$config['enigma_pgp_digest_algo'] = null;

// Enables multi-host environments support.
// Enable it if you have more than one HTTP server.
// Make sure all servers run the same GnuPG version and have time in sync.
// Keys will be stored in SQL database (make sure max_allowed_packet
// is big enough).
$config['enigma_multihost'] = false;

// Enables signatures verification feature.
$config['enigma_signatures'] = true;

// Enables messages decryption feature.
$config['enigma_decryption'] = true;

// Enables messages encryption and signing feature.
$config['enigma_encryption'] = true;

// Enable signing all messages by default
$config['enigma_sign_all'] = false;

// Enable encrypting all messages by default
$config['enigma_encrypt_all'] = false;

// Enable attaching a public key to all messages by default
$config['enigma_attach_pubkey'] = false;

// Default for how long to store private key passwords (in minutes).
// When set to 0 passwords will be stored for the whole session.
$config['enigma_password_time'] = 5;

// Enable support for private keys without passwords.
$config['enigma_passwordless'] = false;

// With this option you can lock composing options
// of the plugin forcing the user to use configured settings.
// The array accepts: 'sign', 'encrypt', 'pubkey'.
//
// For example, to force your users to sign every email,
// you should set:
//     - enigma_sign_all     = true
//     - enigma_options_lock = ['sign']
//     - dont_override       = ['enigma_sign_all']
$config['enigma_options_lock'] = [];
PKwc�\BǍ�f]f]enigma/enigma.jsnu�[���/**
 * Enigma plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

window.rcmail && rcmail.addEventListener('init', function(evt) {
    if (rcmail.env.task == 'settings') {
        if (rcmail.gui_objects.keyslist) {
            rcmail.keys_list = new rcube_list_widget(rcmail.gui_objects.keyslist,
                {multiselect:true, draggable:false, keyboard:true});
            rcmail.keys_list
                .addEventListener('select', function(o) { rcmail.enigma_keylist_select(o); })
                .addEventListener('keypress', function(o) { rcmail.list_keypress(o, {del: 'plugin.enigma-key-delete'}); })
                .init()
                .focus();

            rcmail.enigma_list();

            rcmail.register_command('firstpage', function(props) { return rcmail.enigma_list_page('first'); });
            rcmail.register_command('previouspage', function(props) { return rcmail.enigma_list_page('previous'); });
            rcmail.register_command('nextpage', function(props) { return rcmail.enigma_list_page('next'); });
            rcmail.register_command('lastpage', function(props) { return rcmail.enigma_list_page('last'); });
        }

        if (rcmail.env.action == 'plugin.enigmakeys') {
            rcmail.register_command('search', function(props) {return rcmail.enigma_search(props); }, true);
            rcmail.register_command('reset-search', function(props) {return rcmail.enigma_search_reset(props); }, true);
            rcmail.register_command('plugin.enigma-import', function() { rcmail.enigma_import(); }, true);
            rcmail.register_command('plugin.enigma-import-search', function() { rcmail.enigma_import_search(); }, true);
            rcmail.register_command('plugin.enigma-key-export', function() { rcmail.enigma_export(); });
            rcmail.register_command('plugin.enigma-key-export-selected', function() { rcmail.enigma_export(true); });
            rcmail.register_command('plugin.enigma-key-import', function() { rcmail.enigma_key_import(); }, true);
            rcmail.register_command('plugin.enigma-key-import-search', function() { rcmail.enigma_key_import_search(); }, true);
            rcmail.register_command('plugin.enigma-key-delete', function(props) { return rcmail.enigma_delete(); });
            rcmail.register_command('plugin.enigma-key-create', function(props) { return rcmail.enigma_key_create(); }, true);
            rcmail.register_command('plugin.enigma-key-save', function(props) { return rcmail.enigma_key_create_save(); }, true);

            rcmail.addEventListener('responseafterplugin.enigmakeys', function() {
                rcmail.enable_command('plugin.enigma-key-export', rcmail.env.rowcount > 0);
                rcmail.triggerEvent('listupdate', {list: rcmail.keys_list, rowcount: rcmail.env.rowcount});
            });

            if (rcmail.gui_objects.importform) {
                // make sure Enter key in search input starts searching
                // instead of submitting the form
                $('#rcmimportsearch').keydown(function(e) {
                    if (e.which == 13) {
                        rcmail.enigma_import_search();
                        return false;
                    }
                });
            }
        }
    }
    else if (rcmail.env.task == 'mail') {
        if (rcmail.env.action == 'compose') {
            rcmail.addEventListener('beforesend', function(props) { rcmail.enigma_beforesend_handler(props); })
                .addEventListener('beforesavedraft', function(props) { rcmail.enigma_beforesavedraft_handler(props); });

            $('#enigmamenu').find('input,label').mouseup(function(e) {
                // don't close the menu on mouse click inside
                e.stopPropagation();
            });

            $('a.button.enigma').prop('tabindex', $('#messagetoolbar > a').first().prop('tabindex'));

            $.each(['encrypt', 'sign'], function() {
                var opt = this, input = $('#enigma' + opt + 'opt');

                if (rcmail.env['enigma_force_' + opt]) {
                    input.prop('checked', true);
                }

                // Compose status bar in Elastic
                if (window.UI && UI.compose_status) {
                    input.on('change', function() { UI.compose_status(opt, this.checked); });
                }

                // As the options might have been initially enabled we have to
                // trigger onchange event, so all handlers can update the state
                input.trigger('change');
            });
        }

        if (rcmail.env.enigma_password_request) {
            rcmail.enigma_password_request(rcmail.env.enigma_password_request);
        }
    }
});


/*********************************************************/
/*********    Enigma Settings/Keys/Certs UI      *********/
/*********************************************************/

// Display key(s) import form
rcube_webmail.prototype.enigma_key_import = function()
{
    var dialog = $('<iframe>').attr('src', this.url('plugin.enigmakeys', {_a: 'import', _framed: 1})),
        import_func = function(e) {
            var win = dialog[0].contentWindow;
            win.rcmail.enigma_import();
        };

    this.enigma_import_dialog = this.simple_dialog(dialog, 'enigma.importkeys', import_func, {
        button: 'import',
        width: 500,
        height: 180
    });
};

// Display key(s) search/import form
rcube_webmail.prototype.enigma_key_import_search = function()
{
    var dialog = $('<iframe>').attr('src', this.url('plugin.enigmakeys', {_a: 'import-search', _framed: 1})),
        search_func = function() {
            var win = dialog[0].contentWindow;
            win.rcmail.enigma_import_search();
        };

    this.enigma_import_dialog = this.simple_dialog(dialog, 'enigma.keyimportsearchlabel', search_func, {
        button: 'search',
        width: 500,
        height: 150
    });
};

rcube_webmail.prototype.enigma_import_success = function()
{
    var dialog = this.enigma_import_dialog || parent.rcmail.enigma_import_dialog;
    dialog.dialog('destroy');
};

// Display key(s) generation form
rcube_webmail.prototype.enigma_key_create = function()
{
    this.keys_list.clear_selection();
    this.enigma_loadframe('&_action=plugin.enigmakeys&_a=create&_nav=hide');
};

// Generate key(s) and submit them
rcube_webmail.prototype.enigma_key_create_save = function()
{
    var options, lock, users = [],
        password = $('#key-pass').val(),
        confirm = $('#key-pass-confirm').val(),
        type = $('#key-type').val();

    $('[name="identity[]"]:checked').each(function() {
        users.push({name: $(this).data('name') || '', email: $(this).data('email')});
    });

    // validate the form
    if (!password || !confirm) {
        this.alert_dialog(this.get_label('enigma.formerror'));
        return;
    }

    if (password != confirm) {
        this.alert_dialog(this.get_label('enigma.passwordsdiffer'));
        return;
    }

    if (!users.length) {
        this.alert_dialog(this.get_label('enigma.noidentselected'));
        return;
    }

    // generate keys
    // use OpenPGP.js if browser supports required features
    if (window.openpgp && window.crypto && window.crypto.getRandomValues) {
        lock = this.set_busy(true, 'enigma.keygenerating');
        options = {
            userIDs: users,
            passphrase: password,
            type: type.substring(0, 3)
        };

        if (type == 'ecc')
            options.curve = 'ed25519';
        else if (type == 'rsa4096')
            options.rsaBits = 4096;
        else
            options.rsaBits = 2048;

        openpgp.generateKey(options).then(function(keypair) {
            // success
            var post = {
              _a: 'import',
              _keys: keypair.privateKey,
              _generated: 1,
              _passwd: password
            };

            // send request to server
            rcmail.http_post('plugin.enigmakeys', post, lock);
        }, function(error) {
            // failure
            console.error(error);
            rcmail.set_busy(false, null, lock);
            rcmail.display_message(rcmail.get_label('enigma.keygenerateerror'), 'error');
        });
    }
    else {
        rcmail.display_message(rcmail.get_label('enigma.keygennosupport'), 'error');
    }
};

// Action executed after successful key generation and import
rcube_webmail.prototype.enigma_key_create_success = function()
{
    parent.rcmail.enigma_list(1);
};

// Delete key(s)
rcube_webmail.prototype.enigma_delete = function()
{
    var keys = this.keys_list.get_selection();

    if (!keys.length)
        return;

    this.confirm_dialog(this.get_label('enigma.keyremoveconfirm'), 'delete', function(e, ref) {
        var lock = ref.display_message(ref.get_label('enigma.keyremoving'), 'loading'),
            post = {_a: 'delete', _keys: keys};

        // send request to server
        ref.http_post('plugin.enigmakeys', post, lock);
    });
};

// Export key(s)
rcube_webmail.prototype.enigma_export = function(selected)
{
    var priv = false,
        list = this.keys_list,
        keys = selected ? list.get_selection().join(',') : '*',
        args = {_keys: keys};

    if (!keys.length)
        return;

    // find out whether selected keys are private
    if (keys == '*')
        priv = true;
    else
        $.each(list.get_selection(), function() {
            flags = $(list.rows[this].obj).data('flags');
            if (flags && flags.indexOf('p') >= 0) {
                priv = true;
                return false;
            }
        });

    // ask the user about including private key in the export
    if (priv)
        return this.show_popup_dialog(
            this.get_label('enigma.keyexportprompt'),
            this.get_label('enigma.exportkeys'),
            [{
                'class': 'export mainaction',
                text: this.get_label('enigma.onlypubkeys'),
                click: function(e) {
                    rcmail.enigma_export_submit(args);
                    $(this).remove();
                }
            },
            {
                'class': 'export',
                text: this.get_label('enigma.withprivkeys'),
                click: function(e) {
                    args._priv = 1;
                    rcmail.enigma_export_submit(args);
                    $(this).remove();
                }
            },
            {
                'class': 'cancel',
                text: this.get_label('close'),
                click: function(e) {
                    $(this).remove();
                }
            }],
            {width: 500}
        );

    this.enigma_export_submit(args);
};

// Submitting request for key(s) export
// Done this way to handle password input
rcube_webmail.prototype.enigma_export_submit = function(data)
{
    var id = 'keyexport-' + new Date().getTime(),
        form = $('<form>').attr({target: id, method: 'post', style: 'display:none',
            action: '?_action=plugin.enigmakeys&_task=settings&_a=export'}),
        iframe = $('<iframe>').attr({name: id, style: 'display:none'})

    form.append($('<input>').attr({name: '_token', value: this.env.request_token}));
    $.each(data, function(i, v) {
        form.append($('<input>').attr({name: i, value: v}));
    });

    iframe.appendTo(document.body);
    form.appendTo(document.body).submit();
};

// Submit key(s) import form
rcube_webmail.prototype.enigma_import = function()
{
    var form, file, lock,
        id = 'keyimport-' + new Date().getTime();

    if (form = this.gui_objects.importform) {
        file = document.getElementById('rcmimportfile');
        if (file && !file.value) {
            this.alert_dialog(this.get_label('selectimportfile'));
            return;
        }

        lock = this.set_busy(true, 'importwait');
        $('<iframe>').attr({name: id, style: 'display:none'}).appendTo(document.body);
        $(form).attr({target: id, action: this.add_url(form.action, '_unlock', lock)}).submit();

        return true;
    }
};

// Search for key(s) for import
rcube_webmail.prototype.enigma_import_search = function()
{
    var form, search;

    if (form = this.gui_objects.importform) {
        search = $('#rcmimportsearch').val();
        if (!search) {
            return;
        }

        this.enigma_find_publickey(search);
    }
};

// list row selection handler
rcube_webmail.prototype.enigma_keylist_select = function(list)
{
    var id = list.get_single_selection(), url;

    if (id && !list.multi_selecting)
        url = '&_action=plugin.enigmakeys&_a=info&_id=' + id;

    this.enigma_loadframe(url);
    this.enable_command('plugin.enigma-key-delete', 'plugin.enigma-key-export-selected', list.get_selection().length > 0);
};

// load key frame
rcube_webmail.prototype.enigma_loadframe = function(url)
{
    var win;

    if (win = this.get_frame_window(this.env.contentframe)) {
        if (!url) {
            if (win.location && win.location.href.indexOf(this.env.blankpage) < 0)
                win.location.href = this.env.blankpage;
            if (this.env.frame_lock)
                this.set_busy(false, null, this.env.frame_lock);
            return;
        }

        this.env.frame_lock = this.set_busy(true, 'loading');
        win.location.href = this.env.comm_path + '&_framed=1' + url;
    }
};

// Search keys/certs
rcube_webmail.prototype.enigma_search = function(props)
{
    if (!props && this.gui_objects.qsearchbox)
        props = this.gui_objects.qsearchbox.value;

    if (props || this.env.search_request) {
        var params = {'_a': 'search', '_q': props},
          lock = this.set_busy(true, 'searching');
//        if (this.gui_objects.search_filter)
//          addurl += '&_filter=' + this.gui_objects.search_filter.value;
        this.env.current_page = 1;
        this.enigma_loadframe();
        this.enigma_clear_list();
        this.http_post('plugin.enigmakeys', params, lock);
    }

    return false;
};

// Reset search filter and the list
rcube_webmail.prototype.enigma_search_reset = function(props)
{
    var s = this.env.search_request;
    this.reset_qsearch();

    if (s) {
        this.enigma_loadframe();
        this.enigma_clear_list();

        // refresh the list
        this.enigma_list();
    }

    return false;
};

// Keys/certs listing
rcube_webmail.prototype.enigma_list = function(page, reset_frame)
{
    if (this.is_framed())
        return parent.rcmail.enigma_list(page, reset_frame);

    var params = {'_a': 'list'},
      lock = this.set_busy(true, 'loading');

    this.env.current_page = page ? page : 1;

    if (this.env.search_request)
        params._q = this.env.search_request;
    if (page)
        params._p = page;

    this.enigma_clear_list(reset_frame);
    this.http_post('plugin.enigmakeys', params, lock);
};

// Change list page
rcube_webmail.prototype.enigma_list_page = function(page)
{
    if (page == 'next')
        page = this.env.current_page + 1;
    else if (page == 'last')
        page = this.env.pagecount;
    else if (page == 'prev' && this.env.current_page > 1)
        page = this.env.current_page - 1;
    else if (page == 'first' && this.env.current_page > 1)
        page = 1;

    this.enigma_list(page);
};

// Remove list rows
rcube_webmail.prototype.enigma_clear_list = function(reset_frame)
{
    if (reset_frame !== false)
        this.enigma_loadframe();

    if (this.keys_list)
        this.keys_list.clear(true);

    this.enable_command('plugin.enigma-key-delete', 'plugin.enigma-key-delete-selected', false);
    this.triggerEvent('listupdate', {list: this.keys_list, rowcount: this.keys_list.rowcount});
};

// Adds a row to the list
rcube_webmail.prototype.enigma_add_list_row = function(r)
{
    if (!this.gui_objects.keyslist || !this.keys_list)
        return false;

    var list = this.keys_list,
        tbody = this.gui_objects.keyslist.tBodies[0],
        rowcount = tbody.rows.length,
        even = rowcount%2,
        // for performance use DOM instead of jQuery here
        row = document.createElement('tr'),
        col = document.createElement('td');

    row.id = 'rcmrow' + r.id;
    row.className = 'message';
    if (r.flags) $(row).data('flags', r.flags);

    col.className = 'name';
    col.innerHTML = r.name;
    row.appendChild(col);
    list.insert_row(row);
};


/*********************************************************/
/*********        Enigma Message methods         *********/
/*********************************************************/

// handle message send/save action
rcube_webmail.prototype.enigma_beforesend_handler = function(props)
{
    this.env.last_action = 'send';
    this.enigma_compose_handler(props);
};

rcube_webmail.prototype.enigma_beforesavedraft_handler = function(props)
{
    this.env.last_action = 'savedraft';
    this.enigma_compose_handler(props);
};

rcube_webmail.prototype.enigma_compose_handler = function(props)
{
    var form = this.gui_objects.messageform;

    // copy inputs from enigma menu to the form (not used in Elastic)
    $('#enigmamenu input').each(function() {
        var id = this.id + '_cpy', input = $('#' + id);

        if (!input.length) {
            input = $(this).clone();
            input.prop({id: id, type: 'hidden'}).appendTo(form);
        }

        input.val(this.checked ? '1' : '');
    });
};

// Import attached keys/certs file
rcube_webmail.prototype.enigma_import_attachment = function(mime_id)
{
    var lock = this.set_busy(true, 'loading'),
        post = {_uid: this.env.uid, _mbox: this.env.mailbox, _part: mime_id};

    this.http_post('plugin.enigmaimport', post, lock);

    return false;
};

// password request popup
rcube_webmail.prototype.enigma_password_request = function(data)
{
    if (!data || !data.keyid) {
        return;
    }

    var ref = this,
        msg = this.get_label('enigma.enterkeypass'),
        myprompt = $('<div class="prompt">'),
        myprompt_content = $('<p class="message">')
            .appendTo(myprompt),
        myprompt_input = $('<input>').attr({type: 'password', size: 30, 'data-submit': 'true'})
            .appendTo(myprompt);

    data.key = data.keyid;
    if (data.keyid.length > 8)
        data.keyid = data.keyid.substr(data.keyid.length - 8);

    $.each(['keyid', 'user'], function() {
        msg = msg.replace('$' + this, data[this]);
    });

    myprompt_content.text(msg);

    this.show_popup_dialog(myprompt, this.get_label('enigma.enterkeypasstitle'),
        [{
            text: this.get_label('ok'),
            'class': 'mainaction save unlock',
            click: function(e) {
                e.stopPropagation();

                var jq = ref.is_framed() ? window.parent.$ : $;

                data.password = myprompt_input.val();

                if (!data.password) {
                    myprompt_input.focus();
                    return;
                }

                ref.enigma_password_submit(data);
                jq(this).remove();
            }
        },
        {
            text: this.get_label('cancel'),
            'class': 'cancel',
            click: function(e) {
                var jq = ref.is_framed() ? window.parent.$ : $;
                e.stopPropagation();
                jq(this).remove();
            }
        }], {width: 400});

    if (this.is_framed() && parent.rcmail.message_list) {
        // this fixes bug when pressing Enter on "Save" button in the dialog
        parent.rcmail.message_list.blur();
    }
};

// submit entered password
rcube_webmail.prototype.enigma_password_submit = function(data)
{
    var lock, form;

    if (this.env.action == 'compose' && !data['compose-init']) {
        return this.enigma_password_compose_submit(data);
    }
    else if (this.env.action == 'plugin.enigmakeys' && (form = this.gui_objects.importform)) {
        if (!$('input[name="_keyid"]', form).length) {
            $(form).append($('<input>').attr({type: 'hidden', name: '_keyid', value: data.key}))
                .append($('<input>').attr({type: 'hidden', name: '_passwd', value: data.password}))
        }

        return this.enigma_import();
    }

    lock = data.nolock ? null : this.set_busy(true, 'loading');
    form = $('<form>')
        .attr({method: 'post', action: data.action || location.href, style: 'display:none'})
        .append($('<input>').attr({type: 'hidden', name: '_keyid', value: data.key}))
        .append($('<input>').attr({type: 'hidden', name: '_passwd', value: data.password}))
        .append($('<input>').attr({type: 'hidden', name: '_token', value: this.env.request_token}))
        .append($('<input>').attr({type: 'hidden', name: '_unlock', value: lock}));

    // Additional form fields for request parameters
    $.each(data, function(i, v) {
        if (i.indexOf('input') == 0)
            form.append($('<input>').attr({type: 'hidden', name: i.substring(5), value: v}))
    });

    if (data.iframe) {
        var name = 'enigma_frame_' + (new Date()).getTime(),
            frame = $('<iframe>').attr({style: 'display:none', name: name}).appendTo(document.body);
        form.attr('target', name);
    }

    form.appendTo(document.body).submit();
};

// submit entered password - in mail compose page
rcube_webmail.prototype.enigma_password_compose_submit = function(data)
{
    var form = this.gui_objects.messageform;

    if (!$('input[name="_keyid"]', form).length) {
        $(form).append($('<input>').attr({type: 'hidden', name: '_keyid', value: data.key}))
            .append($('<input>').attr({type: 'hidden', name: '_passwd', value: data.password}));
    }
    else {
        $('input[name="_keyid"]', form).val(data.key);
        $('input[name="_passwd"]', form).val(data.password);
    }

    this.submit_messageform(this.env.last_action == 'savedraft');
};

// Display no-key error with key search button
rcube_webmail.prototype.enigma_key_not_found = function(data)
{
    var params = {width: 500, dialogClass: 'error'},
        buttons = [{
            'class': 'mainaction search',
            text: data.button,
            click: function() {
                $(this).remove();
                rcmail.enigma_find_publickey(data.email);
            }
        }];

    if (data.mode == 'encrypt') {
        buttons.push({
            'class': 'send',
            text: rcmail.get_label('enigma.sendunencrypted'),
            click: function(e) {
                $(this).remove();
                $('#enigmaencryptopt').prop('checked', false).change();
                rcmail.command('send', {nocheck: true}, e.target, e.originalEvent);
            }
        });
    }

    buttons.push({
        'class': 'cancel',
        text: this.get_label('cancel'),
        click: function() {
            $(this).remove();
        }
    });

    return this.show_popup_dialog(data.text, data.title, buttons, params);
};

// Search for a public key on the key server
rcube_webmail.prototype.enigma_find_publickey = function(email)
{
    this.mailvelope_search_pubkeys([email],
        function(status) {},
        function(key) {
            var lock = rcmail.set_busy(true, 'enigma.importwait'),
                post = {_a: 'import', _keys: key};

            if (rcmail.env.action == 'plugin.enigmakeys')
                post._refresh = 1;

            // send request to server
            rcmail.http_post('plugin.enigmakeys', post, lock);
        }
    );
};
PKwc�\�*TŬ�enigma/lib/enigma_key.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Key class for the Enigma Plugin                                         |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_key
{
    public $id;
    public $name;
    public $users   = [];
    public $subkeys = [];
    public $reference;
    public $password;

    const TYPE_UNKNOWN = 0;
    const TYPE_KEYPAIR = 1;
    const TYPE_PUBLIC  = 2;

    const CAN_ENCRYPT      = 1;
    const CAN_SIGN         = 2;
    const CAN_CERTIFY      = 4;
    const CAN_AUTHENTICATE = 8;


    /**
     * Keys list sorting callback for usort()
     */
    static function cmp($a, $b)
    {
        return strcmp($a->name, $b->name);
    }

    /**
     * Returns key type
     *
     * @return int One of self::TYPE_* constant values
     */
    function get_type()
    {
        if (!empty($this->subkeys[0]) && $this->subkeys[0]->has_private) {
            return enigma_key::TYPE_KEYPAIR;
        }
        else if (!empty($this->subkeys[0])) {
            return enigma_key::TYPE_PUBLIC;
        }

        return enigma_key::TYPE_UNKNOWN;
    }

    /**
     * Returns true if all subkeys are revoked
     *
     * @return bool
     */
    function is_revoked()
    {
        foreach ($this->subkeys as $subkey) {
            if (!$subkey->revoked) {
                return false;
            }
        }

        return !empty($this->subkeys);
    }

    /**
     * Returns true if any user ID is valid
     *
     * @return bool
     */
    function is_valid()
    {
        foreach ($this->users as $user) {
            if ($user->valid) {
                return true;
            }
        }

        return false;
    }

    /**
     * Returns true if any of subkeys is a private key
     *
     * @return bool
     */
    function is_private()
    {
        foreach ($this->subkeys as $subkey) {
            if ($subkey->has_private) {
                return true;
            }
        }

        return false;
    }

    /**
     * Get key ID by user email
     *
     * @param string $email Email address
     * @param int    $mode  Key mode (see self::CAN_* constants)
     *
     * @return enigma_subkey|null Subkey object
     */
    function find_subkey($email, $mode)
    {
        foreach ($this->users as $user) {
            if (strcasecmp($user->email, $email) === 0 && $user->valid && !$user->revoked) {
                foreach ($this->subkeys as $subkey) {
                    if (!$subkey->revoked && !$subkey->is_expired()) {
                        if ($subkey->usage & $mode) {
                            return $subkey;
                        }
                    }
                }
            }
        }
    }

    /**
     * Converts long ID or Fingerprint to short ID
     * Crypt_GPG uses internal, but e.g. Thunderbird's Enigmail displays short ID
     *
     * @param string $id Key ID or fingerprint
     *
     * @return string Key short ID
     */
    static function format_id($id)
    {
        // E.g. 04622F2089E037A5 => 89E037A5

        return substr($id, -8);
    }

    /**
     * Formats fingerprint string
     *
     * @param string $fingerprint Key fingerprint
     *
     * @return string Formatted fingerprint (with spaces)
     */
    static function format_fingerprint($fingerprint)
    {
        if (!$fingerprint) {
            return '';
        }

        $result = '';
        for ($i=0; $i<40; $i++) {
            if ($i % 4 == 0) {
                $result .= ' ';
            }
            $result .= $fingerprint[$i];
        }

        return $result;
    }
}
PKwc�\�UUenigma/lib/enigma_driver.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Abstract driver for the Enigma Plugin                                   |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

abstract class enigma_driver
{
    const SUPPORT_RSA = 'RSA';
    const SUPPORT_ECC = 'ECC';

    /**
     * Class constructor.
     *
     * @param string $user User name (email address)
     */
    abstract function __construct($user);

    /**
     * Driver initialization.
     *
     * @return mixed NULL on success, enigma_error on failure
     */
    abstract function init();

    /**
     * Encryption (and optional signing).
     *
     * @param string     $text     Message body
     * @param array      $keys     List of keys (enigma_key objects)
     * @param enigma_key $sign_key Optional signing Key ID
     *
     * @return mixed Encrypted message or enigma_error on failure
     */
    abstract function encrypt($text, $keys, $sign_key = null);

    /**
     * Decryption (and sig verification if sig exists).
     *
     * @param string           $text      Encrypted message
     * @param array            $keys      List of key-password
     * @param enigma_signature $signature Signature information (if available)
     *
     * @return mixed Decrypted message or enigma_error on failure
     */
    abstract function decrypt($text, $keys = [], &$signature = null);

    /**
     * Signing.
     *
     * @param string     $text Message body
     * @param enigma_key $key  The signing key
     * @param int        $mode Signing mode (enigma_engine::SIGN_*)
     *
     * @return mixed True on success or enigma_error on failure
     */
    abstract function sign($text, $key, $mode = null);

    /**
     * Signature verification.
     *
     * @param string $text      Message body
     * @param string $signature Signature, if message is of type PGP/MIME and body doesn't contain it
     *
     * @return mixed Signature information (enigma_signature) or enigma_error
     */
    abstract function verify($text, $signature);

    /**
     * Key/Cert file import.
     *
     * @param string $content   File name or file content
     * @param bool   $isfile    True if first argument is a filename
     * @param array  $passwords Optional key => password map
     *
     * @return mixed Import status array or enigma_error
     */
    abstract function import($content, $isfile = false, $passwords = []);

    /**
     * Key/Cert export.
     *
     * @param string $key          Key ID
     * @param bool   $with_private Include private key
     * @param array  $passwords    Optional key => password map
     *
     * @return mixed Key content or enigma_error
     */
    abstract function export($key, $with_private = false, $passwords = []);

    /**
     * Keys listing.
     *
     * @param string $pattern Optional pattern for key ID, user ID or fingerprint
     *
     * @return mixed Array of enigma_key objects or enigma_error
     */
    abstract function list_keys($pattern = '');

    /**
     * Single key information.
     *
     * @param string $keyid Key ID, user ID or fingerprint
     *
     * @return mixed Key (enigma_key) object or enigma_error
     */
    abstract function get_key($keyid);

    /**
     * Key pair generation.
     *
     * @param array $data Key/User data (name, email, password, size)
     *
     * @return mixed Key (enigma_key) object or enigma_error
     */
    abstract function gen_key($data);

    /**
     * Key deletion.
     *
     * @param string $keyid Key ID
     *
     * @return mixed True on success or enigma_error
     */
    abstract function delete_key($keyid);

    /**
     * Returns a name of the hash algorithm used for the last
     * signing operation.
     *
     * @return string Hash algorithm name e.g. sha1
     */
    abstract function signature_algorithm();

    /**
     * Returns a list of supported features.
     *
     * @return array Capabilities list
     */
    public function capabilities()
    {
        return [];
    }
}
PKwc�\�N�``"enigma/lib/enigma_driver_gnupg.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | GnuPG (PGP) driver for the Enigma Plugin                                |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

require_once 'Crypt/GPG.php';

class enigma_driver_gnupg extends enigma_driver
{
    protected $rc;
    protected $gpg;
    protected $homedir;
    protected $user;
    protected $last_sig_algorithm;
    protected $debug    = false;
    protected $db_files = ['pubring.gpg', 'secring.gpg', 'pubring.kbx'];


    /**
     * Class constructor
     *
     * @param rcube_user $user User object
     */
    function __construct($user)
    {
        $this->rc   = rcmail::get_instance();
        $this->user = $user;
    }

    /**
     * Driver initialization and environment checking.
     * Should only return critical errors.
     *
     * @return enigma_error|null NULL on success, enigma_error on failure
     */
    function init()
    {
        $homedir = $this->rc->config->get('enigma_pgp_homedir');
        $debug   = $this->rc->config->get('enigma_debug');
        $binary  = $this->rc->config->get('enigma_pgp_binary');
        $agent   = $this->rc->config->get('enigma_pgp_agent');
        $gpgconf = $this->rc->config->get('enigma_pgp_gpgconf');

        if (!$homedir) {
            return new enigma_error(enigma_error::INTERNAL,
                "Option 'enigma_pgp_homedir' not specified");
        }

        // check if homedir exists (create it if not) and is readable
        if (!file_exists($homedir)) {
            return new enigma_error(enigma_error::INTERNAL,
                "Keys directory doesn't exists: $homedir");
        }
        if (!is_writable($homedir)) {
            return new enigma_error(enigma_error::INTERNAL,
                "Keys directory isn't writeable: $homedir");
        }

        $homedir = $homedir . '/' . $this->user;

        // check if user's homedir exists (create it if not) and is readable
        if (!file_exists($homedir)) {
            mkdir($homedir, 0700);
        }

        if (!file_exists($homedir)) {
            return new enigma_error(enigma_error::INTERNAL,
                "Unable to create keys directory: $homedir");
        }
        if (!is_writable($homedir)) {
            return new enigma_error(enigma_error::INTERNAL,
                "Unable to write to keys directory: $homedir");
        }

        $this->debug   = $debug;
        $this->homedir = $homedir;

        $options = ['homedir' => $this->homedir];

        if ($debug) {
            $options['debug'] = [$this, 'debug'];
        }
        if ($binary) {
            $options['binary'] = $binary;
        }
        if ($agent) {
            $options['agent'] = $agent;
        }
        if ($gpgconf) {
            $options['gpgconf'] = $gpgconf;
        }

        $options['cipher-algo'] = $this->rc->config->get('enigma_pgp_cipher_algo');
        $options['digest-algo'] = $this->rc->config->get('enigma_pgp_digest_algo');

        // Create Crypt_GPG object
        try {
            $this->gpg = new Crypt_GPG($options);
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }

        $this->db_sync();
    }

    /**
     * Encryption (and optional signing).
     *
     * @param string     $text     Message body
     * @param array      $keys     List of keys (enigma_key objects)
     * @param enigma_key $sign_key Optional signing Key ID
     *
     * @return string|enigma_error Encrypted message or enigma_error on failure
     */
    function encrypt($text, $keys, $sign_key = null)
    {
        try {
            foreach ($keys as $key) {
                $this->gpg->addEncryptKey($key->reference);
            }

            if ($sign_key) {
                $this->gpg->addSignKey($sign_key->reference, $sign_key->password);

                $res     = $this->gpg->encryptAndSign($text, true);
                $sigInfo = $this->gpg->getLastSignatureInfo();

                $this->last_sig_algorithm = $sigInfo->getHashAlgorithmName();

                return $res;
            }

            return $this->gpg->encrypt($text, true);
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Decrypt a message (and verify if signature found)
     *
     * @param string           $text       Encrypted message
     * @param array            $keys       List of key-password mapping
     * @param enigma_signature &$signature Signature information (if available)
     *
     * @return mixed Decrypted message or enigma_error on failure
     */
    function decrypt($text, $keys = [], &$signature = null)
    {
        try {
            foreach ($keys as $key => $password) {
                $this->gpg->addDecryptKey($key, $password);
            }

            $result = $this->gpg->decryptAndVerify($text, true);

            if (!empty($result['signatures'])) {
                $signature = $this->parse_signature($result['signatures'][0]);
            }

            // EFAIL vulnerability mitigation (#6289)
            // Handle MDC warning as an exception, this is the default for gpg 2.3.
            if (method_exists($this->gpg, 'getWarnings')) {
                foreach ($this->gpg->getWarnings() as $warning_msg) {
                    if (strpos($warning_msg, 'not integrity protected') !== false) {
                        return new enigma_error(enigma_error::NOMDC, ucfirst($warning_msg));
                    }
                }
            }

            return $result['data'];
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Signing.
     *
     * @param string     $text Message body
     * @param enigma_key $key  The key
     * @param int        $mode Signing mode (enigma_engine::SIGN_*)
     *
     * @return mixed True on success or enigma_error on failure
     */
    function sign($text, $key, $mode = null)
    {
        try {
            $this->gpg->addSignKey($key->reference, $key->password);

            $res     = $this->gpg->sign($text, $mode, Crypt_GPG::ARMOR_ASCII, true);
            $sigInfo = $this->gpg->getLastSignatureInfo();

            $this->last_sig_algorithm = $sigInfo->getHashAlgorithmName();

            return $res;
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Signature verification.
     *
     * @param string $text      Message body
     * @param string $signature Signature, if message is of type PGP/MIME and body doesn't contain it
     *
     * @return enigma_signature|enigma_error Signature information or enigma_error
     */
    function verify($text, $signature)
    {
        try {
            $verified = $this->gpg->verify($text, $signature);
            return $this->parse_signature($verified[0]);
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Key file import.
     *
     * @param string $content   File name or file content
     * @param bool   $isfile    True if first argument is a filename
     * @param array  $passwords Optional key => password map
     *
     * @return mixed Import status array or enigma_error
     */
    public function import($content, $isfile = false, $passwords = [])
    {
        try {
            // GnuPG 2.1 requires secret key passphrases on import
            foreach ($passwords as $keyid => $pass) {
                $this->gpg->addPassphrase($keyid, $pass);
            }

            if ($isfile) {
                $result = $this->gpg->importKeyFile($content);
            }
            else {
                $result = $this->gpg->importKey($content);
            }

            $this->db_save();

            return $result;
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Key export.
     *
     * @param string $keyid        Key ID
     * @param bool   $with_private Include private key
     * @param array  $passwords    Optional key => password map
     *
     * @return string|enigma_error Key content or enigma_error
     */
    public function export($keyid, $with_private = false, $passwords = [])
    {
        try {
            $key = $this->gpg->exportPublicKey($keyid, true);

            if ($with_private) {
                // GnuPG 2.1 requires secret key passphrases on export
                foreach ($passwords as $_keyid => $pass) {
                    $this->gpg->addPassphrase($_keyid, $pass);
                }

                $priv = $this->gpg->exportPrivateKey($keyid, true);
                $key .= $priv;
            }

            return $key;
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Keys listing.
     *
     * @param string $pattern Optional pattern for key ID, user ID or fingerprint
     *
     * @return enigma_key[]|enigma_error Array of keys or enigma_error
     */
    public function list_keys($pattern = '')
    {
        try {
            $keys   = $this->gpg->getKeys($pattern);
            $result = [];

            foreach ($keys as $idx => $key) {
                $result[] = $this->parse_key($key);
            }

            return $result;
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Single key information.
     *
     * @param string $keyid Key ID, user ID or fingerprint
     *
     * @return enigma_key|enigma_error Key object or enigma_error
     */
    public function get_key($keyid)
    {
        $list = $this->list_keys($keyid);

        if (is_array($list)) {
            return array_first($list);
        }

        // error
        return $list;
    }

    /**
     * Key pair generation.
     *
     * @param array $data Key/User data (user, email, password, size)
     *
     * @return mixed Key (enigma_key) object or enigma_error
     */
    public function gen_key($data)
    {
        try {
            $debug  = $this->rc->config->get('enigma_debug');
            $keygen = new Crypt_GPG_KeyGenerator([
                    'homedir' => $this->homedir,
                    // 'binary'  => '/usr/bin/gpg2',
                    'debug'   => $debug ? [$this, 'debug'] : false,
            ]);

            $key = $keygen
                ->setExpirationDate(0)
                ->setPassphrase($data['password'])
                ->generateKey($data['user'], $data['email']);

            return $this->parse_key($key);
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Key deletion.
     *
     * @param string $keyid Key ID
     *
     * @return mixed True on success or enigma_error
     */
    public function delete_key($keyid)
    {
        // delete public key
        $result = $this->delete_pubkey($keyid);

        // error handling
        if ($result !== true) {
            $code = $result->getCode();

            // if not found, delete private key
            if ($code == enigma_error::KEYNOTFOUND) {
                $result = $this->delete_privkey($keyid);
            }
            // need to delete private key first
            else if ($code == enigma_error::DELKEY) {
                $result = $this->delete_privkey($keyid);

                if ($result === true) {
                    $result = $this->delete_pubkey($keyid);
                }
            }
        }

        $this->db_save();

        return $result;
    }

    /**
     * Returns a name of the hash algorithm used for the last
     * signing operation.
     *
     * @return string Hash algorithm name e.g. sha1
     */
    public function signature_algorithm()
    {
        return $this->last_sig_algorithm;
    }

    /**
     * Returns a list of supported features.
     *
     * @return array Capabilities list
     */
    public function capabilities()
    {
        $caps = [enigma_driver::SUPPORT_RSA];
        $version = $this->gpg->getVersion();

        if (version_compare($version, '2.1.7', 'ge')) {
            $caps[] = enigma_driver::SUPPORT_ECC;
        }

        return $caps;
    }

    /**
     * Private key deletion.
     */
    protected function delete_privkey($keyid)
    {
        try {
            $this->gpg->deletePrivateKey($keyid);
            return true;
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Public key deletion.
     */
    protected function delete_pubkey($keyid)
    {
        try {
            $this->gpg->deletePublicKey($keyid);
            return true;
        }
        catch (Exception $e) {
            return $this->get_error_from_exception($e);
        }
    }

    /**
     * Converts Crypt_GPG exception into Enigma's error object
     *
     * @param mixed $e Exception object
     *
     * @return enigma_error Error object
     */
    protected function get_error_from_exception($e)
    {
        $data = [];

        if ($e instanceof Crypt_GPG_KeyNotFoundException) {
            $error = enigma_error::KEYNOTFOUND;
            $data['id'] = $e->getKeyId();
        }
        else if ($e instanceof Crypt_GPG_BadPassphraseException) {
            $error = enigma_error::BADPASS;
            $data['bad']     = $e->getBadPassphrases();
            $data['missing'] = $e->getMissingPassphrases();
        }
        else if ($e instanceof Crypt_GPG_NoDataException) {
            $error = enigma_error::NODATA;
        }
        else if ($e instanceof Crypt_GPG_DeletePrivateKeyException) {
            $error = enigma_error::DELKEY;
        }
        else {
            $error = enigma_error::INTERNAL;
        }

        $msg = $e->getMessage();

        return new enigma_error($error, $msg, $data);
    }

    /**
     * Converts Crypt_GPG_Signature object into Enigma's signature object
     *
     * @param Crypt_GPG_Signature $sig Signature object
     *
     * @return enigma_signature Signature object
     */
    protected function parse_signature($sig)
    {
        $data = new enigma_signature();

        $data->id          = $sig->getId() ?: $sig->getKeyId();
        $data->valid       = $sig->isValid();
        $data->fingerprint = $sig->getKeyFingerprint();
        $data->created     = $sig->getCreationDate();
        $data->expires     = $sig->getExpirationDate();

        // In case of ERRSIG user may not be set
        if ($user = $sig->getUserId()) {
            $data->name    = $user->getName();
            $data->comment = $user->getComment();
            $data->email   = $user->getEmail();
        }

        return $data;
    }

    /**
     * Converts Crypt_GPG_Key object into Enigma's key object
     *
     * @param Crypt_GPG_Key $key Key object
     *
     * @return enigma_key Key object
     */
    protected function parse_key($key)
    {
        $ekey = new enigma_key();

        foreach ($key->getUserIds() as $idx => $user) {
            $id = new enigma_userid();
            $id->name    = $user->getName();
            $id->comment = $user->getComment();
            $id->email   = $user->getEmail();
            $id->valid   = $user->isValid();
            $id->revoked = $user->isRevoked();

            $ekey->users[$idx] = $id;
        }

        $ekey->name = trim($ekey->users[0]->name . ' <' . $ekey->users[0]->email . '>');

        // keep reference to Crypt_GPG's key for performance reasons
        $ekey->reference = $key;

        foreach ($key->getSubKeys() as $idx => $subkey) {
            $skey = new enigma_subkey();
            $skey->id          = $subkey->getId();
            $skey->revoked     = $subkey->isRevoked();
            $skey->fingerprint = $subkey->getFingerprint();
            $skey->has_private = $subkey->hasPrivate();
            $skey->algorithm   = $subkey->getAlgorithm();
            $skey->length      = $subkey->getLength();
            $skey->usage       = $subkey->usage();

            if (method_exists($subkey, 'getCreationDateTime')) {
                $skey->created = $subkey->getCreationDateTime();
                $skey->expires = $subkey->getExpirationDateTime();
            }
            else {
                $skey->created = $subkey->getCreationDate();
                $skey->expires = $subkey->getExpirationDate();

                if ($skey->created) {
                    $skey->created = new DateTime("@{$skey->created}");
                }

                if ($skey->expires) {
                    $skey->expires = new DateTime("@{$skey->expires}");
                }
            }

            $ekey->subkeys[$idx] = $skey;
        };

        $ekey->id = $ekey->subkeys[0]->id;

        return $ekey;
    }

    /**
     * Synchronize keys database on multi-host setups
     */
    protected function db_sync()
    {
        if (!$this->rc->config->get('enigma_multihost')) {
            return;
        }

        $db    = $this->rc->get_dbh();
        $table = $db->table_name('filestore', true);
        $files = [];

        $result = $db->query(
            "SELECT `file_id`, `filename`, `mtime` FROM $table WHERE `user_id` = ? AND `context` = ?",
            $this->rc->user->ID, 'enigma'
        );

        while ($record = $db->fetch_assoc($result)) {
            $file  = $this->homedir . '/' . $record['filename'];
            $mtime = @filemtime($file);
            $files[] = $record['filename'];

            if ($mtime < $record['mtime']) {
                $data_result = $db->query("SELECT `data`, `mtime` FROM $table"
                    . " WHERE `file_id` = ?", $record['file_id']
                );

                $record = $db->fetch_assoc($data_result);
                $data   = $record ? base64_decode($record['data']) : null;

                if ($data === null || $data === false) {
                    rcube::raise_error([
                            'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                            'message' => "Enigma: Failed to sync $file ({$record['file_id']}). Decode error."
                        ], true, false);

                    continue;
                }

                // Private keys might be located in 'private-keys-v1.d' subdirectory. Make sure it exists.
                if (strpos($file, '/private-keys-v1.d/')) {
                    if (!file_exists($this->homedir . '/private-keys-v1.d')) {
                        mkdir($this->homedir . '/private-keys-v1.d', 0700);
                    }
                }

                $tmpfile = $file . '.tmp';

                if (file_put_contents($tmpfile, $data, LOCK_EX) === strlen($data)) {
                    rename($tmpfile, $file);
                    touch($file, $record['mtime']);

                    if ($this->debug) {
                        $this->debug("SYNC: Fetched file: $file");
                    }
                }
                else {
                    // error
                    @unlink($tmpfile);

                    rcube::raise_error([
                            'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                            'message' => "Enigma: Failed to sync $file."
                        ], true, false);
                }
            }
        }

        // Remove files not in database
        if (!$db->is_error($result)) {
            foreach (array_diff($this->db_files_list(), $files) as $file) {
                $file = $this->homedir . '/' . $file;

                if (unlink($file)) {
                    if ($this->debug) {
                        $this->debug("SYNC: Removed file: $file");
                    }
                }
            }
        }

        // No records found, do initial sync if already have the keyring
        if (!$db->is_error($result) && empty($file)) {
            $this->db_save(true);
        }
    }

    /**
     * Save keys database for multi-host setups
     */
    protected function db_save($is_empty = false)
    {
        if (!$this->rc->config->get('enigma_multihost')) {
            return true;
        }

        $db      = $this->rc->get_dbh();
        $table   = $db->table_name('filestore', true);
        $records = [];

        if (!$is_empty) {
            $result = $db->query(
                "SELECT `file_id`, `filename`, `mtime` FROM $table WHERE `user_id` = ? AND `context` = ?",
                $this->rc->user->ID, 'enigma'
            );

            while ($record = $db->fetch_assoc($result)) {
                $records[$record['filename']] = $record;
            }
        }

        foreach ($this->db_files_list() as $filename) {
            $file  = $this->homedir . '/' . $filename;
            $mtime = @filemtime($file);

            $existing = !empty($records[$filename]) ? $records[$filename] : null;
            unset($records[$filename]);

            if ($mtime && (empty($existing) || $mtime > $existing['mtime'])) {
                $data     = file_get_contents($file);
                $data     = base64_encode($data);
                $datasize = strlen($data);

                if (empty($maxsize)) {
                    $maxsize = min($db->get_variable('max_allowed_packet', 1048500), 4*1024*1024) - 2000;
                }

                if ($datasize > $maxsize) {
                    rcube::raise_error([
                            'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                            'message' => "Enigma: Failed to save $file. Size exceeds max_allowed_packet."
                        ], true, false);

                    continue;
                }

                $unique = ['user_id' => $this->rc->user->ID, 'context' => 'enigma', 'filename' => $filename];
                $result = $db->insert_or_update($table, $unique, ['mtime', 'data'], [$mtime, $data]);

                if ($db->is_error($result)) {
                    rcube::raise_error([
                            'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                            'message' => "Enigma: Failed to save $file into database."
                        ], true, false);

                    break;
                }

                if ($this->debug) {
                    $this->debug("SYNC: Pushed file: $file");
                }
            }
        }

        // Delete removed files from database
        foreach (array_keys($records) as $filename) {
            $file   = $this->homedir . '/' . $filename;
            $result = $db->query("DELETE FROM $table WHERE `user_id` = ? AND `context` = ? AND `filename` = ?",
                $this->rc->user->ID, 'enigma', $filename
            );

            if ($db->is_error($result)) {
                rcube::raise_error([
                        'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                        'message' => "Enigma: Failed to delete $file from database."
                    ], true, false);

                break;
            }

            if ($this->debug) {
                $this->debug("SYNC: Removed file: $file");
            }
        }
    }

    /**
     * Returns list of homedir files to backup
     */
    protected function db_files_list()
    {
        $files = [];

        foreach ($this->db_files as $file) {
            if (file_exists($this->homedir . '/' . $file)) {
                $files[] = $file;
            }
        }

        foreach (glob($this->homedir . '/private-keys-v1.d/*.key') as $file) {
            $files[] = ltrim(substr($file, strlen($this->homedir)), '/');
        }

        return $files;
    }

    /**
     * Write debug info from Crypt_GPG to logs/enigma
     */
    public function debug($line)
    {
        rcube::write_log('enigma', 'GPG: ' . $line);
    }
}
PKwc�\�5$̕�#enigma/lib/enigma_driver_phpssl.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | S/MIME driver for the Enigma Plugin                                     |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_driver_phpssl extends enigma_driver
{
    private $rc;
    private $homedir;
    private $user;

    function __construct($user)
    {
        $rcmail = rcmail::get_instance();
        $this->rc   = $rcmail;
        $this->user = $user;
    }

    /**
     * Driver initialization and environment checking.
     * Should only return critical errors.
     *
     * @return mixed NULL on success, enigma_error on failure
     */
    function init()
    {
        $homedir = $this->rc->config->get('enigma_smime_homedir', INSTALL_PATH . '/plugins/enigma/home');

        if (!$homedir)
            return new enigma_error(enigma_error::INTERNAL,
                "Option 'enigma_smime_homedir' not specified");

        // check if homedir exists (create it if not) and is readable
        if (!file_exists($homedir))
            return new enigma_error(enigma_error::INTERNAL,
                "Keys directory doesn't exists: $homedir");
        if (!is_writable($homedir))
            return new enigma_error(enigma_error::INTERNAL,
                "Keys directory isn't writeable: $homedir");

        $homedir = $homedir . '/' . $this->user;

        // check if user's homedir exists (create it if not) and is readable
        if (!file_exists($homedir))
            mkdir($homedir, 0700);

        if (!file_exists($homedir))
            return new enigma_error(enigma_error::INTERNAL,
                "Unable to create keys directory: $homedir");
        if (!is_writable($homedir))
            return new enigma_error(enigma_error::INTERNAL,
                "Unable to write to keys directory: $homedir");

        $this->homedir = $homedir;

    }

    function encrypt($text, $keys, $sign_key = null)
    {
    }

    function decrypt($text, $keys = [], &$signature = null)
    {
    }

    function sign($text, $key, $mode = null)
    {
    }

    function verify($struct, $message)
    {
        // use common temp dir
        $msg_file  = rcube_utils::temp_filename('enigmsg');
        $cert_file = rcube_utils::temp_filename('enigcrt');

        $fh = fopen($msg_file, "w");
        if ($struct->mime_id) {
            $message->get_part_body($struct->mime_id, false, 0, $fh);
        }
        else {
            $this->rc->storage->get_raw_body($message->uid, $fh);
        }
        fclose($fh);

        // @TODO: use stored certificates

        // try with certificate verification
        $sig      = openssl_pkcs7_verify($msg_file, 0, $cert_file);
        $validity = true;

        if ($sig !== true) {
            // try without certificate verification
            $sig      = openssl_pkcs7_verify($msg_file, PKCS7_NOVERIFY, $cert_file);
            $validity = enigma_error::UNVERIFIED;
        }

        if ($sig === true) {
            $sig = $this->parse_sig_cert($cert_file, $validity);
        }
        else {
            $errorstr = $this->get_openssl_error();
            $sig = new enigma_error(enigma_error::INTERNAL, $errorstr);
        }

        // remove temp files
        @unlink($msg_file);
        @unlink($cert_file);

        return $sig;
    }

    public function import($content, $isfile = false, $passwords = [])
    {
    }

    public function export($key, $with_private = false, $passwords = [])
    {
    }

    public function list_keys($pattern='')
    {
    }

    public function get_key($keyid)
    {
    }

    public function gen_key($data)
    {
    }

    public function delete_key($keyid)
    {
    }

    /**
     * Returns a name of the hash algorithm used for the last
     * signing operation.
     *
     * @return string Hash algorithm name e.g. sha1
     */
    public function signature_algorithm()
    {
    }

    /**
     * Converts Crypt_GPG_Key object into Enigma's key object
     *
     * @param Crypt_GPG_Key $key Key object
     *
     * @return enigma_key Key object
     */
    private function parse_key($key)
    {
    }

    private function get_openssl_error()
    {
        $tmp = [];
        while ($errorstr = openssl_error_string()) {
            $tmp[] = $errorstr;
        }

        return join("\n", array_values($tmp));
    }

    private function parse_sig_cert($file, $validity)
    {
        $cert = openssl_x509_parse(file_get_contents($file));

        if (empty($cert) || empty($cert['subject'])) {
            $errorstr = $this->get_openssl_error();
            return new enigma_error(enigma_error::INTERNAL, $errorstr);
        }

        $data = new enigma_signature();

        $data->id          = $cert['hash']; //?
        $data->valid       = $validity;
        $data->fingerprint = $cert['serialNumber'];
        $data->created     = $cert['validFrom_time_t'];
        $data->expires     = $cert['validTo_time_t'];
        $data->name        = $cert['subject']['CN'];
//        $data->comment     = '';
        $data->email       = $cert['subject']['emailAddress'];

        return $data;
    }
}
PKwc�\��T��enigma/lib/enigma_signature.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Signature class for the Enigma Plugin                                   |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_signature
{
    public $id;
    public $valid;
    public $fingerprint;
    public $created;
    public $expires;
    public $name;
    public $comment;
    public $email;

    // Set it to true if signature is valid, but part of the message
    // was out of the signed block
    public $partial;

    /**
     * Find key user id matching the email message sender
     *
     * @param enigma_engine $engine  Enigma engine
     * @param rcube_message $message Message object
     * @param string        $part_id Message part identifier
     *
     * @return string User identifier (name + email)
     */
    public function get_sender($engine, $message, $part_id = null)
    {
        if (!$this->email) {
            return $this->name;
        }

        if ($this->fingerprint && ($key = $engine->get_key($this->fingerprint))) {
            $from    = $message->headers->from;
            $charset = $message->headers->charset;

            // Get From: header from the parent part, if it's a forwarded message
            if ($part_id && strpos($part_id, '.') !== false) {
                $level = explode('.', $part_id);
                $parts = $message->mime_parts();

                while (array_pop($level) !== null) {
                    $parent = join('.', $level);
                    if (!empty($parts[$parent]) && $parts[$parent]->mimetype == 'message/rfc822') {
                        $from    = $parts[$parent]->headers['from'];
                        $charset = $parts[$parent]->charset;
                        break;
                    }
                }
            }

            $from = rcube_mime::decode_address_list($from, 1, true, $charset);
            $from = (array) $from[1];

            if (!empty($from)) {
                // Compare name and email
                foreach ($key->users as $user) {
                    if ($user->name == $from['name'] && $user->email == $from['mailto']) {
                        return sprintf('%s <%s>', $user->name, $user->email);
                    }
                }

                // Compare only email
                foreach ($key->users as $user) {
                    if ($user->email === $from['mailto']) {
                        return sprintf('%s <%s>', $this->name, $user->email);
                    }
                }
            }
        }

        return sprintf('%s <%s>', $this->name, $this->email);
    }
}
PKwc�\`)�t�t�enigma/lib/enigma_engine.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Engine of the Enigma Plugin                                             |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

/**
 * Enigma plugin engine.
 *
 * RFC2440: OpenPGP Message Format
 * RFC3156: MIME Security with OpenPGP
 * RFC3851: S/MIME
 */
class enigma_engine
{
    private $rc;
    private $enigma;
    private $pgp_driver;
    private $smime_driver;
    private $password_time;
    private $cache = [];

    public $decryptions     = [];
    public $signatures      = [];
    public $encrypted_parts = [];

    const ENCRYPTED_PARTIALLY = 100;

    const SIGN_MODE_BODY     = 1;
    const SIGN_MODE_SEPARATE = 2;
    const SIGN_MODE_MIME     = 4;

    const ENCRYPT_MODE_BODY = 1;
    const ENCRYPT_MODE_MIME = 2;
    const ENCRYPT_MODE_SIGN = 4;


    /**
     * Plugin initialization.
     */
    function __construct($enigma)
    {
        $this->rc     = rcmail::get_instance();
        $this->enigma = $enigma;

        $this->password_time = $this->rc->config->get('enigma_password_time') * 60;

        // this will remove passwords from session after some time
        if ($this->password_time) {
            $this->get_passwords();
        }
    }

    /**
     * PGP driver initialization.
     */
    function load_pgp_driver()
    {
        if ($this->pgp_driver) {
            return;
        }

        $driver   = 'enigma_driver_' . $this->rc->config->get('enigma_pgp_driver', 'gnupg');
        $username = $this->rc->user->get_username();

        // Load driver
        $this->pgp_driver = new $driver($username);

        if (!$this->pgp_driver) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Enigma plugin: Unable to load PGP driver: $driver"
                ], true, true
            );
        }

        // Initialise driver
        $result = $this->pgp_driver->init();

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__, true);
        }
    }

    /**
     * S/MIME driver initialization.
     */
    function load_smime_driver()
    {
        if ($this->smime_driver) {
            return;
        }

        $driver   = 'enigma_driver_' . $this->rc->config->get('enigma_smime_driver', 'phpssl');
        $username = $this->rc->user->get_username();

        // Load driver
        $this->smime_driver = new $driver($username);

        if (!$this->smime_driver) {
            rcube::raise_error([
                    'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Enigma plugin: Unable to load S/MIME driver: $driver"
                ], true, true
            );
        }

        // Initialise driver
        $result = $this->smime_driver->init();

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__, true);
        }
    }

    /**
     * Handler for message signing
     *
     * @param Mail_mime &$message Original message
     * @param int       $mode     Encryption mode
     *
     * @return enigma_error On error returns error object
     */
    function sign_message(&$message, $mode = null)
    {
        $mime = new enigma_mime_message($message, enigma_mime_message::PGP_SIGNED);
        $from = $mime->getFromAddress();

        // find private key
        $key = $this->find_key($from, true);

        if (empty($key)) {
            return new enigma_error(enigma_error::KEYNOTFOUND);
        }

        // check if we have password for this key
        $passwords = $this->get_passwords();
        $pass      = $passwords[$key->id] ?? null;

        if ($pass === null && !$this->rc->config->get('enigma_passwordless')) {
            // ask for password
            $error = ['missing' => [$key->id => $key->name]];
            return new enigma_error(enigma_error::BADPASS, '', $error);
        }

        $key->password = $pass;

        // select mode
        switch ($mode) {
        case self::SIGN_MODE_BODY:
            $pgp_mode = Crypt_GPG::SIGN_MODE_CLEAR;
            break;

        case self::SIGN_MODE_MIME:
            $pgp_mode = Crypt_GPG::SIGN_MODE_DETACHED;
            break;

        default:
            if ($mime->isMultipart()) {
                $pgp_mode = Crypt_GPG::SIGN_MODE_DETACHED;
            }
            else {
                $pgp_mode = Crypt_GPG::SIGN_MODE_CLEAR;
            }
        }

        // get message body
        if ($pgp_mode == Crypt_GPG::SIGN_MODE_CLEAR) {
            // in this mode we'll replace text part
            // with the one containing signature
            $body = $message->getTXTBody();

            $text_charset = $message->getParam('text_charset');
            $line_length  = $this->rc->config->get('line_length', 72);

            // We can't use format=flowed for signed messages
            if (strpos($text_charset, 'format=flowed')) {
                list($charset, $params) = explode(';', $text_charset);
                $body = rcube_mime::unfold_flowed($body);
                $body = rcube_mime::wordwrap($body, $line_length, "\r\n", false, $charset);

                $text_charset = str_replace(";\r\n format=flowed", '', $text_charset);
            }
        }
        else {
            // here we'll build PGP/MIME message
            $body = $mime->getOrigBody();
        }

        // sign the body
        $result = $this->pgp_sign($body, $key, $pgp_mode);

        if ($result !== true) {
            if ($result->getCode() == enigma_error::BADPASS) {
                // ask for password
                $error = ['bad' => [$key->id => $key->name]];
                return new enigma_error(enigma_error::BADPASS, '', $error);
            }

            return $result;
        }

        // replace message body
        if ($pgp_mode == Crypt_GPG::SIGN_MODE_CLEAR) {
            $message->setTXTBody($body);
            if (!empty($text_charset)) {
                $message->setParam('text_charset', $text_charset);
            }
        }
        else {
            $mime->addPGPSignature($body, $this->pgp_driver->signature_algorithm());
            $message = $mime;
        }
    }

    /**
     * Handler for message encryption
     *
     * @param Mail_mime &$message Original message
     * @param int       $mode     Encryption mode
     * @param bool      $is_draft Is draft-save action - use only sender's key for encryption
     *
     * @return enigma_error On error returns error object
     */
    function encrypt_message(&$message, $mode = null, $is_draft = false)
    {
        $mime = new enigma_mime_message($message, enigma_mime_message::PGP_ENCRYPTED);

        // always use sender's key
        $from = $mime->getFromAddress();

        $sign_key = null;
        $keys     = [];

        // check senders key for signing
        if ($mode & self::ENCRYPT_MODE_SIGN) {
            $sign_key = $this->find_key($from, true);

            if (empty($sign_key)) {
                return new enigma_error(enigma_error::KEYNOTFOUND);
            }

            // check if we have password for this key
            $passwords = $this->get_passwords();
            $sign_pass = $passwords[$sign_key->id] ?? null;

            if ($sign_pass === null && !$this->rc->config->get('enigma_passwordless')) {
                // ask for password
                $error = ['missing' => [$sign_key->id => $sign_key->name]];
                return new enigma_error(enigma_error::BADPASS, '', $error);
            }

            $sign_key->password = $sign_pass;
        }

        $recipients = [$from];

        // if it's not a draft we add all recipients' keys
        if (!$is_draft) {
            $recipients = array_merge($recipients, $mime->getRecipients());
        }

        $recipients = array_unique($recipients);

        // find recipient public keys
        foreach ((array) $recipients as $email) {
            if ($email == $from && $sign_key) {
                $key = $sign_key;
            }
            else {
                $key = $this->find_key($email);
            }

            if (empty($key)) {
                return new enigma_error(enigma_error::KEYNOTFOUND, '', ['missing' => $email]);
            }

            $keys[] = $key;
        }

        // select mode
        if ($mode & self::ENCRYPT_MODE_BODY) {
            $encrypt_mode = $mode;
        }
        else if ($mode & self::ENCRYPT_MODE_MIME) {
            $encrypt_mode = $mode;
        }
        else {
            $encrypt_mode = $mime->isMultipart() ? self::ENCRYPT_MODE_MIME : self::ENCRYPT_MODE_BODY;
        }

        // get message body
        if ($encrypt_mode == self::ENCRYPT_MODE_BODY) {
            // in this mode we'll replace text part
            // with the one containing encrypted message
            $body = $message->getTXTBody();
        }
        else {
            // here we'll build PGP/MIME message
            $body = $mime->getOrigBody();
        }

        // sign the body
        $result = $this->pgp_encrypt($body, $keys, $sign_key);

        if ($result !== true) {
            if ($result->getCode() == enigma_error::BADPASS) {
                // ask for password
                $error = ['bad' => [$sign_key->id => $sign_key->name]];
                return new enigma_error(enigma_error::BADPASS, '', $error);
            }

            return $result;
        }

        // replace message body
        if ($encrypt_mode == self::ENCRYPT_MODE_BODY) {
            $message->setTXTBody($body);
        }
        else {
            $mime->setPGPEncryptedBody($body);
            $message = $mime;
        }
    }

    /**
     * Handler for attaching public key to a message
     *
     * @param Mail_mime &$message Original message
     *
     * @return bool True on success, False on failure
     */
    function attach_public_key(&$message)
    {
        $headers = $message->headers();
        $from    = rcube_mime::decode_address_list($headers['From'], 1, false, null, true);
        $from    = $from[1] ?? null;

        // find my key
        if ($from && ($key = $this->find_key($from, true))) {
            $pubkey_armor = $this->export_key($key->id);

            if (!$pubkey_armor instanceof enigma_error) {
                $pubkey_name = '0x' . enigma_key::format_id($key->id) . '.asc';
                $message->addAttachment($pubkey_armor, 'application/pgp-keys', $pubkey_name, false, '7bit');
                return true;
            }
        }

        return false;
    }

    /**
     * Handler for message_part_structure hook.
     * Called for every part of the message.
     *
     * @param array  $p    Original parameters
     * @param string $body Part body (will be set if used internally)
     *
     * @return array Modified parameters
     */
    function part_structure($p, $body = null)
    {
        static $got_content = false;

        // Prevent from "decryption oracle" [CVE-2019-10740] (#6638)
        // On mail compose (edit/reply/forward) we support encrypted content only
        // in the first "content part" of the message.
        if ($got_content && $this->rc->task == 'mail' && $this->rc->action == 'compose') {
            return;
        }

        // Don't be tempted to support encryption in text/html parts
        // Because of EFAIL vulnerability we should never support this (#6289)

        if ($p['mimetype'] == 'text/plain' || $p['mimetype'] == 'application/pgp') {
            $this->parse_plain($p, $body);
            $got_content = true;
        }
        else if ($p['mimetype'] == 'multipart/signed') {
            $this->parse_signed($p, $body);
            $got_content = true;
        }
        else if ($p['mimetype'] == 'multipart/encrypted') {
            $this->parse_encrypted($p);
            $got_content = true;
        }
        else if ($p['mimetype'] == 'application/pkcs7-mime') {
            $this->parse_encrypted($p);
            $got_content = true;
        }
        else {
            $got_content = !empty($p['structure']->type) && $p['structure']->type === 'content';
        }

        return $p;
    }

    /**
     * Handler for message_part_body hook.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function part_body($p)
    {
        // encrypted attachment, see parse_plain_encrypted()
        if (!empty($p['part']->need_decryption) && $p['part']->body === null) {
            $this->load_pgp_driver();

            $storage = $this->rc->get_storage();
            $body    = $storage->get_message_part($p['object']->uid, $p['part']->mime_id, $p['part'], null, null, true, 0, false);
            $result  = $this->pgp_decrypt($body);

            // @TODO: what to do on error?
            if ($result === true) {
                $p['part']->body = $body;
                $p['part']->size = strlen($body);
                $p['part']->body_modified = true;
            }
        }

        return $p;
    }

    /**
     * Handler for plain/text message.
     *
     * @param array  &$p   Reference to hook's parameters
     * @param string $body Part body (will be set if used internally)
     */
    function parse_plain(&$p, $body = null)
    {
        $part = $p['structure'];

        // Get message body from IMAP server
        if ($body === null) {
            $body = $this->get_part_body($p['object'], $part);
        }

        // In this way we can use fgets on string as on file handle
        // Don't use php://temp for security (body may come from an encrypted part)
        $fd = fopen('php://memory', 'r+');
        if (!$fd) {
            return;
        }

        fwrite($fd, $body);
        rewind($fd);

        $body   = '';
        $prefix = '';
        $mode   = '';
        $tokens = [
            'BEGIN PGP SIGNED MESSAGE' => 'signed-start',
            'END PGP SIGNATURE'        => 'signed-end',
            'BEGIN PGP MESSAGE'        => 'encrypted-start',
            'END PGP MESSAGE'          => 'encrypted-end',
        ];
        $regexp = '/^-----(' . implode('|', array_keys($tokens)) . ')-----[\r\n]*/';

        while (($line = fgets($fd)) !== false) {
            if (strlen($line) > 5 && $line[0] === '-' && $line[4] === '-' && preg_match($regexp, $line, $m)) {
                switch ($tokens[$m[1]]) {
                case 'signed-start':
                    $body = $line;
                    $mode = 'signed';
                    break;

                case 'signed-end':
                    if ($mode === 'signed') {
                        $body .= $line;
                    }
                    break 2; // ignore anything after this line

                case 'encrypted-start':
                    $body = $line;
                    $mode = 'encrypted';
                    break;

                case 'encrypted-end':
                    if ($mode === 'encrypted') {
                        $body .= $line;
                    }
                    break 2; // ignore anything after this line
                }

                continue;
            }

            if ($mode === 'signed') {
                $body .= $line;
            }
            else if ($mode === 'encrypted') {
                $body .= $line;
            }
            else {
                $prefix .= $line;
            }
        }

        fclose($fd);

        if ($mode === 'signed') {
            $this->parse_plain_signed($p, $body, $prefix);
        }
        else if ($mode === 'encrypted') {
            $this->parse_plain_encrypted($p, $body, $prefix);
        }
    }

    /**
     * Handler for multipart/signed message.
     *
     * @param array  &$p   Reference to hook's parameters
     * @param string $body Part body (will be set if used internally)
     */
    function parse_signed(&$p, $body = null)
    {
        $struct = $p['structure'];

        // S/MIME
        if (!empty($struct->parts[1]) && $struct->parts[1]->mimetype == 'application/pkcs7-signature') {
            $this->parse_smime_signed($p, $body);
        }
        // PGP/MIME: RFC3156
        // The multipart/signed body MUST consist of exactly two parts.
        // The first part contains the signed data in MIME canonical format,
        // including a set of appropriate content headers describing the data.
        // The second body MUST contain the PGP digital signature.  It MUST be
        // labeled with a content type of "application/pgp-signature".
        else if (count($struct->parts) == 2
            && $struct->parts[1] && $struct->parts[1]->mimetype == 'application/pgp-signature'
        ) {
            $this->parse_pgp_signed($p, $body);
        }
    }

    /**
     * Handler for multipart/encrypted message.
     *
     * @param array &$p Reference to hook's parameters
     */
    function parse_encrypted(&$p)
    {
        $struct = $p['structure'];

        // S/MIME
        if ($p['mimetype'] == 'application/pkcs7-mime') {
            $this->parse_smime_encrypted($p);
        }
        // PGP/MIME: RFC3156
        // The multipart/encrypted MUST consist of exactly two parts. The first
        // MIME body part must have a content type of "application/pgp-encrypted".
        // This body contains the control information.
        // The second MIME body part MUST contain the actual encrypted data.  It
        // must be labeled with a content type of "application/octet-stream".
        else if (count($struct->parts) == 2
            && $struct->parts[0] && $struct->parts[0]->mimetype == 'application/pgp-encrypted'
            && $struct->parts[1] && $struct->parts[1]->mimetype == 'application/octet-stream'
        ) {
            $this->parse_pgp_encrypted($p);
        }
    }

    /**
     * Handler for plain signed message.
     * Excludes message and signature bodies and verifies signature.
     *
     * @param array  &$p     Reference to hook's parameters
     * @param string $body   Message (part) body
     * @param string $prefix Body prefix (additional text before the encrypted block)
     */
    private function parse_plain_signed(&$p, $body, $prefix = '')
    {
        if (!$this->rc->config->get('enigma_signatures', true)) {
            return;
        }

        $this->load_pgp_driver();
        $part = $p['structure'];

        // Verify signature
        if ($this->rc->action == 'show' || $this->rc->action == 'preview' || $this->rc->action == 'print') {
            $sig = $this->pgp_verify($body);
        }

        // In this way we can use fgets on string as on file handle
        // Don't use php://temp for security (body may come from an encrypted part)
        $fd = fopen('php://memory', 'r+');
        if (!$fd) {
            return;
        }

        fwrite($fd, $body);
        rewind($fd);

        $body = $part->body = null;
        $part->body_modified = true;

        // Extract body (and signature?)
        while (($line = fgets($fd, 1024)) !== false) {
            if ($part->body === null) {
                $part->body = '';
            }
            else if (preg_match('/^-----BEGIN PGP SIGNATURE-----/', $line)) {
                break;
            }
            else {
                $part->body .= $line;
            }
        }

        fclose($fd);

        // Remove "Hash" Armor Headers
        $part->body = preg_replace('/^.*\r*\n\r*\n/', '', $part->body);
        // de-Dash-Escape (RFC2440)
        $part->body = preg_replace('/(^|\n)- -/', '\\1-', $part->body);

        if ($prefix) {
            $part->body = $prefix . $part->body;
        }

        // Store signature data for display
        if (!empty($sig)) {
            $sig->partial = !empty($prefix);
            $this->signatures[$part->mime_id] = $sig;
        }
    }

    /**
     * Handler for PGP/MIME signed message.
     * Verifies signature.
     *
     * @param array  &$p   Reference to hook's parameters
     * @param string $body Part body (will be set if used internally)
     */
    private function parse_pgp_signed(&$p, $body = null)
    {
        if (!$this->rc->config->get('enigma_signatures', true)) {
            return;
        }

        if ($this->rc->action != 'show' && $this->rc->action != 'preview' && $this->rc->action != 'print') {
            return;
        }

        $this->load_pgp_driver();
        $struct = $p['structure'];

        $msg_part = $struct->parts[0];
        $sig_part = $struct->parts[1];

        // Get bodies
        if ($body === null) {
            if (empty($struct->body_modified)) {
                $body = $this->get_part_body($p['object'], $struct);
            }
        }

        $boundary = $struct->ctype_parameters['boundary'];

        // when it is a signed message forwarded as attachment
        // ctype_parameters property will not be set
        if (!$boundary && !empty($struct->headers['content-type'])
            && preg_match('/boundary="?([a-zA-Z0-9\'()+_,-.\/:=?]+)"?/', $struct->headers['content-type'], $m)
        ) {
            $boundary = $m[1];
        }

        // set signed part body
        list($msg_body, $sig_body) = $this->explode_signed_body($body, $boundary);

        // Verify
        if ($sig_body && $msg_body) {
            $sig = $this->pgp_verify($msg_body, $sig_body);

            // Store signature data for display
            $this->signatures[$struct->mime_id]   = $sig;
            $this->signatures[$msg_part->mime_id] = $sig;
        }
    }

    /**
     * Handler for S/MIME signed message.
     * Verifies signature.
     *
     * @param array  &$p   Reference to hook's parameters
     * @param string $body Part body (will be set if used internally)
     */
    private function parse_smime_signed(&$p, $body = null)
    {
        if (!$this->rc->config->get('enigma_signatures', true)) {
            return;
        }

        // @TODO
    }

    /**
     * Handler for plain encrypted message.
     *
     * @param array  &$p     Reference to hook's parameters
     * @param string $body   Message (part) body
     * @param string $prefix Body prefix (additional text before the encrypted block)
     */
    private function parse_plain_encrypted(&$p, $body, $prefix = '')
    {
        if (!$this->rc->config->get('enigma_decryption', true)) {
            return;
        }

        $this->load_pgp_driver();
        $part = $p['structure'];

        // Decrypt
        $result = $this->pgp_decrypt($body, $signature);

        // Store decryption status
        $this->decryptions[$part->mime_id] = $result;

        // Store signature data for display
        if ($signature) {
            $this->signatures[$part->mime_id] = $signature;
        }

        // find parent part ID
        if (strpos($part->mime_id, '.')) {
            $items = explode('.', $part->mime_id);
            array_pop($items);
            $parent = implode('.', $items);
        }
        else {
            $parent = 0;
        }

        // Parse decrypted message
        if ($result === true) {
            $part->body          = $prefix . $body;
            $part->body_modified = true;

            // it maybe PGP signed inside, verify signature
            $this->parse_plain($p, $body);

            // Remember it was decrypted
            $this->encrypted_parts[] = $part->mime_id;

            // Inform the user that only a part of the body was encrypted
            if ($prefix) {
                $this->decryptions[$part->mime_id] = self::ENCRYPTED_PARTIALLY;
            }

            // Encrypted plain message may contain encrypted attachments
            // in such case attachments have .pgp extension and type application/octet-stream.
            // This is what happens when you select "Encrypt each attachment separately
            // and send the message using inline PGP" in Thunderbird's Enigmail.

            if (!empty($p['object']->mime_parts[$parent])) {
                foreach ((array) $p['object']->mime_parts[$parent]->parts as $p) {
                    if ($p->disposition == 'attachment' && $p->mimetype == 'application/octet-stream'
                        && preg_match('/^(.*)\.pgp$/i', $p->filename, $m)
                    ) {
                        // modify filename
                        $p->filename = $m[1];
                        // flag the part, it will be decrypted when needed
                        $p->need_decryption = true;
                        // disable caching
                        $p->body_modified = true;
                    }
                }
            }
        }
        // decryption failed, but the message may have already
        // been cached with the modified parts (see above),
        // let's bring the original state back
        else if (!empty($p['object']->mime_parts[$parent])) {
            foreach ((array) $p['object']->mime_parts[$parent]->parts as $p) {
                if ($p->need_decryption && !preg_match('/^(.*)\.pgp$/i', $p->filename, $m)) {
                    // modify filename
                    $p->filename .= '.pgp';
                    // flag the part, it will be decrypted when needed
                    unset($p->need_decryption);
                }
            }
        }
    }

    /**
     * Handler for PGP/MIME encrypted message.
     *
     * @param array &$p Reference to hook's parameters
     */
    private function parse_pgp_encrypted(&$p)
    {
        if (!$this->rc->config->get('enigma_decryption', true)) {
            return;
        }

        $this->load_pgp_driver();

        $struct = $p['structure'];
        $part   = $struct->parts[1];

        // Get body
        $body = $this->get_part_body($p['object'], $part);

        // Decrypt
        $result = $this->pgp_decrypt($body, $signature);

        if ($result === true) {
            // Parse decrypted message
            $struct = $this->parse_body($body);

            // Modify original message structure
            $this->modify_structure($p, $struct, strlen($body));

            // Parse the structure (there may be encrypted/signed parts inside
            $this->part_structure([
                    'object'    => $p['object'],
                    'structure' => $struct,
                    'mimetype'  => $struct->mimetype
                ], $body);

            // Attach the decryption message to all parts
            $this->decryptions[$struct->mime_id] = $result;
            foreach ((array) $struct->parts as $sp) {
                $this->decryptions[$sp->mime_id] = $result;
                if ($signature) {
                    $this->signatures[$sp->mime_id] = $signature;
                }
            }
        }
        else {
            $this->decryptions[$part->mime_id] = $result;

            // Make sure decryption status message will be displayed
            $part->type = 'content';
            $p['object']->parts[] = $part;

            // don't show encrypted part on attachments list
            // don't show "cannot display encrypted message" text
            $p['abort'] = true;
        }
    }

    /**
     * Handler for S/MIME encrypted message.
     *
     * @param array &$p Reference to hook's parameters
     */
    private function parse_smime_encrypted(&$p)
    {
        if (!$this->rc->config->get('enigma_decryption', true)) {
            return;
        }

        // @TODO
    }

    /**
     * PGP signature verification.
     *
     * @param mixed &$msg_body Message body
     * @param mixed $sig_body  Signature body (for MIME messages)
     *
     * @return mixed enigma_signature or enigma_error
     */
    private function pgp_verify(&$msg_body, $sig_body = null)
    {
        // @TODO: Handle big bodies using (temp) files

        // Get rid of possible non-ascii characters (#5962)
        $sig_body = preg_replace('/[^\x00-\x7F]/', '', $sig_body);

        $sig = $this->pgp_driver->verify($msg_body, $sig_body);

        if (($sig instanceof enigma_error) && $sig->getCode() != enigma_error::KEYNOTFOUND) {
            self::raise_error($sig, __LINE__);
        }

        return $sig;
    }

    /**
     * PGP message decryption.
     *
     * @param mixed            &$msg_body  Message body
     * @param enigma_signature &$signature Signature verification result
     *
     * @return mixed True or enigma_error
     */
    private function pgp_decrypt(&$msg_body, &$signature = null)
    {
        // @TODO: Handle big bodies using (temp) files

        // Get rid of possible non-ascii characters (#5962)
        $msg_body = preg_replace('/[^\x00-\x7F]/', '', $msg_body);

        $keys   = $this->get_passwords();
        $result = $this->pgp_driver->decrypt($msg_body, $keys, $signature);

        if ($result instanceof enigma_error) {
            if ($result->getCode() != enigma_error::KEYNOTFOUND) {
                self::raise_error($result, __LINE__);
            }

            return $result;
        }

        $msg_body = $result;

        return true;
    }

    /**
     * PGP message signing
     *
     * @param mixed      &$msg_body Message body
     * @param enigma_key $key       The key (with passphrase)
     * @param int        $mode      Signing mode
     *
     * @return mixed True or enigma_error
     */
    private function pgp_sign(&$msg_body, $key, $mode = null)
    {
        // @TODO: Handle big bodies using (temp) files
        $result = $this->pgp_driver->sign($msg_body, $key, $mode);

        if ($result instanceof enigma_error) {
            if ($result->getCode() != enigma_error::KEYNOTFOUND) {
                self::raise_error($result, __LINE__);
            }

            return $result;
        }

        $msg_body = $result;

        return true;
    }

    /**
     * PGP message encrypting
     *
     * @param mixed  &$msg_body Message body
     * @param array  $keys      Keys (array of enigma_key objects)
     * @param string $sign_key  Optional signing Key ID
     * @param string $sign_pass Optional signing Key password
     *
     * @return mixed True or enigma_error
     */
    private function pgp_encrypt(&$msg_body, $keys, $sign_key = null, $sign_pass = null)
    {
        // @TODO: Handle big bodies using (temp) files
        $result = $this->pgp_driver->encrypt($msg_body, $keys, $sign_key, $sign_pass);

        if ($result instanceof enigma_error) {
            if ($result->getCode() != enigma_error::KEYNOTFOUND) {
                self::raise_error($result, __LINE__);
            }

            return $result;
        }

        $msg_body = $result;

        return true;
    }

    /**
     * PGP keys listing.
     *
     * @param mixed $pattern Key ID/Name pattern
     *
     * @return mixed Array of keys or enigma_error
     */
    function list_keys($pattern = '')
    {
        $this->load_pgp_driver();
        $result = $this->pgp_driver->list_keys($pattern);

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
        }

        return $result;
    }

    /**
     * Find PGP private/public key
     *
     * @param string $email    E-mail address
     * @param bool   $can_sign Need a key for signing?
     *
     * @return enigma_key The key
     */
    function find_key($email, $can_sign = false)
    {
        if ($can_sign && array_key_exists($email, $this->cache)) {
            return $this->cache[$email];
        }

        $this->load_pgp_driver();
        $result = $this->pgp_driver->list_keys($email);

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
            return;
        }

        $mode = $can_sign ? enigma_key::CAN_SIGN : enigma_key::CAN_ENCRYPT;
        $ret  = null;

        // check key validity and type
        foreach ($result as $key) {
            if (($subkey = $key->find_subkey($email, $mode))
                && (!$can_sign || $key->get_type() == enigma_key::TYPE_KEYPAIR)
            ) {
                $ret = $key;
                break;
            }
        }

        // cache private key info for better performance
        // we can skip one list_keys() call when signing and attaching a key
        if ($can_sign) {
            $this->cache[$email] = $ret;
        }

        return $ret;
    }

    /**
     * PGP key details.
     *
     * @param mixed $keyid Key ID
     *
     * @return mixed enigma_key or enigma_error
     */
    function get_key($keyid)
    {
        $this->load_pgp_driver();
        $result = $this->pgp_driver->get_key($keyid);

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
        }

        return $result;
    }

    /**
     * PGP key delete.
     *
     * @param string $keyid Key ID
     *
     * @return enigma_error|bool True on success
     */
    function delete_key($keyid)
    {
        $this->load_pgp_driver();
        $result = $this->pgp_driver->delete_key($keyid);

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
        }

        return $result;
    }

    /**
     * PGP keys pair generation.
     *
     * @param array $data Key pair parameters
     *
     * @return mixed enigma_key or enigma_error
     */
    function generate_key($data)
    {
        $this->load_pgp_driver();
        $result = $this->pgp_driver->gen_key($data);

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
        }

        return $result;
    }

    /**
     * PGP keys/certs import.
     *
     * @param mixed $content Import file name or content
     * @param bool  $isfile  True if first argument is a filename
     *
     * @return mixed Import status data array or enigma_error
     */
    function import_key($content, $isfile = false)
    {
        $this->load_pgp_driver();
        $result = $this->pgp_driver->import($content, $isfile, $this->get_passwords());

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
        }
        else {
            $result['imported']  = $result['public_imported'] + $result['private_imported'];
            $result['unchanged'] = $result['public_unchanged'] + $result['private_unchanged'];
        }

        return $result;
    }

    /**
     * PGP keys/certs export.
     *
     * @param string   $key             Key ID
     * @param resource $fp              Optional output stream
     * @param bool     $include_private Include private key
     *
     * @return mixed Key content or enigma_error
     */
    function export_key($key, $fp = null, $include_private = false)
    {
        $this->load_pgp_driver();
        $result = $this->pgp_driver->export($key, $include_private, $this->get_passwords());

        if ($result instanceof enigma_error) {
            self::raise_error($result, __LINE__);
            return $result;
        }

        if ($fp) {
            fwrite($fp, $result);
        }
        else {
            return $result;
        }
    }

    /**
     * Registers password for specified key/cert sent by the password prompt.
     */
    function password_handler()
    {
        $keyid  = rcube_utils::get_input_string('_keyid', rcube_utils::INPUT_POST);
        $passwd = rcube_utils::get_input_string('_passwd', rcube_utils::INPUT_POST, true);

        if ($keyid && strlen($passwd)) {
            $this->save_password(strtoupper($keyid), $passwd);
        }
    }

    /**
     * Saves key/cert password in user session
     */
    function save_password($keyid, $password)
    {
        // we store passwords in session for specified time
        if (!empty($_SESSION['enigma_pass'])) {
            $config = $this->rc->decrypt($_SESSION['enigma_pass']);
            $config = unserialize($config);
        } else {
            $config = [];
        }

        $config[$keyid] = [$password, time()];

        $_SESSION['enigma_pass'] = $this->rc->encrypt(serialize($config));
    }

    /**
     * Returns currently stored passwords
     */
    function get_passwords()
    {
        if (!empty($_SESSION['enigma_pass'])) {
            $config = $this->rc->decrypt($_SESSION['enigma_pass']);
            $config = @unserialize($config);
        }

        $threshold = $this->password_time ? time() - $this->password_time : 0;
        $keys      = [];

        // delete expired passwords
        if (!empty($config)) {
            foreach ($config as $key => $value) {
                if ($threshold && $value[1] < $threshold) {
                    unset($config[$key]);
                    $modified = true;
                }
                else {
                    $keys[$key] = $value[0];
                }
            }

            if (!empty($modified)) {
                $_SESSION['enigma_pass'] = $this->rc->encrypt(serialize($config));
            }
        }

        return $keys;
    }

    /**
     * Get message part body.
     *
     * @param rcube_message      $msg  Message object
     * @param rcube_message_part $part Message part
     */
    private function get_part_body($msg, $part)
    {
        // @TODO: Handle big bodies using file handles

        // This is a special case when we want to get the whole body
        // using direct IMAP access, in other cases we prefer
        // rcube_message::get_part_body() as the body may be already in memory
        if (!$part->mime_id) {
            // fake the size which may be empty for multipart/* parts
            // otherwise get_message_part() below will fail
            if (!$part->size) {
                $reset = true;
                $part->size = 1;
            }

            $storage = $this->rc->get_storage();
            $body    = $storage->get_message_part($msg->uid, $part->mime_id, $part,
                null, null, true, 0, false);

            if (!empty($reset)) {
                $part->size = 0;
            }
        }
        else {
            $body = $msg->get_part_body($part->mime_id, false);
        }

        return $body;
    }

    /**
     * Parse decrypted message body into structure
     *
     * @param string &$body Message body
     *
     * @return array Message structure
     */
    private function parse_body(&$body)
    {
        // Mail_mimeDecode need \r\n end-line, but gpg may return \n
        $body = preg_replace('/\r?\n/', "\r\n", $body);

        // parse the body into structure
        return rcube_mime::parse_message($body);
    }

    /**
     * Replace message encrypted structure with decrypted message structure
     *
     * @param array              &$p     Hook arguments
     * @param rcube_message_part $struct Part structure
     * @param int                $size   Part size
     */
    private function modify_structure(&$p, $struct, $size = 0)
    {
        // modify mime_parts property of the message object
        $old_id = $p['structure']->mime_id;

        foreach (array_keys($p['object']->mime_parts) as $idx) {
            if (!$old_id || $idx == $old_id || strpos($idx, $old_id . '.') === 0) {
                unset($p['object']->mime_parts[$idx]);
            }
        }

        // set some part params used by Roundcube core
        $struct->headers  = array_merge($p['structure']->headers, $struct->headers);
        $struct->size     = $size;
        $struct->filename = $p['structure']->filename;

        // modify the new structure to be correctly handled by Roundcube
        $this->modify_structure_part($struct, $p['object'], $old_id);

        // replace old structure with the new one
        $p['structure'] = $struct;
        $p['mimetype']  = $struct->mimetype;
    }

    /**
     * Modify decrypted message part
     *
     * @param rcube_message_part $part
     * @param rcube_message      $msg
     * @param string             $old_id
     */
    private function modify_structure_part($part, $msg, $old_id)
    {
        // never cache the body
        $part->body_modified = true;
        $part->encoding      = 'stream';

        // modify part identifier
        if ($old_id) {
            $part->mime_id = !$part->mime_id ? $old_id : ($old_id . '.' . $part->mime_id);
        }

        // Cache the fact it was decrypted
        $this->encrypted_parts[] = $part->mime_id;
        $msg->mime_parts[$part->mime_id] = $part;

        // modify sub-parts
        foreach ((array) $part->parts as $p) {
            $this->modify_structure_part($p, $msg, $old_id);
        }
    }

    /**
     * Extracts body and signature of multipart/signed message body
     */
    private function explode_signed_body($body, $boundary)
    {
        if (!$body) {
            return [];
        }

        $boundary     = '--' . $boundary;
        $boundary_len = strlen($boundary) + 2;

        // Find boundaries
        $start = strpos($body, $boundary) + $boundary_len;
        $end   = strpos($body, $boundary, $start);

        // Get signed body and signature
        $sig  = substr($body, $end + $boundary_len);
        $body = substr($body, $start, $end - $start - 2);

        // Cleanup signature
        $sig = substr($sig, strpos($sig, "\r\n\r\n") + 4);
        $sig = substr($sig, 0, strpos($sig, $boundary));

        return [$body, $sig];
    }

    /**
     * Checks if specified message part is a PGP-key or S/MIME cert data
     *
     * @param rcube_message_part $part Part object
     *
     * @return bool True if part is a key/cert
     */
    public function is_keys_part($part)
    {
        // @TODO: S/MIME
        return (
            // Content-Type: application/pgp-keys
            $part->mimetype == 'application/pgp-keys'
        );
    }

    /**
     * Removes all user keys and assigned data
     *
     * @param string $username Username
     *
     * @return bool True on success, False on failure
     */
    public function delete_user_data($username)
    {
        $homedir = $this->rc->config->get('enigma_pgp_homedir', INSTALL_PATH . 'plugins/enigma/home');
        $homedir .= DIRECTORY_SEPARATOR . $username;

        return file_exists($homedir) ? self::delete_dir($homedir) : true;
    }

    /**
     * Recursive method to remove directory with its content
     *
     * @param string $dir Directory
     */
    public static function delete_dir($dir)
    {
        // This code can be executed from command line, make sure
        // we have permissions to delete keys directory
        if (!is_writable($dir)) {
            rcube::raise_error("Unable to delete $dir", false, true);
            return false;
        }

        if ($content = scandir($dir)) {
            foreach ($content as $filename) {
                if ($filename != '.' && $filename != '..') {
                    $filename = $dir . DIRECTORY_SEPARATOR . $filename;

                    if (is_dir($filename)) {
                        self::delete_dir($filename);
                    }
                    else {
                        unlink($filename);
                    }
                }
            }

            rmdir($dir);
        }

        return true;
    }

    /**
     * Check if specified driver feature is supported
     */
    public function is_supported($feature)
    {
        $this->load_pgp_driver();

        return in_array($feature, $this->pgp_driver->capabilities());
    }

    /**
     * Raise/log (relevant) errors
     */
    protected static function raise_error($result, $line, $abort = false)
    {
        if ($result->getCode() != enigma_error::BADPASS) {
            rcube::raise_error([
                    'code'    => 600,
                    'file'    => __FILE__,
                    'line'    => $line,
                    'message' => "Enigma plugin: " . $result->getMessage()
                ], true, $abort
            );
        }
    }
}
PKwc�\|��p��enigma/lib/enigma_error.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Error class for the Enigma Plugin                                       |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_error
{
    private $code;
    private $message;
    private $data = [];

    // error codes
    const OK          = 0;
    const INTERNAL    = 1;
    const NODATA      = 2;
    const KEYNOTFOUND = 3;
    const DELKEY      = 4;
    const BADPASS     = 5;
    const EXPIRED     = 6;
    const UNVERIFIED  = 7;
    const NOMDC       = 8;


    function __construct($code = null, $message = '', $data = [])
    {
        $this->code    = $code;
        $this->message = $message;
        $this->data    = $data;
    }

    function getCode()
    {
        return $this->code;
    }

    function getMessage()
    {
        return $this->message;
    }

    function getData($name = null)
    {
        if ($name) {
            return $this->data[$name] ?? null;
        }

        return $this->data;
    }
}
PKwc�\ �m7'*'*"enigma/lib/enigma_mime_message.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Mail_mime wrapper for the Enigma Plugin                                 |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_mime_message extends Mail_mime
{
    const PGP_SIGNED    = 1;
    const PGP_ENCRYPTED = 2;

    protected $type;
    protected $message;
    protected $body;
    protected $signature;
    protected $encrypted;
    protected $micalg;


    /**
     * Object constructor
     *
     * @param Mail_mime $message Original message
     * @param int       $type    Output message type
     */
    function __construct($message, $type)
    {
        $this->message = $message;
        $this->type    = $type;

        // clone parameters
        foreach (array_keys($this->build_params) as $param) {
            $this->build_params[$param] = $message->getParam($param);
        }

        // clone headers
        $this->headers = $message->headers();

        // \r\n is must-have here
        $this->body = $message->get() . "\r\n";
    }

    /**
     * Check if the message is multipart (requires PGP/MIME)
     *
     * @return bool True if it is multipart, otherwise False
     */
    public function isMultipart()
    {
        return $this->message instanceof enigma_mime_message
            || $this->message->isMultipart() || $this->message->getHTMLBody();
    }

    /**
     * Get e-mail address of message sender
     *
     * @return string|null Sender address
     */
    public function getFromAddress()
    {
        // get sender address
        $headers = $this->message->headers();

        if (isset($headers['From'])) {
            $from    = rcube_mime::decode_address_list($headers['From'], 1, false, null, true);
            $from    = $from[1] ?? null;

            return $from;
        }

        return null;
    }

    /**
     * Get recipients' e-mail addresses
     *
     * @return array Recipients' addresses
     */
    public function getRecipients()
    {
        // get sender address
        $headers = $this->message->headers();
        $to      = rcube_mime::decode_address_list($headers['To'] ?? '', null, false, null, true);
        $cc      = rcube_mime::decode_address_list($headers['Cc'] ?? '', null, false, null, true);
        $bcc     = rcube_mime::decode_address_list($headers['Bcc'] ?? '', null, false, null, true);

        $recipients = array_unique(array_filter(array_merge($to, $cc, $bcc)));
        $recipients = array_diff($recipients, ['undisclosed-recipients:']);

        return array_values($recipients);
    }

    /**
     * Get original message body, to be encrypted/signed
     *
     * @return string Message body
     */
    public function getOrigBody()
    {
        $_headers = $this->message->headers();
        $headers  = [];

        if (!empty($_headers['Content-Transfer-Encoding'])
            && stripos($_headers['Content-Type'], 'multipart') === false
        ) {
            $headers[] = 'Content-Transfer-Encoding: ' . $_headers['Content-Transfer-Encoding'];
        }
        $headers[] = 'Content-Type: ' . $_headers['Content-Type'];

        return implode("\r\n", $headers) . "\r\n\r\n" . $this->body;
    }

    /**
     * Register signature attachment
     *
     * @param string $body      Signature body
     * @param string $algorithm Hash algorithm name
     */
    public function addPGPSignature($body, $algorithm = null)
    {
        $this->signature = $body;
        $this->micalg    = $algorithm;

        // Reset Content-Type to be overwritten with valid boundary
        unset($this->headers['Content-Type']);
        unset($this->headers['Content-Transfer-Encoding']);
    }

    /**
     * Register encrypted body
     *
     * @param string $body Encrypted body
     */
    public function setPGPEncryptedBody($body)
    {
        $this->encrypted = $body;

        // Reset Content-Type to be overwritten with valid boundary
        unset($this->headers['Content-Type']);
        unset($this->headers['Content-Transfer-Encoding']);
    }

    /**
     * Builds the multipart message.
     *
     * @param array    $params    Build parameters that change the way the email
     *                            is built. Should be associative. See $_build_params.
     * @param resource $filename  Output file where to save the message instead of
     *                            returning it
     * @param bool     $skip_head True if you want to return/save only the message
     *                            without headers
     *
     * @return mixed The MIME message content string, null or PEAR error object
     */
    public function get($params = null, $filename = null, $skip_head = false)
    {
        if (!empty($params)) {
            foreach ($params as $key => $value) {
                $this->build_params[$key] = $value;
            }
        }

        $this->checkParams();

        if ($this->type == self::PGP_SIGNED) {
            $params = [
                'preamble'     => "This is an OpenPGP/MIME signed message (RFC 4880 and 3156)",
                'content_type' => "multipart/signed; protocol=\"application/pgp-signature\"",
                'eol'          => $this->build_params['eol'],
            ];

            if ($this->micalg) {
                $params['content_type'] .= "; micalg=pgp-" . $this->micalg;
            }

            $message = new Mail_mimePart('', $params);

            if (!empty($this->body)) {
                $headers = $this->message->headers();
                $params  = ['content_type' => $headers['Content-Type']];

                if (!empty($headers['Content-Transfer-Encoding'])
                    && stripos($headers['Content-Type'], 'multipart') === false
                ) {
                    $params['encoding'] = $headers['Content-Transfer-Encoding'];

                    // For plain text body we have to decode it back, to prevent from
                    // a double encoding issue (#8413)
                    $this->body = rcube_mime::decode($this->body, $this->build_params['text_encoding']);
                }

                $message->addSubpart($this->body, $params);
            }

            if (!empty($this->signature)) {
                $message->addSubpart($this->signature, [
                        'filename'     => 'signature.asc',
                        'content_type' => 'application/pgp-signature',
                        'disposition'  => 'attachment',
                        'description'  => 'OpenPGP digital signature',
                ]);
            }
        }
        else if ($this->type == self::PGP_ENCRYPTED) {
            $params = [
                'preamble'     => "This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)",
                'content_type' => "multipart/encrypted; protocol=\"application/pgp-encrypted\"",
                'eol'          => $this->build_params['eol'],
            ];

            $message = new Mail_mimePart('', $params);

            $message->addSubpart('Version: 1', [
                    'content_type' => 'application/pgp-encrypted',
                    'description'  => 'PGP/MIME version identification',
            ]);

            $message->addSubpart($this->encrypted, [
                    'content_type' => 'application/octet-stream',
                    'description'  => 'PGP/MIME encrypted message',
                    'disposition'  => 'inline',
                    'filename'     => 'encrypted.asc',
            ]);
        }

        // Use saved boundary
        if (!empty($this->build_params['boundary'])) {
            $boundary = $this->build_params['boundary'];
        }
        else {
            $boundary = null;
        }

        // Write output to file
        if ($filename) {
            // Append mimePart message headers and body into file
            $headers = $message->encodeToFile($filename, $boundary, $skip_head);

            if ($this->isError($headers)) {
                return $headers;
            }

            $this->headers = array_merge($this->headers, $headers);
        }
        else {
            $output = $message->encode($boundary, $skip_head);

            if ($this->isError($output)) {
                return $output;
            }

            $this->headers = array_merge($this->headers, $output['headers']);
        }

        // remember the boundary used, in case we'd handle headers() call later
        if (empty($boundary) && !empty($this->headers['Content-Type'])) {
            if (preg_match('/boundary="([^"]+)/', $this->headers['Content-Type'], $m)) {
                $this->build_params['boundary'] = $m[1];
            }
        }

        return $filename ? null : $output['body'];
    }

    /**
     * Get Content-Type and Content-Transfer-Encoding headers of the message
     *
     * @return array Headers array
     */
    protected function contentHeaders()
    {
        $this->checkParams();

        $eol = $this->build_params['eol'] ?: "\r\n";

        // multipart message: and boundary
        if (!empty($this->build_params['boundary'])) {
            $boundary = $this->build_params['boundary'];
        }
        else if (!empty($this->headers['Content-Type'])
            && preg_match('/boundary="([^"]+)"/', $this->headers['Content-Type'], $m)
        ) {
            $boundary = $m[1];
        }
        else {
            $boundary = '=_' . md5(rand() . microtime());
        }

        $this->build_params['boundary'] = $boundary;

        if ($this->type == self::PGP_SIGNED) {
            $headers['Content-Type'] = "multipart/signed;$eol"
                ." protocol=\"application/pgp-signature\";$eol"
                ." boundary=\"$boundary\"";

            if ($this->micalg) {
                $headers['Content-Type'] .= ";{$eol} micalg=pgp-" . $this->micalg;
            }
        }
        else if ($this->type == self::PGP_ENCRYPTED) {
            $headers['Content-Type'] = "multipart/encrypted;$eol"
                ." protocol=\"application/pgp-encrypted\";$eol"
                ." boundary=\"$boundary\"";
        }

        return $headers;
    }
}
PKwc�\��x��enigma/lib/enigma_userid.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | User ID class for the Enigma Plugin                                     |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_userid
{
    public $revoked;
    public $valid;
    public $name;
    public $comment;
    public $email;
}
PKwc�\9H��ooenigma/lib/enigma_subkey.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | SubKey class for the Enigma Plugin                                      |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_subkey
{
    public $id;
    public $fingerprint;
    public $expires;
    public $created;
    public $revoked;
    public $has_private;
    public $algorithm;
    public $length;
    public $usage;


    /**
     * Converts internal ID to short ID
     * Crypt_GPG uses internal, but e.g. Thunderbird's Enigmail displays short ID
     *
     * @return string Key ID
     */
    function get_short_id()
    {
        // E.g. 04622F2089E037A5 => 89E037A5
        return enigma_key::format_id($this->id);
    }

    /**
     * Getter for formatted fingerprint
     *
     * @return string Formatted fingerprint
     */
    function get_fingerprint()
    {
        return enigma_key::format_fingerprint($this->fingerprint);
    }

    /**
     * Returns human-readable name of the key's algorithm
     *
     * @return string Algorithm name
     */
    function get_algorithm()
    {
        // http://tools.ietf.org/html/rfc4880#section-9.1
        switch ($this->algorithm) {
        case 1:
        case 2:
        case 3:
            return 'RSA';
        case 16:
        case 20:
            return 'Elgamal';
        case 17:
            return 'DSA';
        case 18:
            return 'Elliptic Curve';
        case 19:
            return 'ECDSA';
        case 21:
            return 'Diffie-Hellman';
        case 22:
            return 'EdDSA';
        }
    }

    /**
     * Checks if the subkey has expired
     *
     * @return bool
     */
    function is_expired()
    {
        $now = new DateTime('now');

        return !empty($this->expires) && $this->expires < $now;
    }

    /**
     * Returns subkey creation date-time string
     *
     * @return string|null
     */
    function get_creation_date()
    {
        if (empty($this->created)) {
            return null;
        }

        $date_format = rcube::get_instance()->config->get('date_format', 'Y-m-d');

        return $this->created->format($date_format);
    }

    /**
     * Returns subkey expiration date-time string
     *
     * @return string|null
     */
    function get_expiration_date()
    {
        if (empty($this->expires)) {
            return null;
        }

        $date_format = rcube::get_instance()->config->get('date_format', 'Y-m-d');

        return $this->expires->format($date_format);
    }
}
PKwc�\�n�����enigma/lib/enigma_ui.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | User Interface for the Enigma Plugin                                    |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | Licensed under the GNU General Public License version 3 or              |
 | any later version with exceptions for skins & plugins.                  |
 | See the README file for a full license statement.                       |
 +-------------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                              |
 +-------------------------------------------------------------------------+
*/

class enigma_ui
{
    private $rc;
    private $enigma;
    private $home;
    private $css_loaded;
    private $js_loaded;
    private $data;
    private $keys_parts  = [];
    private $keys_bodies = [];

    /**
     * Object constructor
     *
     * @param enigma $enigma_plugin The plugin instance
     * @param string $home          Home directory
     */
    function __construct($enigma_plugin, $home = '')
    {
        $this->enigma = $enigma_plugin;
        $this->rc     = $enigma_plugin->rc;
        $this->home   = $home; // we cannot use $enigma_plugin->home here
    }

    /**
     * UI initialization and requests handlers.
     */
    function init()
    {
        $this->add_js();

        $action = rcube_utils::get_input_string('_a', rcube_utils::INPUT_GPC);

        if ($this->rc->action == 'plugin.enigmakeys') {
            switch ($action) {
                case 'delete':
                    $this->key_delete();
                    break;
/*
                case 'edit':
                    $this->key_edit();
                    break;
*/
                case 'import':
                    $this->key_import();
                    break;

                case 'import-search':
                    $this->key_import_search();
                    break;

                case 'export':
                    $this->key_export();
                    break;

                case 'generate':
                    $this->key_generate();
                    break;

                case 'create':
                    $this->key_create();
                    break;

                case 'search':
                case 'list':
                    $this->key_list();
                    break;

                case 'info':
                    $this->key_info();
                    break;
            }

            $this->rc->output->add_handlers([
                    'keyslist'     => [$this, 'tpl_keys_list'],
                    'countdisplay' => [$this, 'tpl_keys_rowcount'],
                    'searchform'   => [$this->rc->output, 'search_form'],
            ]);

            $this->rc->output->set_pagetitle($this->enigma->gettext('enigmakeys'));
            $this->rc->output->send('enigma.keys');
        }
/*
        // Preferences UI
        else if ($this->rc->action == 'plugin.enigmacerts') {
            $this->rc->output->add_handlers([
                    'keyslist'     => [$this, 'tpl_certs_list'],
                    'keyframe'     => [$this, 'tpl_cert_frame'],
                    'countdisplay' => [$this, 'tpl_certs_rowcount'],
                    'searchform'   => [$this->rc->output, 'search_form'],
            ]);

            $this->rc->output->set_pagetitle($this->enigma->gettext('enigmacerts'));
            $this->rc->output->send('enigma.certs');
        }
*/
        // Message composing UI
        else if ($this->rc->action == 'compose') {
            $this->compose_ui();
        }
    }

    /**
     * Adds CSS style file to the page header.
     */
    function add_css()
    {
        if ($this->css_loaded) {
            return;
        }

        $skin_path = $this->enigma->local_skin_path();
        $this->enigma->include_stylesheet("$skin_path/enigma.css");
        $this->css_loaded = true;
    }

    /**
     * Adds javascript file to the page header.
     */
    function add_js()
    {
        if ($this->js_loaded) {
            return;
        }

        $this->enigma->include_script('enigma.js');

        $this->rc->output->set_env('keyservers', $this->rc->config->keyservers());

        $this->js_loaded = true;
    }

    /**
     * Initializes key password prompt
     *
     * @param enigma_error $status Error object with key info
     * @param array        $params Optional prompt parameters
     */
    function password_prompt($status, $params = [])
    {
        $data = array_merge($status->getData('missing') ?: [], $status->getData('bad') ?: []);

        // A message can be encrypted with multiple private keys,
        // find the one that exists in the keyring
        foreach ($data as $keyid => $username) {
            $key = $this->enigma->engine->get_key($keyid);
            if ($key && $key->is_private()) {
                if ($key->name && strpos($username, $keyid) !== false) {
                    $data[$keyid] = $key->name;
                }

                break;
            }
        }

        $data  = [
            'keyid' => $keyid,
            'user'  => $data[$keyid]
        ];

        if (!empty($params)) {
            $data = array_merge($params, $data);
        }

        if (preg_match('/^(send|plugin.enigmaimport|plugin.enigmakeys)$/', $this->rc->action)) {
            $this->rc->output->command('enigma_password_request', $data);
        }
        else {
            $this->rc->output->set_env('enigma_password_request', $data);
        }

        // add some labels to client
        $this->rc->output->add_label('enigma.enterkeypasstitle', 'enigma.enterkeypass',
            'save', 'cancel');

        $this->add_css();
        $this->add_js();
    }

    /**
     * Template object for list of keys.
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML content
     */
    function tpl_keys_list($attrib)
    {
        // add id to message list table if not specified
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmenigmakeyslist';
        }

        // define list of cols to be displayed
        $a_show_cols = ['name'];

        // create XHTML table
        $out = rcmail_action::table_output($attrib, [], $a_show_cols, 'id');

        // set client env
        $this->rc->output->add_gui_object('keyslist', $attrib['id']);
        $this->rc->output->include_script('list.js');

        // add some labels to client
        $this->rc->output->add_label('enigma.keyremoveconfirm', 'enigma.keyremoving',
            'enigma.keyexportprompt', 'enigma.withprivkeys', 'enigma.onlypubkeys',
            'enigma.exportkeys', 'enigma.importkeys', 'enigma.keyimportsearchlabel',
            'import', 'search'
        );

        return $out;
    }

    /**
     * Key listing (and searching) request handler
     */
    private function key_list()
    {
        $this->enigma->load_engine();

        $pagesize = $this->rc->config->get('pagesize', 100);
        $page     = max(intval(rcube_utils::get_input_string('_p', rcube_utils::INPUT_GPC)), 1);
        $search   = rcube_utils::get_input_string('_q', rcube_utils::INPUT_GPC);

        // Get the list
        $list     = $this->enigma->engine->list_keys($search);
        $size     = 0;
        $listsize = 0;

        if (!is_array($list)) {
            $this->rc->output->show_message('enigma.keylisterror', 'error');
        }
        else if (empty($list)) {
            $this->rc->output->show_message('enigma.nokeysfound', 'notice');
        }
        else {
            // Save the size
            $listsize = count($list);

            // Sort the list by key (user) name
            usort($list, ['enigma_key', 'cmp']);

            // Slice current page
            $list = array_slice($list, ($page - 1) * $pagesize, $pagesize);
            $size = count($list);

            // Add rows
            foreach ($list as $key) {
                $this->rc->output->command('enigma_add_list_row', [
                        'name'  => rcube::Q($key->name),
                        'id'    => $key->id,
                        'flags' => $key->is_private() ? 'p' : ''
                ]);
            }
        }

        $this->rc->output->set_env('rowcount', $size);
        $this->rc->output->set_env('search_request', $search);
        $this->rc->output->set_env('pagecount', ceil($listsize/$pagesize));
        $this->rc->output->set_env('current_page', $page);
        $this->rc->output->command('set_rowcount', $this->get_rowcount_text($listsize, $size, $page));

        $this->rc->output->send();
    }

    /**
     * Template object for list records counter.
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML output
     */
    function tpl_keys_rowcount($attrib)
    {
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmcountdisplay';
        }

        $this->rc->output->add_gui_object('countdisplay', $attrib['id']);

        return html::span($attrib, $this->get_rowcount_text());
    }

    /**
     * Returns text representation of list records counter
     */
    private function get_rowcount_text($all = 0, $curr_count = 0, $page = 1)
    {
        if (!$curr_count) {
            $out = $this->enigma->gettext('nokeysfound');
        }
        else {
            $pagesize = $this->rc->config->get('pagesize', 100);
            $first    = ($page - 1) * $pagesize;

            $out = $this->enigma->gettext([
                    'name' => 'keysfromto',
                    'vars' => ['from' => $first + 1, 'to' => $first + $curr_count, 'count' => $all]
            ]);
        }

        return $out;
    }

    /**
     * Key information page handler
     */
    private function key_info()
    {
        $this->enigma->load_engine();

        $id  = rcube_utils::get_input_string('_id', rcube_utils::INPUT_GET);
        $res = $this->enigma->engine->get_key($id);

        if ($res instanceof enigma_key) {
            $this->data = $res;
        }
        else { // error
            $this->rc->output->show_message('enigma.keyopenerror', 'error');
            $this->rc->output->command('parent.enigma_loadframe');
            $this->rc->output->send('iframe');
        }

        $this->rc->output->add_handlers([
            'keyname' => [$this, 'tpl_key_name'],
            'keydata' => [$this, 'tpl_key_data'],
        ]);

        $this->rc->output->set_pagetitle($this->enigma->gettext('keyinfo'));
        $this->rc->output->send('enigma.keyinfo');
    }

    /**
     * Template object for key name
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML output
     */
    function tpl_key_name($attrib)
    {
        return rcube::Q($this->data->name);
    }

    /**
     * Template object for key information page content
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML output
     */
    function tpl_key_data($attrib)
    {
        $out   = '';
        $table = new html_table(['cols' => 2]);

        // Key user ID
        $table->add('title', html::label(null, $this->enigma->gettext('keyuserid')));
        $table->add(null, rcube::Q($this->data->name));

        // Key ID
        $table->add('title', html::label(null, $this->enigma->gettext('keyid')));
        $table->add(null, $this->data->subkeys[0]->get_short_id());

        // Key type
        $keytype = $this->data->get_type();
        $type    = null;
        if ($keytype == enigma_key::TYPE_KEYPAIR) {
            $type = $this->enigma->gettext('typekeypair');
        }
        else if ($keytype == enigma_key::TYPE_PUBLIC) {
            $type = $this->enigma->gettext('typepublickey');
        }

        $table->add('title', html::label(null, $this->enigma->gettext('keytype')));
        $table->add(null, $type);

        // Key fingerprint
        $table->add('title', html::label(null, $this->enigma->gettext('fingerprint')));
        $table->add(null, $this->data->subkeys[0]->get_fingerprint());

        $out .= html::tag('fieldset', null,
            html::tag('legend', null, $this->enigma->gettext('basicinfo')) . $table->show($attrib)
        );

        // Subkeys
        $table = new html_table(['cols' => 5, 'id' => 'enigmasubkeytable', 'class' => 'records-table']);

        $table->add_header('id', $this->enigma->gettext('subkeyid'));
        $table->add_header('algo', $this->enigma->gettext('subkeyalgo'));
        $table->add_header('created', $this->enigma->gettext('subkeycreated'));
        $table->add_header('expires', $this->enigma->gettext('subkeyexpires'));
        $table->add_header('usage', $this->enigma->gettext('subkeyusage'));

        $usage_map = [
            enigma_key::CAN_ENCRYPT      => $this->enigma->gettext('typeencrypt'),
            enigma_key::CAN_SIGN         => $this->enigma->gettext('typesign'),
            enigma_key::CAN_CERTIFY      => $this->enigma->gettext('typecert'),
            enigma_key::CAN_AUTHENTICATE => $this->enigma->gettext('typeauth'),
        ];

        foreach ($this->data->subkeys as $subkey) {
            $algo = $subkey->get_algorithm();
            if ($algo && $subkey->length) {
                $algo .= ' (' . $subkey->length . ')';
            }

            $usage = [];
            foreach ($usage_map as $key => $text) {
                if ($subkey->usage & $key) {
                    $usage[] = $text;
                }
            }

            $table->set_row_attribs($subkey->revoked || $subkey->is_expired() ? 'deleted' : '');
            $table->add('id', $subkey->get_short_id());
            $table->add('algo', $algo);
            $table->add('created', $subkey->get_creation_date());
            $table->add('expires', $subkey->get_expiration_date() ?: $this->enigma->gettext('expiresnever'));
            $table->add('usage', implode(',', $usage));
        }

        $out .= html::tag('fieldset', null,
            html::tag('legend', null, $this->enigma->gettext('subkeys')) . $table->show()
        );

        // Additional user IDs
        $table = new html_table(['cols' => 2, 'id' => 'enigmausertable', 'class' => 'records-table']);

        $table->add_header('id', $this->enigma->gettext('userid'));
        $table->add_header('valid', $this->enigma->gettext('uservalid'));

        foreach ($this->data->users as $user) {
            // Display domains in UTF8
            if ($email = rcube_utils::idn_to_utf8($user->email)) {
                $user->email = $email;
            }

            $username = $user->name;
            if (!empty($user->comment)) {
                $username .= ' (' . $user->comment . ')';
            }
            $username .= ' <' . $user->email . '>';

            $table->set_row_attribs($user->revoked || !$user->valid ? 'deleted' : '');
            $table->add('id', rcube::Q(trim($username)));
            $table->add('valid', $this->enigma->gettext($user->valid ? 'valid' : 'unknown'));
        }

        $out .= html::tag('fieldset', null,
            html::tag('legend', null, $this->enigma->gettext('userids')) . $table->show()
        );

        return $out;
    }

    /**
     * Key(s) export handler
     */
    private function key_export()
    {
        $keys   = rcube_utils::get_input_string('_keys', rcube_utils::INPUT_POST);
        $priv   = rcube_utils::get_input_string('_priv', rcube_utils::INPUT_POST);
        $engine = $this->enigma->load_engine();
        $list   = $keys == '*' ? $engine->list_keys() : explode(',', $keys);

        if (is_array($list) && ($fp = fopen('php://memory', 'rw'))) {
            $filename = 'export.pgp';
            if (count($list) == 1) {
                $filename = (is_object($list[0]) ? $list[0]->id : $list[0]) . '.pgp';
            }

            $status = null;
            foreach ($list as $key) {
                $keyid  = is_object($key) ? $key->id : $key;
                $status = $engine->export_key($keyid, $fp, (bool) $priv);

                if ($status instanceof enigma_error) {
                    $code = $status->getCode();

                    if ($code == enigma_error::BADPASS) {
                        $this->password_prompt($status, [
                                'input_keys'   => $keys,
                                'input_priv'   => 1,
                                'input_task'   => 'settings',
                                'input_action' => 'plugin.enigmakeys',
                                'input_a'      => 'export',
                                'action'       => '?',
                                'iframe'       => true,
                                'nolock'       => true,
                        ]);
                        fclose($fp);
                        $this->rc->output->send('iframe');
                    }
                }
            }

            // send download headers
            header('Content-Type: application/pgp-keys');
            header('Content-Disposition: attachment; filename="' . $filename . '"');

            rewind($fp);
            while (!feof($fp)) {
                echo fread($fp, 1024 * 1024);
            }
            fclose($fp);
        }

        exit;
    }

    /**
     * Key import (page) handler
     */
    private function key_import()
    {
        // Import process
        if ($data = rcube_utils::get_input_string('_keys', rcube_utils::INPUT_POST)) {
            $this->enigma->load_engine();
            $this->enigma->engine->password_handler();

            $result = $this->enigma->engine->import_key($data);

            if (is_array($result)) {
                if (rcube_utils::get_input_value('_generated', rcube_utils::INPUT_POST)) {
                    $this->rc->output->command('enigma_key_create_success');
                    $this->rc->output->show_message('enigma.keygeneratesuccess', 'confirmation');
                }
                else {
                    $this->rc->output->show_message('enigma.keysimportsuccess', 'confirmation',
                        ['new' => $result['imported'], 'old' => $result['unchanged']]);

                    if ($result['imported'] && !empty($_POST['_refresh'])) {
                        $this->rc->output->command('enigma_list', 1, false);
                    }
                }
            }
            else {
                $this->rc->output->show_message('enigma.keysimportfailed', 'error');
            }

            $this->rc->output->send();
        }
        else if (!empty($_FILES['_file']['tmp_name']) && is_uploaded_file($_FILES['_file']['tmp_name'])) {
            $this->enigma->load_engine();
            $result = $this->enigma->engine->import_key($_FILES['_file']['tmp_name'], true);

            if (is_array($result)) {
                // reload list if any keys has been added
                if ($result['imported']) {
                    $this->rc->output->command('parent.enigma_list', 1);
                }

                $this->rc->output->show_message('enigma.keysimportsuccess', 'confirmation',
                    ['new' => $result['imported'], 'old' => $result['unchanged']]);

                $this->rc->output->command('parent.enigma_import_success');
            }
            else if ($result instanceof enigma_error && $result->getCode() == enigma_error::BADPASS) {
                $this->password_prompt($result);
            }
            else {
                $this->rc->output->show_message('enigma.keysimportfailed', 'error');
            }
            $this->rc->output->send('iframe');
        }
        else if (!empty($_FILES['_file']['error'])) {
            rcmail_action::upload_error($_FILES['_file']['error']);
            $this->rc->output->send('iframe');
        }

        $this->rc->output->add_handlers([
                'importform' => [$this, 'tpl_key_import_form'],
        ]);

        $this->rc->output->send('enigma.keyimport');
    }

    /**
     * Key import-search (page) handler
     */
    private function key_import_search()
    {
        $this->rc->output->add_handlers([
                'importform' => [$this, 'tpl_key_import_form'],
        ]);

        $this->rc->output->send('enigma.keysearch');
    }

    /**
     * Template object for key import (upload) form
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML output
     */
    function tpl_key_import_form($attrib)
    {
        $attrib += ['id' => 'rcmKeyImportForm'];

        if (empty($attrib['part']) || $attrib['part'] == 'import') {
            $title  = $this->enigma->gettext('keyimportlabel');
            $upload = new html_inputfield([
                    'type'  => 'file',
                    'name'  => '_file',
                    'id'    => 'rcmimportfile',
                    'size'  => 30,
                    'class' => 'form-control'
            ]);

            $max_filesize  = rcmail_action::upload_init();
            $upload_button = new html_button([
                    'class'   => 'button import',
                    'onclick' => "return rcmail.command('plugin.enigma-import','',this,event)",
            ]);

            $form = html::div(null, html::p(null, rcube::Q($this->enigma->gettext('keyimporttext'), 'show'))
                . $upload->show()
                . html::div('hint', $this->rc->gettext(['id' => 'importfile', 'name' => 'maxuploadsize', 'vars' => ['size' => $max_filesize]]))
                . (empty($attrib['part']) ? html::br() . html::br() . $upload_button->show($this->rc->gettext('import')) : '')
            );

            if (empty($attrib['part'])) {
                $form = html::tag('fieldset', '', html::tag('legend', null, $title) . $form);
            }
            else {
                $this->rc->output->set_pagetitle($title);
            }

            $warning = $this->enigma->gettext('keystoragenotice');
            $warning = html::div(['class' => 'boxinformation mb-3', 'id' => 'key-notice'], $warning);

            $form = $warning . $form;
        }

        if (empty($attrib['part']) || $attrib['part'] == 'search') {
            $title  = $this->enigma->gettext('keyimportsearchlabel');
            $search = new html_inputfield(['type' => 'text', 'name' => '_search',
                'id' => 'rcmimportsearch', 'size' => 30, 'class' => 'form-control']);

            $search_button = new html_button([
                    'class'   => 'button search',
                    'onclick' => "return rcmail.command('plugin.enigma-import-search','',this,event)",
            ]);

            $form = html::div(null,
                rcube::Q($this->enigma->gettext('keyimportsearchtext'), 'show')
                . html::br() . html::br() . $search->show()
                . (empty($attrib['part']) ? html::br() . html::br() . $search_button->show($this->rc->gettext('search')) : '')
            );

            if (empty($attrib['part'])) {
                $form = html::tag('fieldset', '', html::tag('legend', null, $title) . $form);
            }
            else {
                $this->rc->output->set_pagetitle($title);
            }

            $this->rc->output->include_script('publickey.js');
        }

        $this->rc->output->add_label('selectimportfile', 'importwait', 'nopubkeyfor', 'nopubkeyforsender',
            'encryptnoattachments','encryptedsendialog','searchpubkeyservers', 'importpubkeys',
            'encryptpubkeysfound',  'search', 'close', 'import', 'keyid', 'keylength', 'keyexpired',
            'keyrevoked', 'keyimportsuccess', 'keyservererror');

        $this->rc->output->add_gui_object('importform', $attrib['id']);

        $out = $this->rc->output->form_tag([
                'action'  => $this->rc->url(['action' => $this->rc->action, 'a' => 'import']),
                'method'  => 'post',
                'enctype' => 'multipart/form-data'
            ] + $attrib,
            $form ?? ''
        );

        return $out;
    }

    /**
     * Server-side key pair generation handler
     */
    private function key_generate()
    {
        // Crypt_GPG does not support key generation for multiple identities
        // It is also very slow (which is problematic because it may exceed
        // request time limit) and requires entropy generator
        // That's why we use only OpenPGP.js method of key generation
        return;

        $user = rcube_utils::get_input_string('_user', rcube_utils::INPUT_POST, true);
        $pass = rcube_utils::get_input_string('_password', rcube_utils::INPUT_POST, true);
        $size = (int) rcube_utils::get_input_value('_size', rcube_utils::INPUT_POST);

        if ($size > 4096) {
            $size = 4096;
        }

        $ident = rcube_mime::decode_address_list($user, 1, false);

        if (empty($ident)) {
            $this->rc->output->show_message('enigma.keygenerateerror', 'error');
            $this->rc->output->send();
        }

        $this->enigma->load_engine();
        $result = $this->enigma->engine->generate_key([
                'user'     => $ident[1]['name'],
                'email'    => $ident[1]['mailto'],
                'password' => $pass,
                'size'     => $size,
        ]);

        if ($result instanceof enigma_key) {
            $this->rc->output->command('enigma_key_create_success');
            $this->rc->output->show_message('enigma.keygeneratesuccess', 'confirmation');
        }
        else {
            $this->rc->output->show_message('enigma.keygenerateerror', 'error');
        }

        $this->rc->output->send();
    }

    /**
     * Key generation page handler
     */
    private function key_create()
    {
        $this->enigma->include_script('openpgp.min.js');

        $this->rc->output->add_handlers([
            'keyform' => [$this, 'tpl_key_create_form'],
        ]);

        $this->rc->output->set_pagetitle($this->enigma->gettext('keygenerate'));
        $this->rc->output->send('enigma.keycreate');
    }

    /**
     * Template object for key generation form
     *
     * @param array $attrib Object attributes
     *
     * @return string HTML output
     */
    function tpl_key_create_form($attrib)
    {
        $attrib += ['id' => 'rcmKeyCreateForm'];
        $table  = new html_table(['cols' => 2]);

        // get user's identities
        $identities = $this->rc->user->list_identities(null, true);
        $checkbox   = new html_checkbox(['name' => 'identity[]']);

        $plugin     = $this->rc->plugins->exec_hook('enigma_user_identities', ['identities' => $identities]);
        $identities = $plugin['identities'];
        $engine     = $this->enigma->load_engine();

        foreach ($identities as $idx => $ident) {
            $name = format_email_recipient($ident['email'], $ident['name']);
            $attr = ['value' => $idx, 'data-name' => $ident['name'], 'data-email' => $ident['email_ascii']];
            $identities[$idx] = html::tag('li', null, html::label(null, $checkbox->show($idx, $attr) . rcube::Q($name)));
        }

        $table->add('title', html::label('key-name', rcube::Q($this->enigma->gettext('newkeyident'))));
        $table->add(null, html::tag('ul', 'proplist', implode("\n", $identities)));

        // Key size
        $select = new html_select(['name' => 'type', 'id' => 'key-type', 'class' => 'custom-select']);
        $select->add($this->enigma->gettext('rsa2048'), 'rsa2048');
        $select->add($this->enigma->gettext('rsa4096'), 'rsa4096');

        if ($engine->is_supported(enigma_driver::SUPPORT_ECC)) {
            $select->add($this->enigma->gettext('ecckeypair'), 'ecc');
        }

        $table->add('title', html::label('key-type', rcube::Q($this->enigma->gettext('newkeytype'))));
        $table->add(null, $select->show());

        // Password and confirm password
        $table->add('title', html::label('key-pass', rcube::Q($this->enigma->gettext('newkeypass'))));
        $table->add(null, rcube_output::get_edit_field('password', '', [
                'id'           => 'key-pass',
                'size'         => isset($attrib['size']) ? $attrib['size'] : null,
                'required'     => true,
                'autocomplete' => 'new-password',
                'oninput'      => "this.type = this.value.length ? 'password' : 'text'",
            ], 'text')
        );

        $table->add('title', html::label('key-pass-confirm', rcube::Q($this->enigma->gettext('newkeypassconfirm'))));
        $table->add(null, rcube_output::get_edit_field('password-confirm', '', [
                'id'           => 'key-pass-confirm',
                'size'         => isset($attrib['size']) ? $attrib['size'] : null,
                'required'     => true,
                'autocomplete' => 'new-password',
                'oninput'      => "this.type = this.value.length ? 'password' : 'text'",
            ], 'text')
        );

        $warning = $this->enigma->gettext('keystoragenotice');
        $warning = html::div(['class' => 'boxinformation mb-3', 'id' => 'key-notice'], $warning);

        $this->rc->output->add_gui_object('keyform', $attrib['id']);
        $this->rc->output->add_label('enigma.keygenerating', 'enigma.formerror',
            'enigma.passwordsdiffer', 'enigma.keygenerateerror', 'enigma.noidentselected',
            'enigma.keygennosupport');

        return $this->rc->output->form_tag([], $warning . $table->show($attrib));
    }

    /**
     * Key deleting
     */
    private function key_delete()
    {
        $keys   = rcube_utils::get_input_value('_keys', rcube_utils::INPUT_POST);
        $engine = $this->enigma->load_engine();

        foreach ((array) $keys as $key) {
            $res = $engine->delete_key($key);

            if ($res !== true) {
                $this->rc->output->show_message('enigma.keyremoveerror', 'error');
                $this->rc->output->command('enigma_list');
                $this->rc->output->send();
            }
        }

        $this->rc->output->command('enigma_list');
        $this->rc->output->show_message('enigma.keyremovesuccess', 'confirmation');
        $this->rc->output->send();
    }

    /**
     * Init compose UI (add task button and the menu)
     */
    private function compose_ui()
    {
        $this->add_css();
        $this->rc->output->add_label('enigma.sendunencrypted');

        // Elastic skin (or a skin based on it)
        if (array_key_exists('elastic', (array) $this->rc->output->skins)) {
            $this->enigma->api->add_content($this->compose_ui_options(), 'composeoptions');
        }
        // other skins
        else {
            // Options menu button
            $this->enigma->add_button([
                    'type'     => 'link',
                    'command'  => 'plugin.enigma',
                    'onclick'  => "rcmail.command('menu-open', 'enigmamenu', event.target, event)",
                    'class'    => 'button enigma',
                    'title'    => 'encryptionoptions',
                    'label'    => 'encryption',
                    'domain'   => $this->enigma->ID,
                    'width'    => 32,
                    'height'   => 32,
                    'aria-owns'     => 'enigmamenu',
                    'aria-haspopup' => 'true',
                    'aria-expanded' => 'false',
                ], 'toolbar'
            );

            // Options menu contents
            $this->rc->output->add_footer($this->compose_ui_options(true));
        }
    }

    /**
     * Init compose UI (add task button and the menu)
     */
    private function compose_ui_options($wrap = false)
    {
        $locks = (array) $this->rc->config->get('enigma_options_lock');
        $chbox = new html_checkbox(['value' => 1]);

        $out = html::div('form-group form-check row',
            html::label(['for' => 'enigmasignopt', 'class' => 'col-form-label col-6'],
                rcube::Q($this->enigma->gettext('signmsg'))
            )
            . html::div('form-check col-6',
                $chbox->show($this->rc->config->get('enigma_sign_all') ? 1 : 0, [
                        'name'     => '_enigma_sign',
                        'id'       => 'enigmasignopt',
                        'class'    => 'form-check-input',
                        'disabled' => in_array('sign', $locks),
                ])
            )
        );

        $out .= html::div('form-group form-check row',
            html::label(['for' => 'enigmaencryptopt', 'class' => 'col-form-label col-6'],
                rcube::Q($this->enigma->gettext('encryptmsg'))
            )
            . html::div('form-check col-6',
                $chbox->show($this->rc->config->get('enigma_encrypt_all') ? 1 : 0, [
                        'name'     => '_enigma_encrypt',
                        'id'       => 'enigmaencryptopt',
                        'class'    => 'form-check-input',
                        'disabled' => in_array('encrypt', $locks),
                ])
            )
        );

        $out .= html::div('form-group form-check row',
            html::label(['for' => 'enigmaattachpubkeyopt', 'class' => 'col-form-label col-6'],
                rcube::Q($this->enigma->gettext('attachpubkeymsg'))
            )
            . html::div('form-check col-6',
                $chbox->show($this->rc->config->get('enigma_attach_pubkey') ? 1 : 0, [
                        'name'     => '_enigma_attachpubkey',
                        'id'       => 'enigmaattachpubkeyopt',
                        'class'    => 'form-check-input',
                        'disabled' => in_array('pubkey', $locks),
                ])
            )
        );

        if (!$wrap) {
            return $out;
        }

        return html::div(['id' => 'enigmamenu', 'class' => 'popupmenu'], $out);
    }

    /**
     * Handler for message_body_prefix hook.
     * Called for every displayed (content) part of the message.
     * Adds infobox about signature verification and/or decryption
     * status above the body.
     *
     * @param array $p Original parameters
     *
     * @return array Modified parameters
     */
    function status_message($p)
    {
        // skip: not a message part
        if ($p['part'] instanceof rcube_message) {
            return $p;
        }

        // skip: message has no signed/encoded content
        if (!$this->enigma->engine) {
            return $p;
        }

        $engine   = $this->enigma->engine;
        $part_id  = $p['part']->mime_id;
        $messages = [];

        // Decryption status
        if (($found = $this->find_part_id($part_id, $engine->decryptions)) !== null
            && !empty($engine->decryptions[$found])
        ) {
            $status = $engine->decryptions[$found];
            $attach_scripts = true;

            // show the message only once
            unset($engine->decryptions[$found]);

            // display status info
            $attrib = ['id' => 'enigma-message'];

            if ($status instanceof enigma_error) {
                $attrib['class'] = 'boxerror enigmaerror encrypted';
                $code            = $status->getCode();

                if ($code == enigma_error::KEYNOTFOUND) {
                    $msg = rcube::Q(str_replace('$keyid', enigma_key::format_id($status->getData('id')),
                        $this->enigma->gettext('decryptnokey')));
                }
                else if ($code == enigma_error::BADPASS) {
                    $missing = $status->getData('missing');
                    $label   = 'decrypt' . (!empty($missing) ? 'no' : 'bad') . 'pass';
                    $msg     = rcube::Q($this->enigma->gettext($label));
                    $this->password_prompt($status);
                }
                else if ($code == enigma_error::NOMDC) {
                    $msg = rcube::Q($this->enigma->gettext('decryptnomdc'));
                }
                else {
                    $msg = rcube::Q($this->enigma->gettext('decrypterror'));
                }
            }
            else if ($status === enigma_engine::ENCRYPTED_PARTIALLY) {
                $attrib['class'] = 'boxwarning enigmawarning encrypted';
                $msg = rcube::Q($this->enigma->gettext('decryptpartial'));
            }
            else {
                $attrib['class'] = 'boxconfirmation enigmanotice encrypted';
                $msg = rcube::Q($this->enigma->gettext('decryptok'));
            }

            $attrib['msg'] = $msg;
            $messages[] = $attrib;
        }

        // Signature verification status
        if (($found = $this->find_part_id($part_id, $engine->signatures)) !== null
            && !empty($engine->signatures[$found])
        ) {
            $sig = $engine->signatures[$found];
            $attach_scripts = true;

            // show the message only once
            unset($engine->signatures[$found]);

            // display status info
            $attrib = ['id' => 'enigma-message'];

            if ($sig instanceof enigma_signature) {
                $sender = $sig->get_sender($engine, $p['message'], $part_id);

                if ($sig->valid === enigma_error::UNVERIFIED) {
                    $attrib['class'] = 'boxwarning enigmawarning signed';
                    $msg = str_replace('$sender', $sender, $this->enigma->gettext('sigunverified'));
                    $msg = str_replace('$keyid', $sig->id, $msg);
                    $msg = rcube::Q($msg);
                }
                else if ($sig->valid) {
                    $attrib['class'] = ($sig->partial ? 'boxwarning enigmawarning' : 'boxconfirmation enigmanotice') . ' signed';
                    $label = 'sigvalid' . ($sig->partial ? 'partial' : '');
                    $msg = rcube::Q(str_replace('$sender', $sender, $this->enigma->gettext($label)));
                }
                else {
                    $attrib['class'] = 'boxwarning enigmawarning signed';
                    if ($sender) {
                        $msg = rcube::Q(str_replace('$sender', $sender, $this->enigma->gettext('siginvalid')));
                    }
                    else {
                        $msg = rcube::Q(str_replace('$keyid', enigma_key::format_id($sig->id),
                            $this->enigma->gettext('signokey')));
                    }
                }
            }
            else if ($sig && $sig->getCode() == enigma_error::KEYNOTFOUND) {
                $attrib['class'] = 'boxwarning enigmawarning signed';
                $msg = rcube::Q(str_replace('$keyid', enigma_key::format_id($sig->getData('id')),
                    $this->enigma->gettext('signokey')));
            }
            else {
                $attrib['class'] = 'boxwarning enigmaerror signed';
                $msg = rcube::Q($this->enigma->gettext('sigerror'));
            }

            $attrib['msg'] = $msg;
            $messages[]    = $attrib;
        }

        if ($count = count($messages)) {
            if ($count == 2 && $messages[0]['class'] == $messages[1]['class']) {
                $p['prefix'] .= html::div($messages[0], $messages[0]['msg'] . ' ' . $messages[1]['msg']);
            }
            else {
                foreach ($messages as $msg) {
                    $p['prefix'] .= html::div($msg, $msg['msg']);
                }
            }
        }

        if (!empty($attach_scripts)) {
            // add css and js script
            $this->add_css();
            $this->add_js();
        }

        return $p;
    }

    /**
     * Handler for message_load hook.
     * Check message bodies and attachments for keys/certs.
     */
    function message_load($p)
    {
        $engine = $this->enigma->load_engine();

        // handle keys/certs in attachments
        foreach ((array) $p['object']->attachments as $attachment) {
            if ($engine->is_keys_part($attachment)) {
                $this->keys_parts[] = $attachment->mime_id;
            }
        }

        // the same with message bodies
        foreach ((array) $p['object']->parts as $part) {
            if ($engine->is_keys_part($part)) {
                $this->keys_parts[]  = $part->mime_id;
                $this->keys_bodies[] = $part->mime_id;
            }
        }

        // @TODO: inline PGP keys

        if ($this->keys_parts) {
            $this->enigma->add_texts('localization');
        }

        return $p;
    }

    /**
     * Handler for template_object_messagebody hook.
     * This callback function adds a box below the message content
     * if there is a key/cert attachment available
     */
    function message_output($p)
    {
        foreach ($this->keys_parts as $part) {
            // remove part's body
            if (in_array($part, $this->keys_bodies)) {
                $p['content'] = '';
            }

            // add box above the message body
            $p['content'] = html::p(['class' => 'enigmaattachment boxinformation aligned-buttons'],
                html::span(null, rcube::Q($this->enigma->gettext('keyattfound'))) .
                html::tag('button', [
                        'onclick' => "return ".rcmail_output::JS_OBJECT_NAME.".enigma_import_attachment('".rcube::JQ($part)."')",
                        'title'   => $this->enigma->gettext('keyattimport'),
                        'class'   => 'import btn-sm',
                    ], rcube::Q($this->rc->gettext('import'))
                )
            ) . $p['content'];

            $attach_scripts = true;
        }

        if (!empty($attach_scripts)) {
            // add css and js script
            $this->add_css();
            $this->add_js();
        }

        return $p;
    }

    /**
     * Handle message_ready hook (encryption/signing/attach public key)
     */
    function message_ready($p)
    {
        // The message might have been already encrypted by Mailvelope
        if (strpos((string) $p['message']->getParam('ctype'), 'multipart/encrypted') === 0) {
            return $p;
        }

        $savedraft      = !empty($_POST['_draft']) && empty($_GET['_saveonly']);
        $sign_enable    = (bool) rcube_utils::get_input_value('_enigma_sign', rcube_utils::INPUT_POST);
        $encrypt_enable = (bool) rcube_utils::get_input_value('_enigma_encrypt', rcube_utils::INPUT_POST);
        $pubkey_enable  = (bool) rcube_utils::get_input_value('_enigma_attachpubkey', rcube_utils::INPUT_POST);
        $locks          = (array) $this->rc->config->get('enigma_options_lock');

        if (in_array('sign', $locks)) {
            $sign_enable = (bool) $this->rc->config->get('enigma_sign_all');
        }
        if (in_array('encrypt', $locks)) {
            $encrypt_enable = (bool) $this->rc->config->get('enigma_encrypt_all');
        }
        if (in_array('pubkey', $locks)) {
            $pubkey_enable = (bool) $this->rc->config->get('enigma_attach_pubkey');
        }

        if (!$savedraft && $pubkey_enable) {
            $engine = $this->enigma->load_engine();
            $engine->attach_public_key($p['message']);
        }

        $mode   = null;
        $status = null;

        if ($encrypt_enable) {
            $engine = $this->enigma->load_engine();
            $mode   = !$savedraft && $sign_enable ? enigma_engine::ENCRYPT_MODE_SIGN : null;
            $status = $engine->encrypt_message($p['message'], $mode, $savedraft);
            $mode   = 'encrypt';
        }
        else if (!$savedraft && $sign_enable) {
            $engine = $this->enigma->load_engine();
            $status = $engine->sign_message($p['message'], enigma_engine::SIGN_MODE_MIME);
            $mode   = 'sign';
        }

        if ($mode && ($status instanceof enigma_error)) {
            $code = $status->getCode();
            $vars = [];

            if ($code == enigma_error::KEYNOTFOUND) {
                if ($email = $status->getData('missing')) {
                    $vars = ['email' => $email];
                    $msg  = 'enigma.' . $mode . 'nokey';
                }
                else {
                    $msg = 'enigma.' . ($encrypt_enable ? 'encryptnoprivkey' : 'signnokey');
                }
            }
            else if ($code == enigma_error::BADPASS) {
                $this->password_prompt($status);
            }
            else {
                $msg = 'enigma.' . $mode . 'error';
            }

            if (!empty($msg)) {
                if (!empty($vars) && !empty($vars['email'])) {
                    $this->rc->output->command('enigma_key_not_found', [
                            'email'  => $vars['email'],
                            'text'   => $this->rc->gettext(['name' => $msg, 'vars' => $vars]),
                            'title'  => $this->enigma->gettext('keynotfound'),
                            'button' => $this->enigma->gettext('findkey'),
                            'mode'   => $mode,
                    ]);
                }
                else {
                    $this->rc->output->show_message($msg, 'error', $vars);
                }
            }

            $this->rc->output->send('iframe');
        }

        return $p;
    }

   /**
     * Handler for message_compose_body hook
     * Display error when the message cannot be encrypted
     * and provide a way to try again with a password.
     */
    function message_compose($p)
    {
        $engine = $this->enigma->load_engine();

        // skip: message has no signed/encoded content
        if (!$this->enigma->engine) {
            return $p;
        }

        $engine = $this->enigma->engine;
        $locks  = (array) $this->rc->config->get('enigma_options_lock');

        // Decryption status
        foreach ($engine->decryptions as $status) {
            if ($status instanceof enigma_error) {
                $code = $status->getCode();

                if ($code == enigma_error::BADPASS) {
                    $this->password_prompt($status, ['compose-init' => true]);
                    return $p;
                }

                if ($code == enigma_error::KEYNOTFOUND) {
                    $msg = rcube::Q(str_replace('$keyid', enigma_key::format_id($status->getData('id')),
                        $this->enigma->gettext('decryptnokey')));
                }
                else {
                    $msg = rcube::Q($this->enigma->gettext('decrypterror'));
                }
            }
        }

        if (!empty($msg)) {
            $this->rc->output->show_message($msg, 'error');
        }

        // Check sign/encrypt options for signed/encrypted drafts
        if (!in_array('encrypt', $locks)) {
            $this->rc->output->set_env('enigma_force_encrypt', !empty($engine->decryptions));
        }
        if (!in_array('sign', $locks)) {
            $this->rc->output->set_env('enigma_force_sign', !empty($engine->signatures));
        }

        return $p;
    }

    /**
     * Handler for keys/certs import request action
     */
    function import_file()
    {
        $uid     = rcube_utils::get_input_string('_uid', rcube_utils::INPUT_POST);
        $mbox    = rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST);
        $mime_id = rcube_utils::get_input_string('_part', rcube_utils::INPUT_POST);
        $engine  = $this->enigma->load_engine();

        if ($uid && $mime_id) {
            // Note: we get the attachment body via rcube_message class
            // to support keys inside encrypted messages (#5285)
            $message = new rcube_message($uid, $mbox);

            // Check if we don't need to ask for password again
            foreach ($engine->decryptions as $status) {
                if ($status instanceof enigma_error) {
                    if ($status->getCode() == enigma_error::BADPASS) {
                        $this->password_prompt($status, [
                                'input_uid'    => $uid,
                                'input_mbox'   => $mbox,
                                'input_part'   => $mime_id,
                                'input_task'   => 'mail',
                                'input_action' => 'plugin.enigmaimport',
                                'action'       => '?',
                                'iframe'       => true,
                        ]);
                        $this->rc->output->send($this->rc->output->type == 'html' ? 'iframe' : null);
                        return;
                    }
                }
            }

            if ($engine->is_keys_part($message->mime_parts[$mime_id])) {
                $part = $message->get_part_body($mime_id);
            }
        }

        if (!empty($part) && is_array($result = $engine->import_key($part))) {
            $this->rc->output->show_message('enigma.keysimportsuccess', 'confirmation',
                ['new' => $result['imported'], 'old' => $result['unchanged']]);
        }
        else {
            $this->rc->output->show_message('enigma.keysimportfailed', 'error');
        }

        $this->rc->output->send($this->rc->output->type == 'html' ? 'iframe' : null);
    }

    /**
     * Check if the part or its parent exists in the array
     * of decryptions/signatures. Returns found ID.
     */
    private function find_part_id($part_id, $data)
    {
        $ids   = explode('.', $part_id);
        $i     = 0;
        $count = count($ids);

        while ($i < $count && strlen($part = implode('.', array_slice($ids, 0, ++$i)))) {
            if (array_key_exists($part, $data)) {
                return $part;
            }
        }
    }
}
PKwc�\�QQenigma/bin/import_keys.shnu�[���#!/usr/bin/env php
<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 | Copyright (C) Kolab Systems AG                                        |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Import keys from Enigma's homedir into database for multihost       |
 |   support.                                                            |
 +-----------------------------------------------------------------------+
 | Author: Aleksander Machniak <alec@alec.pl>                            |
 +-----------------------------------------------------------------------+
*/

define('INSTALL_PATH', realpath(__DIR__ . '/../../../') . '/');

require INSTALL_PATH . 'program/include/clisetup.php';

$rcmail = rcube::get_instance();

// get arguments
$args = rcube_utils::get_opt([
        'u' => 'user',
        'h' => 'host',
        'd' => 'dir',
        'x' => 'dry-run',
]);

if (!empty($_SERVER['argv'][1]) && $_SERVER['argv'][1] == 'help') {
    print_usage();
    exit;
}

if (empty($args['dir'])) {
    rcube::raise_error("--dir argument is required", true);
}

$host = get_host($args);
$dirs = [];

// Read the homedir and iterate over all subfolders (as users)
if (empty($args['user'])) {
    if ($dh = opendir($args['dir'])) {
        while (($dir = readdir($dh)) !== false) {
            if ($dir != '.' && $dir != '..') {
                $dirs[$args['dir'] . '/' . $dir] = $dir;
            }
        }
        closedir($dh);
    }
}
// a single user
else {
    $dirs = [$args['dir'] => $args['user']];
}

foreach ($dirs as $dir => $user) {
    echo "Importing keys from $dir\n";

    if ($user_id = get_user_id($user, $host)) {
        reset_state($user_id, !empty($args['dry-run']));
        import_dir($user_id, $dir, !empty($args['dry-run']));
    }
}


function print_usage()
{
    print "Usage: import.sh [options]\n";
    print "Options:\n";
    print "    --user=username User, if not set --dir subfolders will be iterated\n";
    print "    --host=host     The IMAP hostname or IP the given user is related to\n";
    print "    --dir=path      Location of the gpg homedir\n";
    print "    --dry-run       Do nothing, just list found user/files\n";
}

function get_host($args)
{
    global $rcmail;

    if (empty($args['host'])) {
        $hosts = $rcmail->config->get('imap_host', '');
        if (is_string($hosts)) {
            $args['host'] = $hosts;
        }
        else if (is_array($hosts) && count($hosts) == 1) {
            $args['host'] = reset($hosts);
        }
        else {
            rcube::raise_error("Specify a host name", true);
        }

        // host can be a URL like tls://192.168.12.44
        $host_url = parse_url($args['host']);
        if (!empty($host_url['host'])) {
            $args['host'] = $host_url['host'];
        }
    }

    return $args['host'];
}

function get_user_id($username, $host)
{
    global $rcmail;

    $db = $rcmail->get_dbh();

    // find user in local database
    $user = rcube_user::query($username, $host);

    if (empty($user)) {
        rcube::raise_error("User does not exist: $username");
    }

    return $user->ID;
}

function reset_state($user_id, $dry_run = false)
{
    global $rcmail;

    if ($dry_run) {
        return;
    }

    $db = $rcmail->get_dbh();

    $db->query("DELETE FROM " . $db->table_name('filestore', true)
        . " WHERE `user_id` = ? AND `context` = ?",
        $user_id, 'enigma');
}

function import_dir($user_id, $dir, $dry_run = false)
{
    global $rcmail;

    $db       = $rcmail->get_dbh();
    $table    = $db->table_name('filestore', true);
    $db_files = ['pubring.gpg', 'secring.gpg', 'pubring.kbx'];
    $maxsize  = min($db->get_variable('max_allowed_packet', 1048500), 4*1024*1024) - 2000;

    foreach (glob("$dir/private-keys-v1.d/*.key") as $file) {
        $db_files[] = substr($file, strlen($dir) + 1);
    }

    foreach ($db_files as $file) {
        if ($mtime = @filemtime("$dir/$file")) {
            $data     = file_get_contents("$dir/$file");
            $data     = base64_encode($data);
            $datasize = strlen($data);

            if ($datasize > $maxsize) {
                rcube::raise_error([
                        'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                        'message' => "Enigma: Failed to save $file. Size exceeds max_allowed_packet."
                    ], true, false);

                continue;
            }

            echo "* $file\n";

            if ($dry_run) {
                continue;
            }

            $result = $db->query(
                "INSERT INTO $table (`user_id`, `context`, `filename`, `mtime`, `data`)"
                . " VALUES(?, 'enigma', ?, ?, ?)",
                $user_id, $file, $mtime, $data);

            if ($db->is_error($result)) {
                rcube::raise_error([
                        'code' => 605, 'line' => __LINE__, 'file' => __FILE__,
                        'message' => "Enigma: Failed to save $file into database."
                    ], true, false);
            }
        }
    }
}
PKwc�\C�)-8-8enigma/enigma.min.jsnu�[���/**
 * Enigma plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
window.rcmail&&rcmail.addEventListener("init",function(e){"settings"==rcmail.env.task?(rcmail.gui_objects.keyslist&&(rcmail.keys_list=new rcube_list_widget(rcmail.gui_objects.keyslist,{multiselect:!0,draggable:!1,keyboard:!0}),rcmail.keys_list.addEventListener("select",function(e){rcmail.enigma_keylist_select(e)}).addEventListener("keypress",function(e){rcmail.list_keypress(e,{del:"plugin.enigma-key-delete"})}).init().focus(),rcmail.enigma_list(),rcmail.register_command("firstpage",function(e){return rcmail.enigma_list_page("first")}),rcmail.register_command("previouspage",function(e){return rcmail.enigma_list_page("previous")}),rcmail.register_command("nextpage",function(e){return rcmail.enigma_list_page("next")}),rcmail.register_command("lastpage",function(e){return rcmail.enigma_list_page("last")})),"plugin.enigmakeys"==rcmail.env.action&&(rcmail.register_command("search",function(e){return rcmail.enigma_search(e)},!0),rcmail.register_command("reset-search",function(e){return rcmail.enigma_search_reset(e)},!0),rcmail.register_command("plugin.enigma-import",function(){rcmail.enigma_import()},!0),rcmail.register_command("plugin.enigma-import-search",function(){rcmail.enigma_import_search()},!0),rcmail.register_command("plugin.enigma-key-export",function(){rcmail.enigma_export()}),rcmail.register_command("plugin.enigma-key-export-selected",function(){rcmail.enigma_export(!0)}),rcmail.register_command("plugin.enigma-key-import",function(){rcmail.enigma_key_import()},!0),rcmail.register_command("plugin.enigma-key-import-search",function(){rcmail.enigma_key_import_search()},!0),rcmail.register_command("plugin.enigma-key-delete",function(e){return rcmail.enigma_delete()}),rcmail.register_command("plugin.enigma-key-create",function(e){return rcmail.enigma_key_create()},!0),rcmail.register_command("plugin.enigma-key-save",function(e){return rcmail.enigma_key_create_save()},!0),rcmail.addEventListener("responseafterplugin.enigmakeys",function(){rcmail.enable_command("plugin.enigma-key-export",0<rcmail.env.rowcount),rcmail.triggerEvent("listupdate",{list:rcmail.keys_list,rowcount:rcmail.env.rowcount})}),rcmail.gui_objects.importform)&&$("#rcmimportsearch").keydown(function(e){if(13==e.which)return rcmail.enigma_import_search(),!1})):"mail"==rcmail.env.task&&("compose"==rcmail.env.action&&(rcmail.addEventListener("beforesend",function(e){rcmail.enigma_beforesend_handler(e)}).addEventListener("beforesavedraft",function(e){rcmail.enigma_beforesavedraft_handler(e)}),$("#enigmamenu").find("input,label").mouseup(function(e){e.stopPropagation()}),$("a.button.enigma").prop("tabindex",$("#messagetoolbar > a").first().prop("tabindex")),$.each(["encrypt","sign"],function(){var e=this,t=$("#enigma"+e+"opt");rcmail.env["enigma_force_"+e]&&t.prop("checked",!0),window.UI&&UI.compose_status&&t.on("change",function(){UI.compose_status(e,this.checked)}),t.trigger("change")})),rcmail.env.enigma_password_request)&&rcmail.enigma_password_request(rcmail.env.enigma_password_request)}),rcube_webmail.prototype.enigma_key_import=function(){var t=$("<iframe>").attr("src",this.url("plugin.enigmakeys",{_a:"import",_framed:1}));this.enigma_import_dialog=this.simple_dialog(t,"enigma.importkeys",function(e){t[0].contentWindow.rcmail.enigma_import()},{button:"import",width:500,height:180})},rcube_webmail.prototype.enigma_key_import_search=function(){var e=$("<iframe>").attr("src",this.url("plugin.enigmakeys",{_a:"import-search",_framed:1}));this.enigma_import_dialog=this.simple_dialog(e,"enigma.keyimportsearchlabel",function(){e[0].contentWindow.rcmail.enigma_import_search()},{button:"search",width:500,height:150})},rcube_webmail.prototype.enigma_import_success=function(){(this.enigma_import_dialog||parent.rcmail.enigma_import_dialog).dialog("destroy")},rcube_webmail.prototype.enigma_key_create=function(){this.keys_list.clear_selection(),this.enigma_loadframe("&_action=plugin.enigmakeys&_a=create&_nav=hide")},rcube_webmail.prototype.enigma_key_create_save=function(){var t,e=[],i=$("#key-pass").val(),a=$("#key-pass-confirm").val(),n=$("#key-type").val();$('[name="identity[]"]:checked').each(function(){e.push({name:$(this).data("name")||"",email:$(this).data("email")})}),i&&a?i!=a?this.alert_dialog(this.get_label("enigma.passwordsdiffer")):e.length?window.openpgp&&window.crypto&&window.crypto.getRandomValues?(t=this.set_busy(!0,"enigma.keygenerating"),a={userIDs:e,passphrase:i,type:n.substring(0,3)},"ecc"==n?a.curve="ed25519":a.rsaBits="rsa4096"==n?4096:2048,openpgp.generateKey(a).then(function(e){e={_a:"import",_keys:e.privateKey,_generated:1,_passwd:i};rcmail.http_post("plugin.enigmakeys",e,t)},function(e){console.error(e),rcmail.set_busy(!1,null,t),rcmail.display_message(rcmail.get_label("enigma.keygenerateerror"),"error")})):rcmail.display_message(rcmail.get_label("enigma.keygennosupport"),"error"):this.alert_dialog(this.get_label("enigma.noidentselected")):this.alert_dialog(this.get_label("enigma.formerror"))},rcube_webmail.prototype.enigma_key_create_success=function(){parent.rcmail.enigma_list(1)},rcube_webmail.prototype.enigma_delete=function(){var a=this.keys_list.get_selection();a.length&&this.confirm_dialog(this.get_label("enigma.keyremoveconfirm"),"delete",function(e,t){var i=t.display_message(t.get_label("enigma.keyremoving"),"loading");t.http_post("plugin.enigmakeys",{_a:"delete",_keys:a},i)})},rcube_webmail.prototype.enigma_export=function(e){var t=!1,i=this.keys_list,e=e?i.get_selection().join(","):"*",a={_keys:e};if(e.length){if("*"==e?t=!0:$.each(i.get_selection(),function(){if((flags=$(i.rows[this].obj).data("flags"))&&0<=flags.indexOf("p"))return!(t=!0)}),t)return this.show_popup_dialog(this.get_label("enigma.keyexportprompt"),this.get_label("enigma.exportkeys"),[{class:"export mainaction",text:this.get_label("enigma.onlypubkeys"),click:function(e){rcmail.enigma_export_submit(a),$(this).remove()}},{class:"export",text:this.get_label("enigma.withprivkeys"),click:function(e){a._priv=1,rcmail.enigma_export_submit(a),$(this).remove()}},{class:"cancel",text:this.get_label("close"),click:function(e){$(this).remove()}}],{width:500});this.enigma_export_submit(a)}},rcube_webmail.prototype.enigma_export_submit=function(e){var t="keyexport-"+(new Date).getTime(),i=$("<form>").attr({target:t,method:"post",style:"display:none",action:"?_action=plugin.enigmakeys&_task=settings&_a=export"}),t=$("<iframe>").attr({name:t,style:"display:none"});i.append($("<input>").attr({name:"_token",value:this.env.request_token})),$.each(e,function(e,t){i.append($("<input>").attr({name:e,value:t}))}),t.appendTo(document.body),i.appendTo(document.body).submit()},rcube_webmail.prototype.enigma_import=function(){var e,t,i="keyimport-"+(new Date).getTime();if(e=this.gui_objects.importform){if(!(t=document.getElementById("rcmimportfile"))||t.value)return t=this.set_busy(!0,"importwait"),$("<iframe>").attr({name:i,style:"display:none"}).appendTo(document.body),$(e).attr({target:i,action:this.add_url(e.action,"_unlock",t)}).submit(),!0;this.alert_dialog(this.get_label("selectimportfile"))}},rcube_webmail.prototype.enigma_import_search=function(){var e;this.gui_objects.importform&&(e=$("#rcmimportsearch").val())&&this.enigma_find_publickey(e)},rcube_webmail.prototype.enigma_keylist_select=function(e){var t,i=e.get_single_selection();i&&!e.multi_selecting&&(t="&_action=plugin.enigmakeys&_a=info&_id="+i),this.enigma_loadframe(t),this.enable_command("plugin.enigma-key-delete","plugin.enigma-key-export-selected",0<e.get_selection().length)},rcube_webmail.prototype.enigma_loadframe=function(e){var t;(t=this.get_frame_window(this.env.contentframe))&&(e?(this.env.frame_lock=this.set_busy(!0,"loading"),t.location.href=this.env.comm_path+"&_framed=1"+e):(t.location&&t.location.href.indexOf(this.env.blankpage)<0&&(t.location.href=this.env.blankpage),this.env.frame_lock&&this.set_busy(!1,null,this.env.frame_lock)))},rcube_webmail.prototype.enigma_search=function(e){var t;return((e=!e&&this.gui_objects.qsearchbox?this.gui_objects.qsearchbox.value:e)||this.env.search_request)&&(e={_a:"search",_q:e},t=this.set_busy(!0,"searching"),this.env.current_page=1,this.enigma_loadframe(),this.enigma_clear_list(),this.http_post("plugin.enigmakeys",e,t)),!1},rcube_webmail.prototype.enigma_search_reset=function(e){var t=this.env.search_request;return this.reset_qsearch(),t&&(this.enigma_loadframe(),this.enigma_clear_list(),this.enigma_list()),!1},rcube_webmail.prototype.enigma_list=function(e,t){if(this.is_framed())return parent.rcmail.enigma_list(e,t);var i={_a:"list"},a=this.set_busy(!0,"loading");this.env.current_page=e||1,this.env.search_request&&(i._q=this.env.search_request),e&&(i._p=e),this.enigma_clear_list(t),this.http_post("plugin.enigmakeys",i,a)},rcube_webmail.prototype.enigma_list_page=function(e){"next"==e?e=this.env.current_page+1:"last"==e?e=this.env.pagecount:"prev"==e&&1<this.env.current_page?e=this.env.current_page-1:"first"==e&&1<this.env.current_page&&(e=1),this.enigma_list(e)},rcube_webmail.prototype.enigma_clear_list=function(e){!1!==e&&this.enigma_loadframe(),this.keys_list&&this.keys_list.clear(!0),this.enable_command("plugin.enigma-key-delete","plugin.enigma-key-delete-selected",!1),this.triggerEvent("listupdate",{list:this.keys_list,rowcount:this.keys_list.rowcount})},rcube_webmail.prototype.enigma_add_list_row=function(e){if(!this.gui_objects.keyslist||!this.keys_list)return!1;var t=this.keys_list,i=(this.gui_objects.keyslist.tBodies[0].rows.length,document.createElement("tr")),a=document.createElement("td");i.id="rcmrow"+e.id,i.className="message",e.flags&&$(i).data("flags",e.flags),a.className="name",a.innerHTML=e.name,i.appendChild(a),t.insert_row(i)},rcube_webmail.prototype.enigma_beforesend_handler=function(e){this.env.last_action="send",this.enigma_compose_handler(e)},rcube_webmail.prototype.enigma_beforesavedraft_handler=function(e){this.env.last_action="savedraft",this.enigma_compose_handler(e)},rcube_webmail.prototype.enigma_compose_handler=function(e){var i=this.gui_objects.messageform;$("#enigmamenu input").each(function(){var e=this.id+"_cpy",t=$("#"+e);t.length||(t=$(this).clone()).prop({id:e,type:"hidden"}).appendTo(i),t.val(this.checked?"1":"")})},rcube_webmail.prototype.enigma_import_attachment=function(e){var t=this.set_busy(!0,"loading"),e={_uid:this.env.uid,_mbox:this.env.mailbox,_part:e};return this.http_post("plugin.enigmaimport",e,t),!1},rcube_webmail.prototype.enigma_password_request=function(t){var i,e,a,n,r;t&&t.keyid&&(e=(i=this).get_label("enigma.enterkeypass"),a=$('<div class="prompt">'),n=$('<p class="message">').appendTo(a),r=$("<input>").attr({type:"password",size:30,"data-submit":"true"}).appendTo(a),t.key=t.keyid,8<t.keyid.length&&(t.keyid=t.keyid.substr(t.keyid.length-8)),$.each(["keyid","user"],function(){e=e.replace("$"+this,t[this])}),n.text(e),this.show_popup_dialog(a,this.get_label("enigma.enterkeypasstitle"),[{text:this.get_label("ok"),class:"mainaction save unlock",click:function(e){e.stopPropagation();e=i.is_framed()?window.parent.$:$;t.password=r.val(),t.password?(i.enigma_password_submit(t),e(this).remove()):r.focus()}},{text:this.get_label("cancel"),class:"cancel",click:function(e){var t=i.is_framed()?window.parent.$:$;e.stopPropagation(),t(this).remove()}}],{width:400}),this.is_framed())&&parent.rcmail.message_list&&parent.rcmail.message_list.blur()},rcube_webmail.prototype.enigma_password_submit=function(e){var i,t;return"compose"!=this.env.action||e["compose-init"]?"plugin.enigmakeys"==this.env.action&&(i=this.gui_objects.importform)?($('input[name="_keyid"]',i).length||$(i).append($("<input>").attr({type:"hidden",name:"_keyid",value:e.key})).append($("<input>").attr({type:"hidden",name:"_passwd",value:e.password})),this.enigma_import()):(t=e.nolock?null:this.set_busy(!0,"loading"),i=$("<form>").attr({method:"post",action:e.action||location.href,style:"display:none"}).append($("<input>").attr({type:"hidden",name:"_keyid",value:e.key})).append($("<input>").attr({type:"hidden",name:"_passwd",value:e.password})).append($("<input>").attr({type:"hidden",name:"_token",value:this.env.request_token})).append($("<input>").attr({type:"hidden",name:"_unlock",value:t})),$.each(e,function(e,t){0==e.indexOf("input")&&i.append($("<input>").attr({type:"hidden",name:e.substring(5),value:t}))}),e.iframe&&(t="enigma_frame_"+(new Date).getTime(),$("<iframe>").attr({style:"display:none",name:t}).appendTo(document.body),i.attr("target",t)),void i.appendTo(document.body).submit()):this.enigma_password_compose_submit(e)},rcube_webmail.prototype.enigma_password_compose_submit=function(e){var t=this.gui_objects.messageform;$('input[name="_keyid"]',t).length?($('input[name="_keyid"]',t).val(e.key),$('input[name="_passwd"]',t).val(e.password)):$(t).append($("<input>").attr({type:"hidden",name:"_keyid",value:e.key})).append($("<input>").attr({type:"hidden",name:"_passwd",value:e.password})),this.submit_messageform("savedraft"==this.env.last_action)},rcube_webmail.prototype.enigma_key_not_found=function(e){var t=[{class:"mainaction search",text:e.button,click:function(){$(this).remove(),rcmail.enigma_find_publickey(e.email)}}];return"encrypt"==e.mode&&t.push({class:"send",text:rcmail.get_label("enigma.sendunencrypted"),click:function(e){$(this).remove(),$("#enigmaencryptopt").prop("checked",!1).change(),rcmail.command("send",{nocheck:!0},e.target,e.originalEvent)}}),t.push({class:"cancel",text:this.get_label("cancel"),click:function(){$(this).remove()}}),this.show_popup_dialog(e.text,e.title,t,{width:500,dialogClass:"error"})},rcube_webmail.prototype.enigma_find_publickey=function(e){this.mailvelope_search_pubkeys([e],function(e){},function(e){var t=rcmail.set_busy(!0,"enigma.importwait"),e={_a:"import",_keys:e};"plugin.enigmakeys"==rcmail.env.action&&(e._refresh=1),rcmail.http_post("plugin.enigmakeys",e,t)})};
PKwc�\D!�k�L�Lenigma/openpgp.min.jsnu�[���/**
 * OpenPGP.js - v5.0.0
 *
 * @source https://cdn.jsdelivr.net/npm/openpgp@5.0.0/dist/openpgp.js
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) OpenPGP Development Team
 *
 * The JavaScript code in this page is free software: you can
 * redistribute it and/or modify it under the terms of the GNU
 * Lesser General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option)
 * any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
/*! OpenPGP.js v5.0.0 - 2021-09-02 - this is LGPL licensed code, see LICENSE/our website https://openpgpjs.org/ for more information. */
var openpgp=function(e){"use strict";const t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r=Symbol("doneWritingPromise"),i=Symbol("doneWritingResolve"),n=Symbol("doneWritingReject");class a extends Array{constructor(){super(),this[r]=new Promise(((e,t)=>{this[i]=e,this[n]=t})),this[r].catch((()=>{}))}}function s(e){return e&&e.getReader&&Array.isArray(e)}function o(e){if(!s(e)){const t=e.getWriter(),r=t.releaseLock;return t.releaseLock=()=>{t.closed.catch((function(){})),r.call(t)},t}this.stream=e}a.prototype.getReader=function(){return{read:async()=>(await this[r],this.length?{value:this.shift(),done:!1}:{value:void 0,done:!0})}},o.prototype.write=async function(e){this.stream.push(e)},o.prototype.close=async function(){this.stream[i]()},o.prototype.abort=async function(e){return this.stream[n](e),e},o.prototype.releaseLock=function(){};const c="object"==typeof t.process&&"object"==typeof t.process.versions,u=c&&void 0;function h(e){return s(e)?"array":t.ReadableStream&&t.ReadableStream.prototype.isPrototypeOf(e)?"web":k&&k.prototype.isPrototypeOf(e)?"ponyfill":u&&u.prototype.isPrototypeOf(e)?"node":!(!e||!e.getReader)&&"web-like"}function d(e){return Uint8Array.prototype.isPrototypeOf(e)}function f(e){if(1===e.length)return e[0];let t=0;for(let r=0;r<e.length;r++){if(!d(e[r]))throw Error("concatUint8Array: Data must be in the form of a Uint8Array");t+=e[r].length}const r=new Uint8Array(t);let i=0;return e.forEach((function(e){r.set(e,i),i+=e.length})),r}const l=c&&void 0,p=c&&void 0;let y,b;if(p){y=function(e){let t=!1;return new k({start(r){e.pause(),e.on("data",(i=>{t||(l.isBuffer(i)&&(i=new Uint8Array(i.buffer,i.byteOffset,i.byteLength)),r.enqueue(i),e.pause())})),e.on("end",(()=>{t||r.close()})),e.on("error",(e=>r.error(e)))},pull(){e.resume()},cancel(r){t=!0,e.destroy(r)}})};class e extends p{constructor(e,t){super(t),this._reader=K(e)}async _read(e){try{for(;;){const{done:e,value:t}=await this._reader.read();if(e){this.push(null);break}if(!this.push(t)||this._cancelling){this._reading=!1;break}}}catch(e){this.emit("error",e)}}_destroy(e){this._reader.cancel(e)}}b=function(t,r){return new e(t,r)}}const m=new WeakSet,g=Symbol("externalBuffer");function w(e){if(this.stream=e,e[g]&&(this[g]=e[g].slice()),s(e)){const t=e.getReader();return this._read=t.read.bind(t),this._releaseLock=()=>{},void(this._cancel=()=>{})}let t=h(e);if("node"===t&&(e=y(e)),t){const t=e.getReader();return this._read=t.read.bind(t),this._releaseLock=()=>{t.closed.catch((function(){})),t.releaseLock()},void(this._cancel=t.cancel.bind(t))}let r=!1;this._read=async()=>r||m.has(e)?{value:void 0,done:!0}:(r=!0,{value:e,done:!1}),this._releaseLock=()=>{if(r)try{m.add(e)}catch(e){}}}w.prototype.read=async function(){if(this[g]&&this[g].length){return{done:!1,value:this[g].shift()}}return this._read()},w.prototype.releaseLock=function(){this[g]&&(this.stream[g]=this[g]),this._releaseLock()},w.prototype.cancel=function(e){return this._cancel(e)},w.prototype.readLine=async function(){let e,t=[];for(;!e;){let{done:r,value:i}=await this.read();if(i+="",r)return t.length?C(t):void 0;const n=i.indexOf("\n")+1;n&&(e=C(t.concat(i.substr(0,n))),t=[]),n!==i.length&&t.push(i.substr(n))}return this.unshift(...t),e},w.prototype.readByte=async function(){const{done:e,value:t}=await this.read();if(e)return;const r=t[0];return this.unshift(N(t,1)),r},w.prototype.readBytes=async function(e){const t=[];let r=0;for(;;){const{done:i,value:n}=await this.read();if(i)return t.length?C(t):void 0;if(t.push(n),r+=n.length,r>=e){const r=C(t);return this.unshift(N(r,e)),N(r,0,e)}}},w.prototype.peekBytes=async function(e){const t=await this.readBytes(e);return this.unshift(t),t},w.prototype.unshift=function(...e){this[g]||(this[g]=[]),1===e.length&&d(e[0])&&this[g].length&&e[0].length&&this[g][0].byteOffset>=e[0].length?this[g][0]=new Uint8Array(this[g][0].buffer,this[g][0].byteOffset-e[0].length,this[g][0].byteLength+e[0].length):this[g].unshift(...e.filter((e=>e&&e.length)))},w.prototype.readToEnd=async function(e=C){const t=[];for(;;){const{done:e,value:r}=await this.read();if(e)break;t.push(r)}return e(t)};let v,_,{ReadableStream:k,WritableStream:A,TransformStream:S}=t;async function E(){if(S)return;const[e,r]=await Promise.all([Promise.resolve().then((function(){return uf})),Promise.resolve().then((function(){return Kf}))]);({ReadableStream:k,WritableStream:A,TransformStream:S}=e);const{createReadableStreamWrapper:i}=r;t.ReadableStream&&k!==t.ReadableStream&&(v=i(k),_=i(t.ReadableStream))}const P=c&&void 0;function x(e){let t=h(e);return"node"===t?y(e):"web"===t&&v?v(e):t?e:new k({start(t){t.enqueue(e),t.close()}})}function M(e){if(h(e))return e;const t=new a;return(async()=>{const r=D(t);await r.write(e),await r.close()})(),t}function C(e){return e.some((e=>h(e)&&!s(e)))?function(e){e=e.map(x);const t=U((async function(e){await Promise.all(i.map((t=>j(t,e))))}));let r=Promise.resolve();const i=e.map(((i,n)=>T(i,((i,a)=>(r=r.then((()=>R(i,t.writable,{preventClose:n!==e.length-1}))),r)))));return t.readable}(e):e.some((e=>s(e)))?function(e){const t=new a;let r=Promise.resolve();return e.forEach(((i,n)=>(r=r.then((()=>R(i,t,{preventClose:n!==e.length-1}))),r))),t}(e):"string"==typeof e[0]?e.join(""):P&&P.isBuffer(e[0])?P.concat(e):f(e)}function K(e){return new w(e)}function D(e){return new o(e)}async function R(e,t,{preventClose:r=!1,preventAbort:i=!1,preventCancel:n=!1}={}){if(h(e)&&!s(e)){e=x(e);try{if(e[g]){const r=D(t);for(let t=0;t<e[g].length;t++)await r.ready,await r.write(e[g][t]);r.releaseLock()}await e.pipeTo(t,{preventClose:r,preventAbort:i,preventCancel:n})}catch(e){}return}const a=K(e=M(e)),o=D(t);try{for(;;){await o.ready;const{done:e,value:t}=await a.read();if(e){r||await o.close();break}await o.write(t)}}catch(e){i||await o.abort(e)}finally{a.releaseLock(),o.releaseLock()}}function I(e,t){const r=new S(t);return R(e,r.writable),r.readable}function U(e){let t,r,i=!1;return{readable:new k({start(e){r=e},pull(){t?t():i=!0},cancel:e},{highWaterMark:0}),writable:new A({write:async function(e){r.enqueue(e),i?i=!1:(await new Promise((e=>{t=e})),t=null)},close:r.close.bind(r),abort:r.error.bind(r)})}}function B(e,t=(()=>{}),r=(()=>{})){if(s(e)){const i=new a;return(async()=>{const n=await L(e),a=t(n),s=r();let o;o=void 0!==a&&void 0!==s?C([a,s]):void 0!==a?a:s;const c=D(i);await c.write(o),await c.close()})(),i}if(h(e))return I(e,{async transform(e,r){try{const i=await t(e);void 0!==i&&r.enqueue(i)}catch(e){r.error(e)}},async flush(e){try{const t=await r();void 0!==t&&e.enqueue(t)}catch(t){e.error(t)}}});const i=t(e),n=r();return void 0!==i&&void 0!==n?C([i,n]):void 0!==i?i:n}function T(e,t){if(h(e)&&!s(e)){let r;const i=new S({start(e){r=e}}),n=R(e,i.writable),a=U((async function(){r.error(Error("Readable side was canceled.")),await n,await new Promise(setTimeout)}));return t(i.readable,a.writable),a.readable}e=M(e);const r=new a;return t(e,r),r}function z(e,t){let r;const i=T(e,((e,n)=>{const a=K(e);a.remainder=()=>(a.releaseLock(),R(e,n),i),r=t(a)}));return r}function q(e){if(h(e)){const t=function(e){if(s(e)){const t=new a,r=new a;return(async()=>{const i=K(e),n=D(t),a=D(r);try{for(;;){await n.ready,await a.ready;const{done:e,value:t}=await i.read();if(e){await n.close(),await a.close();break}await n.write(t),await a.write(t)}}catch(e){await n.abort(e),await a.abort(e)}finally{i.releaseLock(),n.releaseLock(),a.releaseLock()}})(),[t,r]}if(h(e)){const t=x(e).tee();return t[0][g]=t[1][g]=e[g],t}return[N(e),N(e)]}(e);return F(e,t[0]),t[1]}return N(e)}function O(e){return s(e)?q(e):h(e)?new k({start(t){const r=T(e,(async(e,r)=>{const i=K(e),n=D(r);try{for(;;){await n.ready;const{done:e,value:r}=await i.read();if(e){try{t.close()}catch(e){}return void await n.close()}try{t.enqueue(r)}catch(e){}await n.write(r)}}catch(e){t.error(e),await n.abort(e)}}));F(e,r)}}):N(e)}function F(e,t){Object.entries(Object.getOwnPropertyDescriptors(e.constructor.prototype)).forEach((([r,i])=>{"constructor"!==r&&(i.value?i.value=i.value.bind(t):i.get=i.get.bind(t),Object.defineProperty(e,r,i))}))}function N(e,t=0,r=1/0){if(s(e))throw Error("Not implemented");if(h(e)){if(t>=0&&r>=0){let i=0;return I(e,{transform(e,n){i<r?(i+e.length>=t&&n.enqueue(N(e,Math.max(t-i,0),r-i)),i+=e.length):n.terminate()}})}if(t<0&&(r<0||r===1/0)){let i=[];return B(e,(e=>{e.length>=-t?i=[e]:i.push(e)}),(()=>N(C(i),t,r)))}if(0===t&&r<0){let i;return B(e,(e=>{const n=i?C([i,e]):e;if(n.length>=-r)return i=N(n,r),N(n,t,r);i=n}))}return console.warn(`stream.slice(input, ${t}, ${r}) not implemented efficiently.`),W((async()=>N(await L(e),t,r)))}return e[g]&&(e=C(e[g].concat([e]))),!d(e)||P&&P.isBuffer(e)?e.slice(t,r):(r===1/0&&(r=e.length),e.subarray(t,r))}async function L(e,t=C){return h(e)?K(e).readToEnd(t):e}async function j(e,t){if(h(e)){if(e.cancel)return e.cancel(t);if(e.destroy)return e.destroy(t),await new Promise(setTimeout),t}}function W(e){const t=new a;return(async()=>{const r=D(t);try{await r.write(await e()),await r.close()}catch(e){await r.abort(e)}})(),t}class H{constructor(e){if(void 0===e)throw Error("Invalid BigInteger input");if(e instanceof Uint8Array){const t=e,r=Array(t.length);for(let e=0;e<t.length;e++){const i=t[e].toString(16);r[e]=t[e]<=15?"0"+i:i}this.value=BigInt("0x0"+r.join(""))}else this.value=BigInt(e)}clone(){return new H(this.value)}iinc(){return this.value++,this}inc(){return this.clone().iinc()}idec(){return this.value--,this}dec(){return this.clone().idec()}iadd(e){return this.value+=e.value,this}add(e){return this.clone().iadd(e)}isub(e){return this.value-=e.value,this}sub(e){return this.clone().isub(e)}imul(e){return this.value*=e.value,this}mul(e){return this.clone().imul(e)}imod(e){return this.value%=e.value,this.isNegative()&&this.iadd(e),this}mod(e){return this.clone().imod(e)}modExp(e,t){if(t.isZero())throw Error("Modulo cannot be zero");if(t.isOne())return new H(0);if(e.isNegative())throw Error("Unsopported negative exponent");let r=e.value,i=this.value;i%=t.value;let n=BigInt(1);for(;r>BigInt(0);){const e=r&BigInt(1);r>>=BigInt(1);const a=n*i%t.value;n=e?a:n,i=i*i%t.value}return new H(n)}modInv(e){const{gcd:t,x:r}=this._egcd(e);if(!t.isOne())throw Error("Inverse does not exist");return r.add(e).mod(e)}_egcd(e){let t=BigInt(0),r=BigInt(1),i=BigInt(1),n=BigInt(0),a=this.value;for(e=e.value;e!==BigInt(0);){const s=a/e;let o=t;t=i-s*t,i=o,o=r,r=n-s*r,n=o,o=e,e=a%e,a=o}return{x:new H(i),y:new H(n),gcd:new H(a)}}gcd(e){let t=this.value;for(e=e.value;e!==BigInt(0);){const r=e;e=t%e,t=r}return new H(t)}ileftShift(e){return this.value<<=e.value,this}leftShift(e){return this.clone().ileftShift(e)}irightShift(e){return this.value>>=e.value,this}rightShift(e){return this.clone().irightShift(e)}equal(e){return this.value===e.value}lt(e){return this.value<e.value}lte(e){return this.value<=e.value}gt(e){return this.value>e.value}gte(e){return this.value>=e.value}isZero(){return this.value===BigInt(0)}isOne(){return this.value===BigInt(1)}isNegative(){return this.value<BigInt(0)}isEven(){return!(this.value&BigInt(1))}abs(){const e=this.clone();return this.isNegative()&&(e.value=-e.value),e}toString(){return this.value.toString()}toNumber(){const e=Number(this.value);if(e>Number.MAX_SAFE_INTEGER)throw Error("Number can only safely store up to 53 bits");return e}getBit(e){return(this.value>>BigInt(e)&BigInt(1))===BigInt(0)?0:1}bitLength(){const e=new H(0),t=new H(1),r=new H(-1),i=this.isNegative()?r:e;let n=1;const a=this.clone();for(;!a.irightShift(t).equal(i);)n++;return n}byteLength(){const e=new H(0),t=new H(-1),r=this.isNegative()?t:e,i=new H(8);let n=1;const a=this.clone();for(;!a.irightShift(i).equal(r);)n++;return n}toUint8Array(e="be",t){let r=this.value.toString(16);r.length%2==1&&(r="0"+r);const i=r.length/2,n=new Uint8Array(t||i),a=t?t-i:0;let s=0;for(;s<i;)n[s+a]=parseInt(r.slice(2*s,2*s+2),16),s++;return"be"!==e&&n.reverse(),n}}const G=t.process&&"development"===t.process.env.NODE_ENV,V={isString:function(e){return"string"==typeof e||String.prototype.isPrototypeOf(e)},isArray:function(e){return Array.prototype.isPrototypeOf(e)},isUint8Array:d,isStream:h,readNumber:function(e){let t=0;for(let r=0;r<e.length;r++)t+=256**r*e[e.length-1-r];return t},writeNumber:function(e,t){const r=new Uint8Array(t);for(let i=0;i<t;i++)r[i]=e>>8*(t-i-1)&255;return r},readDate:function(e){const t=V.readNumber(e);return new Date(1e3*t)},writeDate:function(e){const t=Math.floor(e.getTime()/1e3);return V.writeNumber(t,4)},normalizeDate:function(e=Date.now()){return null===e||e===1/0?e:new Date(1e3*Math.floor(+e/1e3))},readMPI:function(e){const t=(e[0]<<8|e[1])+7>>>3;return e.subarray(2,2+t)},leftPad(e,t){const r=new Uint8Array(t),i=t-e.length;return r.set(e,i),r},uint8ArrayToMPI:function(e){const t=V.uint8ArrayBitLength(e);if(0===t)throw Error("Zero MPI");const r=e.subarray(e.length-Math.ceil(t/8)),i=new Uint8Array([(65280&t)>>8,255&t]);return V.concatUint8Array([i,r])},uint8ArrayBitLength:function(e){let t;for(t=0;t<e.length&&0===e[t];t++);if(t===e.length)return 0;const r=e.subarray(t);return 8*(r.length-1)+V.nbits(r[0])},hexToUint8Array:function(e){const t=new Uint8Array(e.length>>1);for(let r=0;r<e.length>>1;r++)t[r]=parseInt(e.substr(r<<1,2),16);return t},uint8ArrayToHex:function(e){const t=[],r=e.length;let i,n=0;for(;n<r;){for(i=e[n++].toString(16);i.length<2;)i="0"+i;t.push(""+i)}return t.join("")},stringToUint8Array:function(e){return B(e,(e=>{if(!V.isString(e))throw Error("stringToUint8Array: Data must be in the form of a string");const t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}))},uint8ArrayToString:function(e){const t=[],r=16384,i=(e=new Uint8Array(e)).length;for(let n=0;n<i;n+=r)t.push(String.fromCharCode.apply(String,e.subarray(n,n+r<i?n+r:i)));return t.join("")},encodeUTF8:function(e){const t=new TextEncoder("utf-8");function r(e,r=!1){return t.encode(e,{stream:!r})}return B(e,r,(()=>r("",!0)))},decodeUTF8:function(e){const t=new TextDecoder("utf-8");function r(e,r=!1){return t.decode(e,{stream:!r})}return B(e,r,(()=>r(new Uint8Array,!0)))},concat:C,concatUint8Array:f,equalsUint8Array:function(e,t){if(!V.isUint8Array(e)||!V.isUint8Array(t))throw Error("Data must be in the form of a Uint8Array");if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0},writeChecksum:function(e){let t=0;for(let r=0;r<e.length;r++)t=t+e[r]&65535;return V.writeNumber(t,2)},printDebug:function(e){G&&console.log(e)},printDebugError:function(e){G&&console.error(e)},nbits:function(e){let t=1,r=e>>>16;return 0!==r&&(e=r,t+=16),r=e>>8,0!==r&&(e=r,t+=8),r=e>>4,0!==r&&(e=r,t+=4),r=e>>2,0!==r&&(e=r,t+=2),r=e>>1,0!==r&&(e=r,t+=1),t},double:function(e){const t=new Uint8Array(e.length),r=e.length-1;for(let i=0;i<r;i++)t[i]=e[i]<<1^e[i+1]>>7;return t[r]=e[r]<<1^135*(e[0]>>7),t},shiftRight:function(e,t){if(t)for(let r=e.length-1;r>=0;r--)e[r]>>=t,r>0&&(e[r]|=e[r-1]<<8-t);return e},getWebCrypto:function(){return void 0!==t&&t.crypto&&t.crypto.subtle},detectNode:function(){return"object"==typeof t.process&&"object"==typeof t.process.versions},detectBigInt:()=>"undefined"!=typeof BigInt,getBigInteger:async function(){if(V.detectBigInt())return H;{const{default:e}=await Promise.resolve().then((function(){return Bf}));return e}},getNodeCrypto:function(){},getNodeZlib:function(){},getNodeBuffer:function(){return{}.Buffer},getHardwareConcurrency:function(){if(V.detectNode()){return(void 0).cpus().length}return navigator.hardwareConcurrency||1},isEmailAddress:function(e){if(!V.isString(e))return!1;return/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+([a-zA-Z]{2,}|xn--[a-zA-Z\-0-9]+)))$/.test(e)},canonicalizeEOL:function(e){let t=!1;return B(e,(e=>{let r;t&&(e=V.concatUint8Array([new Uint8Array([13]),e])),13===e[e.length-1]?(t=!0,e=e.subarray(0,-1)):t=!1;const i=[];for(let t=0;r=e.indexOf(10,t)+1,r;t=r)13!==e[r-2]&&i.push(r);if(!i.length)return e;const n=new Uint8Array(e.length+i.length);let a=0;for(let t=0;t<i.length;t++){const r=e.subarray(i[t-1]||0,i[t]);n.set(r,a),a+=r.length,n[a-1]=13,n[a]=10,a++}return n.set(e.subarray(i[i.length-1]||0),a),n}),(()=>t?new Uint8Array([13]):void 0))},nativeEOL:function(e){let t=!1;return B(e,(e=>{let r;13===(e=t&&10!==e[0]?V.concatUint8Array([new Uint8Array([13]),e]):new Uint8Array(e))[e.length-1]?(t=!0,e=e.subarray(0,-1)):t=!1;let i=0;for(let t=0;t!==e.length;t=r){r=e.indexOf(13,t)+1,r||(r=e.length);const n=r-(10===e[r]?1:0);t&&e.copyWithin(i,t,n),i+=n-t}return e.subarray(0,i)}),(()=>t?new Uint8Array([13]):void 0))},removeTrailingSpaces:function(e){return e.split("\n").map((e=>{let t=e.length-1;for(;t>=0&&(" "===e[t]||"\t"===e[t]);t--);return e.substr(0,t+1)})).join("\n")},wrapError:function(e,t){if(!t)return Error(e);try{t.message=e+": "+t.message}catch(e){}return t},constructAllowedPackets:function(e){const t={};return e.forEach((e=>{if(!e.tag)throw Error("Invalid input: expected a packet class");t[e.tag]=e})),t},anyPromise:function(e){return new Promise((async(t,r)=>{let i;await Promise.all(e.map((async e=>{try{t(await e)}catch(e){i=e}}))),r(i)}))}},$=V.getNodeBuffer();let Z,Y;function X(e){let t=new Uint8Array;return B(e,(e=>{t=V.concatUint8Array([t,e]);const r=[],i=Math.floor(t.length/45),n=45*i,a=Z(t.subarray(0,n));for(let e=0;e<i;e++)r.push(a.substr(60*e,60)),r.push("\n");return t=t.subarray(n),r.join("")}),(()=>t.length?Z(t)+"\n":""))}function Q(e){let t="";return B(e,(e=>{t+=e;let r=0;const i=[" ","\t","\r","\n"];for(let e=0;e<i.length;e++){const n=i[e];for(let e=t.indexOf(n);-1!==e;e=t.indexOf(n,e+1))r++}let n=t.length;for(;n>0&&(n-r)%4!=0;n--)i.includes(t[n])&&r--;const a=Y(t.substr(0,n));return t=t.substr(n),a}),(()=>Y(t)))}function J(e){return Q(e.replace(/-/g,"+").replace(/_/g,"/"))}function ee(e,t){let r=X(e).replace(/[\r\n]/g,"");return t&&(r=r.replace(/[+]/g,"-").replace(/[/]/g,"_").replace(/[=]/g,"")),r}$?(Z=e=>$.from(e).toString("base64"),Y=e=>{const t=$.from(e,"base64");return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}):(Z=e=>btoa(V.uint8ArrayToString(e)),Y=e=>V.stringToUint8Array(atob(e)));const te=Symbol("byValue");var re={curve:{p256:"p256","P-256":"p256",secp256r1:"p256",prime256v1:"p256","1.2.840.10045.3.1.7":"p256","2a8648ce3d030107":"p256","2A8648CE3D030107":"p256",p384:"p384","P-384":"p384",secp384r1:"p384","1.3.132.0.34":"p384","2b81040022":"p384","2B81040022":"p384",p521:"p521","P-521":"p521",secp521r1:"p521","1.3.132.0.35":"p521","2b81040023":"p521","2B81040023":"p521",secp256k1:"secp256k1","1.3.132.0.10":"secp256k1","2b8104000a":"secp256k1","2B8104000A":"secp256k1",ED25519:"ed25519",ed25519:"ed25519",Ed25519:"ed25519","1.3.6.1.4.1.11591.15.1":"ed25519","2b06010401da470f01":"ed25519","2B06010401DA470F01":"ed25519",X25519:"curve25519",cv25519:"curve25519",curve25519:"curve25519",Curve25519:"curve25519","1.3.6.1.4.1.3029.1.5.1":"curve25519","2b060104019755010501":"curve25519","2B060104019755010501":"curve25519",brainpoolP256r1:"brainpoolP256r1","1.3.36.3.3.2.8.1.1.7":"brainpoolP256r1","2b2403030208010107":"brainpoolP256r1","2B2403030208010107":"brainpoolP256r1",brainpoolP384r1:"brainpoolP384r1","1.3.36.3.3.2.8.1.1.11":"brainpoolP384r1","2b240303020801010b":"brainpoolP384r1","2B240303020801010B":"brainpoolP384r1",brainpoolP512r1:"brainpoolP512r1","1.3.36.3.3.2.8.1.1.13":"brainpoolP512r1","2b240303020801010d":"brainpoolP512r1","2B240303020801010D":"brainpoolP512r1"},s2k:{simple:0,salted:1,iterated:3,gnu:101},publicKey:{rsaEncryptSign:1,rsaEncrypt:2,rsaSign:3,elgamal:16,dsa:17,ecdh:18,ecdsa:19,eddsa:22,aedh:23,aedsa:24},symmetric:{plaintext:0,idea:1,tripledes:2,cast5:3,blowfish:4,aes128:7,aes192:8,aes256:9,twofish:10},compression:{uncompressed:0,zip:1,zlib:2,bzip2:3},hash:{md5:1,sha1:2,ripemd:3,sha256:8,sha384:9,sha512:10,sha224:11},webHash:{"SHA-1":2,"SHA-256":8,"SHA-384":9,"SHA-512":10},aead:{eax:1,ocb:2,experimentalGCM:100},packet:{publicKeyEncryptedSessionKey:1,signature:2,symEncryptedSessionKey:3,onePassSignature:4,secretKey:5,publicKey:6,secretSubkey:7,compressedData:8,symmetricallyEncryptedData:9,marker:10,literalData:11,trust:12,userID:13,publicSubkey:14,userAttribute:17,symEncryptedIntegrityProtectedData:18,modificationDetectionCode:19,aeadEncryptedData:20},literal:{binary:98,text:116,utf8:117,mime:109},signature:{binary:0,text:1,standalone:2,certGeneric:16,certPersona:17,certCasual:18,certPositive:19,certRevocation:48,subkeyBinding:24,keyBinding:25,key:31,keyRevocation:32,subkeyRevocation:40,timestamp:64,thirdParty:80},signatureSubpacket:{signatureCreationTime:2,signatureExpirationTime:3,exportableCertification:4,trustSignature:5,regularExpression:6,revocable:7,keyExpirationTime:9,placeholderBackwardsCompatibility:10,preferredSymmetricAlgorithms:11,revocationKey:12,issuer:16,notationData:20,preferredHashAlgorithms:21,preferredCompressionAlgorithms:22,keyServerPreferences:23,preferredKeyServer:24,primaryUserID:25,policyURI:26,keyFlags:27,signersUserID:28,reasonForRevocation:29,features:30,signatureTarget:31,embeddedSignature:32,issuerFingerprint:33,preferredAEADAlgorithms:34},keyFlags:{certifyKeys:1,signData:2,encryptCommunication:4,encryptStorage:8,splitPrivateKey:16,authentication:32,sharedPrivateKey:128},armor:{multipartSection:0,multipartLast:1,signed:2,message:3,publicKey:4,privateKey:5,signature:6},reasonForRevocation:{noReason:0,keySuperseded:1,keyCompromised:2,keyRetired:3,userIDInvalid:32},features:{modificationDetection:1,aead:2,v5Keys:4},write:function(e,t){if("number"==typeof t&&(t=this.read(e,t)),void 0!==e[t])return e[t];throw Error("Invalid enum value.")},read:function(e,t){if(e[te]||(e[te]=[],Object.entries(e).forEach((([t,r])=>{e[te][r]=t}))),void 0!==e[te][t])return e[te][t];throw Error("Invalid enum value.")}},ie={preferredHashAlgorithm:re.hash.sha256,preferredSymmetricAlgorithm:re.symmetric.aes256,preferredCompressionAlgorithm:re.compression.uncompressed,deflateLevel:6,aeadProtect:!1,preferredAEADAlgorithm:re.aead.eax,aeadChunkSizeByte:12,v5Keys:!1,s2kIterationCountByte:224,allowUnauthenticatedMessages:!1,allowUnauthenticatedStream:!1,checksumRequired:!1,minRSABits:2047,passwordCollisionCheck:!1,revocationsExpire:!1,allowInsecureDecryptionWithSigningKeys:!1,minBytesForWebCrypto:1e3,ignoreUnsupportedPackets:!0,ignoreMalformedPackets:!1,showVersion:!1,showComment:!1,versionString:"OpenPGP.js 5.0.0",commentString:"https://openpgpjs.org",maxUserIDLength:5120,knownNotations:["preferred-email-encoding@pgp.com","pka-address@gnupg.org"],useIndutnyElliptic:!0,rejectHashAlgorithms:new Set([re.hash.md5,re.hash.ripemd]),rejectMessageHashAlgorithms:new Set([re.hash.md5,re.hash.ripemd,re.hash.sha1]),rejectPublicKeyAlgorithms:new Set([re.publicKey.elgamal,re.publicKey.dsa]),rejectCurves:new Set([re.curve.brainpoolP256r1,re.curve.brainpoolP384r1,re.curve.brainpoolP512r1,re.curve.secp256k1])};function ne(e){const t=e.match(/^-----BEGIN PGP (MESSAGE, PART \d+\/\d+|MESSAGE, PART \d+|SIGNED MESSAGE|MESSAGE|PUBLIC KEY BLOCK|PRIVATE KEY BLOCK|SIGNATURE)-----$/m);if(!t)throw Error("Unknown ASCII armor type");return/MESSAGE, PART \d+\/\d+/.test(t[1])?re.armor.multipartSection:/MESSAGE, PART \d+/.test(t[1])?re.armor.multipartLast:/SIGNED MESSAGE/.test(t[1])?re.armor.signed:/MESSAGE/.test(t[1])?re.armor.message:/PUBLIC KEY BLOCK/.test(t[1])?re.armor.publicKey:/PRIVATE KEY BLOCK/.test(t[1])?re.armor.privateKey:/SIGNATURE/.test(t[1])?re.armor.signature:void 0}function ae(e,t){let r="";return t.showVersion&&(r+="Version: "+t.versionString+"\n"),t.showComment&&(r+="Comment: "+t.commentString+"\n"),e&&(r+="Comment: "+e+"\n"),r+="\n",r}function se(e){return X(function(e){let t=13501623;return B(e,(e=>{const r=ce?Math.floor(e.length/4):0,i=new Uint32Array(e.buffer,e.byteOffset,r);for(let e=0;e<r;e++)t^=i[e],t=oe[0][t>>24&255]^oe[1][t>>16&255]^oe[2][t>>8&255]^oe[3][t>>0&255];for(let i=4*r;i<e.length;i++)t=t>>8^oe[0][255&t^e[i]]}),(()=>new Uint8Array([t,t>>8,t>>16])))}(e))}const oe=[Array(255),Array(255),Array(255),Array(255)];for(let e=0;e<=255;e++){let t=e<<16;for(let e=0;e<8;e++)t=t<<1^(0!=(8388608&t)?8801531:0);oe[0][e]=(16711680&t)>>16|65280&t|(255&t)<<16}for(let e=0;e<=255;e++)oe[1][e]=oe[0][e]>>8^oe[0][255&oe[0][e]];for(let e=0;e<=255;e++)oe[2][e]=oe[1][e]>>8^oe[0][255&oe[1][e]];for(let e=0;e<=255;e++)oe[3][e]=oe[2][e]>>8^oe[0][255&oe[2][e]];const ce=function(){const e=new ArrayBuffer(2);return new DataView(e).setInt16(0,255,!0),255===new Int16Array(e)[0]}();function ue(e){for(let t=0;t<e.length;t++){if(!/^([^\s:]|[^\s:][^:]*[^\s:]): .+$/.test(e[t]))throw Error("Improperly formatted armor header: "+e[t]);/^(Version|Comment|MessageID|Hash|Charset): .+$/.test(e[t])||V.printDebugError(Error("Unknown header: "+e[t]))}}function he(e){let t=e,r="";const i=e.lastIndexOf("=");return i>=0&&i!==e.length-1&&(t=e.slice(0,i),r=e.slice(i+1).substr(0,4)),{body:t,checksum:r}}function de(e,t=ie){return new Promise((async(r,i)=>{try{const n=/^-----[^-]+-----$/m,a=/^[ \f\r\t\u00a0\u2000-\u200a\u202f\u205f\u3000]*$/;let s;const o=[];let c,u,h,d=o,f=[],l=Q(T(e,(async(e,t)=>{const p=K(e);try{for(;;){let e=await p.readLine();if(void 0===e)throw Error("Misformed armored text");if(e=V.removeTrailingSpaces(e.replace(/[\r\n]/g,"")),s)if(c)u||2!==s||(n.test(e)?(f=f.join("\r\n"),u=!0,ue(d),d=[],c=!1):f.push(e.replace(/^- /,"")));else if(n.test(e)&&i(Error("Mandatory blank line missing between armor headers and armor data")),a.test(e)){if(ue(d),c=!0,u||2!==s){r({text:f,data:l,headers:o,type:s});break}}else d.push(e);else n.test(e)&&(s=ne(e))}}catch(e){return void i(e)}const y=D(t);try{for(;;){await y.ready;const{done:e,value:t}=await p.read();if(e)throw Error("Misformed armored text");const r=t+"";if(-1!==r.indexOf("=")||-1!==r.indexOf("-")){let e=await p.readToEnd();e.length||(e=""),e=r+e,e=V.removeTrailingSpaces(e.replace(/\r/g,""));const t=e.split(n);if(1===t.length)throw Error("Misformed armored text");const i=he(t[0].slice(0,-1));h=i.checksum,await y.write(i.body);break}await y.write(r)}await y.ready,await y.close()}catch(e){await y.abort(e)}})));l=T(l,(async(e,r)=>{const i=L(se(O(e)));i.catch((()=>{})),await R(e,r,{preventClose:!0});const n=D(r);try{const e=(await i).replace("\n","");if(h!==e&&(h||t.checksumRequired))throw Error("Ascii armor integrity check on message failed: '"+h+"' should be '"+e+"'");await n.ready,await n.close()}catch(e){await n.abort(e)}}))}catch(e){i(e)}})).then((async e=>(s(e.data)&&(e.data=await L(e.data)),e)))}function fe(e,t,r,i,n,a=ie){let s,o;e===re.armor.signed&&(s=t.text,o=t.hash,t=t.data);const c=O(t),u=[];switch(e){case re.armor.multipartSection:u.push("-----BEGIN PGP MESSAGE, PART "+r+"/"+i+"-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP MESSAGE, PART "+r+"/"+i+"-----\n");break;case re.armor.multipartLast:u.push("-----BEGIN PGP MESSAGE, PART "+r+"-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP MESSAGE, PART "+r+"-----\n");break;case re.armor.signed:u.push("\n-----BEGIN PGP SIGNED MESSAGE-----\n"),u.push("Hash: "+o+"\n\n"),u.push(s.replace(/^-/gm,"- -")),u.push("\n-----BEGIN PGP SIGNATURE-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP SIGNATURE-----\n");break;case re.armor.message:u.push("-----BEGIN PGP MESSAGE-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP MESSAGE-----\n");break;case re.armor.publicKey:u.push("-----BEGIN PGP PUBLIC KEY BLOCK-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP PUBLIC KEY BLOCK-----\n");break;case re.armor.privateKey:u.push("-----BEGIN PGP PRIVATE KEY BLOCK-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP PRIVATE KEY BLOCK-----\n");break;case re.armor.signature:u.push("-----BEGIN PGP SIGNATURE-----\n"),u.push(ae(n,a)),u.push(X(t)),u.push("=",se(c)),u.push("-----END PGP SIGNATURE-----\n")}return V.concat(u)}class le{constructor(){this.bytes=""}read(e){this.bytes=V.uint8ArrayToString(e.subarray(0,8))}write(){return V.stringToUint8Array(this.bytes)}toHex(){return V.uint8ArrayToHex(V.stringToUint8Array(this.bytes))}equals(e,t=!1){return t&&(e.isWildcard()||this.isWildcard())||this.bytes===e.bytes}isNull(){return""===this.bytes}isWildcard(){return/^0+$/.test(this.toHex())}static mapToHex(e){return e.toHex()}static fromID(e){const t=new le;return t.read(V.hexToUint8Array(e)),t}static wildcard(){const e=new le;return e.read(new Uint8Array(8)),e}}var pe=function(){var e,t,r=!1;function i(r,i){var n=e[(t[r]+t[i])%255];return 0!==r&&0!==i||(n=0),n}var n,a,s,o,c=!1;function u(){function u(r){var i,n,a;for(n=a=function(r){var i=e[255-t[r]];return 0===r&&(i=0),i}(r),i=0;i<4;i++)a^=n=255&(n<<1|n>>>7);return a^=99}r||function(){e=[],t=[];var i,n,a=1;for(i=0;i<255;i++)e[i]=a,n=128&a,a<<=1,a&=255,128===n&&(a^=27),a^=e[i],t[e[i]]=i;e[255]=e[0],t[0]=0,r=!0}(),n=[],a=[],s=[[],[],[],[]],o=[[],[],[],[]];for(var h=0;h<256;h++){var d=u(h);n[h]=d,a[d]=h,s[0][h]=i(2,d)<<24|d<<16|d<<8|i(3,d),o[0][d]=i(14,h)<<24|i(9,h)<<16|i(13,h)<<8|i(11,h);for(var f=1;f<4;f++)s[f][h]=s[f-1][h]>>>8|s[f-1][h]<<24,o[f][d]=o[f-1][d]>>>8|o[f-1][d]<<24}c=!0}var h=function(e,t){c||u();var r=new Uint32Array(t);r.set(n,512),r.set(a,768);for(var i=0;i<4;i++)r.set(s[i],4096+1024*i>>2),r.set(o[i],8192+1024*i>>2);var h=function(e,t,r){"use asm";var i=0,n=0,a=0,s=0,o=0,c=0,u=0,h=0,d=0,f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0,v=0,_=0,k=0,A=0;var S=new e.Uint32Array(r),E=new e.Uint8Array(r);function P(e,t,r,o,c,u,h,d){e=e|0;t=t|0;r=r|0;o=o|0;c=c|0;u=u|0;h=h|0;d=d|0;var f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0;f=r|0x400,l=r|0x800,p=r|0xc00;c=c^S[(e|0)>>2],u=u^S[(e|4)>>2],h=h^S[(e|8)>>2],d=d^S[(e|12)>>2];for(w=16;(w|0)<=o<<4;w=w+16|0){y=S[(r|c>>22&1020)>>2]^S[(f|u>>14&1020)>>2]^S[(l|h>>6&1020)>>2]^S[(p|d<<2&1020)>>2]^S[(e|w|0)>>2],b=S[(r|u>>22&1020)>>2]^S[(f|h>>14&1020)>>2]^S[(l|d>>6&1020)>>2]^S[(p|c<<2&1020)>>2]^S[(e|w|4)>>2],m=S[(r|h>>22&1020)>>2]^S[(f|d>>14&1020)>>2]^S[(l|c>>6&1020)>>2]^S[(p|u<<2&1020)>>2]^S[(e|w|8)>>2],g=S[(r|d>>22&1020)>>2]^S[(f|c>>14&1020)>>2]^S[(l|u>>6&1020)>>2]^S[(p|h<<2&1020)>>2]^S[(e|w|12)>>2];c=y,u=b,h=m,d=g}i=S[(t|c>>22&1020)>>2]<<24^S[(t|u>>14&1020)>>2]<<16^S[(t|h>>6&1020)>>2]<<8^S[(t|d<<2&1020)>>2]^S[(e|w|0)>>2],n=S[(t|u>>22&1020)>>2]<<24^S[(t|h>>14&1020)>>2]<<16^S[(t|d>>6&1020)>>2]<<8^S[(t|c<<2&1020)>>2]^S[(e|w|4)>>2],a=S[(t|h>>22&1020)>>2]<<24^S[(t|d>>14&1020)>>2]<<16^S[(t|c>>6&1020)>>2]<<8^S[(t|u<<2&1020)>>2]^S[(e|w|8)>>2],s=S[(t|d>>22&1020)>>2]<<24^S[(t|c>>14&1020)>>2]<<16^S[(t|u>>6&1020)>>2]<<8^S[(t|h<<2&1020)>>2]^S[(e|w|12)>>2]}function x(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;P(0x0000,0x0800,0x1000,A,e,t,r,i)}function M(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;var a=0;P(0x0400,0x0c00,0x2000,A,e,i,r,t);a=n,n=s,s=a}function C(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;P(0x0000,0x0800,0x1000,A,o^e,c^t,u^r,h^d);o=i,c=n,u=a,h=s}function K(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;var f=0;P(0x0400,0x0c00,0x2000,A,e,d,r,t);f=n,n=s,s=f;i=i^o,n=n^c,a=a^u,s=s^h;o=e,c=t,u=r,h=d}function D(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;P(0x0000,0x0800,0x1000,A,o,c,u,h);o=i=i^e,c=n=n^t,u=a=a^r,h=s=s^d}function R(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;P(0x0000,0x0800,0x1000,A,o,c,u,h);i=i^e,n=n^t,a=a^r,s=s^d;o=e,c=t,u=r,h=d}function I(e,t,r,d){e=e|0;t=t|0;r=r|0;d=d|0;P(0x0000,0x0800,0x1000,A,o,c,u,h);o=i,c=n,u=a,h=s;i=i^e,n=n^t,a=a^r,s=s^d}function U(e,t,r,o){e=e|0;t=t|0;r=r|0;o=o|0;P(0x0000,0x0800,0x1000,A,d,f,l,p);p=~g&p|g&p+1;l=~m&l|m&l+((p|0)==0);f=~b&f|b&f+((l|0)==0);d=~y&d|y&d+((f|0)==0);i=i^e;n=n^t;a=a^r;s=s^o}function B(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;var n=0,a=0,s=0,d=0,f=0,l=0,p=0,y=0,b=0,m=0;e=e^o,t=t^c,r=r^u,i=i^h;n=w|0,a=v|0,s=_|0,d=k|0;for(;(b|0)<128;b=b+1|0){if(n>>>31){f=f^e,l=l^t,p=p^r,y=y^i}n=n<<1|a>>>31,a=a<<1|s>>>31,s=s<<1|d>>>31,d=d<<1;m=i&1;i=i>>>1|r<<31,r=r>>>1|t<<31,t=t>>>1|e<<31,e=e>>>1;if(m)e=e^0xe1000000}o=f,c=l,u=p,h=y}function T(e){e=e|0;A=e}function z(e,t,r,o){e=e|0;t=t|0;r=r|0;o=o|0;i=e,n=t,a=r,s=o}function q(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;o=e,c=t,u=r,h=i}function O(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;d=e,f=t,l=r,p=i}function F(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;y=e,b=t,m=r,g=i}function N(e,t,r,i){e=e|0;t=t|0;r=r|0;i=i|0;p=~g&p|g&i,l=~m&l|m&r,f=~b&f|b&t,d=~y&d|y&e}function L(e){e=e|0;if(e&15)return-1;E[e|0]=i>>>24,E[e|1]=i>>>16&255,E[e|2]=i>>>8&255,E[e|3]=i&255,E[e|4]=n>>>24,E[e|5]=n>>>16&255,E[e|6]=n>>>8&255,E[e|7]=n&255,E[e|8]=a>>>24,E[e|9]=a>>>16&255,E[e|10]=a>>>8&255,E[e|11]=a&255,E[e|12]=s>>>24,E[e|13]=s>>>16&255,E[e|14]=s>>>8&255,E[e|15]=s&255;return 16}function j(e){e=e|0;if(e&15)return-1;E[e|0]=o>>>24,E[e|1]=o>>>16&255,E[e|2]=o>>>8&255,E[e|3]=o&255,E[e|4]=c>>>24,E[e|5]=c>>>16&255,E[e|6]=c>>>8&255,E[e|7]=c&255,E[e|8]=u>>>24,E[e|9]=u>>>16&255,E[e|10]=u>>>8&255,E[e|11]=u&255,E[e|12]=h>>>24,E[e|13]=h>>>16&255,E[e|14]=h>>>8&255,E[e|15]=h&255;return 16}function W(){x(0,0,0,0);w=i,v=n,_=a,k=s}function H(e,t,r){e=e|0;t=t|0;r=r|0;var o=0;if(t&15)return-1;while((r|0)>=16){V[e&7](E[t|0]<<24|E[t|1]<<16|E[t|2]<<8|E[t|3],E[t|4]<<24|E[t|5]<<16|E[t|6]<<8|E[t|7],E[t|8]<<24|E[t|9]<<16|E[t|10]<<8|E[t|11],E[t|12]<<24|E[t|13]<<16|E[t|14]<<8|E[t|15]);E[t|0]=i>>>24,E[t|1]=i>>>16&255,E[t|2]=i>>>8&255,E[t|3]=i&255,E[t|4]=n>>>24,E[t|5]=n>>>16&255,E[t|6]=n>>>8&255,E[t|7]=n&255,E[t|8]=a>>>24,E[t|9]=a>>>16&255,E[t|10]=a>>>8&255,E[t|11]=a&255,E[t|12]=s>>>24,E[t|13]=s>>>16&255,E[t|14]=s>>>8&255,E[t|15]=s&255;o=o+16|0,t=t+16|0,r=r-16|0}return o|0}function G(e,t,r){e=e|0;t=t|0;r=r|0;var i=0;if(t&15)return-1;while((r|0)>=16){$[e&1](E[t|0]<<24|E[t|1]<<16|E[t|2]<<8|E[t|3],E[t|4]<<24|E[t|5]<<16|E[t|6]<<8|E[t|7],E[t|8]<<24|E[t|9]<<16|E[t|10]<<8|E[t|11],E[t|12]<<24|E[t|13]<<16|E[t|14]<<8|E[t|15]);i=i+16|0,t=t+16|0,r=r-16|0}return i|0}var V=[x,M,C,K,D,R,I,U];var $=[C,B];return{set_rounds:T,set_state:z,set_iv:q,set_nonce:O,set_mask:F,set_counter:N,get_state:L,get_iv:j,gcm_init:W,cipher:H,mac:G}}({Uint8Array,Uint32Array},e,t);return h.set_key=function(e,t,i,a,s,c,u,d,f){var l=r.subarray(0,60),p=r.subarray(256,316);l.set([t,i,a,s,c,u,d,f]);for(var y=e,b=1;y<4*e+28;y++){var m=l[y-1];(y%e==0||8===e&&y%e==4)&&(m=n[m>>>24]<<24^n[m>>>16&255]<<16^n[m>>>8&255]<<8^n[255&m]),y%e==0&&(m=m<<8^m>>>24^b<<24,b=b<<1^(128&b?27:0)),l[y]=l[y-e]^m}for(var g=0;g<y;g+=4)for(var w=0;w<4;w++){m=l[y-(4+g)+(4-w)%4];p[g+w]=g<4||g>=y-4?m:o[0][n[m>>>24]]^o[1][n[m>>>16&255]]^o[2][n[m>>>8&255]]^o[3][n[255&m]]}h.set_rounds(e+5)},h};return h.ENC={ECB:0,CBC:2,CFB:4,OFB:6,CTR:7},h.DEC={ECB:1,CBC:3,CFB:5,OFB:6,CTR:7},h.MAC={CBC:0,GCM:1},h.HEAP_DATA=16384,h}();function ye(e){return e instanceof Uint8Array}function be(e,t){const r=e?e.byteLength:t||65536;if(4095&r||r<=0)throw Error("heap size must be a positive integer and a multiple of 4096");return e=e||new Uint8Array(new ArrayBuffer(r))}function me(e,t,r,i,n){const a=e.length-t,s=a<n?a:n;return e.set(r.subarray(i,i+s),t),s}function ge(...e){const t=e.reduce(((e,t)=>e+t.length),0),r=new Uint8Array(t);let i=0;for(let t=0;t<e.length;t++)r.set(e[t],i),i+=e[t].length;return r}class we extends Error{constructor(...e){super(...e)}}class ve extends Error{constructor(...e){super(...e)}}class _e extends Error{constructor(...e){super(...e)}}const ke=[],Ae=[];class Se{constructor(e,t,r=!0,i,n,a){this.pos=0,this.len=0,this.mode=i,this.pos=0,this.len=0,this.key=e,this.iv=t,this.padding=r,this.acquire_asm(n,a)}acquire_asm(e,t){return void 0!==this.heap&&void 0!==this.asm||(this.heap=e||ke.pop()||be().subarray(pe.HEAP_DATA),this.asm=t||Ae.pop()||new pe(null,this.heap.buffer),this.reset(this.key,this.iv)),{heap:this.heap,asm:this.asm}}release_asm(){void 0!==this.heap&&void 0!==this.asm&&(ke.push(this.heap),Ae.push(this.asm)),this.heap=void 0,this.asm=void 0}reset(e,t){const{asm:r}=this.acquire_asm(),i=e.length;if(16!==i&&24!==i&&32!==i)throw new ve("illegal key size");const n=new DataView(e.buffer,e.byteOffset,e.byteLength);if(r.set_key(i>>2,n.getUint32(0),n.getUint32(4),n.getUint32(8),n.getUint32(12),i>16?n.getUint32(16):0,i>16?n.getUint32(20):0,i>24?n.getUint32(24):0,i>24?n.getUint32(28):0),void 0!==t){if(16!==t.length)throw new ve("illegal iv size");let e=new DataView(t.buffer,t.byteOffset,t.byteLength);r.set_iv(e.getUint32(0),e.getUint32(4),e.getUint32(8),e.getUint32(12))}else r.set_iv(0,0,0,0)}AES_Encrypt_process(e){if(!ye(e))throw new TypeError("data isn't of expected type");let{heap:t,asm:r}=this.acquire_asm(),i=pe.ENC[this.mode],n=pe.HEAP_DATA,a=this.pos,s=this.len,o=0,c=e.length||0,u=0,h=0,d=new Uint8Array(s+c&-16);for(;c>0;)h=me(t,a+s,e,o,c),s+=h,o+=h,c-=h,h=r.cipher(i,n+a,s),h&&d.set(t.subarray(a,a+h),u),u+=h,h<s?(a+=h,s-=h):(a=0,s=0);return this.pos=a,this.len=s,d}AES_Encrypt_finish(){let{heap:e,asm:t}=this.acquire_asm(),r=pe.ENC[this.mode],i=pe.HEAP_DATA,n=this.pos,a=this.len,s=16-a%16,o=a;if(this.hasOwnProperty("padding")){if(this.padding){for(let t=0;t<s;++t)e[n+a+t]=s;a+=s,o=a}else if(a%16)throw new ve("data length must be a multiple of the block size")}else a+=s;const c=new Uint8Array(o);return a&&t.cipher(r,i+n,a),o&&c.set(e.subarray(n,n+o)),this.pos=0,this.len=0,this.release_asm(),c}AES_Decrypt_process(e){if(!ye(e))throw new TypeError("data isn't of expected type");let{heap:t,asm:r}=this.acquire_asm(),i=pe.DEC[this.mode],n=pe.HEAP_DATA,a=this.pos,s=this.len,o=0,c=e.length||0,u=0,h=s+c&-16,d=0,f=0;this.padding&&(d=s+c-h||16,h-=d);const l=new Uint8Array(h);for(;c>0;)f=me(t,a+s,e,o,c),s+=f,o+=f,c-=f,f=r.cipher(i,n+a,s-(c?0:d)),f&&l.set(t.subarray(a,a+f),u),u+=f,f<s?(a+=f,s-=f):(a=0,s=0);return this.pos=a,this.len=s,l}AES_Decrypt_finish(){let{heap:e,asm:t}=this.acquire_asm(),r=pe.DEC[this.mode],i=pe.HEAP_DATA,n=this.pos,a=this.len,s=a;if(a>0){if(a%16){if(this.hasOwnProperty("padding"))throw new ve("data length must be a multiple of the block size");a+=16-a%16}if(t.cipher(r,i+n,a),this.hasOwnProperty("padding")&&this.padding){let t=e[n+s-1];if(t<1||t>16||t>s)throw new _e("bad padding");let r=0;for(let i=t;i>1;i--)r|=t^e[n+s-i];if(r)throw new _e("bad padding");s-=t}}const o=new Uint8Array(s);return s>0&&o.set(e.subarray(n,n+s)),this.pos=0,this.len=0,this.release_asm(),o}}class Ee{static encrypt(e,t,r=!1){return new Ee(t,r).encrypt(e)}static decrypt(e,t,r=!1){return new Ee(t,r).decrypt(e)}constructor(e,t=!1,r){this.aes=r||new Se(e,void 0,t,"ECB")}encrypt(e){return ge(this.aes.AES_Encrypt_process(e),this.aes.AES_Encrypt_finish())}decrypt(e){return ge(this.aes.AES_Decrypt_process(e),this.aes.AES_Decrypt_finish())}}function Pe(e){const t=function(e){const t=new Ee(e);this.encrypt=function(e){return t.encrypt(e)},this.decrypt=function(e){return t.decrypt(e)}};return t.blockSize=t.prototype.blockSize=16,t.keySize=t.prototype.keySize=e/8,t}function xe(e,t,r,i,n,a){const s=[16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756],o=[-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344],c=[520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584],u=[8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928],h=[256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080],d=[536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312],f=[2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154],l=[268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696];let p,y,b,m,g,w,v,_,k,A,S,E,P,x,M=0,C=t.length;const K=32===e.length?3:9;_=3===K?r?[0,32,2]:[30,-2,-2]:r?[0,32,2,62,30,-2,64,96,2]:[94,62,-2,32,64,2,30,-2,-2],r&&(C=(t=function(e,t){const r=8-e.length%8;let i;if(2===t&&r<8)i=32;else if(1===t)i=r;else{if(t||!(r<8)){if(8===r)return e;throw Error("des: invalid padding")}i=0}const n=new Uint8Array(e.length+r);for(let t=0;t<e.length;t++)n[t]=e[t];for(let t=0;t<r;t++)n[e.length+t]=i;return n}(t,a)).length);let D=new Uint8Array(C),R=0;for(1===i&&(k=n[M++]<<24|n[M++]<<16|n[M++]<<8|n[M++],S=n[M++]<<24|n[M++]<<16|n[M++]<<8|n[M++],M=0);M<C;){for(w=t[M++]<<24|t[M++]<<16|t[M++]<<8|t[M++],v=t[M++]<<24|t[M++]<<16|t[M++]<<8|t[M++],1===i&&(r?(w^=k,v^=S):(A=k,E=S,k=w,S=v)),b=252645135&(w>>>4^v),v^=b,w^=b<<4,b=65535&(w>>>16^v),v^=b,w^=b<<16,b=858993459&(v>>>2^w),w^=b,v^=b<<2,b=16711935&(v>>>8^w),w^=b,v^=b<<8,b=1431655765&(w>>>1^v),v^=b,w^=b<<1,w=w<<1|w>>>31,v=v<<1|v>>>31,y=0;y<K;y+=3){for(P=_[y+1],x=_[y+2],p=_[y];p!==P;p+=x)m=v^e[p],g=(v>>>4|v<<28)^e[p+1],b=w,w=v,v=b^(o[m>>>24&63]|u[m>>>16&63]|d[m>>>8&63]|l[63&m]|s[g>>>24&63]|c[g>>>16&63]|h[g>>>8&63]|f[63&g]);b=w,w=v,v=b}w=w>>>1|w<<31,v=v>>>1|v<<31,b=1431655765&(w>>>1^v),v^=b,w^=b<<1,b=16711935&(v>>>8^w),w^=b,v^=b<<8,b=858993459&(v>>>2^w),w^=b,v^=b<<2,b=65535&(w>>>16^v),v^=b,w^=b<<16,b=252645135&(w>>>4^v),v^=b,w^=b<<4,1===i&&(r?(k=w,S=v):(w^=A,v^=E)),D[R++]=w>>>24,D[R++]=w>>>16&255,D[R++]=w>>>8&255,D[R++]=255&w,D[R++]=v>>>24,D[R++]=v>>>16&255,D[R++]=v>>>8&255,D[R++]=255&v}return r||(D=function(e,t){let r,i=null;if(2===t)r=32;else if(1===t)i=e[e.length-1];else{if(t)throw Error("des: invalid padding");r=0}if(!i){for(i=1;e[e.length-i]===r;)i++;i--}return e.subarray(0,e.length-i)}(D,a)),D}function Me(e){const t=[0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964],r=[0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697],i=[0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272],n=[0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144],a=[0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256],s=[0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488],o=[0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746],c=[0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568],u=[0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578],h=[0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488],d=[0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800],f=[0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744],l=[0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128],p=[0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261],y=e.length>8?3:1,b=Array(32*y),m=[0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0];let g,w,v,_=0,k=0;for(let A=0;A<y;A++){let y=e[_++]<<24|e[_++]<<16|e[_++]<<8|e[_++],A=e[_++]<<24|e[_++]<<16|e[_++]<<8|e[_++];v=252645135&(y>>>4^A),A^=v,y^=v<<4,v=65535&(A>>>-16^y),y^=v,A^=v<<-16,v=858993459&(y>>>2^A),A^=v,y^=v<<2,v=65535&(A>>>-16^y),y^=v,A^=v<<-16,v=1431655765&(y>>>1^A),A^=v,y^=v<<1,v=16711935&(A>>>8^y),y^=v,A^=v<<8,v=1431655765&(y>>>1^A),A^=v,y^=v<<1,v=y<<8|A>>>20&240,y=A<<24|A<<8&16711680|A>>>8&65280|A>>>24&240,A=v;for(let e=0;e<16;e++)m[e]?(y=y<<2|y>>>26,A=A<<2|A>>>26):(y=y<<1|y>>>27,A=A<<1|A>>>27),y&=-15,A&=-15,g=t[y>>>28]|r[y>>>24&15]|i[y>>>20&15]|n[y>>>16&15]|a[y>>>12&15]|s[y>>>8&15]|o[y>>>4&15],w=c[A>>>28]|u[A>>>24&15]|h[A>>>20&15]|d[A>>>16&15]|f[A>>>12&15]|l[A>>>8&15]|p[A>>>4&15],v=65535&(w>>>16^g),b[k++]=g^v,b[k++]=w^v<<16}return b}function Ce(e){this.key=[];for(let t=0;t<3;t++)this.key.push(new Uint8Array(e.subarray(8*t,8*t+8)));this.encrypt=function(e){return xe(Me(this.key[2]),xe(Me(this.key[1]),xe(Me(this.key[0]),e,!0,0,null,null),!1,0,null,null),!0,0,null,null)}}function Ke(){this.BlockSize=8,this.KeySize=16,this.setKey=function(e){if(this.masking=Array(16),this.rotate=Array(16),this.reset(),e.length!==this.KeySize)throw Error("CAST-128: keys must be 16 bytes");return this.keySchedule(e),!0},this.reset=function(){for(let e=0;e<16;e++)this.masking[e]=0,this.rotate[e]=0},this.getBlockSize=function(){return this.BlockSize},this.encrypt=function(e){const t=Array(e.length);for(let a=0;a<e.length;a+=8){let s,o=e[a]<<24|e[a+1]<<16|e[a+2]<<8|e[a+3],c=e[a+4]<<24|e[a+5]<<16|e[a+6]<<8|e[a+7];s=c,c=o^r(c,this.masking[0],this.rotate[0]),o=s,s=c,c=o^i(c,this.masking[1],this.rotate[1]),o=s,s=c,c=o^n(c,this.masking[2],this.rotate[2]),o=s,s=c,c=o^r(c,this.masking[3],this.rotate[3]),o=s,s=c,c=o^i(c,this.masking[4],this.rotate[4]),o=s,s=c,c=o^n(c,this.masking[5],this.rotate[5]),o=s,s=c,c=o^r(c,this.masking[6],this.rotate[6]),o=s,s=c,c=o^i(c,this.masking[7],this.rotate[7]),o=s,s=c,c=o^n(c,this.masking[8],this.rotate[8]),o=s,s=c,c=o^r(c,this.masking[9],this.rotate[9]),o=s,s=c,c=o^i(c,this.masking[10],this.rotate[10]),o=s,s=c,c=o^n(c,this.masking[11],this.rotate[11]),o=s,s=c,c=o^r(c,this.masking[12],this.rotate[12]),o=s,s=c,c=o^i(c,this.masking[13],this.rotate[13]),o=s,s=c,c=o^n(c,this.masking[14],this.rotate[14]),o=s,s=c,c=o^r(c,this.masking[15],this.rotate[15]),o=s,t[a]=c>>>24&255,t[a+1]=c>>>16&255,t[a+2]=c>>>8&255,t[a+3]=255&c,t[a+4]=o>>>24&255,t[a+5]=o>>>16&255,t[a+6]=o>>>8&255,t[a+7]=255&o}return t},this.decrypt=function(e){const t=Array(e.length);for(let a=0;a<e.length;a+=8){let s,o=e[a]<<24|e[a+1]<<16|e[a+2]<<8|e[a+3],c=e[a+4]<<24|e[a+5]<<16|e[a+6]<<8|e[a+7];s=c,c=o^r(c,this.masking[15],this.rotate[15]),o=s,s=c,c=o^n(c,this.masking[14],this.rotate[14]),o=s,s=c,c=o^i(c,this.masking[13],this.rotate[13]),o=s,s=c,c=o^r(c,this.masking[12],this.rotate[12]),o=s,s=c,c=o^n(c,this.masking[11],this.rotate[11]),o=s,s=c,c=o^i(c,this.masking[10],this.rotate[10]),o=s,s=c,c=o^r(c,this.masking[9],this.rotate[9]),o=s,s=c,c=o^n(c,this.masking[8],this.rotate[8]),o=s,s=c,c=o^i(c,this.masking[7],this.rotate[7]),o=s,s=c,c=o^r(c,this.masking[6],this.rotate[6]),o=s,s=c,c=o^n(c,this.masking[5],this.rotate[5]),o=s,s=c,c=o^i(c,this.masking[4],this.rotate[4]),o=s,s=c,c=o^r(c,this.masking[3],this.rotate[3]),o=s,s=c,c=o^n(c,this.masking[2],this.rotate[2]),o=s,s=c,c=o^i(c,this.masking[1],this.rotate[1]),o=s,s=c,c=o^r(c,this.masking[0],this.rotate[0]),o=s,t[a]=c>>>24&255,t[a+1]=c>>>16&255,t[a+2]=c>>>8&255,t[a+3]=255&c,t[a+4]=o>>>24&255,t[a+5]=o>>16&255,t[a+6]=o>>8&255,t[a+7]=255&o}return t};const e=[,,,,];e[0]=[,,,,],e[0][0]=[4,0,13,15,12,14,8],e[0][1]=[5,2,16,18,17,19,10],e[0][2]=[6,3,23,22,21,20,9],e[0][3]=[7,1,26,25,27,24,11],e[1]=[,,,,],e[1][0]=[0,6,21,23,20,22,16],e[1][1]=[1,4,0,2,1,3,18],e[1][2]=[2,5,7,6,5,4,17],e[1][3]=[3,7,10,9,11,8,19],e[2]=[,,,,],e[2][0]=[4,0,13,15,12,14,8],e[2][1]=[5,2,16,18,17,19,10],e[2][2]=[6,3,23,22,21,20,9],e[2][3]=[7,1,26,25,27,24,11],e[3]=[,,,,],e[3][0]=[0,6,21,23,20,22,16],e[3][1]=[1,4,0,2,1,3,18],e[3][2]=[2,5,7,6,5,4,17],e[3][3]=[3,7,10,9,11,8,19];const t=[,,,,];function r(e,t,r){const i=t+e,n=i<<r|i>>>32-r;return(a[0][n>>>24]^a[1][n>>>16&255])-a[2][n>>>8&255]+a[3][255&n]}function i(e,t,r){const i=t^e,n=i<<r|i>>>32-r;return a[0][n>>>24]-a[1][n>>>16&255]+a[2][n>>>8&255]^a[3][255&n]}function n(e,t,r){const i=t-e,n=i<<r|i>>>32-r;return(a[0][n>>>24]+a[1][n>>>16&255]^a[2][n>>>8&255])-a[3][255&n]}t[0]=[,,,,],t[0][0]=[24,25,23,22,18],t[0][1]=[26,27,21,20,22],t[0][2]=[28,29,19,18,25],t[0][3]=[30,31,17,16,28],t[1]=[,,,,],t[1][0]=[3,2,12,13,8],t[1][1]=[1,0,14,15,13],t[1][2]=[7,6,8,9,3],t[1][3]=[5,4,10,11,7],t[2]=[,,,,],t[2][0]=[19,18,28,29,25],t[2][1]=[17,16,30,31,28],t[2][2]=[23,22,24,25,18],t[2][3]=[21,20,26,27,22],t[3]=[,,,,],t[3][0]=[8,9,7,6,3],t[3][1]=[10,11,5,4,7],t[3][2]=[12,13,3,2,8],t[3][3]=[14,15,1,0,13],this.keySchedule=function(r){const i=[,,,,,,,,],n=Array(32);let s;for(let e=0;e<4;e++)s=4*e,i[e]=r[s]<<24|r[s+1]<<16|r[s+2]<<8|r[s+3];const o=[6,7,4,5];let c,u=0;for(let r=0;r<2;r++)for(let r=0;r<4;r++){for(s=0;s<4;s++){const t=e[r][s];c=i[t[1]],c^=a[4][i[t[2]>>>2]>>>24-8*(3&t[2])&255],c^=a[5][i[t[3]>>>2]>>>24-8*(3&t[3])&255],c^=a[6][i[t[4]>>>2]>>>24-8*(3&t[4])&255],c^=a[7][i[t[5]>>>2]>>>24-8*(3&t[5])&255],c^=a[o[s]][i[t[6]>>>2]>>>24-8*(3&t[6])&255],i[t[0]]=c}for(s=0;s<4;s++){const e=t[r][s];c=a[4][i[e[0]>>>2]>>>24-8*(3&e[0])&255],c^=a[5][i[e[1]>>>2]>>>24-8*(3&e[1])&255],c^=a[6][i[e[2]>>>2]>>>24-8*(3&e[2])&255],c^=a[7][i[e[3]>>>2]>>>24-8*(3&e[3])&255],c^=a[4+s][i[e[4]>>>2]>>>24-8*(3&e[4])&255],n[u]=c,u++}}for(let e=0;e<16;e++)this.masking[e]=n[e],this.rotate[e]=31&n[16+e]};const a=[,,,,,,,,];a[0]=[821772500,2678128395,1810681135,1059425402,505495343,2617265619,1610868032,3483355465,3218386727,2294005173,3791863952,2563806837,1852023008,365126098,3269944861,584384398,677919599,3229601881,4280515016,2002735330,1136869587,3744433750,2289869850,2731719981,2714362070,879511577,1639411079,575934255,717107937,2857637483,576097850,2731753936,1725645e3,2810460463,5111599,767152862,2543075244,1251459544,1383482551,3052681127,3089939183,3612463449,1878520045,1510570527,2189125840,2431448366,582008916,3163445557,1265446783,1354458274,3529918736,3202711853,3073581712,3912963487,3029263377,1275016285,4249207360,2905708351,3304509486,1442611557,3585198765,2712415662,2731849581,3248163920,2283946226,208555832,2766454743,1331405426,1447828783,3315356441,3108627284,2957404670,2981538698,3339933917,1669711173,286233437,1465092821,1782121619,3862771680,710211251,980974943,1651941557,430374111,2051154026,704238805,4128970897,3144820574,2857402727,948965521,3333752299,2227686284,718756367,2269778983,2731643755,718440111,2857816721,3616097120,1113355533,2478022182,410092745,1811985197,1944238868,2696854588,1415722873,1682284203,1060277122,1998114690,1503841958,82706478,2315155686,1068173648,845149890,2167947013,1768146376,1993038550,3566826697,3390574031,940016341,3355073782,2328040721,904371731,1205506512,4094660742,2816623006,825647681,85914773,2857843460,1249926541,1417871568,3287612,3211054559,3126306446,1975924523,1353700161,2814456437,2438597621,1800716203,722146342,2873936343,1151126914,4160483941,2877670899,458611604,2866078500,3483680063,770352098,2652916994,3367839148,3940505011,3585973912,3809620402,718646636,2504206814,2914927912,3631288169,2857486607,2860018678,575749918,2857478043,718488780,2069512688,3548183469,453416197,1106044049,3032691430,52586708,3378514636,3459808877,3211506028,1785789304,218356169,3571399134,3759170522,1194783844,1523787992,3007827094,1975193539,2555452411,1341901877,3045838698,3776907964,3217423946,2802510864,2889438986,1057244207,1636348243,3761863214,1462225785,2632663439,481089165,718503062,24497053,3332243209,3344655856,3655024856,3960371065,1195698900,2971415156,3710176158,2115785917,4027663609,3525578417,2524296189,2745972565,3564906415,1372086093,1452307862,2780501478,1476592880,3389271281,18495466,2378148571,901398090,891748256,3279637769,3157290713,2560960102,1447622437,4284372637,216884176,2086908623,1879786977,3588903153,2242455666,2938092967,3559082096,2810645491,758861177,1121993112,215018983,642190776,4169236812,1196255959,2081185372,3508738393,941322904,4124243163,2877523539,1848581667,2205260958,3180453958,2589345134,3694731276,550028657,2519456284,3789985535,2973870856,2093648313,443148163,46942275,2734146937,1117713533,1115362972,1523183689,3717140224,1551984063],a[1]=[522195092,4010518363,1776537470,960447360,4267822970,4005896314,1435016340,1929119313,2913464185,1310552629,3579470798,3724818106,2579771631,1594623892,417127293,2715217907,2696228731,1508390405,3994398868,3925858569,3695444102,4019471449,3129199795,3770928635,3520741761,990456497,4187484609,2783367035,21106139,3840405339,631373633,3783325702,532942976,396095098,3548038825,4267192484,2564721535,2011709262,2039648873,620404603,3776170075,2898526339,3612357925,4159332703,1645490516,223693667,1567101217,3362177881,1029951347,3470931136,3570957959,1550265121,119497089,972513919,907948164,3840628539,1613718692,3594177948,465323573,2659255085,654439692,2575596212,2699288441,3127702412,277098644,624404830,4100943870,2717858591,546110314,2403699828,3655377447,1321679412,4236791657,1045293279,4010672264,895050893,2319792268,494945126,1914543101,2777056443,3894764339,2219737618,311263384,4275257268,3458730721,669096869,3584475730,3835122877,3319158237,3949359204,2005142349,2713102337,2228954793,3769984788,569394103,3855636576,1425027204,108000370,2736431443,3671869269,3043122623,1750473702,2211081108,762237499,3972989403,2798899386,3061857628,2943854345,867476300,964413654,1591880597,1594774276,2179821409,552026980,3026064248,3726140315,2283577634,3110545105,2152310760,582474363,1582640421,1383256631,2043843868,3322775884,1217180674,463797851,2763038571,480777679,2718707717,2289164131,3118346187,214354409,200212307,3810608407,3025414197,2674075964,3997296425,1847405948,1342460550,510035443,4080271814,815934613,833030224,1620250387,1945732119,2703661145,3966000196,1388869545,3456054182,2687178561,2092620194,562037615,1356438536,3409922145,3261847397,1688467115,2150901366,631725691,3840332284,549916902,3455104640,394546491,837744717,2114462948,751520235,2221554606,2415360136,3999097078,2063029875,803036379,2702586305,821456707,3019566164,360699898,4018502092,3511869016,3677355358,2402471449,812317050,49299192,2570164949,3259169295,2816732080,3331213574,3101303564,2156015656,3705598920,3546263921,143268808,3200304480,1638124008,3165189453,3341807610,578956953,2193977524,3638120073,2333881532,807278310,658237817,2969561766,1641658566,11683945,3086995007,148645947,1138423386,4158756760,1981396783,2401016740,3699783584,380097457,2680394679,2803068651,3334260286,441530178,4016580796,1375954390,761952171,891809099,2183123478,157052462,3683840763,1592404427,341349109,2438483839,1417898363,644327628,2233032776,2353769706,2201510100,220455161,1815641738,182899273,2995019788,3627381533,3702638151,2890684138,1052606899,588164016,1681439879,4038439418,2405343923,4229449282,167996282,1336969661,1688053129,2739224926,1543734051,1046297529,1138201970,2121126012,115334942,1819067631,1902159161,1941945968,2206692869,1159982321],a[2]=[2381300288,637164959,3952098751,3893414151,1197506559,916448331,2350892612,2932787856,3199334847,4009478890,3905886544,1373570990,2450425862,4037870920,3778841987,2456817877,286293407,124026297,3001279700,1028597854,3115296800,4208886496,2691114635,2188540206,1430237888,1218109995,3572471700,308166588,570424558,2187009021,2455094765,307733056,1310360322,3135275007,1384269543,2388071438,863238079,2359263624,2801553128,3380786597,2831162807,1470087780,1728663345,4072488799,1090516929,532123132,2389430977,1132193179,2578464191,3051079243,1670234342,1434557849,2711078940,1241591150,3314043432,3435360113,3091448339,1812415473,2198440252,267246943,796911696,3619716990,38830015,1526438404,2806502096,374413614,2943401790,1489179520,1603809326,1920779204,168801282,260042626,2358705581,1563175598,2397674057,1356499128,2217211040,514611088,2037363785,2186468373,4022173083,2792511869,2913485016,1173701892,4200428547,3896427269,1334932762,2455136706,602925377,2835607854,1613172210,41346230,2499634548,2457437618,2188827595,41386358,4172255629,1313404830,2405527007,3801973774,2217704835,873260488,2528884354,2478092616,4012915883,2555359016,2006953883,2463913485,575479328,2218240648,2099895446,660001756,2341502190,3038761536,3888151779,3848713377,3286851934,1022894237,1620365795,3449594689,1551255054,15374395,3570825345,4249311020,4151111129,3181912732,310226346,1133119310,530038928,136043402,2476768958,3107506709,2544909567,1036173560,2367337196,1681395281,1758231547,3641649032,306774401,1575354324,3716085866,1990386196,3114533736,2455606671,1262092282,3124342505,2768229131,4210529083,1833535011,423410938,660763973,2187129978,1639812e3,3508421329,3467445492,310289298,272797111,2188552562,2456863912,310240523,677093832,1013118031,901835429,3892695601,1116285435,3036471170,1337354835,243122523,520626091,277223598,4244441197,4194248841,1766575121,594173102,316590669,742362309,3536858622,4176435350,3838792410,2501204839,1229605004,3115755532,1552908988,2312334149,979407927,3959474601,1148277331,176638793,3614686272,2083809052,40992502,1340822838,2731552767,3535757508,3560899520,1354035053,122129617,7215240,2732932949,3118912700,2718203926,2539075635,3609230695,3725561661,1928887091,2882293555,1988674909,2063640240,2491088897,1459647954,4189817080,2302804382,1113892351,2237858528,1927010603,4002880361,1856122846,1594404395,2944033133,3855189863,3474975698,1643104450,4054590833,3431086530,1730235576,2984608721,3084664418,2131803598,4178205752,267404349,1617849798,1616132681,1462223176,736725533,2327058232,551665188,2945899023,1749386277,2575514597,1611482493,674206544,2201269090,3642560800,728599968,1680547377,2620414464,1388111496,453204106,4156223445,1094905244,2754698257,2201108165,3757000246,2704524545,3922940700,3996465027],a[3]=[2645754912,532081118,2814278639,3530793624,1246723035,1689095255,2236679235,4194438865,2116582143,3859789411,157234593,2045505824,4245003587,1687664561,4083425123,605965023,672431967,1336064205,3376611392,214114848,4258466608,3232053071,489488601,605322005,3998028058,264917351,1912574028,756637694,436560991,202637054,135989450,85393697,2152923392,3896401662,2895836408,2145855233,3535335007,115294817,3147733898,1922296357,3464822751,4117858305,1037454084,2725193275,2127856640,1417604070,1148013728,1827919605,642362335,2929772533,909348033,1346338451,3547799649,297154785,1917849091,4161712827,2883604526,3968694238,1469521537,3780077382,3375584256,1763717519,136166297,4290970789,1295325189,2134727907,2798151366,1566297257,3672928234,2677174161,2672173615,965822077,2780786062,289653839,1133871874,3491843819,35685304,1068898316,418943774,672553190,642281022,2346158704,1954014401,3037126780,4079815205,2030668546,3840588673,672283427,1776201016,359975446,3750173538,555499703,2769985273,1324923,69110472,152125443,3176785106,3822147285,1340634837,798073664,1434183902,15393959,216384236,1303690150,3881221631,3711134124,3960975413,106373927,2578434224,1455997841,1801814300,1578393881,1854262133,3188178946,3258078583,2302670060,1539295533,3505142565,3078625975,2372746020,549938159,3278284284,2620926080,181285381,2865321098,3970029511,68876850,488006234,1728155692,2608167508,836007927,2435231793,919367643,3339422534,3655756360,1457871481,40520939,1380155135,797931188,234455205,2255801827,3990488299,397000196,739833055,3077865373,2871719860,4022553888,772369276,390177364,3853951029,557662966,740064294,1640166671,1699928825,3535942136,622006121,3625353122,68743880,1742502,219489963,1664179233,1577743084,1236991741,410585305,2366487942,823226535,1050371084,3426619607,3586839478,212779912,4147118561,1819446015,1911218849,530248558,3486241071,3252585495,2886188651,3410272728,2342195030,20547779,2982490058,3032363469,3631753222,312714466,1870521650,1493008054,3491686656,615382978,4103671749,2534517445,1932181,2196105170,278426614,6369430,3274544417,2913018367,697336853,2143000447,2946413531,701099306,1558357093,2805003052,3500818408,2321334417,3567135975,216290473,3591032198,23009561,1996984579,3735042806,2024298078,3739440863,569400510,2339758983,3016033873,3097871343,3639523026,3844324983,3256173865,795471839,2951117563,4101031090,4091603803,3603732598,971261452,534414648,428311343,3389027175,2844869880,694888862,1227866773,2456207019,3043454569,2614353370,3749578031,3676663836,459166190,4132644070,1794958188,51825668,2252611902,3084671440,2036672799,3436641603,1099053433,2469121526,3059204941,1323291266,2061838604,1018778475,2233344254,2553501054,334295216,3556750194,1065731521,183467730],a[4]=[2127105028,745436345,2601412319,2788391185,3093987327,500390133,1155374404,389092991,150729210,3891597772,3523549952,1935325696,716645080,946045387,2901812282,1774124410,3869435775,4039581901,3293136918,3438657920,948246080,363898952,3867875531,1286266623,1598556673,68334250,630723836,1104211938,1312863373,613332731,2377784574,1101634306,441780740,3129959883,1917973735,2510624549,3238456535,2544211978,3308894634,1299840618,4076074851,1756332096,3977027158,297047435,3790297736,2265573040,3621810518,1311375015,1667687725,47300608,3299642885,2474112369,201668394,1468347890,576830978,3594690761,3742605952,1958042578,1747032512,3558991340,1408974056,3366841779,682131401,1033214337,1545599232,4265137049,206503691,103024618,2855227313,1337551222,2428998917,2963842932,4015366655,3852247746,2796956967,3865723491,3747938335,247794022,3755824572,702416469,2434691994,397379957,851939612,2314769512,218229120,1380406772,62274761,214451378,3170103466,2276210409,3845813286,28563499,446592073,1693330814,3453727194,29968656,3093872512,220656637,2470637031,77972100,1667708854,1358280214,4064765667,2395616961,325977563,4277240721,4220025399,3605526484,3355147721,811859167,3069544926,3962126810,652502677,3075892249,4132761541,3498924215,1217549313,3250244479,3858715919,3053989961,1538642152,2279026266,2875879137,574252750,3324769229,2651358713,1758150215,141295887,2719868960,3515574750,4093007735,4194485238,1082055363,3417560400,395511885,2966884026,179534037,3646028556,3738688086,1092926436,2496269142,257381841,3772900718,1636087230,1477059743,2499234752,3811018894,2675660129,3285975680,90732309,1684827095,1150307763,1723134115,3237045386,1769919919,1240018934,815675215,750138730,2239792499,1234303040,1995484674,138143821,675421338,1145607174,1936608440,3238603024,2345230278,2105974004,323969391,779555213,3004902369,2861610098,1017501463,2098600890,2628620304,2940611490,2682542546,1171473753,3656571411,3687208071,4091869518,393037935,159126506,1662887367,1147106178,391545844,3452332695,1891500680,3016609650,1851642611,546529401,1167818917,3194020571,2848076033,3953471836,575554290,475796850,4134673196,450035699,2351251534,844027695,1080539133,86184846,1554234488,3692025454,1972511363,2018339607,1491841390,1141460869,1061690759,4244549243,2008416118,2351104703,2868147542,1598468138,722020353,1027143159,212344630,1387219594,1725294528,3745187956,2500153616,458938280,4129215917,1828119673,544571780,3503225445,2297937496,1241802790,267843827,2694610800,1397140384,1558801448,3782667683,1806446719,929573330,2234912681,400817706,616011623,4121520928,3603768725,1761550015,1968522284,4053731006,4192232858,4005120285,872482584,3140537016,3894607381,2287405443,1963876937,3663887957,1584857e3,2975024454,1833426440,4025083860],a[5]=[4143615901,749497569,1285769319,3795025788,2514159847,23610292,3974978748,844452780,3214870880,3751928557,2213566365,1676510905,448177848,3730751033,4086298418,2307502392,871450977,3222878141,4110862042,3831651966,2735270553,1310974780,2043402188,1218528103,2736035353,4274605013,2702448458,3936360550,2693061421,162023535,2827510090,687910808,23484817,3784910947,3371371616,779677500,3503626546,3473927188,4157212626,3500679282,4248902014,2466621104,3899384794,1958663117,925738300,1283408968,3669349440,1840910019,137959847,2679828185,1239142320,1315376211,1547541505,1690155329,739140458,3128809933,3933172616,3876308834,905091803,1548541325,4040461708,3095483362,144808038,451078856,676114313,2861728291,2469707347,993665471,373509091,2599041286,4025009006,4170239449,2149739950,3275793571,3749616649,2794760199,1534877388,572371878,2590613551,1753320020,3467782511,1405125690,4270405205,633333386,3026356924,3475123903,632057672,2846462855,1404951397,3882875879,3915906424,195638627,2385783745,3902872553,1233155085,3355999740,2380578713,2702246304,2144565621,3663341248,3894384975,2502479241,4248018925,3094885567,1594115437,572884632,3385116731,767645374,1331858858,1475698373,3793881790,3532746431,1321687957,619889600,1121017241,3440213920,2070816767,2833025776,1933951238,4095615791,890643334,3874130214,859025556,360630002,925594799,1764062180,3920222280,4078305929,979562269,2810700344,4087740022,1949714515,546639971,1165388173,3069891591,1495988560,922170659,1291546247,2107952832,1813327274,3406010024,3306028637,4241950635,153207855,2313154747,1608695416,1150242611,1967526857,721801357,1220138373,3691287617,3356069787,2112743302,3281662835,1111556101,1778980689,250857638,2298507990,673216130,2846488510,3207751581,3562756981,3008625920,3417367384,2198807050,529510932,3547516680,3426503187,2364944742,102533054,2294910856,1617093527,1204784762,3066581635,1019391227,1069574518,1317995090,1691889997,3661132003,510022745,3238594800,1362108837,1817929911,2184153760,805817662,1953603311,3699844737,120799444,2118332377,207536705,2282301548,4120041617,145305846,2508124933,3086745533,3261524335,1877257368,2977164480,3160454186,2503252186,4221677074,759945014,254147243,2767453419,3801518371,629083197,2471014217,907280572,3900796746,940896768,2751021123,2625262786,3161476951,3661752313,3260732218,1425318020,2977912069,1496677566,3988592072,2140652971,3126511541,3069632175,977771578,1392695845,1698528874,1411812681,1369733098,1343739227,3620887944,1142123638,67414216,3102056737,3088749194,1626167401,2546293654,3941374235,697522451,33404913,143560186,2595682037,994885535,1247667115,3859094837,2699155541,3547024625,4114935275,2968073508,3199963069,2732024527,1237921620,951448369,1898488916,1211705605,2790989240,2233243581,3598044975],a[6]=[2246066201,858518887,1714274303,3485882003,713916271,2879113490,3730835617,539548191,36158695,1298409750,419087104,1358007170,749914897,2989680476,1261868530,2995193822,2690628854,3443622377,3780124940,3796824509,2976433025,4259637129,1551479e3,512490819,1296650241,951993153,2436689437,2460458047,144139966,3136204276,310820559,3068840729,643875328,1969602020,1680088954,2185813161,3283332454,672358534,198762408,896343282,276269502,3014846926,84060815,197145886,376173866,3943890818,3813173521,3545068822,1316698879,1598252827,2633424951,1233235075,859989710,2358460855,3503838400,3409603720,1203513385,1193654839,2792018475,2060853022,207403770,1144516871,3068631394,1121114134,177607304,3785736302,326409831,1929119770,2983279095,4183308101,3474579288,3200513878,3228482096,119610148,1170376745,3378393471,3163473169,951863017,3337026068,3135789130,2907618374,1183797387,2015970143,4045674555,2182986399,2952138740,3928772205,384012900,2454997643,10178499,2879818989,2596892536,111523738,2995089006,451689641,3196290696,235406569,1441906262,3890558523,3013735005,4158569349,1644036924,376726067,1006849064,3664579700,2041234796,1021632941,1374734338,2566452058,371631263,4007144233,490221539,206551450,3140638584,1053219195,1853335209,3412429660,3562156231,735133835,1623211703,3104214392,2738312436,4096837757,3366392578,3110964274,3956598718,3196820781,2038037254,3877786376,2339753847,300912036,3766732888,2372630639,1516443558,4200396704,1574567987,4069441456,4122592016,2699739776,146372218,2748961456,2043888151,35287437,2596680554,655490400,1132482787,110692520,1031794116,2188192751,1324057718,1217253157,919197030,686247489,3261139658,1028237775,3135486431,3059715558,2460921700,986174950,2661811465,4062904701,2752986992,3709736643,367056889,1353824391,731860949,1650113154,1778481506,784341916,357075625,3608602432,1074092588,2480052770,3811426202,92751289,877911070,3600361838,1231880047,480201094,3756190983,3094495953,434011822,87971354,363687820,1717726236,1901380172,3926403882,2481662265,400339184,1490350766,2661455099,1389319756,2558787174,784598401,1983468483,30828846,3550527752,2716276238,3841122214,1765724805,1955612312,1277890269,1333098070,1564029816,2704417615,1026694237,3287671188,1260819201,3349086767,1016692350,1582273796,1073413053,1995943182,694588404,1025494639,3323872702,3551898420,4146854327,453260480,1316140391,1435673405,3038941953,3486689407,1622062951,403978347,817677117,950059133,4246079218,3278066075,1486738320,1417279718,481875527,2549965225,3933690356,760697757,1452955855,3897451437,1177426808,1702951038,4085348628,2447005172,1084371187,3516436277,3068336338,1073369276,1027665953,3284188590,1230553676,1368340146,2226246512,267243139,2274220762,4070734279,2497715176,2423353163,2504755875],a[7]=[3793104909,3151888380,2817252029,895778965,2005530807,3871412763,237245952,86829237,296341424,3851759377,3974600970,2475086196,709006108,1994621201,2972577594,937287164,3734691505,168608556,3189338153,2225080640,3139713551,3033610191,3025041904,77524477,185966941,1208824168,2344345178,1721625922,3354191921,1066374631,1927223579,1971335949,2483503697,1551748602,2881383779,2856329572,3003241482,48746954,1398218158,2050065058,313056748,4255789917,393167848,1912293076,940740642,3465845460,3091687853,2522601570,2197016661,1727764327,364383054,492521376,1291706479,3264136376,1474851438,1685747964,2575719748,1619776915,1814040067,970743798,1561002147,2925768690,2123093554,1880132620,3151188041,697884420,2550985770,2607674513,2659114323,110200136,1489731079,997519150,1378877361,3527870668,478029773,2766872923,1022481122,431258168,1112503832,897933369,2635587303,669726182,3383752315,918222264,163866573,3246985393,3776823163,114105080,1903216136,761148244,3571337562,1690750982,3166750252,1037045171,1888456500,2010454850,642736655,616092351,365016990,1185228132,4174898510,1043824992,2023083429,2241598885,3863320456,3279669087,3674716684,108438443,2132974366,830746235,606445527,4173263986,2204105912,1844756978,2532684181,4245352700,2969441100,3796921661,1335562986,4061524517,2720232303,2679424040,634407289,885462008,3294724487,3933892248,2094100220,339117932,4048830727,3202280980,1458155303,2689246273,1022871705,2464987878,3714515309,353796843,2822958815,4256850100,4052777845,551748367,618185374,3778635579,4020649912,1904685140,3069366075,2670879810,3407193292,2954511620,4058283405,2219449317,3135758300,1120655984,3447565834,1474845562,3577699062,550456716,3466908712,2043752612,881257467,869518812,2005220179,938474677,3305539448,3850417126,1315485940,3318264702,226533026,965733244,321539988,1136104718,804158748,573969341,3708209826,937399083,3290727049,2901666755,1461057207,4013193437,4066861423,3242773476,2421326174,1581322155,3028952165,786071460,3900391652,3918438532,1485433313,4023619836,3708277595,3678951060,953673138,1467089153,1930354364,1533292819,2492563023,1346121658,1685000834,1965281866,3765933717,4190206607,2052792609,3515332758,690371149,3125873887,2180283551,2903598061,3933952357,436236910,289419410,14314871,1242357089,2904507907,1616633776,2666382180,585885352,3471299210,2699507360,1432659641,277164553,3354103607,770115018,2303809295,3741942315,3177781868,2853364978,2269453327,3774259834,987383833,1290892879,225909803,1741533526,890078084,1496906255,1111072499,916028167,243534141,1252605537,2204162171,531204876,290011180,3916834213,102027703,237315147,209093447,1486785922,220223953,2758195998,4175039106,82940208,3127791296,2569425252,518464269,1353887104,3941492737,2377294467,3935040926]}function De(e){this.cast5=new Ke,this.cast5.setKey(e),this.encrypt=function(e){return this.cast5.encrypt(e)}}Ce.keySize=Ce.prototype.keySize=24,Ce.blockSize=Ce.prototype.blockSize=8,De.blockSize=De.prototype.blockSize=8,De.keySize=De.prototype.keySize=16;const Re=4294967295;function Ie(e,t){return(e<<t|e>>>32-t)&Re}function Ue(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function Be(e,t,r){e.splice(t,4,255&r,r>>>8&255,r>>>16&255,r>>>24&255)}function Te(e,t){return e>>>8*t&255}function ze(e){this.tf=function(){let e=null,t=null,r=-1,i=[],n=[[],[],[],[]];function a(e){return n[0][Te(e,0)]^n[1][Te(e,1)]^n[2][Te(e,2)]^n[3][Te(e,3)]}function s(e){return n[0][Te(e,3)]^n[1][Te(e,0)]^n[2][Te(e,1)]^n[3][Te(e,2)]}function o(e,t){let r=a(t[0]),n=s(t[1]);t[2]=Ie(t[2]^r+n+i[4*e+8]&Re,31),t[3]=Ie(t[3],1)^r+2*n+i[4*e+9]&Re,r=a(t[2]),n=s(t[3]),t[0]=Ie(t[0]^r+n+i[4*e+10]&Re,31),t[1]=Ie(t[1],1)^r+2*n+i[4*e+11]&Re}function c(e,t){let r=a(t[0]),n=s(t[1]);t[2]=Ie(t[2],1)^r+n+i[4*e+10]&Re,t[3]=Ie(t[3]^r+2*n+i[4*e+11]&Re,31),r=a(t[2]),n=s(t[3]),t[0]=Ie(t[0],1)^r+n+i[4*e+8]&Re,t[1]=Ie(t[1]^r+2*n+i[4*e+9]&Re,31)}return{name:"twofish",blocksize:16,open:function(t){let r,a,s,o,c;e=t;const u=[],h=[],d=[];let f;const l=[];let p,y,b;const m=[[8,1,7,13,6,15,3,2,0,11,5,9,14,12,10,4],[2,8,11,13,15,7,6,14,3,1,9,4,0,10,12,5]],g=[[14,12,11,8,1,2,3,5,15,4,10,6,7,0,9,13],[1,14,2,11,4,12,3,7,6,13,10,5,15,9,0,8]],w=[[11,10,5,14,6,13,9,0,12,8,15,3,2,4,7,1],[4,12,7,5,1,6,9,10,0,14,13,8,2,11,3,15]],v=[[13,7,15,4,1,2,6,14,9,11,3,0,8,5,12,10],[11,9,5,1,12,3,13,14,6,4,7,15,2,0,8,10]],_=[0,8,1,9,2,10,3,11,4,12,5,13,6,14,7,15],k=[0,9,2,11,4,13,6,15,8,1,10,3,12,5,14,7],A=[[],[]],S=[[],[],[],[]];function E(e){return e^e>>2^[0,90,180,238][3&e]}function P(e){return e^e>>1^e>>2^[0,238,180,90][3&e]}function x(e,t){let r,i,n;for(r=0;r<8;r++)i=t>>>24,t=t<<8&Re|e>>>24,e=e<<8&Re,n=i<<1,128&i&&(n^=333),t^=i^n<<16,n^=i>>>1,1&i&&(n^=166),t^=n<<24|n<<8;return t}function M(e,t){const r=t>>4,i=15&t,n=m[e][r^i],a=g[e][_[i]^k[r]];return v[e][_[a]^k[n]]<<4|w[e][n^a]}function C(e,t){let r=Te(e,0),i=Te(e,1),n=Te(e,2),a=Te(e,3);switch(f){case 4:r=A[1][r]^Te(t[3],0),i=A[0][i]^Te(t[3],1),n=A[0][n]^Te(t[3],2),a=A[1][a]^Te(t[3],3);case 3:r=A[1][r]^Te(t[2],0),i=A[1][i]^Te(t[2],1),n=A[0][n]^Te(t[2],2),a=A[0][a]^Te(t[2],3);case 2:r=A[0][A[0][r]^Te(t[1],0)]^Te(t[0],0),i=A[0][A[1][i]^Te(t[1],1)]^Te(t[0],1),n=A[1][A[0][n]^Te(t[1],2)]^Te(t[0],2),a=A[1][A[1][a]^Te(t[1],3)]^Te(t[0],3)}return S[0][r]^S[1][i]^S[2][n]^S[3][a]}for(e=e.slice(0,32),r=e.length;16!==r&&24!==r&&32!==r;)e[r++]=0;for(r=0;r<e.length;r+=4)d[r>>2]=Ue(e,r);for(r=0;r<256;r++)A[0][r]=M(0,r),A[1][r]=M(1,r);for(r=0;r<256;r++)p=A[1][r],y=E(p),b=P(p),S[0][r]=p+(y<<8)+(b<<16)+(b<<24),S[2][r]=y+(b<<8)+(p<<16)+(b<<24),p=A[0][r],y=E(p),b=P(p),S[1][r]=b+(b<<8)+(y<<16)+(p<<24),S[3][r]=y+(p<<8)+(b<<16)+(y<<24);for(f=d.length/2,r=0;r<f;r++)a=d[r+r],u[r]=a,s=d[r+r+1],h[r]=s,l[f-r-1]=x(a,s);for(r=0;r<40;r+=2)a=16843009*r,s=a+16843009,a=C(a,u),s=Ie(C(s,h),8),i[r]=a+s&Re,i[r+1]=Ie(a+2*s,9);for(r=0;r<256;r++)switch(a=s=o=c=r,f){case 4:a=A[1][a]^Te(l[3],0),s=A[0][s]^Te(l[3],1),o=A[0][o]^Te(l[3],2),c=A[1][c]^Te(l[3],3);case 3:a=A[1][a]^Te(l[2],0),s=A[1][s]^Te(l[2],1),o=A[0][o]^Te(l[2],2),c=A[0][c]^Te(l[2],3);case 2:n[0][r]=S[0][A[0][A[0][a]^Te(l[1],0)]^Te(l[0],0)],n[1][r]=S[1][A[0][A[1][s]^Te(l[1],1)]^Te(l[0],1)],n[2][r]=S[2][A[1][A[0][o]^Te(l[1],2)]^Te(l[0],2)],n[3][r]=S[3][A[1][A[1][c]^Te(l[1],3)]^Te(l[0],3)]}},close:function(){i=[],n=[[],[],[],[]]},encrypt:function(e,n){t=e,r=n;const a=[Ue(t,r)^i[0],Ue(t,r+4)^i[1],Ue(t,r+8)^i[2],Ue(t,r+12)^i[3]];for(let e=0;e<8;e++)o(e,a);return Be(t,r,a[2]^i[4]),Be(t,r+4,a[3]^i[5]),Be(t,r+8,a[0]^i[6]),Be(t,r+12,a[1]^i[7]),r+=16,t},decrypt:function(e,n){t=e,r=n;const a=[Ue(t,r)^i[4],Ue(t,r+4)^i[5],Ue(t,r+8)^i[6],Ue(t,r+12)^i[7]];for(let e=7;e>=0;e--)c(e,a);Be(t,r,a[2]^i[0]),Be(t,r+4,a[3]^i[1]),Be(t,r+8,a[0]^i[2]),Be(t,r+12,a[1]^i[3]),r+=16},finalize:function(){return t}}}(),this.tf.open(Array.from(e),0),this.encrypt=function(e){return this.tf.encrypt(Array.from(e),0)}}function qe(){}function Oe(e){this.bf=new qe,this.bf.init(e),this.encrypt=function(e){return this.bf.encryptBlock(e)}}ze.keySize=ze.prototype.keySize=32,ze.blockSize=ze.prototype.blockSize=16,qe.prototype.BLOCKSIZE=8,qe.prototype.SBOXES=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]],qe.prototype.PARRAY=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],qe.prototype.NN=16,qe.prototype._clean=function(e){if(e<0){e=(2147483647&e)+2147483648}return e},qe.prototype._F=function(e){let t;const r=255&e,i=255&(e>>>=8),n=255&(e>>>=8),a=255&(e>>>=8);return t=this.sboxes[0][a]+this.sboxes[1][n],t^=this.sboxes[2][i],t+=this.sboxes[3][r],t},qe.prototype._encryptBlock=function(e){let t,r=e[0],i=e[1];for(t=0;t<this.NN;++t){r^=this.parray[t],i=this._F(r)^i;const e=r;r=i,i=e}r^=this.parray[this.NN+0],i^=this.parray[this.NN+1],e[0]=this._clean(i),e[1]=this._clean(r)},qe.prototype.encryptBlock=function(e){let t;const r=[0,0],i=this.BLOCKSIZE/2;for(t=0;t<this.BLOCKSIZE/2;++t)r[0]=r[0]<<8|255&e[t+0],r[1]=r[1]<<8|255&e[t+i];this._encryptBlock(r);const n=[];for(t=0;t<this.BLOCKSIZE/2;++t)n[t+0]=r[0]>>>24-8*t&255,n[t+i]=r[1]>>>24-8*t&255;return n},qe.prototype._decryptBlock=function(e){let t,r=e[0],i=e[1];for(t=this.NN+1;t>1;--t){r^=this.parray[t],i=this._F(r)^i;const e=r;r=i,i=e}r^=this.parray[1],i^=this.parray[0],e[0]=this._clean(i),e[1]=this._clean(r)},qe.prototype.init=function(e){let t,r=0;for(this.parray=[],t=0;t<this.NN+2;++t){let i=0;for(let t=0;t<4;++t)i=i<<8|255&e[r],++r>=e.length&&(r=0);this.parray[t]=this.PARRAY[t]^i}for(this.sboxes=[],t=0;t<4;++t)for(this.sboxes[t]=[],r=0;r<256;++r)this.sboxes[t][r]=this.SBOXES[t][r];const i=[0,0];for(t=0;t<this.NN+2;t+=2)this._encryptBlock(i),this.parray[t+0]=i[0],this.parray[t+1]=i[1];for(t=0;t<4;++t)for(r=0;r<256;r+=2)this._encryptBlock(i),this.sboxes[t][r+0]=i[0],this.sboxes[t][r+1]=i[1]},Oe.keySize=Oe.prototype.keySize=16,Oe.blockSize=Oe.prototype.blockSize=8;const Fe=Pe(128),Ne=Pe(192),Le=Pe(256);var je=/*#__PURE__*/Object.freeze({__proto__:null,aes128:Fe,aes192:Ne,aes256:Le,des:function(e){this.key=e,this.encrypt=function(e,t){return xe(Me(this.key),e,!0,0,null,t)},this.decrypt=function(e,t){return xe(Me(this.key),e,!1,0,null,t)}},tripledes:Ce,cast5:De,twofish:ze,blowfish:Oe,idea:function(){throw Error("IDEA symmetric-key algorithm not implemented")}}),We=function(e,t,r){"use asm";var i=0,n=0,a=0,s=0,o=0,c=0,u=0;var h=0,d=0,f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0;var v=new e.Uint8Array(r);function _(e,t,r,c,u,h,d,f,l,p,y,b,m,g,w,v){e=e|0;t=t|0;r=r|0;c=c|0;u=u|0;h=h|0;d=d|0;f=f|0;l=l|0;p=p|0;y=y|0;b=b|0;m=m|0;g=g|0;w=w|0;v=v|0;var _=0,k=0,A=0,S=0,E=0,P=0,x=0,M=0,C=0,K=0,D=0,R=0,I=0,U=0,B=0,T=0,z=0,q=0,O=0,F=0,N=0,L=0,j=0,W=0,H=0,G=0,V=0,$=0,Z=0,Y=0,X=0,Q=0,J=0,ee=0,te=0,re=0,ie=0,ne=0,ae=0,se=0,oe=0,ce=0,ue=0,he=0,de=0,fe=0,le=0,pe=0,ye=0,be=0,me=0,ge=0,we=0,ve=0,_e=0,ke=0,Ae=0,Se=0,Ee=0,Pe=0,xe=0,Me=0,Ce=0,Ke=0,De=0,Re=0,Ie=0,Ue=0,Be=0,Te=0,ze=0;_=i;k=n;A=a;S=s;E=o;x=e+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=t+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=r+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=c+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=u+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=h+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=d+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=f+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=l+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=p+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=y+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=b+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=m+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=g+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=w+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;x=v+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=g^l^r^e;M=P<<1|P>>>31;x=M+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=w^p^c^t;C=P<<1|P>>>31;x=C+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=v^y^u^r;K=P<<1|P>>>31;x=K+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=M^b^h^c;D=P<<1|P>>>31;x=D+(_<<5|_>>>27)+E+(k&A|~k&S)+0x5a827999|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=C^m^d^u;R=P<<1|P>>>31;x=R+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=K^g^f^h;I=P<<1|P>>>31;x=I+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=D^w^l^d;U=P<<1|P>>>31;x=U+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=R^v^p^f;B=P<<1|P>>>31;x=B+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=I^M^y^l;T=P<<1|P>>>31;x=T+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=U^C^b^p;z=P<<1|P>>>31;x=z+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=B^K^m^y;q=P<<1|P>>>31;x=q+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=T^D^g^b;O=P<<1|P>>>31;x=O+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=z^R^w^m;F=P<<1|P>>>31;x=F+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=q^I^v^g;N=P<<1|P>>>31;x=N+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=O^U^M^w;L=P<<1|P>>>31;x=L+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=F^B^C^v;j=P<<1|P>>>31;x=j+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=N^T^K^M;W=P<<1|P>>>31;x=W+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=L^z^D^C;H=P<<1|P>>>31;x=H+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=j^q^R^K;G=P<<1|P>>>31;x=G+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=W^O^I^D;V=P<<1|P>>>31;x=V+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=H^F^U^R;$=P<<1|P>>>31;x=$+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=G^N^B^I;Z=P<<1|P>>>31;x=Z+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=V^L^T^U;Y=P<<1|P>>>31;x=Y+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=$^j^z^B;X=P<<1|P>>>31;x=X+(_<<5|_>>>27)+E+(k^A^S)+0x6ed9eba1|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Z^W^q^T;Q=P<<1|P>>>31;x=Q+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Y^H^O^z;J=P<<1|P>>>31;x=J+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=X^G^F^q;ee=P<<1|P>>>31;x=ee+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Q^V^N^O;te=P<<1|P>>>31;x=te+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=J^$^L^F;re=P<<1|P>>>31;x=re+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ee^Z^j^N;ie=P<<1|P>>>31;x=ie+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=te^Y^W^L;ne=P<<1|P>>>31;x=ne+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=re^X^H^j;ae=P<<1|P>>>31;x=ae+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ie^Q^G^W;se=P<<1|P>>>31;x=se+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ne^J^V^H;oe=P<<1|P>>>31;x=oe+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ae^ee^$^G;ce=P<<1|P>>>31;x=ce+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=se^te^Z^V;ue=P<<1|P>>>31;x=ue+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=oe^re^Y^$;he=P<<1|P>>>31;x=he+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ce^ie^X^Z;de=P<<1|P>>>31;x=de+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ue^ne^Q^Y;fe=P<<1|P>>>31;x=fe+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=he^ae^J^X;le=P<<1|P>>>31;x=le+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=de^se^ee^Q;pe=P<<1|P>>>31;x=pe+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=fe^oe^te^J;ye=P<<1|P>>>31;x=ye+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=le^ce^re^ee;be=P<<1|P>>>31;x=be+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=pe^ue^ie^te;me=P<<1|P>>>31;x=me+(_<<5|_>>>27)+E+(k&A|k&S|A&S)-0x70e44324|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ye^he^ne^re;ge=P<<1|P>>>31;x=ge+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=be^de^ae^ie;we=P<<1|P>>>31;x=we+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=me^fe^se^ne;ve=P<<1|P>>>31;x=ve+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ge^le^oe^ae;_e=P<<1|P>>>31;x=_e+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=we^pe^ce^se;ke=P<<1|P>>>31;x=ke+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ve^ye^ue^oe;Ae=P<<1|P>>>31;x=Ae+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=_e^be^he^ce;Se=P<<1|P>>>31;x=Se+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=ke^me^de^ue;Ee=P<<1|P>>>31;x=Ee+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Ae^ge^fe^he;Pe=P<<1|P>>>31;x=Pe+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Se^we^le^de;xe=P<<1|P>>>31;x=xe+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Ee^ve^pe^fe;Me=P<<1|P>>>31;x=Me+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Pe^_e^ye^le;Ce=P<<1|P>>>31;x=Ce+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=xe^ke^be^pe;Ke=P<<1|P>>>31;x=Ke+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Me^Ae^me^ye;De=P<<1|P>>>31;x=De+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Ce^Se^ge^be;Re=P<<1|P>>>31;x=Re+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Ke^Ee^we^me;Ie=P<<1|P>>>31;x=Ie+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=De^Pe^ve^ge;Ue=P<<1|P>>>31;x=Ue+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Re^xe^_e^we;Be=P<<1|P>>>31;x=Be+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Ie^Me^ke^ve;Te=P<<1|P>>>31;x=Te+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;P=Ue^Ce^Ae^_e;ze=P<<1|P>>>31;x=ze+(_<<5|_>>>27)+E+(k^A^S)-0x359d3e2a|0;E=S;S=A;A=k<<30|k>>>2;k=_;_=x;i=i+_|0;n=n+k|0;a=a+A|0;s=s+S|0;o=o+E|0}function k(e){e=e|0;_(v[e|0]<<24|v[e|1]<<16|v[e|2]<<8|v[e|3],v[e|4]<<24|v[e|5]<<16|v[e|6]<<8|v[e|7],v[e|8]<<24|v[e|9]<<16|v[e|10]<<8|v[e|11],v[e|12]<<24|v[e|13]<<16|v[e|14]<<8|v[e|15],v[e|16]<<24|v[e|17]<<16|v[e|18]<<8|v[e|19],v[e|20]<<24|v[e|21]<<16|v[e|22]<<8|v[e|23],v[e|24]<<24|v[e|25]<<16|v[e|26]<<8|v[e|27],v[e|28]<<24|v[e|29]<<16|v[e|30]<<8|v[e|31],v[e|32]<<24|v[e|33]<<16|v[e|34]<<8|v[e|35],v[e|36]<<24|v[e|37]<<16|v[e|38]<<8|v[e|39],v[e|40]<<24|v[e|41]<<16|v[e|42]<<8|v[e|43],v[e|44]<<24|v[e|45]<<16|v[e|46]<<8|v[e|47],v[e|48]<<24|v[e|49]<<16|v[e|50]<<8|v[e|51],v[e|52]<<24|v[e|53]<<16|v[e|54]<<8|v[e|55],v[e|56]<<24|v[e|57]<<16|v[e|58]<<8|v[e|59],v[e|60]<<24|v[e|61]<<16|v[e|62]<<8|v[e|63])}function A(e){e=e|0;v[e|0]=i>>>24;v[e|1]=i>>>16&255;v[e|2]=i>>>8&255;v[e|3]=i&255;v[e|4]=n>>>24;v[e|5]=n>>>16&255;v[e|6]=n>>>8&255;v[e|7]=n&255;v[e|8]=a>>>24;v[e|9]=a>>>16&255;v[e|10]=a>>>8&255;v[e|11]=a&255;v[e|12]=s>>>24;v[e|13]=s>>>16&255;v[e|14]=s>>>8&255;v[e|15]=s&255;v[e|16]=o>>>24;v[e|17]=o>>>16&255;v[e|18]=o>>>8&255;v[e|19]=o&255}function S(){i=0x67452301;n=0xefcdab89;a=0x98badcfe;s=0x10325476;o=0xc3d2e1f0;c=u=0}function E(e,t,r,h,d,f,l){e=e|0;t=t|0;r=r|0;h=h|0;d=d|0;f=f|0;l=l|0;i=e;n=t;a=r;s=h;o=d;c=f;u=l}function P(e,t){e=e|0;t=t|0;var r=0;if(e&63)return-1;while((t|0)>=64){k(e);e=e+64|0;t=t-64|0;r=r+64|0}c=c+r|0;if(c>>>0<r>>>0)u=u+1|0;return r|0}function x(e,t,r){e=e|0;t=t|0;r=r|0;var i=0,n=0;if(e&63)return-1;if(~r)if(r&31)return-1;if((t|0)>=64){i=P(e,t)|0;if((i|0)==-1)return-1;e=e+i|0;t=t-i|0}i=i+t|0;c=c+t|0;if(c>>>0<t>>>0)u=u+1|0;v[e|t]=0x80;if((t|0)>=56){for(n=t+1|0;(n|0)<64;n=n+1|0)v[e|n]=0x00;k(e);t=0;v[e|0]=0}for(n=t+1|0;(n|0)<59;n=n+1|0)v[e|n]=0;v[e|56]=u>>>21&255;v[e|57]=u>>>13&255;v[e|58]=u>>>5&255;v[e|59]=u<<3&255|c>>>29;v[e|60]=c>>>21&255;v[e|61]=c>>>13&255;v[e|62]=c>>>5&255;v[e|63]=c<<3&255;k(e);if(~r)A(r);return i|0}function M(){i=h;n=d;a=f;s=l;o=p;c=64;u=0}function C(){i=y;n=b;a=m;s=g;o=w;c=64;u=0}function K(e,t,r,v,k,A,E,P,x,M,C,K,D,R,I,U){e=e|0;t=t|0;r=r|0;v=v|0;k=k|0;A=A|0;E=E|0;P=P|0;x=x|0;M=M|0;C=C|0;K=K|0;D=D|0;R=R|0;I=I|0;U=U|0;S();_(e^0x5c5c5c5c,t^0x5c5c5c5c,r^0x5c5c5c5c,v^0x5c5c5c5c,k^0x5c5c5c5c,A^0x5c5c5c5c,E^0x5c5c5c5c,P^0x5c5c5c5c,x^0x5c5c5c5c,M^0x5c5c5c5c,C^0x5c5c5c5c,K^0x5c5c5c5c,D^0x5c5c5c5c,R^0x5c5c5c5c,I^0x5c5c5c5c,U^0x5c5c5c5c);y=i;b=n;m=a;g=s;w=o;S();_(e^0x36363636,t^0x36363636,r^0x36363636,v^0x36363636,k^0x36363636,A^0x36363636,E^0x36363636,P^0x36363636,x^0x36363636,M^0x36363636,C^0x36363636,K^0x36363636,D^0x36363636,R^0x36363636,I^0x36363636,U^0x36363636);h=i;d=n;f=a;l=s;p=o;c=64;u=0}function D(e,t,r){e=e|0;t=t|0;r=r|0;var c=0,u=0,h=0,d=0,f=0,l=0;if(e&63)return-1;if(~r)if(r&31)return-1;l=x(e,t,-1)|0;c=i,u=n,h=a,d=s,f=o;C();_(c,u,h,d,f,0x80000000,0,0,0,0,0,0,0,0,0,672);if(~r)A(r);return l|0}function R(e,t,r,c,u){e=e|0;t=t|0;r=r|0;c=c|0;u=u|0;var h=0,d=0,f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0;if(e&63)return-1;if(~u)if(u&31)return-1;v[e+t|0]=r>>>24;v[e+t+1|0]=r>>>16&255;v[e+t+2|0]=r>>>8&255;v[e+t+3|0]=r&255;D(e,t+4|0,-1)|0;h=y=i,d=b=n,f=m=a,l=g=s,p=w=o;c=c-1|0;while((c|0)>0){M();_(y,b,m,g,w,0x80000000,0,0,0,0,0,0,0,0,0,672);y=i,b=n,m=a,g=s,w=o;C();_(y,b,m,g,w,0x80000000,0,0,0,0,0,0,0,0,0,672);y=i,b=n,m=a,g=s,w=o;h=h^i;d=d^n;f=f^a;l=l^s;p=p^o;c=c-1|0}i=h;n=d;a=f;s=l;o=p;if(~u)A(u);return 0}return{reset:S,init:E,process:P,finish:x,hmac_reset:M,hmac_init:K,hmac_finish:D,pbkdf2_generate_block:R}};class He{constructor(){this.pos=0,this.len=0}reset(){const{asm:e}=this.acquire_asm();return this.result=null,this.pos=0,this.len=0,e.reset(),this}process(e){if(null!==this.result)throw new we("state must be reset before processing new data");const{asm:t,heap:r}=this.acquire_asm();let i=this.pos,n=this.len,a=0,s=e.length,o=0;for(;s>0;)o=me(r,i+n,e,a,s),n+=o,a+=o,s-=o,o=t.process(i,n),i+=o,n-=o,n||(i=0);return this.pos=i,this.len=n,this}finish(){if(null!==this.result)throw new we("state must be reset before processing new data");const{asm:e,heap:t}=this.acquire_asm();return e.finish(this.pos,this.len,0),this.result=new Uint8Array(this.HASH_SIZE),this.result.set(t.subarray(0,this.HASH_SIZE)),this.pos=0,this.len=0,this.release_asm(),this}}const Ge=[],Ve=[];class $e extends He{constructor(){super(),this.NAME="sha1",this.BLOCK_SIZE=64,this.HASH_SIZE=20,this.acquire_asm()}acquire_asm(){return void 0!==this.heap&&void 0!==this.asm||(this.heap=Ge.pop()||be(),this.asm=Ve.pop()||We({Uint8Array},null,this.heap.buffer),this.reset()),{heap:this.heap,asm:this.asm}}release_asm(){void 0!==this.heap&&void 0!==this.asm&&(Ge.push(this.heap),Ve.push(this.asm)),this.heap=void 0,this.asm=void 0}static bytes(e){return(new $e).process(e).finish().result}}$e.NAME="sha1",$e.heap_pool=[],$e.asm_pool=[],$e.asm_function=We;const Ze=[],Ye=[];class Xe extends He{constructor(){super(),this.NAME="sha256",this.BLOCK_SIZE=64,this.HASH_SIZE=32,this.acquire_asm()}acquire_asm(){return void 0!==this.heap&&void 0!==this.asm||(this.heap=Ze.pop()||be(),this.asm=Ye.pop()||function(e,t,r){"use asm";var i=0,n=0,a=0,s=0,o=0,c=0,u=0,h=0,d=0,f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0,v=0,_=0,k=0,A=0,S=0,E=0,P=0,x=0,M=0,C=new e.Uint8Array(r);function K(e,t,r,d,f,l,p,y,b,m,g,w,v,_,k,A){e=e|0;t=t|0;r=r|0;d=d|0;f=f|0;l=l|0;p=p|0;y=y|0;b=b|0;m=m|0;g=g|0;w=w|0;v=v|0;_=_|0;k=k|0;A=A|0;var S=0,E=0,P=0,x=0,M=0,C=0,K=0,D=0;S=i;E=n;P=a;x=s;M=o;C=c;K=u;D=h;D=e+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0x428a2f98|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;K=t+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0x71374491|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;C=r+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0xb5c0fbcf|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;M=d+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0xe9b5dba5|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;x=f+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0x3956c25b|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;P=l+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0x59f111f1|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;E=p+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0x923f82a4|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;S=y+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0xab1c5ed5|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;D=b+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0xd807aa98|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;K=m+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0x12835b01|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;C=g+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0x243185be|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;M=w+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0x550c7dc3|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;x=v+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0x72be5d74|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;P=_+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0x80deb1fe|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;E=k+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0x9bdc06a7|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;S=A+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0xc19bf174|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;e=(t>>>7^t>>>18^t>>>3^t<<25^t<<14)+(k>>>17^k>>>19^k>>>10^k<<15^k<<13)+e+m|0;D=e+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0xe49b69c1|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;t=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(A>>>17^A>>>19^A>>>10^A<<15^A<<13)+t+g|0;K=t+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0xefbe4786|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;r=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+r+w|0;C=r+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0x0fc19dc6|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;d=(f>>>7^f>>>18^f>>>3^f<<25^f<<14)+(t>>>17^t>>>19^t>>>10^t<<15^t<<13)+d+v|0;M=d+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0x240ca1cc|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;f=(l>>>7^l>>>18^l>>>3^l<<25^l<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+f+_|0;x=f+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0x2de92c6f|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;l=(p>>>7^p>>>18^p>>>3^p<<25^p<<14)+(d>>>17^d>>>19^d>>>10^d<<15^d<<13)+l+k|0;P=l+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0x4a7484aa|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;p=(y>>>7^y>>>18^y>>>3^y<<25^y<<14)+(f>>>17^f>>>19^f>>>10^f<<15^f<<13)+p+A|0;E=p+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0x5cb0a9dc|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;y=(b>>>7^b>>>18^b>>>3^b<<25^b<<14)+(l>>>17^l>>>19^l>>>10^l<<15^l<<13)+y+e|0;S=y+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0x76f988da|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;b=(m>>>7^m>>>18^m>>>3^m<<25^m<<14)+(p>>>17^p>>>19^p>>>10^p<<15^p<<13)+b+t|0;D=b+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0x983e5152|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;m=(g>>>7^g>>>18^g>>>3^g<<25^g<<14)+(y>>>17^y>>>19^y>>>10^y<<15^y<<13)+m+r|0;K=m+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0xa831c66d|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;g=(w>>>7^w>>>18^w>>>3^w<<25^w<<14)+(b>>>17^b>>>19^b>>>10^b<<15^b<<13)+g+d|0;C=g+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0xb00327c8|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;w=(v>>>7^v>>>18^v>>>3^v<<25^v<<14)+(m>>>17^m>>>19^m>>>10^m<<15^m<<13)+w+f|0;M=w+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0xbf597fc7|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;v=(_>>>7^_>>>18^_>>>3^_<<25^_<<14)+(g>>>17^g>>>19^g>>>10^g<<15^g<<13)+v+l|0;x=v+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0xc6e00bf3|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;_=(k>>>7^k>>>18^k>>>3^k<<25^k<<14)+(w>>>17^w>>>19^w>>>10^w<<15^w<<13)+_+p|0;P=_+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0xd5a79147|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;k=(A>>>7^A>>>18^A>>>3^A<<25^A<<14)+(v>>>17^v>>>19^v>>>10^v<<15^v<<13)+k+y|0;E=k+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0x06ca6351|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;A=(e>>>7^e>>>18^e>>>3^e<<25^e<<14)+(_>>>17^_>>>19^_>>>10^_<<15^_<<13)+A+b|0;S=A+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0x14292967|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;e=(t>>>7^t>>>18^t>>>3^t<<25^t<<14)+(k>>>17^k>>>19^k>>>10^k<<15^k<<13)+e+m|0;D=e+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0x27b70a85|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;t=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(A>>>17^A>>>19^A>>>10^A<<15^A<<13)+t+g|0;K=t+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0x2e1b2138|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;r=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+r+w|0;C=r+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0x4d2c6dfc|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;d=(f>>>7^f>>>18^f>>>3^f<<25^f<<14)+(t>>>17^t>>>19^t>>>10^t<<15^t<<13)+d+v|0;M=d+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0x53380d13|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;f=(l>>>7^l>>>18^l>>>3^l<<25^l<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+f+_|0;x=f+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0x650a7354|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;l=(p>>>7^p>>>18^p>>>3^p<<25^p<<14)+(d>>>17^d>>>19^d>>>10^d<<15^d<<13)+l+k|0;P=l+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0x766a0abb|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;p=(y>>>7^y>>>18^y>>>3^y<<25^y<<14)+(f>>>17^f>>>19^f>>>10^f<<15^f<<13)+p+A|0;E=p+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0x81c2c92e|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;y=(b>>>7^b>>>18^b>>>3^b<<25^b<<14)+(l>>>17^l>>>19^l>>>10^l<<15^l<<13)+y+e|0;S=y+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0x92722c85|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;b=(m>>>7^m>>>18^m>>>3^m<<25^m<<14)+(p>>>17^p>>>19^p>>>10^p<<15^p<<13)+b+t|0;D=b+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0xa2bfe8a1|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;m=(g>>>7^g>>>18^g>>>3^g<<25^g<<14)+(y>>>17^y>>>19^y>>>10^y<<15^y<<13)+m+r|0;K=m+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0xa81a664b|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;g=(w>>>7^w>>>18^w>>>3^w<<25^w<<14)+(b>>>17^b>>>19^b>>>10^b<<15^b<<13)+g+d|0;C=g+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0xc24b8b70|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;w=(v>>>7^v>>>18^v>>>3^v<<25^v<<14)+(m>>>17^m>>>19^m>>>10^m<<15^m<<13)+w+f|0;M=w+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0xc76c51a3|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;v=(_>>>7^_>>>18^_>>>3^_<<25^_<<14)+(g>>>17^g>>>19^g>>>10^g<<15^g<<13)+v+l|0;x=v+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0xd192e819|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;_=(k>>>7^k>>>18^k>>>3^k<<25^k<<14)+(w>>>17^w>>>19^w>>>10^w<<15^w<<13)+_+p|0;P=_+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0xd6990624|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;k=(A>>>7^A>>>18^A>>>3^A<<25^A<<14)+(v>>>17^v>>>19^v>>>10^v<<15^v<<13)+k+y|0;E=k+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0xf40e3585|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;A=(e>>>7^e>>>18^e>>>3^e<<25^e<<14)+(_>>>17^_>>>19^_>>>10^_<<15^_<<13)+A+b|0;S=A+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0x106aa070|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;e=(t>>>7^t>>>18^t>>>3^t<<25^t<<14)+(k>>>17^k>>>19^k>>>10^k<<15^k<<13)+e+m|0;D=e+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0x19a4c116|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;t=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(A>>>17^A>>>19^A>>>10^A<<15^A<<13)+t+g|0;K=t+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0x1e376c08|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;r=(d>>>7^d>>>18^d>>>3^d<<25^d<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+r+w|0;C=r+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0x2748774c|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;d=(f>>>7^f>>>18^f>>>3^f<<25^f<<14)+(t>>>17^t>>>19^t>>>10^t<<15^t<<13)+d+v|0;M=d+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0x34b0bcb5|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;f=(l>>>7^l>>>18^l>>>3^l<<25^l<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+f+_|0;x=f+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0x391c0cb3|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;l=(p>>>7^p>>>18^p>>>3^p<<25^p<<14)+(d>>>17^d>>>19^d>>>10^d<<15^d<<13)+l+k|0;P=l+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0x4ed8aa4a|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;p=(y>>>7^y>>>18^y>>>3^y<<25^y<<14)+(f>>>17^f>>>19^f>>>10^f<<15^f<<13)+p+A|0;E=p+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0x5b9cca4f|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;y=(b>>>7^b>>>18^b>>>3^b<<25^b<<14)+(l>>>17^l>>>19^l>>>10^l<<15^l<<13)+y+e|0;S=y+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0x682e6ff3|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;b=(m>>>7^m>>>18^m>>>3^m<<25^m<<14)+(p>>>17^p>>>19^p>>>10^p<<15^p<<13)+b+t|0;D=b+D+(M>>>6^M>>>11^M>>>25^M<<26^M<<21^M<<7)+(K^M&(C^K))+0x748f82ee|0;x=x+D|0;D=D+(S&E^P&(S^E))+(S>>>2^S>>>13^S>>>22^S<<30^S<<19^S<<10)|0;m=(g>>>7^g>>>18^g>>>3^g<<25^g<<14)+(y>>>17^y>>>19^y>>>10^y<<15^y<<13)+m+r|0;K=m+K+(x>>>6^x>>>11^x>>>25^x<<26^x<<21^x<<7)+(C^x&(M^C))+0x78a5636f|0;P=P+K|0;K=K+(D&S^E&(D^S))+(D>>>2^D>>>13^D>>>22^D<<30^D<<19^D<<10)|0;g=(w>>>7^w>>>18^w>>>3^w<<25^w<<14)+(b>>>17^b>>>19^b>>>10^b<<15^b<<13)+g+d|0;C=g+C+(P>>>6^P>>>11^P>>>25^P<<26^P<<21^P<<7)+(M^P&(x^M))+0x84c87814|0;E=E+C|0;C=C+(K&D^S&(K^D))+(K>>>2^K>>>13^K>>>22^K<<30^K<<19^K<<10)|0;w=(v>>>7^v>>>18^v>>>3^v<<25^v<<14)+(m>>>17^m>>>19^m>>>10^m<<15^m<<13)+w+f|0;M=w+M+(E>>>6^E>>>11^E>>>25^E<<26^E<<21^E<<7)+(x^E&(P^x))+0x8cc70208|0;S=S+M|0;M=M+(C&K^D&(C^K))+(C>>>2^C>>>13^C>>>22^C<<30^C<<19^C<<10)|0;v=(_>>>7^_>>>18^_>>>3^_<<25^_<<14)+(g>>>17^g>>>19^g>>>10^g<<15^g<<13)+v+l|0;x=v+x+(S>>>6^S>>>11^S>>>25^S<<26^S<<21^S<<7)+(P^S&(E^P))+0x90befffa|0;D=D+x|0;x=x+(M&C^K&(M^C))+(M>>>2^M>>>13^M>>>22^M<<30^M<<19^M<<10)|0;_=(k>>>7^k>>>18^k>>>3^k<<25^k<<14)+(w>>>17^w>>>19^w>>>10^w<<15^w<<13)+_+p|0;P=_+P+(D>>>6^D>>>11^D>>>25^D<<26^D<<21^D<<7)+(E^D&(S^E))+0xa4506ceb|0;K=K+P|0;P=P+(x&M^C&(x^M))+(x>>>2^x>>>13^x>>>22^x<<30^x<<19^x<<10)|0;k=(A>>>7^A>>>18^A>>>3^A<<25^A<<14)+(v>>>17^v>>>19^v>>>10^v<<15^v<<13)+k+y|0;E=k+E+(K>>>6^K>>>11^K>>>25^K<<26^K<<21^K<<7)+(S^K&(D^S))+0xbef9a3f7|0;C=C+E|0;E=E+(P&x^M&(P^x))+(P>>>2^P>>>13^P>>>22^P<<30^P<<19^P<<10)|0;A=(e>>>7^e>>>18^e>>>3^e<<25^e<<14)+(_>>>17^_>>>19^_>>>10^_<<15^_<<13)+A+b|0;S=A+S+(C>>>6^C>>>11^C>>>25^C<<26^C<<21^C<<7)+(D^C&(K^D))+0xc67178f2|0;M=M+S|0;S=S+(E&P^x&(E^P))+(E>>>2^E>>>13^E>>>22^E<<30^E<<19^E<<10)|0;i=i+S|0;n=n+E|0;a=a+P|0;s=s+x|0;o=o+M|0;c=c+C|0;u=u+K|0;h=h+D|0}function D(e){e=e|0;K(C[e|0]<<24|C[e|1]<<16|C[e|2]<<8|C[e|3],C[e|4]<<24|C[e|5]<<16|C[e|6]<<8|C[e|7],C[e|8]<<24|C[e|9]<<16|C[e|10]<<8|C[e|11],C[e|12]<<24|C[e|13]<<16|C[e|14]<<8|C[e|15],C[e|16]<<24|C[e|17]<<16|C[e|18]<<8|C[e|19],C[e|20]<<24|C[e|21]<<16|C[e|22]<<8|C[e|23],C[e|24]<<24|C[e|25]<<16|C[e|26]<<8|C[e|27],C[e|28]<<24|C[e|29]<<16|C[e|30]<<8|C[e|31],C[e|32]<<24|C[e|33]<<16|C[e|34]<<8|C[e|35],C[e|36]<<24|C[e|37]<<16|C[e|38]<<8|C[e|39],C[e|40]<<24|C[e|41]<<16|C[e|42]<<8|C[e|43],C[e|44]<<24|C[e|45]<<16|C[e|46]<<8|C[e|47],C[e|48]<<24|C[e|49]<<16|C[e|50]<<8|C[e|51],C[e|52]<<24|C[e|53]<<16|C[e|54]<<8|C[e|55],C[e|56]<<24|C[e|57]<<16|C[e|58]<<8|C[e|59],C[e|60]<<24|C[e|61]<<16|C[e|62]<<8|C[e|63])}function R(e){e=e|0;C[e|0]=i>>>24;C[e|1]=i>>>16&255;C[e|2]=i>>>8&255;C[e|3]=i&255;C[e|4]=n>>>24;C[e|5]=n>>>16&255;C[e|6]=n>>>8&255;C[e|7]=n&255;C[e|8]=a>>>24;C[e|9]=a>>>16&255;C[e|10]=a>>>8&255;C[e|11]=a&255;C[e|12]=s>>>24;C[e|13]=s>>>16&255;C[e|14]=s>>>8&255;C[e|15]=s&255;C[e|16]=o>>>24;C[e|17]=o>>>16&255;C[e|18]=o>>>8&255;C[e|19]=o&255;C[e|20]=c>>>24;C[e|21]=c>>>16&255;C[e|22]=c>>>8&255;C[e|23]=c&255;C[e|24]=u>>>24;C[e|25]=u>>>16&255;C[e|26]=u>>>8&255;C[e|27]=u&255;C[e|28]=h>>>24;C[e|29]=h>>>16&255;C[e|30]=h>>>8&255;C[e|31]=h&255}function I(){i=0x6a09e667;n=0xbb67ae85;a=0x3c6ef372;s=0xa54ff53a;o=0x510e527f;c=0x9b05688c;u=0x1f83d9ab;h=0x5be0cd19;d=f=0}function U(e,t,r,l,p,y,b,m,g,w){e=e|0;t=t|0;r=r|0;l=l|0;p=p|0;y=y|0;b=b|0;m=m|0;g=g|0;w=w|0;i=e;n=t;a=r;s=l;o=p;c=y;u=b;h=m;d=g;f=w}function B(e,t){e=e|0;t=t|0;var r=0;if(e&63)return-1;while((t|0)>=64){D(e);e=e+64|0;t=t-64|0;r=r+64|0}d=d+r|0;if(d>>>0<r>>>0)f=f+1|0;return r|0}function T(e,t,r){e=e|0;t=t|0;r=r|0;var i=0,n=0;if(e&63)return-1;if(~r)if(r&31)return-1;if((t|0)>=64){i=B(e,t)|0;if((i|0)==-1)return-1;e=e+i|0;t=t-i|0}i=i+t|0;d=d+t|0;if(d>>>0<t>>>0)f=f+1|0;C[e|t]=0x80;if((t|0)>=56){for(n=t+1|0;(n|0)<64;n=n+1|0)C[e|n]=0x00;D(e);t=0;C[e|0]=0}for(n=t+1|0;(n|0)<59;n=n+1|0)C[e|n]=0;C[e|56]=f>>>21&255;C[e|57]=f>>>13&255;C[e|58]=f>>>5&255;C[e|59]=f<<3&255|d>>>29;C[e|60]=d>>>21&255;C[e|61]=d>>>13&255;C[e|62]=d>>>5&255;C[e|63]=d<<3&255;D(e);if(~r)R(r);return i|0}function z(){i=l;n=p;a=y;s=b;o=m;c=g;u=w;h=v;d=64;f=0}function q(){i=_;n=k;a=A;s=S;o=E;c=P;u=x;h=M;d=64;f=0}function O(e,t,r,C,D,R,U,B,T,z,q,O,F,N,L,j){e=e|0;t=t|0;r=r|0;C=C|0;D=D|0;R=R|0;U=U|0;B=B|0;T=T|0;z=z|0;q=q|0;O=O|0;F=F|0;N=N|0;L=L|0;j=j|0;I();K(e^0x5c5c5c5c,t^0x5c5c5c5c,r^0x5c5c5c5c,C^0x5c5c5c5c,D^0x5c5c5c5c,R^0x5c5c5c5c,U^0x5c5c5c5c,B^0x5c5c5c5c,T^0x5c5c5c5c,z^0x5c5c5c5c,q^0x5c5c5c5c,O^0x5c5c5c5c,F^0x5c5c5c5c,N^0x5c5c5c5c,L^0x5c5c5c5c,j^0x5c5c5c5c);_=i;k=n;A=a;S=s;E=o;P=c;x=u;M=h;I();K(e^0x36363636,t^0x36363636,r^0x36363636,C^0x36363636,D^0x36363636,R^0x36363636,U^0x36363636,B^0x36363636,T^0x36363636,z^0x36363636,q^0x36363636,O^0x36363636,F^0x36363636,N^0x36363636,L^0x36363636,j^0x36363636);l=i;p=n;y=a;b=s;m=o;g=c;w=u;v=h;d=64;f=0}function F(e,t,r){e=e|0;t=t|0;r=r|0;var d=0,f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0;if(e&63)return-1;if(~r)if(r&31)return-1;w=T(e,t,-1)|0;d=i,f=n,l=a,p=s,y=o,b=c,m=u,g=h;q();K(d,f,l,p,y,b,m,g,0x80000000,0,0,0,0,0,0,768);if(~r)R(r);return w|0}function N(e,t,r,d,f){e=e|0;t=t|0;r=r|0;d=d|0;f=f|0;var l=0,p=0,y=0,b=0,m=0,g=0,w=0,v=0,_=0,k=0,A=0,S=0,E=0,P=0,x=0,M=0;if(e&63)return-1;if(~f)if(f&31)return-1;C[e+t|0]=r>>>24;C[e+t+1|0]=r>>>16&255;C[e+t+2|0]=r>>>8&255;C[e+t+3|0]=r&255;F(e,t+4|0,-1)|0;l=_=i,p=k=n,y=A=a,b=S=s,m=E=o,g=P=c,w=x=u,v=M=h;d=d-1|0;while((d|0)>0){z();K(_,k,A,S,E,P,x,M,0x80000000,0,0,0,0,0,0,768);_=i,k=n,A=a,S=s,E=o,P=c,x=u,M=h;q();K(_,k,A,S,E,P,x,M,0x80000000,0,0,0,0,0,0,768);_=i,k=n,A=a,S=s,E=o,P=c,x=u,M=h;l=l^i;p=p^n;y=y^a;b=b^s;m=m^o;g=g^c;w=w^u;v=v^h;d=d-1|0}i=l;n=p;a=y;s=b;o=m;c=g;u=w;h=v;if(~f)R(f);return 0}return{reset:I,init:U,process:B,finish:T,hmac_reset:z,hmac_init:O,hmac_finish:F,pbkdf2_generate_block:N}}({Uint8Array},null,this.heap.buffer),this.reset()),{heap:this.heap,asm:this.asm}}release_asm(){void 0!==this.heap&&void 0!==this.asm&&(Ze.push(this.heap),Ye.push(this.asm)),this.heap=void 0,this.asm=void 0}static bytes(e){return(new Xe).process(e).finish().result}}Xe.NAME="sha256";var Qe=Je;function Je(e,t){if(!e)throw Error(t||"Assertion failed")}Je.equal=function(e,t,r){if(e!=t)throw Error(r||"Assertion failed: "+e+" != "+t)};var et=void 0!==t?t:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function tt(e,t){return e(t={exports:{}},t.exports),t.exports}var rt=tt((function(e){e.exports="function"==typeof Object.create?function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}));function it(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function nt(e){return 1===e.length?"0"+e:e}function at(e){return 7===e.length?"0"+e:6===e.length?"00"+e:5===e.length?"000"+e:4===e.length?"0000"+e:3===e.length?"00000"+e:2===e.length?"000000"+e:1===e.length?"0000000"+e:e}var st={inherits:rt,toArray:function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if("string"==typeof e)if(t){if("hex"===t)for((e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e),i=0;i<e.length;i+=2)r.push(parseInt(e[i]+e[i+1],16))}else for(var i=0;i<e.length;i++){var n=e.charCodeAt(i),a=n>>8,s=255&n;a?r.push(a,s):r.push(s)}else for(i=0;i<e.length;i++)r[i]=0|e[i];return r},toHex:function(e){for(var t="",r=0;r<e.length;r++)t+=nt(e[r].toString(16));return t},htonl:it,toHex32:function(e,t){for(var r="",i=0;i<e.length;i++){var n=e[i];"little"===t&&(n=it(n)),r+=at(n.toString(16))}return r},zero2:nt,zero8:at,join32:function(e,t,r,i){var n=r-t;Qe(n%4==0);for(var a=Array(n/4),s=0,o=t;s<a.length;s++,o+=4){var c;c="big"===i?e[o]<<24|e[o+1]<<16|e[o+2]<<8|e[o+3]:e[o+3]<<24|e[o+2]<<16|e[o+1]<<8|e[o],a[s]=c>>>0}return a},split32:function(e,t){for(var r=Array(4*e.length),i=0,n=0;i<e.length;i++,n+=4){var a=e[i];"big"===t?(r[n]=a>>>24,r[n+1]=a>>>16&255,r[n+2]=a>>>8&255,r[n+3]=255&a):(r[n+3]=a>>>24,r[n+2]=a>>>16&255,r[n+1]=a>>>8&255,r[n]=255&a)}return r},rotr32:function(e,t){return e>>>t|e<<32-t},rotl32:function(e,t){return e<<t|e>>>32-t},sum32:function(e,t){return e+t>>>0},sum32_3:function(e,t,r){return e+t+r>>>0},sum32_4:function(e,t,r,i){return e+t+r+i>>>0},sum32_5:function(e,t,r,i,n){return e+t+r+i+n>>>0},sum64:function(e,t,r,i){var n=e[t],a=i+e[t+1]>>>0,s=(a<i?1:0)+r+n;e[t]=s>>>0,e[t+1]=a},sum64_hi:function(e,t,r,i){return(t+i>>>0<t?1:0)+e+r>>>0},sum64_lo:function(e,t,r,i){return t+i>>>0},sum64_4_hi:function(e,t,r,i,n,a,s,o){var c=0,u=t;return c+=(u=u+i>>>0)<t?1:0,c+=(u=u+a>>>0)<a?1:0,e+r+n+s+(c+=(u=u+o>>>0)<o?1:0)>>>0},sum64_4_lo:function(e,t,r,i,n,a,s,o){return t+i+a+o>>>0},sum64_5_hi:function(e,t,r,i,n,a,s,o,c,u){var h=0,d=t;return h+=(d=d+i>>>0)<t?1:0,h+=(d=d+a>>>0)<a?1:0,h+=(d=d+o>>>0)<o?1:0,e+r+n+s+c+(h+=(d=d+u>>>0)<u?1:0)>>>0},sum64_5_lo:function(e,t,r,i,n,a,s,o,c,u){return t+i+a+o+u>>>0},rotr64_hi:function(e,t,r){return(t<<32-r|e>>>r)>>>0},rotr64_lo:function(e,t,r){return(e<<32-r|t>>>r)>>>0},shr64_hi:function(e,t,r){return e>>>r},shr64_lo:function(e,t,r){return(e<<32-r|t>>>r)>>>0}};function ot(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}var ct=ot;ot.prototype.update=function(e,t){if(e=st.toArray(e,t),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var r=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-r,e.length),0===this.pending.length&&(this.pending=null),e=st.join32(e,0,e.length-r,this.endian);for(var i=0;i<e.length;i+=this._delta32)this._update(e,i,i+this._delta32)}return this},ot.prototype.digest=function(e){return this.update(this._pad()),Qe(null===this.pending),this._digest(e)},ot.prototype._pad=function(){var e=this.pendingTotal,t=this._delta8,r=t-(e+this.padLength)%t,i=Array(r+this.padLength);i[0]=128;for(var n=1;n<r;n++)i[n]=0;if(e<<=3,"big"===this.endian){for(var a=8;a<this.padLength;a++)i[n++]=0;i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=e>>>24&255,i[n++]=e>>>16&255,i[n++]=e>>>8&255,i[n++]=255&e}else for(i[n++]=255&e,i[n++]=e>>>8&255,i[n++]=e>>>16&255,i[n++]=e>>>24&255,i[n++]=0,i[n++]=0,i[n++]=0,i[n++]=0,a=8;a<this.padLength;a++)i[n++]=0;return i};var ut={BlockHash:ct},ht=st.rotr32;function dt(e,t,r){return e&t^~e&r}function ft(e,t,r){return e&t^e&r^t&r}function lt(e,t,r){return e^t^r}var pt={ft_1:function(e,t,r,i){return 0===e?dt(t,r,i):1===e||3===e?lt(t,r,i):2===e?ft(t,r,i):void 0},ch32:dt,maj32:ft,p32:lt,s0_256:function(e){return ht(e,2)^ht(e,13)^ht(e,22)},s1_256:function(e){return ht(e,6)^ht(e,11)^ht(e,25)},g0_256:function(e){return ht(e,7)^ht(e,18)^e>>>3},g1_256:function(e){return ht(e,17)^ht(e,19)^e>>>10}},yt=st.sum32,bt=st.sum32_4,mt=st.sum32_5,gt=pt.ch32,wt=pt.maj32,vt=pt.s0_256,_t=pt.s1_256,kt=pt.g0_256,At=pt.g1_256,St=ut.BlockHash,Et=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function Pt(){if(!(this instanceof Pt))return new Pt;St.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=Et,this.W=Array(64)}st.inherits(Pt,St);var xt=Pt;function Mt(){if(!(this instanceof Mt))return new Mt;xt.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}Pt.blockSize=512,Pt.outSize=256,Pt.hmacStrength=192,Pt.padLength=64,Pt.prototype._update=function(e,t){for(var r=this.W,i=0;i<16;i++)r[i]=e[t+i];for(;i<r.length;i++)r[i]=bt(At(r[i-2]),r[i-7],kt(r[i-15]),r[i-16]);var n=this.h[0],a=this.h[1],s=this.h[2],o=this.h[3],c=this.h[4],u=this.h[5],h=this.h[6],d=this.h[7];for(Qe(this.k.length===r.length),i=0;i<r.length;i++){var f=mt(d,_t(c),gt(c,u,h),this.k[i],r[i]),l=yt(vt(n),wt(n,a,s));d=h,h=u,u=c,c=yt(o,f),o=s,s=a,a=n,n=yt(f,l)}this.h[0]=yt(this.h[0],n),this.h[1]=yt(this.h[1],a),this.h[2]=yt(this.h[2],s),this.h[3]=yt(this.h[3],o),this.h[4]=yt(this.h[4],c),this.h[5]=yt(this.h[5],u),this.h[6]=yt(this.h[6],h),this.h[7]=yt(this.h[7],d)},Pt.prototype._digest=function(e){return"hex"===e?st.toHex32(this.h,"big"):st.split32(this.h,"big")},st.inherits(Mt,xt);var Ct=Mt;Mt.blockSize=512,Mt.outSize=224,Mt.hmacStrength=192,Mt.padLength=64,Mt.prototype._digest=function(e){return"hex"===e?st.toHex32(this.h.slice(0,7),"big"):st.split32(this.h.slice(0,7),"big")};var Kt=st.rotr64_hi,Dt=st.rotr64_lo,Rt=st.shr64_hi,It=st.shr64_lo,Ut=st.sum64,Bt=st.sum64_hi,Tt=st.sum64_lo,zt=st.sum64_4_hi,qt=st.sum64_4_lo,Ot=st.sum64_5_hi,Ft=st.sum64_5_lo,Nt=ut.BlockHash,Lt=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function jt(){if(!(this instanceof jt))return new jt;Nt.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=Lt,this.W=Array(160)}st.inherits(jt,Nt);var Wt=jt;function Ht(e,t,r,i,n){var a=e&r^~e&n;return a<0&&(a+=4294967296),a}function Gt(e,t,r,i,n,a){var s=t&i^~t&a;return s<0&&(s+=4294967296),s}function Vt(e,t,r,i,n){var a=e&r^e&n^r&n;return a<0&&(a+=4294967296),a}function $t(e,t,r,i,n,a){var s=t&i^t&a^i&a;return s<0&&(s+=4294967296),s}function Zt(e,t){var r=Kt(e,t,28)^Kt(t,e,2)^Kt(t,e,7);return r<0&&(r+=4294967296),r}function Yt(e,t){var r=Dt(e,t,28)^Dt(t,e,2)^Dt(t,e,7);return r<0&&(r+=4294967296),r}function Xt(e,t){var r=Kt(e,t,14)^Kt(e,t,18)^Kt(t,e,9);return r<0&&(r+=4294967296),r}function Qt(e,t){var r=Dt(e,t,14)^Dt(e,t,18)^Dt(t,e,9);return r<0&&(r+=4294967296),r}function Jt(e,t){var r=Kt(e,t,1)^Kt(e,t,8)^Rt(e,t,7);return r<0&&(r+=4294967296),r}function er(e,t){var r=Dt(e,t,1)^Dt(e,t,8)^It(e,t,7);return r<0&&(r+=4294967296),r}function tr(e,t){var r=Kt(e,t,19)^Kt(t,e,29)^Rt(e,t,6);return r<0&&(r+=4294967296),r}function rr(e,t){var r=Dt(e,t,19)^Dt(t,e,29)^It(e,t,6);return r<0&&(r+=4294967296),r}function ir(){if(!(this instanceof ir))return new ir;Wt.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}jt.blockSize=1024,jt.outSize=512,jt.hmacStrength=192,jt.padLength=128,jt.prototype._prepareBlock=function(e,t){for(var r=this.W,i=0;i<32;i++)r[i]=e[t+i];for(;i<r.length;i+=2){var n=tr(r[i-4],r[i-3]),a=rr(r[i-4],r[i-3]),s=r[i-14],o=r[i-13],c=Jt(r[i-30],r[i-29]),u=er(r[i-30],r[i-29]),h=r[i-32],d=r[i-31];r[i]=zt(n,a,s,o,c,u,h,d),r[i+1]=qt(n,a,s,o,c,u,h,d)}},jt.prototype._update=function(e,t){this._prepareBlock(e,t);var r=this.W,i=this.h[0],n=this.h[1],a=this.h[2],s=this.h[3],o=this.h[4],c=this.h[5],u=this.h[6],h=this.h[7],d=this.h[8],f=this.h[9],l=this.h[10],p=this.h[11],y=this.h[12],b=this.h[13],m=this.h[14],g=this.h[15];Qe(this.k.length===r.length);for(var w=0;w<r.length;w+=2){var v=m,_=g,k=Xt(d,f),A=Qt(d,f),S=Ht(d,f,l,p,y),E=Gt(d,f,l,p,y,b),P=this.k[w],x=this.k[w+1],M=r[w],C=r[w+1],K=Ot(v,_,k,A,S,E,P,x,M,C),D=Ft(v,_,k,A,S,E,P,x,M,C);v=Zt(i,n),_=Yt(i,n),k=Vt(i,n,a,s,o),A=$t(i,n,a,s,o,c);var R=Bt(v,_,k,A),I=Tt(v,_,k,A);m=y,g=b,y=l,b=p,l=d,p=f,d=Bt(u,h,K,D),f=Tt(h,h,K,D),u=o,h=c,o=a,c=s,a=i,s=n,i=Bt(K,D,R,I),n=Tt(K,D,R,I)}Ut(this.h,0,i,n),Ut(this.h,2,a,s),Ut(this.h,4,o,c),Ut(this.h,6,u,h),Ut(this.h,8,d,f),Ut(this.h,10,l,p),Ut(this.h,12,y,b),Ut(this.h,14,m,g)},jt.prototype._digest=function(e){return"hex"===e?st.toHex32(this.h,"big"):st.split32(this.h,"big")},st.inherits(ir,Wt);var nr=ir;ir.blockSize=1024,ir.outSize=384,ir.hmacStrength=192,ir.padLength=128,ir.prototype._digest=function(e){return"hex"===e?st.toHex32(this.h.slice(0,12),"big"):st.split32(this.h.slice(0,12),"big")};var ar=st.rotl32,sr=st.sum32,or=st.sum32_3,cr=st.sum32_4,ur=ut.BlockHash;function hr(){if(!(this instanceof hr))return new hr;ur.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}st.inherits(hr,ur);var dr=hr;function fr(e,t,r,i){return e<=15?t^r^i:e<=31?t&r|~t&i:e<=47?(t|~r)^i:e<=63?t&i|r&~i:t^(r|~i)}function lr(e){return e<=15?0:e<=31?1518500249:e<=47?1859775393:e<=63?2400959708:2840853838}function pr(e){return e<=15?1352829926:e<=31?1548603684:e<=47?1836072691:e<=63?2053994217:0}hr.blockSize=512,hr.outSize=160,hr.hmacStrength=192,hr.padLength=64,hr.prototype._update=function(e,t){for(var r=this.h[0],i=this.h[1],n=this.h[2],a=this.h[3],s=this.h[4],o=r,c=i,u=n,h=a,d=s,f=0;f<80;f++){var l=sr(ar(cr(r,fr(f,i,n,a),e[yr[f]+t],lr(f)),mr[f]),s);r=s,s=a,a=ar(n,10),n=i,i=l,l=sr(ar(cr(o,fr(79-f,c,u,h),e[br[f]+t],pr(f)),gr[f]),d),o=d,d=h,h=ar(u,10),u=c,c=l}l=or(this.h[1],n,h),this.h[1]=or(this.h[2],a,d),this.h[2]=or(this.h[3],s,o),this.h[3]=or(this.h[4],r,c),this.h[4]=or(this.h[0],i,u),this.h[0]=l},hr.prototype._digest=function(e){return"hex"===e?st.toHex32(this.h,"little"):st.split32(this.h,"little")};var yr=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],br=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],mr=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],gr=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],wr={ripemd160:dr};function vr(e,t){let r=e[0],i=e[1],n=e[2],a=e[3];r=kr(r,i,n,a,t[0],7,-680876936),a=kr(a,r,i,n,t[1],12,-389564586),n=kr(n,a,r,i,t[2],17,606105819),i=kr(i,n,a,r,t[3],22,-1044525330),r=kr(r,i,n,a,t[4],7,-176418897),a=kr(a,r,i,n,t[5],12,1200080426),n=kr(n,a,r,i,t[6],17,-1473231341),i=kr(i,n,a,r,t[7],22,-45705983),r=kr(r,i,n,a,t[8],7,1770035416),a=kr(a,r,i,n,t[9],12,-1958414417),n=kr(n,a,r,i,t[10],17,-42063),i=kr(i,n,a,r,t[11],22,-1990404162),r=kr(r,i,n,a,t[12],7,1804603682),a=kr(a,r,i,n,t[13],12,-40341101),n=kr(n,a,r,i,t[14],17,-1502002290),i=kr(i,n,a,r,t[15],22,1236535329),r=Ar(r,i,n,a,t[1],5,-165796510),a=Ar(a,r,i,n,t[6],9,-1069501632),n=Ar(n,a,r,i,t[11],14,643717713),i=Ar(i,n,a,r,t[0],20,-373897302),r=Ar(r,i,n,a,t[5],5,-701558691),a=Ar(a,r,i,n,t[10],9,38016083),n=Ar(n,a,r,i,t[15],14,-660478335),i=Ar(i,n,a,r,t[4],20,-405537848),r=Ar(r,i,n,a,t[9],5,568446438),a=Ar(a,r,i,n,t[14],9,-1019803690),n=Ar(n,a,r,i,t[3],14,-187363961),i=Ar(i,n,a,r,t[8],20,1163531501),r=Ar(r,i,n,a,t[13],5,-1444681467),a=Ar(a,r,i,n,t[2],9,-51403784),n=Ar(n,a,r,i,t[7],14,1735328473),i=Ar(i,n,a,r,t[12],20,-1926607734),r=Sr(r,i,n,a,t[5],4,-378558),a=Sr(a,r,i,n,t[8],11,-2022574463),n=Sr(n,a,r,i,t[11],16,1839030562),i=Sr(i,n,a,r,t[14],23,-35309556),r=Sr(r,i,n,a,t[1],4,-1530992060),a=Sr(a,r,i,n,t[4],11,1272893353),n=Sr(n,a,r,i,t[7],16,-155497632),i=Sr(i,n,a,r,t[10],23,-1094730640),r=Sr(r,i,n,a,t[13],4,681279174),a=Sr(a,r,i,n,t[0],11,-358537222),n=Sr(n,a,r,i,t[3],16,-722521979),i=Sr(i,n,a,r,t[6],23,76029189),r=Sr(r,i,n,a,t[9],4,-640364487),a=Sr(a,r,i,n,t[12],11,-421815835),n=Sr(n,a,r,i,t[15],16,530742520),i=Sr(i,n,a,r,t[2],23,-995338651),r=Er(r,i,n,a,t[0],6,-198630844),a=Er(a,r,i,n,t[7],10,1126891415),n=Er(n,a,r,i,t[14],15,-1416354905),i=Er(i,n,a,r,t[5],21,-57434055),r=Er(r,i,n,a,t[12],6,1700485571),a=Er(a,r,i,n,t[3],10,-1894986606),n=Er(n,a,r,i,t[10],15,-1051523),i=Er(i,n,a,r,t[1],21,-2054922799),r=Er(r,i,n,a,t[8],6,1873313359),a=Er(a,r,i,n,t[15],10,-30611744),n=Er(n,a,r,i,t[6],15,-1560198380),i=Er(i,n,a,r,t[13],21,1309151649),r=Er(r,i,n,a,t[4],6,-145523070),a=Er(a,r,i,n,t[11],10,-1120210379),n=Er(n,a,r,i,t[2],15,718787259),i=Er(i,n,a,r,t[9],21,-343485551),e[0]=Cr(r,e[0]),e[1]=Cr(i,e[1]),e[2]=Cr(n,e[2]),e[3]=Cr(a,e[3])}function _r(e,t,r,i,n,a){return t=Cr(Cr(t,e),Cr(i,a)),Cr(t<<n|t>>>32-n,r)}function kr(e,t,r,i,n,a,s){return _r(t&r|~t&i,e,t,n,a,s)}function Ar(e,t,r,i,n,a,s){return _r(t&i|r&~i,e,t,n,a,s)}function Sr(e,t,r,i,n,a,s){return _r(t^r^i,e,t,n,a,s)}function Er(e,t,r,i,n,a,s){return _r(r^(t|~i),e,t,n,a,s)}function Pr(e){const t=[];let r;for(r=0;r<64;r+=4)t[r>>2]=e.charCodeAt(r)+(e.charCodeAt(r+1)<<8)+(e.charCodeAt(r+2)<<16)+(e.charCodeAt(r+3)<<24);return t}const xr="0123456789abcdef".split("");function Mr(e){let t="",r=0;for(;r<4;r++)t+=xr[e>>8*r+4&15]+xr[e>>8*r&15];return t}function Cr(e,t){return e+t&4294967295}const Kr=V.getWebCrypto(),Dr=V.getNodeCrypto();function Rr(e){return async function(t){const r=Dr.createHash(e);return B(t,(e=>{r.update(e)}),(()=>new Uint8Array(r.digest())))}}function Ir(e,t){return async function(r,i=ie){if(s(r)&&(r=await L(r)),!V.isStream(r)&&Kr&&t&&r.length>=i.minBytesForWebCrypto)return new Uint8Array(await Kr.digest(t,r));const n=e();return B(r,(e=>{n.update(e)}),(()=>new Uint8Array(n.digest())))}}function Ur(e,t){return async function(r,i=ie){if(s(r)&&(r=await L(r)),V.isStream(r)){const t=new e;return B(r,(e=>{t.process(e)}),(()=>t.finish().result))}return Kr&&t&&r.length>=i.minBytesForWebCrypto?new Uint8Array(await Kr.digest(t,r)):e.bytes(r)}}let Br;Br=Dr?{md5:Rr("md5"),sha1:Rr("sha1"),sha224:Rr("sha224"),sha256:Rr("sha256"),sha384:Rr("sha384"),sha512:Rr("sha512"),ripemd:Rr("ripemd160")}:{md5:async function(e){const t=function(e){const t=e.length,r=[1732584193,-271733879,-1732584194,271733878];let i;for(i=64;i<=e.length;i+=64)vr(r,Pr(e.substring(i-64,i)));e=e.substring(i-64);const n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(i=0;i<e.length;i++)n[i>>2]|=e.charCodeAt(i)<<(i%4<<3);if(n[i>>2]|=128<<(i%4<<3),i>55)for(vr(r,n),i=0;i<16;i++)n[i]=0;return n[14]=8*t,vr(r,n),r}(V.uint8ArrayToString(e));return V.hexToUint8Array(function(e){for(let t=0;t<e.length;t++)e[t]=Mr(e[t]);return e.join("")}(t))},sha1:Ur($e,-1===navigator.userAgent.indexOf("Edge")&&"SHA-1"),sha224:Ir(Ct),sha256:Ur(Xe,"SHA-256"),sha384:Ir(nr,"SHA-384"),sha512:Ir(Wt,"SHA-512"),ripemd:Ir(dr)};var Tr={md5:Br.md5,sha1:Br.sha1,sha224:Br.sha224,sha256:Br.sha256,sha384:Br.sha384,sha512:Br.sha512,ripemd:Br.ripemd,digest:function(e,t){switch(e){case 1:return this.md5(t);case 2:return this.sha1(t);case 3:return this.ripemd(t);case 8:return this.sha256(t);case 9:return this.sha384(t);case 10:return this.sha512(t);case 11:return this.sha224(t);default:throw Error("Invalid hash function.")}},getHashByteLength:function(e){switch(e){case 1:return 16;case 2:case 3:return 20;case 8:return 32;case 9:return 48;case 10:return 64;case 11:return 28;default:throw Error("Invalid hash algorithm.")}}};class zr{static encrypt(e,t,r){return new zr(t,r).encrypt(e)}static decrypt(e,t,r){return new zr(t,r).decrypt(e)}constructor(e,t,r){this.aes=r||new Se(e,t,!0,"CFB"),delete this.aes.padding}encrypt(e){return ge(this.aes.AES_Encrypt_process(e),this.aes.AES_Encrypt_finish())}decrypt(e){return ge(this.aes.AES_Decrypt_process(e),this.aes.AES_Decrypt_finish())}}const qr=V.getWebCrypto(),Or=V.getNodeCrypto(),Fr=Or?Or.getCiphers():[],Nr={idea:Fr.includes("idea-cfb")?"idea-cfb":void 0,tripledes:Fr.includes("des-ede3-cfb")?"des-ede3-cfb":void 0,cast5:Fr.includes("cast5-cfb")?"cast5-cfb":void 0,blowfish:Fr.includes("bf-cfb")?"bf-cfb":void 0,aes128:Fr.includes("aes-128-cfb")?"aes-128-cfb":void 0,aes192:Fr.includes("aes-192-cfb")?"aes-192-cfb":void 0,aes256:Fr.includes("aes-256-cfb")?"aes-256-cfb":void 0};var Lr=/*#__PURE__*/Object.freeze({__proto__:null,encrypt:async function(e,t,r,i,n){if(V.getNodeCrypto()&&Nr[e])return function(e,t,r,i){const n=new Or.createCipheriv(Nr[e],t,i);return B(r,(e=>new Uint8Array(n.update(e))))}(e,t,r,i);if("aes"===e.substr(0,3))return function(e,t,r,i,n){if(V.getWebCrypto()&&24!==t.length&&!V.isStream(r)&&r.length>=3e3*n.minBytesForWebCrypto)return async function(e,t,r,i){const n="AES-CBC",a=await qr.importKey("raw",t,{name:n},!1,["encrypt"]),{blockSize:s}=je[e],o=V.concatUint8Array([new Uint8Array(s),r]),c=new Uint8Array(await qr.encrypt({name:n,iv:i},a,o)).subarray(0,r.length);return function(e,t){for(let r=0;r<e.length;r++)e[r]=e[r]^t[r]}(c,r),c}(e,t,r,i);const a=new zr(t,i);return B(r,(e=>a.aes.AES_Encrypt_process(e)),(()=>a.aes.AES_Encrypt_finish()))}(e,t,r,i,n);const a=new je[e](t),s=a.blockSize,o=i.slice();let c=new Uint8Array;const u=e=>{e&&(c=V.concatUint8Array([c,e]));const t=new Uint8Array(c.length);let r,i=0;for(;e?c.length>=s:c.length;){const e=a.encrypt(o);for(r=0;r<s;r++)o[r]=c[r]^e[r],t[i++]=o[r];c=c.subarray(s)}return t.subarray(0,i)};return B(r,u,u)},decrypt:async function(e,t,r,i){if(V.getNodeCrypto()&&Nr[e])return function(e,t,r,i){const n=new Or.createDecipheriv(Nr[e],t,i);return B(r,(e=>new Uint8Array(n.update(e))))}(e,t,r,i);if("aes"===e.substr(0,3))return function(e,t,r,i){if(V.isStream(r)){const e=new zr(t,i);return B(r,(t=>e.aes.AES_Decrypt_process(t)),(()=>e.aes.AES_Decrypt_finish()))}return zr.decrypt(r,t,i)}(0,t,r,i);const n=new je[e](t),a=n.blockSize;let s=i,o=new Uint8Array;const c=e=>{e&&(o=V.concatUint8Array([o,e]));const t=new Uint8Array(o.length);let r,i=0;for(;e?o.length>=a:o.length;){const e=n.encrypt(s);for(s=o,r=0;r<a;r++)t[i++]=s[r]^e[r];o=o.subarray(a)}return t.subarray(0,i)};return B(r,c,c)}});class jr{static encrypt(e,t,r){return new jr(t,r).encrypt(e)}static decrypt(e,t,r){return new jr(t,r).encrypt(e)}constructor(e,t,r){this.aes=r||new Se(e,void 0,!1,"CTR"),delete this.aes.padding,this.AES_CTR_set_options(t)}encrypt(e){return ge(this.aes.AES_Encrypt_process(e),this.aes.AES_Encrypt_finish())}decrypt(e){return ge(this.aes.AES_Encrypt_process(e),this.aes.AES_Encrypt_finish())}AES_CTR_set_options(e,t,r){let{asm:i}=this.aes.acquire_asm();if(void 0!==r){if(r<8||r>48)throw new ve("illegal counter size");let e=Math.pow(2,r)-1;i.set_mask(0,0,e/4294967296|0,0|e)}else r=48,i.set_mask(0,0,65535,4294967295);if(void 0===e)throw Error("nonce is required");{let t=e.length;if(!t||t>16)throw new ve("illegal nonce size");let r=new DataView(new ArrayBuffer(16));new Uint8Array(r.buffer).set(e),i.set_nonce(r.getUint32(0),r.getUint32(4),r.getUint32(8),r.getUint32(12))}if(void 0!==t){if(t<0||t>=Math.pow(2,r))throw new ve("illegal counter value");i.set_counter(0,0,t/4294967296|0,0|t)}}}class Wr{static encrypt(e,t,r=!0,i){return new Wr(t,i,r).encrypt(e)}static decrypt(e,t,r=!0,i){return new Wr(t,i,r).decrypt(e)}constructor(e,t,r=!0,i){this.aes=i||new Se(e,t,r,"CBC")}encrypt(e){return ge(this.aes.AES_Encrypt_process(e),this.aes.AES_Encrypt_finish())}decrypt(e){return ge(this.aes.AES_Decrypt_process(e),this.aes.AES_Decrypt_finish())}}const Hr=V.getWebCrypto(),Gr=V.getNodeCrypto(),Vr=16;function $r(e,t){const r=e.length-Vr;for(let i=0;i<Vr;i++)e[i+r]^=t[i];return e}const Zr=new Uint8Array(Vr);async function Yr(e){const t=await async function(e){if(V.getWebCrypto()&&24!==e.length)return e=await Hr.importKey("raw",e,{name:"AES-CBC",length:8*e.length},!1,["encrypt"]),async function(t){const r=await Hr.encrypt({name:"AES-CBC",iv:Zr,length:128},e,t);return new Uint8Array(r).subarray(0,r.byteLength-Vr)};if(V.getNodeCrypto())return async function(t){const r=new Gr.createCipheriv("aes-"+8*e.length+"-cbc",e,Zr).update(t);return new Uint8Array(r)};return async function(t){return Wr.encrypt(t,e,!1,Zr)}}(e),r=V.double(await t(Zr)),i=V.double(r);return async function(e){return(await t(function(e,t,r){if(e.length&&e.length%Vr==0)return $r(e,t);const i=new Uint8Array(e.length+(Vr-e.length%Vr));return i.set(e),i[e.length]=128,$r(i,r)}(e,r,i))).subarray(-16)}}const Xr=V.getWebCrypto(),Qr=V.getNodeCrypto(),Jr=V.getNodeBuffer(),ei=16,ti=ei,ri=new Uint8Array(ei),ii=new Uint8Array(ei);ii[15]=1;const ni=new Uint8Array(ei);async function ai(e){const t=await Yr(e);return function(e,r){return t(V.concatUint8Array([e,r]))}}async function si(e){return V.getWebCrypto()&&24!==e.length&&-1===navigator.userAgent.indexOf("Edge")?(e=await Xr.importKey("raw",e,{name:"AES-CTR",length:8*e.length},!1,["encrypt"]),async function(t,r){const i=await Xr.encrypt({name:"AES-CTR",counter:r,length:128},e,t);return new Uint8Array(i)}):V.getNodeCrypto()?async function(t,r){const i=new Qr.createCipheriv("aes-"+8*e.length+"-ctr",e,r),n=Jr.concat([i.update(t),i.final()]);return new Uint8Array(n)}:async function(t,r){return jr.encrypt(t,e,r)}}async function oi(e,t){if("aes"!==e.substr(0,3))throw Error("EAX mode supports only AES cipher");const[r,i]=await Promise.all([ai(t),si(t)]);return{encrypt:async function(e,t,n){const[a,s]=await Promise.all([r(ri,t),r(ii,n)]),o=await i(e,a),c=await r(ni,o);for(let e=0;e<ti;e++)c[e]^=s[e]^a[e];return V.concatUint8Array([o,c])},decrypt:async function(e,t,n){if(e.length<ti)throw Error("Invalid EAX ciphertext");const a=e.subarray(0,-16),s=e.subarray(-16),[o,c,u]=await Promise.all([r(ri,t),r(ii,n),r(ni,a)]),h=u;for(let e=0;e<ti;e++)h[e]^=c[e]^o[e];if(!V.equalsUint8Array(s,h))throw Error("Authentication tag mismatch");return await i(a,o)}}}ni[15]=2,oi.getNonce=function(e,t){const r=e.slice();for(let e=0;e<t.length;e++)r[8+e]^=t[e];return r},oi.blockLength=ei,oi.ivLength=16,oi.tagLength=ti;const ci=16,ui=16;function hi(e){let t=0;for(let r=1;0==(e&r);r<<=1)t++;return t}function di(e,t){for(let r=0;r<e.length;r++)e[r]^=t[r];return e}function fi(e,t){return di(e.slice(),t)}const li=new Uint8Array(ci),pi=new Uint8Array([1]);async function yi(e,t){let r,i,n,a=0;function s(e,t,i,s){const o=t.length/ci|0;!function(e,t){const r=V.nbits(Math.max(e.length,t.length)/ci|0)-1;for(let e=a+1;e<=r;e++)n[e]=V.double(n[e-1]);a=r}(t,s);const c=V.concatUint8Array([li.subarray(0,15-i.length),pi,i]),u=63&c[15];c[15]&=192;const h=r(c),d=V.concatUint8Array([h,fi(h.subarray(0,8),h.subarray(1,9))]),f=V.shiftRight(d.subarray(0+(u>>3),17+(u>>3)),8-(7&u)).subarray(1),l=new Uint8Array(ci),p=new Uint8Array(t.length+ui);let y,b=0;for(y=0;y<o;y++)di(f,n[hi(y+1)]),p.set(di(e(fi(f,t)),f),b),di(l,e===r?t:p.subarray(b)),t=t.subarray(ci),b+=ci;if(t.length){di(f,n.x);const i=r(f);p.set(fi(t,i),b);const a=new Uint8Array(ci);a.set(e===r?t:p.subarray(b,-16),0),a[t.length]=128,di(l,a),b+=t.length}const m=di(r(di(di(l,f),n.$)),function(e){if(!e.length)return li;const t=e.length/ci|0,i=new Uint8Array(ci),a=new Uint8Array(ci);for(let s=0;s<t;s++)di(i,n[hi(s+1)]),di(a,r(fi(i,e))),e=e.subarray(ci);if(e.length){di(i,n.x);const t=new Uint8Array(ci);t.set(e,0),t[e.length]=128,di(t,i),di(a,r(t))}return a}(s));return p.set(m,b),p}return function(e,t){const a=new je[e](t);r=a.encrypt.bind(a),i=a.decrypt.bind(a);const s=r(li),o=V.double(s);n=[],n[0]=V.double(o),n.x=s,n.$=o}(e,t),{encrypt:async function(e,t,i){return s(r,e,t,i)},decrypt:async function(e,t,r){if(e.length<ui)throw Error("Invalid OCB ciphertext");const n=e.subarray(-16);e=e.subarray(0,-16);const a=s(i,e,t,r);if(V.equalsUint8Array(n,a.subarray(-16)))return a.subarray(0,-16);throw Error("Authentication tag mismatch")}}}yi.getNonce=function(e,t){const r=e.slice();for(let e=0;e<t.length;e++)r[7+e]^=t[e];return r},yi.blockLength=ci,yi.ivLength=15,yi.tagLength=ui;const bi=68719476704;class mi{constructor(e,t,r,i=16,n){this.tagSize=i,this.gamma0=0,this.counter=1,this.aes=n||new Se(e,void 0,!1,"CTR");let{asm:a,heap:s}=this.aes.acquire_asm();if(a.gcm_init(),this.tagSize<4||this.tagSize>16)throw new ve("illegal tagSize value");const o=t.length||0,c=new Uint8Array(16);12!==o?(this._gcm_mac_process(t),s[0]=0,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=0,s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=0,s[11]=o>>>29,s[12]=o>>>21&255,s[13]=o>>>13&255,s[14]=o>>>5&255,s[15]=o<<3&255,a.mac(pe.MAC.GCM,pe.HEAP_DATA,16),a.get_iv(pe.HEAP_DATA),a.set_iv(0,0,0,0),c.set(s.subarray(0,16))):(c.set(t),c[15]=1);const u=new DataView(c.buffer);if(this.gamma0=u.getUint32(12),a.set_nonce(u.getUint32(0),u.getUint32(4),u.getUint32(8),0),a.set_mask(0,0,0,4294967295),void 0!==r){if(r.length>bi)throw new ve("illegal adata length");r.length?(this.adata=r,this._gcm_mac_process(r)):this.adata=void 0}else this.adata=void 0;if(this.counter<1||this.counter>4294967295)throw new RangeError("counter must be a positive 32-bit integer");a.set_counter(0,0,0,this.gamma0+this.counter|0)}static encrypt(e,t,r,i,n){return new mi(t,r,i,n).encrypt(e)}static decrypt(e,t,r,i,n){return new mi(t,r,i,n).decrypt(e)}encrypt(e){return this.AES_GCM_encrypt(e)}decrypt(e){return this.AES_GCM_decrypt(e)}AES_GCM_Encrypt_process(e){let t=0,r=e.length||0,{asm:i,heap:n}=this.aes.acquire_asm(),a=this.counter,s=this.aes.pos,o=this.aes.len,c=0,u=o+r&-16,h=0;if((a-1<<4)+o+r>bi)throw new RangeError("counter overflow");const d=new Uint8Array(u);for(;r>0;)h=me(n,s+o,e,t,r),o+=h,t+=h,r-=h,h=i.cipher(pe.ENC.CTR,pe.HEAP_DATA+s,o),h=i.mac(pe.MAC.GCM,pe.HEAP_DATA+s,h),h&&d.set(n.subarray(s,s+h),c),a+=h>>>4,c+=h,h<o?(s+=h,o-=h):(s=0,o=0);return this.counter=a,this.aes.pos=s,this.aes.len=o,d}AES_GCM_Encrypt_finish(){let{asm:e,heap:t}=this.aes.acquire_asm(),r=this.counter,i=this.tagSize,n=this.adata,a=this.aes.pos,s=this.aes.len;const o=new Uint8Array(s+i);e.cipher(pe.ENC.CTR,pe.HEAP_DATA+a,s+15&-16),s&&o.set(t.subarray(a,a+s));let c=s;for(;15&c;c++)t[a+c]=0;e.mac(pe.MAC.GCM,pe.HEAP_DATA+a,c);const u=void 0!==n?n.length:0,h=(r-1<<4)+s;return t[0]=0,t[1]=0,t[2]=0,t[3]=u>>>29,t[4]=u>>>21,t[5]=u>>>13&255,t[6]=u>>>5&255,t[7]=u<<3&255,t[8]=t[9]=t[10]=0,t[11]=h>>>29,t[12]=h>>>21&255,t[13]=h>>>13&255,t[14]=h>>>5&255,t[15]=h<<3&255,e.mac(pe.MAC.GCM,pe.HEAP_DATA,16),e.get_iv(pe.HEAP_DATA),e.set_counter(0,0,0,this.gamma0),e.cipher(pe.ENC.CTR,pe.HEAP_DATA,16),o.set(t.subarray(0,i),s),this.counter=1,this.aes.pos=0,this.aes.len=0,o}AES_GCM_Decrypt_process(e){let t=0,r=e.length||0,{asm:i,heap:n}=this.aes.acquire_asm(),a=this.counter,s=this.tagSize,o=this.aes.pos,c=this.aes.len,u=0,h=c+r>s?c+r-s&-16:0,d=c+r-h,f=0;if((a-1<<4)+c+r>bi)throw new RangeError("counter overflow");const l=new Uint8Array(h);for(;r>d;)f=me(n,o+c,e,t,r-d),c+=f,t+=f,r-=f,f=i.mac(pe.MAC.GCM,pe.HEAP_DATA+o,f),f=i.cipher(pe.DEC.CTR,pe.HEAP_DATA+o,f),f&&l.set(n.subarray(o,o+f),u),a+=f>>>4,u+=f,o=0,c=0;return r>0&&(c+=me(n,0,e,t,r)),this.counter=a,this.aes.pos=o,this.aes.len=c,l}AES_GCM_Decrypt_finish(){let{asm:e,heap:t}=this.aes.acquire_asm(),r=this.tagSize,i=this.adata,n=this.counter,a=this.aes.pos,s=this.aes.len,o=s-r;if(s<r)throw new we("authentication tag not found");const c=new Uint8Array(o),u=new Uint8Array(t.subarray(a+o,a+s));let h=o;for(;15&h;h++)t[a+h]=0;e.mac(pe.MAC.GCM,pe.HEAP_DATA+a,h),e.cipher(pe.DEC.CTR,pe.HEAP_DATA+a,h),o&&c.set(t.subarray(a,a+o));const d=void 0!==i?i.length:0,f=(n-1<<4)+s-r;t[0]=0,t[1]=0,t[2]=0,t[3]=d>>>29,t[4]=d>>>21,t[5]=d>>>13&255,t[6]=d>>>5&255,t[7]=d<<3&255,t[8]=t[9]=t[10]=0,t[11]=f>>>29,t[12]=f>>>21&255,t[13]=f>>>13&255,t[14]=f>>>5&255,t[15]=f<<3&255,e.mac(pe.MAC.GCM,pe.HEAP_DATA,16),e.get_iv(pe.HEAP_DATA),e.set_counter(0,0,0,this.gamma0),e.cipher(pe.ENC.CTR,pe.HEAP_DATA,16);let l=0;for(let e=0;e<r;++e)l|=u[e]^t[e];if(l)throw new _e("data integrity check failed");return this.counter=1,this.aes.pos=0,this.aes.len=0,c}AES_GCM_decrypt(e){const t=this.AES_GCM_Decrypt_process(e),r=this.AES_GCM_Decrypt_finish(),i=new Uint8Array(t.length+r.length);return t.length&&i.set(t),r.length&&i.set(r,t.length),i}AES_GCM_encrypt(e){const t=this.AES_GCM_Encrypt_process(e),r=this.AES_GCM_Encrypt_finish(),i=new Uint8Array(t.length+r.length);return t.length&&i.set(t),r.length&&i.set(r,t.length),i}_gcm_mac_process(e){let{asm:t,heap:r}=this.aes.acquire_asm(),i=0,n=e.length||0,a=0;for(;n>0;){for(a=me(r,0,e,i,n),i+=a,n-=a;15&a;)r[a++]=0;t.mac(pe.MAC.GCM,pe.HEAP_DATA,a)}}}const gi=V.getWebCrypto(),wi=V.getNodeCrypto(),vi=V.getNodeBuffer(),_i=16,ki="AES-GCM";async function Ai(e,t){if("aes"!==e.substr(0,3))throw Error("GCM mode supports only AES cipher");if(V.getWebCrypto()&&24!==t.length){const e=await gi.importKey("raw",t,{name:ki},!1,["encrypt","decrypt"]);return{encrypt:async function(r,i,n=new Uint8Array){if(!r.length||!n.length&&-1!==navigator.userAgent.indexOf("Edge"))return mi.encrypt(r,t,i,n);const a=await gi.encrypt({name:ki,iv:i,additionalData:n,tagLength:128},e,r);return new Uint8Array(a)},decrypt:async function(r,i,n=new Uint8Array){if(r.length===_i||!n.length&&-1!==navigator.userAgent.indexOf("Edge"))return mi.decrypt(r,t,i,n);const a=await gi.decrypt({name:ki,iv:i,additionalData:n,tagLength:128},e,r);return new Uint8Array(a)}}}return V.getNodeCrypto()?{encrypt:async function(e,r,i=new Uint8Array){const n=new wi.createCipheriv("aes-"+8*t.length+"-gcm",t,r);n.setAAD(i);const a=vi.concat([n.update(e),n.final(),n.getAuthTag()]);return new Uint8Array(a)},decrypt:async function(e,r,i=new Uint8Array){const n=new wi.createDecipheriv("aes-"+8*t.length+"-gcm",t,r);n.setAAD(i),n.setAuthTag(e.slice(e.length-_i,e.length));const a=vi.concat([n.update(e.slice(0,e.length-_i)),n.final()]);return new Uint8Array(a)}}:{encrypt:async function(e,r,i){return mi.encrypt(e,t,r,i)},decrypt:async function(e,r,i){return mi.decrypt(e,t,r,i)}}}Ai.getNonce=function(e,t){const r=e.slice();for(let e=0;e<t.length;e++)r[4+e]^=t[e];return r},Ai.blockLength=16,Ai.ivLength=12,Ai.tagLength=_i;var Si={cfb:Lr,gcm:Ai,experimentalGCM:Ai,eax:oi,ocb:yi},Ei=tt((function(e){!function(e){var t=function(e){var t,r=new Float64Array(16);if(e)for(t=0;t<e.length;t++)r[t]=e[t];return r},r=function(){throw Error("no PRNG")},i=new Uint8Array(32);i[0]=9;var n=t(),a=t([1]),s=t([56129,1]),o=t([30883,4953,19914,30187,55467,16705,2637,112,59544,30585,16505,36039,65139,11119,27886,20995]),c=t([61785,9906,39828,60374,45398,33411,5274,224,53552,61171,33010,6542,64743,22239,55772,9222]),u=t([54554,36645,11616,51542,42930,38181,51040,26924,56412,64982,57905,49316,21502,52590,14035,8553]),h=t([26200,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214,26214]),d=t([41136,18958,6951,50414,58488,44335,6150,12099,55207,15867,153,11085,57099,20417,9344,11139]);function f(e,t,r,i){return function(e,t,r,i,n){var a,s=0;for(a=0;a<n;a++)s|=e[t+a]^r[i+a];return(1&s-1>>>8)-1}(e,t,r,i,32)}function l(e,t){var r;for(r=0;r<16;r++)e[r]=0|t[r]}function p(e){var t,r,i=1;for(t=0;t<16;t++)r=e[t]+i+65535,i=Math.floor(r/65536),e[t]=r-65536*i;e[0]+=i-1+37*(i-1)}function y(e,t,r){for(var i,n=~(r-1),a=0;a<16;a++)i=n&(e[a]^t[a]),e[a]^=i,t[a]^=i}function b(e,r){var i,n,a,s=t(),o=t();for(i=0;i<16;i++)o[i]=r[i];for(p(o),p(o),p(o),n=0;n<2;n++){for(s[0]=o[0]-65517,i=1;i<15;i++)s[i]=o[i]-65535-(s[i-1]>>16&1),s[i-1]&=65535;s[15]=o[15]-32767-(s[14]>>16&1),a=s[15]>>16&1,s[14]&=65535,y(o,s,1-a)}for(i=0;i<16;i++)e[2*i]=255&o[i],e[2*i+1]=o[i]>>8}function m(e,t){var r=new Uint8Array(32),i=new Uint8Array(32);return b(r,e),b(i,t),f(r,0,i,0)}function g(e){var t=new Uint8Array(32);return b(t,e),1&t[0]}function w(e,t){var r;for(r=0;r<16;r++)e[r]=t[2*r]+(t[2*r+1]<<8);e[15]&=32767}function v(e,t,r){for(var i=0;i<16;i++)e[i]=t[i]+r[i]}function _(e,t,r){for(var i=0;i<16;i++)e[i]=t[i]-r[i]}function k(e,t,r){var i,n,a=0,s=0,o=0,c=0,u=0,h=0,d=0,f=0,l=0,p=0,y=0,b=0,m=0,g=0,w=0,v=0,_=0,k=0,A=0,S=0,E=0,P=0,x=0,M=0,C=0,K=0,D=0,R=0,I=0,U=0,B=0,T=r[0],z=r[1],q=r[2],O=r[3],F=r[4],N=r[5],L=r[6],j=r[7],W=r[8],H=r[9],G=r[10],V=r[11],$=r[12],Z=r[13],Y=r[14],X=r[15];a+=(i=t[0])*T,s+=i*z,o+=i*q,c+=i*O,u+=i*F,h+=i*N,d+=i*L,f+=i*j,l+=i*W,p+=i*H,y+=i*G,b+=i*V,m+=i*$,g+=i*Z,w+=i*Y,v+=i*X,s+=(i=t[1])*T,o+=i*z,c+=i*q,u+=i*O,h+=i*F,d+=i*N,f+=i*L,l+=i*j,p+=i*W,y+=i*H,b+=i*G,m+=i*V,g+=i*$,w+=i*Z,v+=i*Y,_+=i*X,o+=(i=t[2])*T,c+=i*z,u+=i*q,h+=i*O,d+=i*F,f+=i*N,l+=i*L,p+=i*j,y+=i*W,b+=i*H,m+=i*G,g+=i*V,w+=i*$,v+=i*Z,_+=i*Y,k+=i*X,c+=(i=t[3])*T,u+=i*z,h+=i*q,d+=i*O,f+=i*F,l+=i*N,p+=i*L,y+=i*j,b+=i*W,m+=i*H,g+=i*G,w+=i*V,v+=i*$,_+=i*Z,k+=i*Y,A+=i*X,u+=(i=t[4])*T,h+=i*z,d+=i*q,f+=i*O,l+=i*F,p+=i*N,y+=i*L,b+=i*j,m+=i*W,g+=i*H,w+=i*G,v+=i*V,_+=i*$,k+=i*Z,A+=i*Y,S+=i*X,h+=(i=t[5])*T,d+=i*z,f+=i*q,l+=i*O,p+=i*F,y+=i*N,b+=i*L,m+=i*j,g+=i*W,w+=i*H,v+=i*G,_+=i*V,k+=i*$,A+=i*Z,S+=i*Y,E+=i*X,d+=(i=t[6])*T,f+=i*z,l+=i*q,p+=i*O,y+=i*F,b+=i*N,m+=i*L,g+=i*j,w+=i*W,v+=i*H,_+=i*G,k+=i*V,A+=i*$,S+=i*Z,E+=i*Y,P+=i*X,f+=(i=t[7])*T,l+=i*z,p+=i*q,y+=i*O,b+=i*F,m+=i*N,g+=i*L,w+=i*j,v+=i*W,_+=i*H,k+=i*G,A+=i*V,S+=i*$,E+=i*Z,P+=i*Y,x+=i*X,l+=(i=t[8])*T,p+=i*z,y+=i*q,b+=i*O,m+=i*F,g+=i*N,w+=i*L,v+=i*j,_+=i*W,k+=i*H,A+=i*G,S+=i*V,E+=i*$,P+=i*Z,x+=i*Y,M+=i*X,p+=(i=t[9])*T,y+=i*z,b+=i*q,m+=i*O,g+=i*F,w+=i*N,v+=i*L,_+=i*j,k+=i*W,A+=i*H,S+=i*G,E+=i*V,P+=i*$,x+=i*Z,M+=i*Y,C+=i*X,y+=(i=t[10])*T,b+=i*z,m+=i*q,g+=i*O,w+=i*F,v+=i*N,_+=i*L,k+=i*j,A+=i*W,S+=i*H,E+=i*G,P+=i*V,x+=i*$,M+=i*Z,C+=i*Y,K+=i*X,b+=(i=t[11])*T,m+=i*z,g+=i*q,w+=i*O,v+=i*F,_+=i*N,k+=i*L,A+=i*j,S+=i*W,E+=i*H,P+=i*G,x+=i*V,M+=i*$,C+=i*Z,K+=i*Y,D+=i*X,m+=(i=t[12])*T,g+=i*z,w+=i*q,v+=i*O,_+=i*F,k+=i*N,A+=i*L,S+=i*j,E+=i*W,P+=i*H,x+=i*G,M+=i*V,C+=i*$,K+=i*Z,D+=i*Y,R+=i*X,g+=(i=t[13])*T,w+=i*z,v+=i*q,_+=i*O,k+=i*F,A+=i*N,S+=i*L,E+=i*j,P+=i*W,x+=i*H,M+=i*G,C+=i*V,K+=i*$,D+=i*Z,R+=i*Y,I+=i*X,w+=(i=t[14])*T,v+=i*z,_+=i*q,k+=i*O,A+=i*F,S+=i*N,E+=i*L,P+=i*j,x+=i*W,M+=i*H,C+=i*G,K+=i*V,D+=i*$,R+=i*Z,I+=i*Y,U+=i*X,v+=(i=t[15])*T,s+=38*(k+=i*q),o+=38*(A+=i*O),c+=38*(S+=i*F),u+=38*(E+=i*N),h+=38*(P+=i*L),d+=38*(x+=i*j),f+=38*(M+=i*W),l+=38*(C+=i*H),p+=38*(K+=i*G),y+=38*(D+=i*V),b+=38*(R+=i*$),m+=38*(I+=i*Z),g+=38*(U+=i*Y),w+=38*(B+=i*X),a=(i=(a+=38*(_+=i*z))+(n=1)+65535)-65536*(n=Math.floor(i/65536)),s=(i=s+n+65535)-65536*(n=Math.floor(i/65536)),o=(i=o+n+65535)-65536*(n=Math.floor(i/65536)),c=(i=c+n+65535)-65536*(n=Math.floor(i/65536)),u=(i=u+n+65535)-65536*(n=Math.floor(i/65536)),h=(i=h+n+65535)-65536*(n=Math.floor(i/65536)),d=(i=d+n+65535)-65536*(n=Math.floor(i/65536)),f=(i=f+n+65535)-65536*(n=Math.floor(i/65536)),l=(i=l+n+65535)-65536*(n=Math.floor(i/65536)),p=(i=p+n+65535)-65536*(n=Math.floor(i/65536)),y=(i=y+n+65535)-65536*(n=Math.floor(i/65536)),b=(i=b+n+65535)-65536*(n=Math.floor(i/65536)),m=(i=m+n+65535)-65536*(n=Math.floor(i/65536)),g=(i=g+n+65535)-65536*(n=Math.floor(i/65536)),w=(i=w+n+65535)-65536*(n=Math.floor(i/65536)),v=(i=v+n+65535)-65536*(n=Math.floor(i/65536)),a=(i=(a+=n-1+37*(n-1))+(n=1)+65535)-65536*(n=Math.floor(i/65536)),s=(i=s+n+65535)-65536*(n=Math.floor(i/65536)),o=(i=o+n+65535)-65536*(n=Math.floor(i/65536)),c=(i=c+n+65535)-65536*(n=Math.floor(i/65536)),u=(i=u+n+65535)-65536*(n=Math.floor(i/65536)),h=(i=h+n+65535)-65536*(n=Math.floor(i/65536)),d=(i=d+n+65535)-65536*(n=Math.floor(i/65536)),f=(i=f+n+65535)-65536*(n=Math.floor(i/65536)),l=(i=l+n+65535)-65536*(n=Math.floor(i/65536)),p=(i=p+n+65535)-65536*(n=Math.floor(i/65536)),y=(i=y+n+65535)-65536*(n=Math.floor(i/65536)),b=(i=b+n+65535)-65536*(n=Math.floor(i/65536)),m=(i=m+n+65535)-65536*(n=Math.floor(i/65536)),g=(i=g+n+65535)-65536*(n=Math.floor(i/65536)),w=(i=w+n+65535)-65536*(n=Math.floor(i/65536)),v=(i=v+n+65535)-65536*(n=Math.floor(i/65536)),a+=n-1+37*(n-1),e[0]=a,e[1]=s,e[2]=o,e[3]=c,e[4]=u,e[5]=h,e[6]=d,e[7]=f,e[8]=l,e[9]=p,e[10]=y,e[11]=b,e[12]=m,e[13]=g,e[14]=w,e[15]=v}function A(e,t){k(e,t,t)}function S(e,r){var i,n=t();for(i=0;i<16;i++)n[i]=r[i];for(i=253;i>=0;i--)A(n,n),2!==i&&4!==i&&k(n,n,r);for(i=0;i<16;i++)e[i]=n[i]}function E(e,r,i){var n,a,o=new Uint8Array(32),c=new Float64Array(80),u=t(),h=t(),d=t(),f=t(),l=t(),p=t();for(a=0;a<31;a++)o[a]=r[a];for(o[31]=127&r[31]|64,o[0]&=248,w(c,i),a=0;a<16;a++)h[a]=c[a],f[a]=u[a]=d[a]=0;for(u[0]=f[0]=1,a=254;a>=0;--a)y(u,h,n=o[a>>>3]>>>(7&a)&1),y(d,f,n),v(l,u,d),_(u,u,d),v(d,h,f),_(h,h,f),A(f,l),A(p,u),k(u,d,u),k(d,h,l),v(l,u,d),_(u,u,d),A(h,u),_(d,f,p),k(u,d,s),v(u,u,f),k(d,d,u),k(u,f,p),k(f,h,c),A(h,l),y(u,h,n),y(d,f,n);for(a=0;a<16;a++)c[a+16]=u[a],c[a+32]=d[a],c[a+48]=h[a],c[a+64]=f[a];var m=c.subarray(32),g=c.subarray(16);return S(m,m),k(g,g,m),b(e,g),0}function P(e,t){return E(e,t,i)}function x(e,r){var i=t(),n=t(),a=t(),s=t(),o=t(),u=t(),h=t(),d=t(),f=t();_(i,e[1],e[0]),_(f,r[1],r[0]),k(i,i,f),v(n,e[0],e[1]),v(f,r[0],r[1]),k(n,n,f),k(a,e[3],r[3]),k(a,a,c),k(s,e[2],r[2]),v(s,s,s),_(o,n,i),_(u,s,a),v(h,s,a),v(d,n,i),k(e[0],o,u),k(e[1],d,h),k(e[2],h,u),k(e[3],o,d)}function M(e,t,r){var i;for(i=0;i<4;i++)y(e[i],t[i],r)}function C(e,r){var i=t(),n=t(),a=t();S(a,r[2]),k(i,r[0],a),k(n,r[1],a),b(e,n),e[31]^=g(i)<<7}function K(e,t,r){var i,s;for(l(e[0],n),l(e[1],a),l(e[2],a),l(e[3],n),s=255;s>=0;--s)M(e,t,i=r[s/8|0]>>(7&s)&1),x(t,e),x(e,e),M(e,t,i)}function D(e,r){var i=[t(),t(),t(),t()];l(i[0],u),l(i[1],h),l(i[2],a),k(i[3],u,h),K(e,i,r)}function R(i,n,a){var s,o,c=[t(),t(),t(),t()];for(a||r(n,32),(s=e.hash(n.subarray(0,32)))[0]&=248,s[31]&=127,s[31]|=64,D(c,s),C(i,c),o=0;o<32;o++)n[o+32]=i[o];return 0}var I=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]);function U(e,t){var r,i,n,a;for(i=63;i>=32;--i){for(r=0,n=i-32,a=i-12;n<a;++n)t[n]+=r-16*t[i]*I[n-(i-32)],r=Math.floor((t[n]+128)/256),t[n]-=256*r;t[n]+=r,t[i]=0}for(r=0,n=0;n<32;n++)t[n]+=r-(t[31]>>4)*I[n],r=t[n]>>8,t[n]&=255;for(n=0;n<32;n++)t[n]-=r*I[n];for(i=0;i<32;i++)t[i+1]+=t[i]>>8,e[i]=255&t[i]}function B(e){var t,r=new Float64Array(64);for(t=0;t<64;t++)r[t]=e[t];for(t=0;t<64;t++)e[t]=0;U(e,r)}function T(e,r){var i=t(),s=t(),c=t(),u=t(),h=t(),f=t(),p=t();return l(e[2],a),w(e[1],r),A(c,e[1]),k(u,c,o),_(c,c,e[2]),v(u,e[2],u),A(h,u),A(f,h),k(p,f,h),k(i,p,c),k(i,i,u),function(e,r){var i,n=t();for(i=0;i<16;i++)n[i]=r[i];for(i=250;i>=0;i--)A(n,n),1!==i&&k(n,n,r);for(i=0;i<16;i++)e[i]=n[i]}(i,i),k(i,i,c),k(i,i,u),k(i,i,u),k(e[0],i,u),A(s,e[0]),k(s,s,u),m(s,c)&&k(e[0],e[0],d),A(s,e[0]),k(s,s,u),m(s,c)?-1:(g(e[0])===r[31]>>7&&_(e[0],n,e[0]),k(e[3],e[0],e[1]),0)}var z=64;function q(){for(var e=0;e<arguments.length;e++)if(!(arguments[e]instanceof Uint8Array))throw new TypeError("unexpected type, use Uint8Array")}function O(e){for(var t=0;t<e.length;t++)e[t]=0}e.scalarMult=function(e,t){if(q(e,t),32!==e.length)throw Error("bad n size");if(32!==t.length)throw Error("bad p size");var r=new Uint8Array(32);return E(r,e,t),r},e.box={},e.box.keyPair=function(){var e,t,i=new Uint8Array(32),n=new Uint8Array(32);return e=i,r(t=n,32),P(e,t),{publicKey:i,secretKey:n}},e.box.keyPair.fromSecretKey=function(e){if(q(e),32!==e.length)throw Error("bad secret key size");var t=new Uint8Array(32);return P(t,e),{publicKey:t,secretKey:new Uint8Array(e)}},e.sign=function(r,i){if(q(r,i),64!==i.length)throw Error("bad secret key size");var n=new Uint8Array(z+r.length);return function(r,i,n,a){var s,o,c,u,h,d=new Float64Array(64),f=[t(),t(),t(),t()];(s=e.hash(a.subarray(0,32)))[0]&=248,s[31]&=127,s[31]|=64;var l=n+64;for(u=0;u<n;u++)r[64+u]=i[u];for(u=0;u<32;u++)r[32+u]=s[32+u];for(B(c=e.hash(r.subarray(32,l))),D(f,c),C(r,f),u=32;u<64;u++)r[u]=a[u];for(B(o=e.hash(r.subarray(0,l))),u=0;u<64;u++)d[u]=0;for(u=0;u<32;u++)d[u]=c[u];for(u=0;u<32;u++)for(h=0;h<32;h++)d[u+h]+=o[u]*s[h];U(r.subarray(32),d)}(n,r,r.length,i),n},e.sign.detached=function(t,r){for(var i=e.sign(t,r),n=new Uint8Array(z),a=0;a<n.length;a++)n[a]=i[a];return n},e.sign.detached.verify=function(r,i,n){if(q(r,i,n),i.length!==z)throw Error("bad signature size");if(32!==n.length)throw Error("bad public key size");var a,s=new Uint8Array(z+r.length),o=new Uint8Array(z+r.length);for(a=0;a<z;a++)s[a]=i[a];for(a=0;a<r.length;a++)s[a+z]=r[a];return function(r,i,n,a){var s,o,c=new Uint8Array(32),u=[t(),t(),t(),t()],h=[t(),t(),t(),t()];if(n<64)return-1;if(T(h,a))return-1;for(s=0;s<n;s++)r[s]=i[s];for(s=0;s<32;s++)r[s+32]=a[s];if(B(o=e.hash(r.subarray(0,n))),K(u,h,o),D(h,i.subarray(32)),x(u,h),C(c,u),n-=64,f(i,0,c,0)){for(s=0;s<n;s++)r[s]=0;return-1}for(s=0;s<n;s++)r[s]=i[s+64];return n}(o,s,s.length,n)>=0},e.sign.keyPair=function(){var e=new Uint8Array(32),t=new Uint8Array(64);return R(e,t),{publicKey:e,secretKey:t}},e.sign.keyPair.fromSecretKey=function(e){if(q(e),64!==e.length)throw Error("bad secret key size");for(var t=new Uint8Array(32),r=0;r<t.length;r++)t[r]=e[32+r];return{publicKey:t,secretKey:new Uint8Array(e)}},e.sign.keyPair.fromSeed=function(e){if(q(e),32!==e.length)throw Error("bad seed size");for(var t=new Uint8Array(32),r=new Uint8Array(64),i=0;i<32;i++)r[i]=e[i];return R(t,r,!0),{publicKey:t,secretKey:r}},e.setPRNG=function(e){r=e},function(){var t="undefined"!=typeof self?self.crypto||self.msCrypto:null;if(t&&t.getRandomValues){e.setPRNG((function(e,r){var i,n=new Uint8Array(r);for(i=0;i<r;i+=65536)t.getRandomValues(n.subarray(i,i+Math.min(r-i,65536)));for(i=0;i<r;i++)e[i]=n[i];O(n)}))}else(t=void 0)&&t.randomBytes&&e.setPRNG((function(e,r){var i,n=t.randomBytes(r);for(i=0;i<r;i++)e[i]=n[i];O(n)}))}()}(e.exports?e.exports:self.nacl=self.nacl||{})}));const Pi=V.getNodeCrypto();async function xi(e){const t=new Uint8Array(e);if("undefined"!=typeof crypto&&crypto.getRandomValues)crypto.getRandomValues(t);else if(Pi){const e=Pi.randomBytes(t.length);t.set(e)}else{if(!Ci.buffer)throw Error("No secure random number generator available.");await Ci.get(t)}return t}async function Mi(e,t){const r=await V.getBigInteger();if(t.lt(e))throw Error("Illegal parameter value: max <= min");const i=t.sub(e),n=i.byteLength();return new r(await xi(n+8)).mod(i).add(e)}const Ci=new class{constructor(){this.buffer=null,this.size=null,this.callback=null}init(e,t){this.buffer=new Uint8Array(e),this.size=0,this.callback=t}set(e){if(!this.buffer)throw Error("RandomBuffer is not initialized");if(!(e instanceof Uint8Array))throw Error("Invalid type: buf not an Uint8Array");const t=this.buffer.length-this.size;e.length>t&&(e=e.subarray(0,t)),this.buffer.set(e,this.size),this.size+=e.length}async get(e){if(!this.buffer)throw Error("RandomBuffer is not initialized");if(!(e instanceof Uint8Array))throw Error("Invalid type: buf not an Uint8Array");if(this.size<e.length){if(!this.callback)throw Error("Random number buffer depleted");return await this.callback(),this.get(e)}for(let t=0;t<e.length;t++)e[t]=this.buffer[--this.size],this.buffer[this.size]=0}};var Ki=/*#__PURE__*/Object.freeze({__proto__:null,getRandomBytes:xi,getRandomBigInteger:Mi,randomBuffer:Ci});async function Di(e,t,r){const i=await V.getBigInteger(),n=new i(1),a=n.leftShift(new i(e-1)),s=new i(30),o=[1,6,5,4,3,2,1,4,3,2,1,2,1,4,3,2,1,2,1,4,3,2,1,6,5,4,3,2,1,2],c=await Mi(a,a.leftShift(n));let u=c.mod(s).toNumber();do{c.iadd(new i(o[u])),u=(u+o[u])%o.length,c.bitLength()>e&&(c.imod(a.leftShift(n)).iadd(a),u=c.mod(s).toNumber())}while(!await Ri(c,t,r));return c}async function Ri(e,t,r){return!(t&&!e.dec().gcd(t).isOne())&&(!!await async function(e){const t=await V.getBigInteger();return Ii.every((r=>0!==e.mod(new t(r))))}(e)&&(!!await async function(e,t){const r=await V.getBigInteger();return(t=t||new r(2)).modExp(e.dec(),e).isOne()}(e)&&!!await async function(e,t,r){const i=await V.getBigInteger(),n=e.bitLength();t||(t=Math.max(1,n/48|0));const a=e.dec();let s=0;for(;!a.getBit(s);)s++;const o=e.rightShift(new i(s));for(;t>0;t--){let t,n=(r?r():await Mi(new i(2),a)).modExp(o,e);if(!n.isOne()&&!n.equal(a)){for(t=1;t<s;t++){if(n=n.mul(n).mod(e),n.isOne())return!1;if(n.equal(a))break}if(t===s)return!1}}return!0}(e,r)))}const Ii=[7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,3019,3023,3037,3041,3049,3061,3067,3079,3083,3089,3109,3119,3121,3137,3163,3167,3169,3181,3187,3191,3203,3209,3217,3221,3229,3251,3253,3257,3259,3271,3299,3301,3307,3313,3319,3323,3329,3331,3343,3347,3359,3361,3371,3373,3389,3391,3407,3413,3433,3449,3457,3461,3463,3467,3469,3491,3499,3511,3517,3527,3529,3533,3539,3541,3547,3557,3559,3571,3581,3583,3593,3607,3613,3617,3623,3631,3637,3643,3659,3671,3673,3677,3691,3697,3701,3709,3719,3727,3733,3739,3761,3767,3769,3779,3793,3797,3803,3821,3823,3833,3847,3851,3853,3863,3877,3881,3889,3907,3911,3917,3919,3923,3929,3931,3943,3947,3967,3989,4001,4003,4007,4013,4019,4021,4027,4049,4051,4057,4073,4079,4091,4093,4099,4111,4127,4129,4133,4139,4153,4157,4159,4177,4201,4211,4217,4219,4229,4231,4241,4243,4253,4259,4261,4271,4273,4283,4289,4297,4327,4337,4339,4349,4357,4363,4373,4391,4397,4409,4421,4423,4441,4447,4451,4457,4463,4481,4483,4493,4507,4513,4517,4519,4523,4547,4549,4561,4567,4583,4591,4597,4603,4621,4637,4639,4643,4649,4651,4657,4663,4673,4679,4691,4703,4721,4723,4729,4733,4751,4759,4783,4787,4789,4793,4799,4801,4813,4817,4831,4861,4871,4877,4889,4903,4909,4919,4931,4933,4937,4943,4951,4957,4967,4969,4973,4987,4993,4999];const Ui=[];async function Bi(e,t){const r=e.length;if(r>t-11)throw Error("Message too long");const i=await async function(e){const t=new Uint8Array(e);let r=0;for(;r<e;){const i=await xi(e-r);for(let e=0;e<i.length;e++)0!==i[e]&&(t[r++]=i[e])}return t}(t-r-3),n=new Uint8Array(t);return n[1]=2,n.set(i,2),n.set(e,t-r),n}function Ti(e){let t=2;for(;0!==e[t]&&t<e.length;)t++;const r=t-2,i=e[t++];if(0===e[0]&&2===e[1]&&r>=8&&0===i)return e.subarray(t);throw Error("Decryption error")}async function zi(e,t,r){let i;if(t.length!==Tr.getHashByteLength(e))throw Error("Invalid hash length");const n=new Uint8Array(Ui[e].length);for(i=0;i<Ui[e].length;i++)n[i]=Ui[e][i];const a=n.length+t.length;if(r<a+11)throw Error("Intended encoded message length too short");const s=new Uint8Array(r-a-3).fill(255),o=new Uint8Array(r);return o[1]=1,o.set(s,2),o.set(n,r-a),o.set(t,r-t.length),o}Ui[1]=[48,32,48,12,6,8,42,134,72,134,247,13,2,5,5,0,4,16],Ui[2]=[48,33,48,9,6,5,43,14,3,2,26,5,0,4,20],Ui[3]=[48,33,48,9,6,5,43,36,3,2,1,5,0,4,20],Ui[8]=[48,49,48,13,6,9,96,134,72,1,101,3,4,2,1,5,0,4,32],Ui[9]=[48,65,48,13,6,9,96,134,72,1,101,3,4,2,2,5,0,4,48],Ui[10]=[48,81,48,13,6,9,96,134,72,1,101,3,4,2,3,5,0,4,64],Ui[11]=[48,45,48,13,6,9,96,134,72,1,101,3,4,2,4,5,0,4,28];var qi=/*#__PURE__*/Object.freeze({__proto__:null,emeEncode:Bi,emeDecode:Ti,emsaEncode:zi});const Oi=V.getWebCrypto(),Fi=V.getNodeCrypto(),Ni=void 0,Li=V.detectNode()?Ni.define("RSAPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())})):void 0,ji=V.detectNode()?Ni.define("RSAPubliceKey",(function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())})):void 0;var Wi=/*#__PURE__*/Object.freeze({__proto__:null,sign:async function(e,t,r,i,n,a,s,o,c){if(t&&!V.isStream(t))if(V.getWebCrypto())try{return await async function(e,t,r,i,n,a,s,o){const c=await async function(e,t,r,i,n,a){const s=await V.getBigInteger(),o=new s(i),c=new s(n),u=new s(r);let h=u.mod(c.dec()),d=u.mod(o.dec());return d=d.toUint8Array(),h=h.toUint8Array(),{kty:"RSA",n:ee(e,!0),e:ee(t,!0),d:ee(r,!0),p:ee(n,!0),q:ee(i,!0),dp:ee(h,!0),dq:ee(d,!0),qi:ee(a,!0),ext:!0}}(r,i,n,a,s,o),u={name:"RSASSA-PKCS1-v1_5",hash:{name:e}},h=await Oi.importKey("jwk",c,u,!1,["sign"]);return new Uint8Array(await Oi.sign({name:"RSASSA-PKCS1-v1_5",hash:e},h,t))}(re.read(re.webHash,e),t,r,i,n,a,s,o)}catch(e){V.printDebugError(e)}else if(V.getNodeCrypto())return async function(e,t,r,i,n,a,s,o){const{default:c}=await Promise.resolve().then((function(){return Rf})),u=new c(a),h=new c(s),d=new c(n),f=d.mod(h.subn(1)),l=d.mod(u.subn(1)),p=Fi.createSign(re.read(re.hash,e));p.write(t),p.end();const y={version:0,modulus:new c(r),publicExponent:new c(i),privateExponent:new c(n),prime1:new c(s),prime2:new c(a),exponent1:f,exponent2:l,coefficient:new c(o)};if(void 0!==Fi.createPrivateKey){const e=Li.encode(y,"der");return new Uint8Array(p.sign({key:e,format:"der",type:"pkcs1"}))}const b=Li.encode(y,"pem",{label:"RSA PRIVATE KEY"});return new Uint8Array(p.sign(b))}(e,t,r,i,n,a,s,o);return async function(e,t,r,i){const n=await V.getBigInteger();t=new n(t);const a=new n(await zi(e,i,t.byteLength()));if(r=new n(r),a.gte(t))throw Error("Message size cannot exceed modulus size");return a.modExp(r,t).toUint8Array("be",t.byteLength())}(e,r,n,c)},verify:async function(e,t,r,i,n,a){if(t&&!V.isStream(t))if(V.getWebCrypto())try{return await async function(e,t,r,i,n){const a=function(e,t){return{kty:"RSA",n:ee(e,!0),e:ee(t,!0),ext:!0}}(i,n),s=await Oi.importKey("jwk",a,{name:"RSASSA-PKCS1-v1_5",hash:{name:e}},!1,["verify"]);return Oi.verify({name:"RSASSA-PKCS1-v1_5",hash:e},s,r,t)}(re.read(re.webHash,e),t,r,i,n)}catch(e){V.printDebugError(e)}else if(V.getNodeCrypto())return async function(e,t,r,i,n){const{default:a}=await Promise.resolve().then((function(){return Rf})),s=Fi.createVerify(re.read(re.hash,e));s.write(t),s.end();const o={modulus:new a(i),publicExponent:new a(n)};let c;if(void 0!==Fi.createPrivateKey){c={key:ji.encode(o,"der"),format:"der",type:"pkcs1"}}else c=ji.encode(o,"pem",{label:"RSA PUBLIC KEY"});try{return await s.verify(c,r)}catch(e){return!1}}(e,t,r,i,n);return async function(e,t,r,i,n){const a=await V.getBigInteger();if(r=new a(r),t=new a(t),i=new a(i),t.gte(r))throw Error("Signature size cannot exceed modulus size");const s=t.modExp(i,r).toUint8Array("be",r.byteLength()),o=await zi(e,n,r.byteLength());return V.equalsUint8Array(s,o)}(e,r,i,n,a)},encrypt:async function(e,t,r){return V.getNodeCrypto()?async function(e,t,r){const{default:i}=await Promise.resolve().then((function(){return Rf})),n={modulus:new i(t),publicExponent:new i(r)};let a;if(void 0!==Fi.createPrivateKey){a={key:ji.encode(n,"der"),format:"der",type:"pkcs1",padding:Fi.constants.RSA_PKCS1_PADDING}}else{a={key:ji.encode(n,"pem",{label:"RSA PUBLIC KEY"}),padding:Fi.constants.RSA_PKCS1_PADDING}}return new Uint8Array(Fi.publicEncrypt(a,e))}(e,t,r):async function(e,t,r){const i=await V.getBigInteger();if(t=new i(t),e=new i(await Bi(e,t.byteLength())),r=new i(r),e.gte(t))throw Error("Message size cannot exceed modulus size");return e.modExp(r,t).toUint8Array("be",t.byteLength())}(e,t,r)},decrypt:async function(e,t,r,i,n,a,s){return V.getNodeCrypto()?async function(e,t,r,i,n,a,s){const{default:o}=await Promise.resolve().then((function(){return Rf})),c=new o(n),u=new o(a),h=new o(i),d=h.mod(u.subn(1)),f=h.mod(c.subn(1)),l={version:0,modulus:new o(t),publicExponent:new o(r),privateExponent:new o(i),prime1:new o(a),prime2:new o(n),exponent1:d,exponent2:f,coefficient:new o(s)};let p;if(void 0!==Fi.createPrivateKey){p={key:Li.encode(l,"der"),format:"der",type:"pkcs1",padding:Fi.constants.RSA_PKCS1_PADDING}}else{p={key:Li.encode(l,"pem",{label:"RSA PRIVATE KEY"}),padding:Fi.constants.RSA_PKCS1_PADDING}}try{return new Uint8Array(Fi.privateDecrypt(p,e))}catch(e){throw Error("Decryption error")}}(e,t,r,i,n,a,s):async function(e,t,r,i,n,a,s){const o=await V.getBigInteger();if(e=new o(e),t=new o(t),r=new o(r),i=new o(i),n=new o(n),a=new o(a),s=new o(s),e.gte(t))throw Error("Data too large.");const c=i.mod(a.dec()),u=i.mod(n.dec()),h=(await Mi(new o(2),t)).mod(t),d=h.modInv(t).modExp(r,t),f=(e=e.mul(d).mod(t)).modExp(u,n),l=e.modExp(c,a);let p=s.mul(l.sub(f)).mod(a).mul(n).add(f);return p=p.mul(h).mod(t),Ti(p.toUint8Array("be",t.byteLength()))}(e,t,r,i,n,a,s)},generate:async function(e,t){if(t=new(await V.getBigInteger())(t),V.getWebCrypto()){const r={name:"RSASSA-PKCS1-v1_5",modulusLength:e,publicExponent:t.toUint8Array(),hash:{name:"SHA-1"}},i=await Oi.generateKey(r,!0,["sign","verify"]),n=await Oi.exportKey("jwk",i.privateKey);return{n:J(n.n),e:t.toUint8Array(),d:J(n.d),p:J(n.q),q:J(n.p),u:J(n.qi)}}if(V.getNodeCrypto()&&Fi.generateKeyPair&&Li){const r={modulusLength:e,publicExponent:t.toNumber(),publicKeyEncoding:{type:"pkcs1",format:"der"},privateKeyEncoding:{type:"pkcs1",format:"der"}},i=await new Promise(((e,t)=>Fi.generateKeyPair("rsa",r,((r,i,n)=>{r?t(r):e(Li.decode(n,"der"))}))));return{n:i.modulus.toArrayLike(Uint8Array),e:i.publicExponent.toArrayLike(Uint8Array),d:i.privateExponent.toArrayLike(Uint8Array),p:i.prime2.toArrayLike(Uint8Array),q:i.prime1.toArrayLike(Uint8Array),u:i.coefficient.toArrayLike(Uint8Array)}}let r,i,n;do{i=await Di(e-(e>>1),t,40),r=await Di(e>>1,t,40),n=r.mul(i)}while(n.bitLength()!==e);const a=r.dec().imul(i.dec());return i.lt(r)&&([r,i]=[i,r]),{n:n.toUint8Array(),e:t.toUint8Array(),d:t.modInv(a).toUint8Array(),p:r.toUint8Array(),q:i.toUint8Array(),u:r.modInv(i).toUint8Array()}},validateParams:async function(e,t,r,i,n,a){const s=await V.getBigInteger();if(e=new s(e),i=new s(i),n=new s(n),!i.mul(n).equal(e))return!1;const o=new s(2);if(a=new s(a),!i.mul(a).mod(n).isOne())return!1;t=new s(t),r=new s(r);const c=new s(Math.floor(e.bitLength()/3)),u=await Mi(o,o.leftShift(c)),h=u.mul(r).mul(t);return!(!h.mod(i.dec()).equal(u)||!h.mod(n.dec()).equal(u))}});var Hi=/*#__PURE__*/Object.freeze({__proto__:null,encrypt:async function(e,t,r,i){const n=await V.getBigInteger();t=new n(t),r=new n(r),i=new n(i);const a=new n(await Bi(e,t.byteLength())),s=await Mi(new n(1),t.dec());return{c1:r.modExp(s,t).toUint8Array(),c2:i.modExp(s,t).imul(a).imod(t).toUint8Array()}},decrypt:async function(e,t,r,i){const n=await V.getBigInteger();return e=new n(e),t=new n(t),r=new n(r),i=new n(i),Ti(e.modExp(i,r).modInv(r).imul(t).imod(r).toUint8Array("be",r.byteLength()))},validateParams:async function(e,t,r,i){const n=await V.getBigInteger();e=new n(e),t=new n(t),r=new n(r);const a=new n(1);if(t.lte(a)||t.gte(e))return!1;const s=new n(e.bitLength()),o=new n(1023);if(s.lt(o))return!1;if(!t.modExp(e.dec(),e).isOne())return!1;let c=t;const u=new n(1),h=new n(2).leftShift(new n(17));for(;u.lt(h);){if(c=c.mul(t).imod(e),c.isOne())return!1;u.iinc()}i=new n(i);const d=new n(2),f=await Mi(d.leftShift(s.dec()),d.leftShift(s)),l=e.dec().imul(f).iadd(i);return!!r.equal(t.modExp(l,e))}});class Gi{constructor(e){if(e instanceof Gi)this.oid=e.oid;else if(V.isArray(e)||V.isUint8Array(e)){if(6===(e=new Uint8Array(e))[0]){if(e[1]!==e.length-2)throw Error("Length mismatch in DER encoded oid");e=e.subarray(2)}this.oid=e}else this.oid=""}read(e){if(e.length>=1){const t=e[0];if(e.length>=1+t)return this.oid=e.subarray(1,1+t),1+this.oid.length}throw Error("Invalid oid")}write(){return V.concatUint8Array([new Uint8Array([this.oid.length]),this.oid])}toHex(){return V.uint8ArrayToHex(this.oid)}getName(){const e=this.toHex();if(re.curve[e])return re.write(re.curve,e);throw Error("Unknown curve object identifier.")}}function Vi(e,t){return e.keyPair({priv:t})}function $i(e,t){const r=e.keyPair({pub:t});if(!0!==r.validate().result)throw Error("Invalid elliptic public key");return r}async function Zi(e){if(!ie.useIndutnyElliptic)throw Error("This curve is only supported in the full build of OpenPGP.js");const{default:t}=await Promise.resolve().then((function(){return Xl}));return new t.ec(e)}const Yi=V.getWebCrypto(),Xi=V.getNodeCrypto(),Qi={p256:"P-256",p384:"P-384",p521:"P-521"},Ji=Xi?Xi.getCurves():[],en=Xi?{secp256k1:Ji.includes("secp256k1")?"secp256k1":void 0,p256:Ji.includes("prime256v1")?"prime256v1":void 0,p384:Ji.includes("secp384r1")?"secp384r1":void 0,p521:Ji.includes("secp521r1")?"secp521r1":void 0,ed25519:Ji.includes("ED25519")?"ED25519":void 0,curve25519:Ji.includes("X25519")?"X25519":void 0,brainpoolP256r1:Ji.includes("brainpoolP256r1")?"brainpoolP256r1":void 0,brainpoolP384r1:Ji.includes("brainpoolP384r1")?"brainpoolP384r1":void 0,brainpoolP512r1:Ji.includes("brainpoolP512r1")?"brainpoolP512r1":void 0}:{},tn={p256:{oid:[6,8,42,134,72,206,61,3,1,7],keyType:re.publicKey.ecdsa,hash:re.hash.sha256,cipher:re.symmetric.aes128,node:en.p256,web:Qi.p256,payloadSize:32,sharedSize:256},p384:{oid:[6,5,43,129,4,0,34],keyType:re.publicKey.ecdsa,hash:re.hash.sha384,cipher:re.symmetric.aes192,node:en.p384,web:Qi.p384,payloadSize:48,sharedSize:384},p521:{oid:[6,5,43,129,4,0,35],keyType:re.publicKey.ecdsa,hash:re.hash.sha512,cipher:re.symmetric.aes256,node:en.p521,web:Qi.p521,payloadSize:66,sharedSize:528},secp256k1:{oid:[6,5,43,129,4,0,10],keyType:re.publicKey.ecdsa,hash:re.hash.sha256,cipher:re.symmetric.aes128,node:en.secp256k1,payloadSize:32},ed25519:{oid:[6,9,43,6,1,4,1,218,71,15,1],keyType:re.publicKey.eddsa,hash:re.hash.sha512,node:!1,payloadSize:32},curve25519:{oid:[6,10,43,6,1,4,1,151,85,1,5,1],keyType:re.publicKey.ecdh,hash:re.hash.sha256,cipher:re.symmetric.aes128,node:!1,payloadSize:32},brainpoolP256r1:{oid:[6,9,43,36,3,3,2,8,1,1,7],keyType:re.publicKey.ecdsa,hash:re.hash.sha256,cipher:re.symmetric.aes128,node:en.brainpoolP256r1,payloadSize:32},brainpoolP384r1:{oid:[6,9,43,36,3,3,2,8,1,1,11],keyType:re.publicKey.ecdsa,hash:re.hash.sha384,cipher:re.symmetric.aes192,node:en.brainpoolP384r1,payloadSize:48},brainpoolP512r1:{oid:[6,9,43,36,3,3,2,8,1,1,13],keyType:re.publicKey.ecdsa,hash:re.hash.sha512,cipher:re.symmetric.aes256,node:en.brainpoolP512r1,payloadSize:64}};class rn{constructor(e,t){try{(V.isArray(e)||V.isUint8Array(e))&&(e=new Gi(e)),e instanceof Gi&&(e=e.getName()),this.name=re.write(re.curve,e)}catch(e){throw Error("Not valid curve")}t=t||tn[this.name],this.keyType=t.keyType,this.oid=t.oid,this.hash=t.hash,this.cipher=t.cipher,this.node=t.node&&tn[this.name],this.web=t.web&&tn[this.name],this.payloadSize=t.payloadSize,this.web&&V.getWebCrypto()?this.type="web":this.node&&V.getNodeCrypto()?this.type="node":"curve25519"===this.name?this.type="curve25519":"ed25519"===this.name&&(this.type="ed25519")}async genKeyPair(){let e;switch(this.type){case"web":try{return await async function(e){const t=await Yi.generateKey({name:"ECDSA",namedCurve:Qi[e]},!0,["sign","verify"]),r=await Yi.exportKey("jwk",t.privateKey);return{publicKey:an(await Yi.exportKey("jwk",t.publicKey)),privateKey:J(r.d)}}(this.name)}catch(e){V.printDebugError("Browser did not support generating ec key "+e.message);break}case"node":return async function(e){const t=Xi.createECDH(en[e]);return await t.generateKeys(),{publicKey:new Uint8Array(t.getPublicKey()),privateKey:new Uint8Array(t.getPrivateKey())}}(this.name);case"curve25519":{const t=await xi(32);t[0]=127&t[0]|64,t[31]&=248;const r=t.slice().reverse();e=Ei.box.keyPair.fromSecretKey(r);return{publicKey:V.concatUint8Array([new Uint8Array([64]),e.publicKey]),privateKey:t}}case"ed25519":{const e=await xi(32),t=Ei.sign.keyPair.fromSeed(e);return{publicKey:V.concatUint8Array([new Uint8Array([64]),t.publicKey]),privateKey:e}}}const t=await Zi(this.name);return e=await t.genKeyPair({entropy:V.uint8ArrayToString(await xi(32))}),{publicKey:new Uint8Array(e.getPublic("array",!1)),privateKey:e.getPrivate().toArrayLike(Uint8Array)}}}async function nn(e,t,r,i){const n={p256:!0,p384:!0,p521:!0,secp256k1:!0,curve25519:e===re.publicKey.ecdh,brainpoolP256r1:!0,brainpoolP384r1:!0,brainpoolP512r1:!0},a=t.getName();if(!n[a])return!1;if("curve25519"===a){i=i.slice().reverse();const{publicKey:e}=Ei.box.keyPair.fromSecretKey(i);r=new Uint8Array(r);const t=new Uint8Array([64,...e]);return!!V.equalsUint8Array(t,r)}const s=await Zi(a);try{r=$i(s,r).getPublic()}catch(e){return!1}return!!Vi(s,i).getPublic().eq(r)}function an(e){const t=J(e.x),r=J(e.y),i=new Uint8Array(t.length+r.length+1);return i[0]=4,i.set(t,1),i.set(r,t.length+1),i}function sn(e,t,r){const i=e,n=r.slice(1,i+1),a=r.slice(i+1,2*i+1);return{kty:"EC",crv:t,x:ee(n,!0),y:ee(a,!0),ext:!0}}function on(e,t,r,i){const n=sn(e,t,r);return n.d=ee(i,!0),n}const cn=V.getWebCrypto(),un=V.getNodeCrypto();async function hn(e,t,r,i,n,a){const s=new rn(e);if(r&&!V.isStream(r)){const e={publicKey:i,privateKey:n};switch(s.type){case"web":try{return await async function(e,t,r,i){const n=e.payloadSize,a=on(e.payloadSize,Qi[e.name],i.publicKey,i.privateKey),s=await cn.importKey("jwk",a,{name:"ECDSA",namedCurve:Qi[e.name],hash:{name:re.read(re.webHash,e.hash)}},!1,["sign"]),o=new Uint8Array(await cn.sign({name:"ECDSA",namedCurve:Qi[e.name],hash:{name:re.read(re.webHash,t)}},s,r));return{r:o.slice(0,n),s:o.slice(n,n<<1)}}(s,t,r,e)}catch(e){if("p521"!==s.name&&("DataError"===e.name||"OperationError"===e.name))throw e;V.printDebugError("Browser did not support signing: "+e.message)}break;case"node":{const i=await async function(e,t,r,i){const n=un.createSign(re.read(re.hash,t));n.write(r),n.end();const a=pn.encode({version:1,parameters:e.oid,privateKey:Array.from(i.privateKey),publicKey:{unused:0,data:Array.from(i.publicKey)}},"pem",{label:"EC PRIVATE KEY"});return ln.decode(n.sign(a),"der")}(s,t,r,e);return{r:i.r.toArrayLike(Uint8Array),s:i.s.toArrayLike(Uint8Array)}}}}return async function(e,t,r){const i=await Zi(e.name),n=Vi(i,r).sign(t);return{r:n.r.toArrayLike(Uint8Array),s:n.s.toArrayLike(Uint8Array)}}(s,a,n)}async function dn(e,t,r,i,n,a){const s=new rn(e);if(i&&!V.isStream(i))switch(s.type){case"web":try{return await async function(e,t,{r,s:i},n,a){const s=sn(e.payloadSize,Qi[e.name],a),o=await cn.importKey("jwk",s,{name:"ECDSA",namedCurve:Qi[e.name],hash:{name:re.read(re.webHash,e.hash)}},!1,["verify"]),c=V.concatUint8Array([r,i]).buffer;return cn.verify({name:"ECDSA",namedCurve:Qi[e.name],hash:{name:re.read(re.webHash,t)}},o,c,n)}(s,t,r,i,n)}catch(e){if("p521"!==s.name&&("DataError"===e.name||"OperationError"===e.name))throw e;V.printDebugError("Browser did not support verifying: "+e.message)}break;case"node":return async function(e,t,{r,s:i},n,a){const{default:s}=await Promise.resolve().then((function(){return Rf})),o=un.createVerify(re.read(re.hash,t));o.write(n),o.end();const c=bn.encode({algorithm:{algorithm:[1,2,840,10045,2,1],parameters:e.oid},subjectPublicKey:{unused:0,data:Array.from(a)}},"pem",{label:"PUBLIC KEY"}),u=ln.encode({r:new s(r),s:new s(i)},"der");try{return o.verify(c,u)}catch(e){return!1}}(s,t,r,i,n)}return async function(e,t,r,i){const n=await Zi(e.name);return $i(n,i).verify(r,t)}(s,r,void 0===t?i:a,n)}const fn=void 0,ln=un?fn.define("ECDSASignature",(function(){this.seq().obj(this.key("r").int(),this.key("s").int())})):void 0,pn=un?fn.define("ECPrivateKey",(function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").explicit(0).optional().any(),this.key("publicKey").explicit(1).optional().bitstr())})):void 0,yn=un?fn.define("AlgorithmIdentifier",(function(){this.seq().obj(this.key("algorithm").objid(),this.key("parameters").optional().any())})):void 0,bn=un?fn.define("SubjectPublicKeyInfo",(function(){this.seq().obj(this.key("algorithm").use(yn),this.key("subjectPublicKey").bitstr())})):void 0;var mn=/*#__PURE__*/Object.freeze({__proto__:null,sign:hn,verify:dn,validateParams:async function(e,t,r){const i=new rn(e);if(i.keyType!==re.publicKey.ecdsa)return!1;switch(i.type){case"web":case"node":{const i=await xi(8),n=re.hash.sha256,a=await Tr.digest(n,i);try{const s=await hn(e,n,i,t,r,a);return await dn(e,n,s,i,t,a)}catch(e){return!1}}default:return nn(re.publicKey.ecdsa,e,t,r)}}});Ei.hash=e=>new Uint8Array(Wt().update(e).digest());var gn=/*#__PURE__*/Object.freeze({__proto__:null,sign:async function(e,t,r,i,n,a){if(Tr.getHashByteLength(t)<Tr.getHashByteLength(re.hash.sha256))throw Error("Hash algorithm too weak: sha256 or stronger is required for EdDSA.");const s=V.concatUint8Array([n,i.subarray(1)]),o=Ei.sign.detached(a,s);return{r:o.subarray(0,32),s:o.subarray(32)}},verify:async function(e,t,{r,s:i},n,a,s){const o=V.concatUint8Array([r,i]);return Ei.sign.detached.verify(s,o,a.subarray(1))},validateParams:async function(e,t,r){if("ed25519"!==e.getName())return!1;const{publicKey:i}=Ei.sign.keyPair.fromSeed(r),n=new Uint8Array([64,...i]);return V.equalsUint8Array(t,n)}});function wn(e,t){const r=new je["aes"+8*e.length](e),i=new Uint32Array([2795939494,2795939494]),n=_n(t);let a=i;const s=n,o=n.length/2,c=new Uint32Array([0,0]);let u=new Uint32Array(4);for(let e=0;e<=5;++e)for(let t=0;t<o;++t)c[1]=o*e+(1+t),u[0]=a[0],u[1]=a[1],u[2]=s[2*t],u[3]=s[2*t+1],u=_n(r.encrypt(kn(u))),a=u.subarray(0,2),a[0]^=c[0],a[1]^=c[1],s[2*t]=u[2],s[2*t+1]=u[3];return kn(a,s)}function vn(e,t){const r=new je["aes"+8*e.length](e),i=new Uint32Array([2795939494,2795939494]),n=_n(t);let a=n.subarray(0,2);const s=n.subarray(2),o=n.length/2-1,c=new Uint32Array([0,0]);let u=new Uint32Array(4);for(let e=5;e>=0;--e)for(let t=o-1;t>=0;--t)c[1]=o*e+(t+1),u[0]=a[0]^c[0],u[1]=a[1]^c[1],u[2]=s[2*t],u[3]=s[2*t+1],u=_n(r.decrypt(kn(u))),a=u.subarray(0,2),s[2*t]=u[2],s[2*t+1]=u[3];if(a[0]===i[0]&&a[1]===i[1])return kn(s);throw Error("Key Data Integrity failed")}function _n(e){const{length:t}=e,r=function(e){if(V.isString(e)){const{length:t}=e,r=new ArrayBuffer(t),i=new Uint8Array(r);for(let r=0;r<t;++r)i[r]=e.charCodeAt(r);return r}return new Uint8Array(e).buffer}(e),i=new DataView(r),n=new Uint32Array(t/4);for(let e=0;e<t/4;++e)n[e]=i.getUint32(4*e);return n}function kn(){let e=0;for(let t=0;t<arguments.length;++t)e+=4*arguments[t].length;const t=new ArrayBuffer(e),r=new DataView(t);let i=0;for(let e=0;e<arguments.length;++e){for(let t=0;t<arguments[e].length;++t)r.setUint32(i+4*t,arguments[e][t]);i+=4*arguments[e].length}return new Uint8Array(t)}var An=/*#__PURE__*/Object.freeze({__proto__:null,wrap:wn,unwrap:vn});function Sn(e){const t=8-e.length%8,r=new Uint8Array(e.length+t).fill(t);return r.set(e),r}function En(e){const t=e.length;if(t>0){const r=e[t-1];if(r>=1){const i=e.subarray(t-r),n=new Uint8Array(r).fill(r);if(V.equalsUint8Array(i,n))return e.subarray(0,t-r)}}throw Error("Invalid padding")}var Pn=/*#__PURE__*/Object.freeze({__proto__:null,encode:Sn,decode:En});const xn=V.getWebCrypto(),Mn=V.getNodeCrypto();function Cn(e,t,r,i){return V.concatUint8Array([t.write(),new Uint8Array([e]),r.write(),V.stringToUint8Array("Anonymous Sender    "),i.subarray(0,20)])}async function Kn(e,t,r,i,n=!1,a=!1){let s;if(n){for(s=0;s<t.length&&0===t[s];s++);t=t.subarray(s)}if(a){for(s=t.length-1;s>=0&&0===t[s];s--);t=t.subarray(0,s+1)}return(await Tr.digest(e,V.concatUint8Array([new Uint8Array([0,0,0,1]),t,i]))).subarray(0,r)}async function Dn(e,t){switch(e.type){case"curve25519":{const r=await xi(32),{secretKey:i,sharedKey:n}=await Rn(e,t,null,r);let{publicKey:a}=Ei.box.keyPair.fromSecretKey(i);return a=V.concatUint8Array([new Uint8Array([64]),a]),{publicKey:a,sharedKey:n}}case"web":if(e.web&&V.getWebCrypto())try{return await async function(e,t){const r=sn(e.payloadSize,e.web.web,t);let i=xn.generateKey({name:"ECDH",namedCurve:e.web.web},!0,["deriveKey","deriveBits"]),n=xn.importKey("jwk",r,{name:"ECDH",namedCurve:e.web.web},!1,[]);[i,n]=await Promise.all([i,n]);let a=xn.deriveBits({name:"ECDH",namedCurve:e.web.web,public:n},i.privateKey,e.web.sharedSize),s=xn.exportKey("jwk",i.publicKey);[a,s]=await Promise.all([a,s]);const o=new Uint8Array(a);return{publicKey:new Uint8Array(an(s)),sharedKey:o}}(e,t)}catch(e){V.printDebugError(e)}break;case"node":return async function(e,t){const r=Mn.createECDH(e.node.node);r.generateKeys();const i=new Uint8Array(r.computeSecret(t));return{publicKey:new Uint8Array(r.getPublicKey()),sharedKey:i}}(e,t)}return async function(e,t){const r=await Zi(e.name),i=await e.genKeyPair();t=$i(r,t);const n=Vi(r,i.privateKey),a=i.publicKey,s=n.derive(t.getPublic()),o=r.curve.p.byteLength(),c=s.toArrayLike(Uint8Array,"be",o);return{publicKey:a,sharedKey:c}}(e,t)}async function Rn(e,t,r,i){if(i.length!==e.payloadSize){const t=new Uint8Array(e.payloadSize);t.set(i,e.payloadSize-i.length),i=t}switch(e.type){case"curve25519":{const e=i.slice().reverse();return{secretKey:e,sharedKey:Ei.scalarMult(e,t.subarray(1))}}case"web":if(e.web&&V.getWebCrypto())try{return await async function(e,t,r,i){const n=on(e.payloadSize,e.web.web,r,i);let a=xn.importKey("jwk",n,{name:"ECDH",namedCurve:e.web.web},!0,["deriveKey","deriveBits"]);const s=sn(e.payloadSize,e.web.web,t);let o=xn.importKey("jwk",s,{name:"ECDH",namedCurve:e.web.web},!0,[]);[a,o]=await Promise.all([a,o]);let c=xn.deriveBits({name:"ECDH",namedCurve:e.web.web,public:o},a,e.web.sharedSize),u=xn.exportKey("jwk",a);[c,u]=await Promise.all([c,u]);const h=new Uint8Array(c);return{secretKey:J(u.d),sharedKey:h}}(e,t,r,i)}catch(e){V.printDebugError(e)}break;case"node":return async function(e,t,r){const i=Mn.createECDH(e.node.node);i.setPrivateKey(r);const n=new Uint8Array(i.computeSecret(t));return{secretKey:new Uint8Array(i.getPrivateKey()),sharedKey:n}}(e,t,i)}return async function(e,t,r){const i=await Zi(e.name);t=$i(i,t),r=Vi(i,r);const n=new Uint8Array(r.getPrivate()),a=r.derive(t.getPublic()),s=i.curve.p.byteLength(),o=a.toArrayLike(Uint8Array,"be",s);return{secretKey:n,sharedKey:o}}(e,t,i)}var In=/*#__PURE__*/Object.freeze({__proto__:null,validateParams:async function(e,t,r){return nn(re.publicKey.ecdh,e,t,r)},encrypt:async function(e,t,r,i,n){const a=Sn(r),s=new rn(e),{publicKey:o,sharedKey:c}=await Dn(s,i),u=Cn(re.publicKey.ecdh,e,t,n),h=re.read(re.symmetric,t.cipher);return{publicKey:o,wrappedKey:wn(await Kn(t.hash,c,je[h].keySize,u),a)}},decrypt:async function(e,t,r,i,n,a,s){const o=new rn(e),{sharedKey:c}=await Rn(o,r,n,a),u=Cn(re.publicKey.ecdh,e,t,s),h=re.read(re.symmetric,t.cipher);let d;for(let e=0;e<3;e++)try{return En(vn(await Kn(t.hash,c,je[h].keySize,u,1===e,2===e),i))}catch(e){d=e}throw d}});var Un={rsa:Wi,elgamal:Hi,elliptic:/*#__PURE__*/Object.freeze({__proto__:null,Curve:rn,ecdh:In,ecdsa:mn,eddsa:gn,generate:async function(e){const t=await V.getBigInteger();e=new rn(e);const r=await e.genKeyPair(),i=new t(r.publicKey).toUint8Array(),n=new t(r.privateKey).toUint8Array("be",e.payloadSize);return{oid:e.oid,Q:i,secret:n,hash:e.hash,cipher:e.cipher}},getPreferredHashAlgo:function(e){return tn[re.write(re.curve,e.toHex())].hash}}),dsa:/*#__PURE__*/Object.freeze({__proto__:null,sign:async function(e,t,r,i,n,a){const s=await V.getBigInteger(),o=new s(1);let c,u,h,d;i=new s(i),n=new s(n),r=new s(r),a=new s(a),r=r.mod(i),a=a.mod(n);const f=new s(t.subarray(0,n.byteLength())).mod(n);for(;;){if(c=await Mi(o,n),u=r.modExp(c,i).imod(n),u.isZero())continue;const e=a.mul(u).imod(n);if(d=f.add(e).imod(n),h=c.modInv(n).imul(d).imod(n),!h.isZero())break}return{r:u.toUint8Array("be",n.byteLength()),s:h.toUint8Array("be",n.byteLength())}},verify:async function(e,t,r,i,n,a,s,o){const c=await V.getBigInteger(),u=new c(0);if(t=new c(t),r=new c(r),a=new c(a),s=new c(s),n=new c(n),o=new c(o),t.lte(u)||t.gte(s)||r.lte(u)||r.gte(s))return V.printDebug("invalid DSA Signature"),!1;const h=new c(i.subarray(0,s.byteLength())).imod(s),d=r.modInv(s);if(d.isZero())return V.printDebug("invalid DSA Signature"),!1;n=n.mod(a),o=o.mod(a);const f=h.mul(d).imod(s),l=t.mul(d).imod(s),p=n.modExp(f,a),y=o.modExp(l,a);return p.mul(y).imod(a).imod(s).equal(t)},validateParams:async function(e,t,r,i,n){const a=await V.getBigInteger();e=new a(e),t=new a(t),r=new a(r),i=new a(i);const s=new a(1);if(r.lte(s)||r.gte(e))return!1;if(!e.dec().mod(t).isZero())return!1;if(!r.modExp(t,e).isOne())return!1;const o=new a(t.bitLength()),c=new a(150);if(o.lt(c)||!await Ri(t,null,32))return!1;n=new a(n);const u=new a(2),h=await Mi(u.leftShift(o.dec()),u.leftShift(o)),d=t.mul(h).add(n);return!!i.equal(r.modExp(d,e))}}),nacl:Ei};var Bn=/*#__PURE__*/Object.freeze({__proto__:null,parseSignatureParams:function(e,t){let r=0;switch(e){case re.publicKey.rsaEncryptSign:case re.publicKey.rsaEncrypt:case re.publicKey.rsaSign:return{s:V.readMPI(t.subarray(r))};case re.publicKey.dsa:case re.publicKey.ecdsa:{const e=V.readMPI(t.subarray(r));r+=e.length+2;return{r:e,s:V.readMPI(t.subarray(r))}}case re.publicKey.eddsa:{let e=V.readMPI(t.subarray(r));r+=e.length+2,e=V.leftPad(e,32);let i=V.readMPI(t.subarray(r));return i=V.leftPad(i,32),{r:e,s:i}}default:throw Error("Invalid signature algorithm.")}},verify:async function(e,t,r,i,n,a){switch(e){case re.publicKey.rsaEncryptSign:case re.publicKey.rsaEncrypt:case re.publicKey.rsaSign:{const{n:e,e:s}=i,o=V.leftPad(r.s,e.length);return Un.rsa.verify(t,n,o,e,s,a)}case re.publicKey.dsa:{const{g:e,p:n,q:s,y:o}=i,{r:c,s:u}=r;return Un.dsa.verify(t,c,u,a,e,n,s,o)}case re.publicKey.ecdsa:{const{oid:e,Q:s}=i,o=new Un.elliptic.Curve(e).payloadSize,c=V.leftPad(r.r,o),u=V.leftPad(r.s,o);return Un.elliptic.ecdsa.verify(e,t,{r:c,s:u},n,s,a)}case re.publicKey.eddsa:{const{oid:e,Q:s}=i;return Un.elliptic.eddsa.verify(e,t,r,n,s,a)}default:throw Error("Invalid signature algorithm.")}},sign:async function(e,t,r,i,n,a){if(!r||!i)throw Error("Missing key parameters");switch(e){case re.publicKey.rsaEncryptSign:case re.publicKey.rsaEncrypt:case re.publicKey.rsaSign:{const{n:e,e:s}=r,{d:o,p:c,q:u,u:h}=i;return{s:await Un.rsa.sign(t,n,e,s,o,c,u,h,a)}}case re.publicKey.dsa:{const{g:e,p:n,q:s}=r,{x:o}=i;return Un.dsa.sign(t,a,e,n,s,o)}case re.publicKey.elgamal:throw Error("Signing with Elgamal is not defined in the OpenPGP standard.");case re.publicKey.ecdsa:{const{oid:e,Q:s}=r,{d:o}=i;return Un.elliptic.ecdsa.sign(e,t,n,s,o,a)}case re.publicKey.eddsa:{const{oid:e,Q:s}=r,{seed:o}=i;return Un.elliptic.eddsa.sign(e,t,n,s,o,a)}default:throw Error("Invalid signature algorithm.")}}});class Tn{constructor(e){e=void 0===e?new Uint8Array([]):V.isString(e)?V.stringToUint8Array(e):new Uint8Array(e),this.data=e}read(e){if(e.length>=1){const t=e[0];if(e.length>=1+t)return this.data=e.subarray(1,1+t),1+this.data.length}throw Error("Invalid symmetric key")}write(){return V.concatUint8Array([new Uint8Array([this.data.length]),this.data])}}class zn{constructor(e){if(e){const{hash:t,cipher:r}=e;this.hash=t,this.cipher=r}else this.hash=null,this.cipher=null}read(e){if(e.length<4||3!==e[0]||1!==e[1])throw Error("Cannot read KDFParams");return this.hash=e[2],this.cipher=e[3],4}write(){return new Uint8Array([3,1,this.hash,this.cipher])}}var qn=/*#__PURE__*/Object.freeze({__proto__:null,publicKeyEncrypt:async function(e,t,r,i){switch(e){case re.publicKey.rsaEncrypt:case re.publicKey.rsaEncryptSign:{const{n:e,e:i}=t;return{c:await Un.rsa.encrypt(r,e,i)}}case re.publicKey.elgamal:{const{p:e,g:i,y:n}=t;return Un.elgamal.encrypt(r,e,i,n)}case re.publicKey.ecdh:{const{oid:e,Q:n,kdfParams:a}=t,{publicKey:s,wrappedKey:o}=await Un.elliptic.ecdh.encrypt(e,a,r,n,i);return{V:s,C:new Tn(o)}}default:return[]}},publicKeyDecrypt:async function(e,t,r,i,n){switch(e){case re.publicKey.rsaEncryptSign:case re.publicKey.rsaEncrypt:{const{c:e}=i,{n,e:a}=t,{d:s,p:o,q:c,u}=r;return Un.rsa.decrypt(e,n,a,s,o,c,u)}case re.publicKey.elgamal:{const{c1:e,c2:n}=i,a=t.p,s=r.x;return Un.elgamal.decrypt(e,n,a,s)}case re.publicKey.ecdh:{const{oid:e,Q:a,kdfParams:s}=t,{d:o}=r,{V:c,C:u}=i;return Un.elliptic.ecdh.decrypt(e,s,c,u.data,a,o,n)}default:throw Error("Invalid public key encryption algorithm.")}},parsePublicKeyParams:function(e,t){let r=0;switch(e){case re.publicKey.rsaEncrypt:case re.publicKey.rsaEncryptSign:case re.publicKey.rsaSign:{const e=V.readMPI(t.subarray(r));r+=e.length+2;const i=V.readMPI(t.subarray(r));return r+=i.length+2,{read:r,publicParams:{n:e,e:i}}}case re.publicKey.dsa:{const e=V.readMPI(t.subarray(r));r+=e.length+2;const i=V.readMPI(t.subarray(r));r+=i.length+2;const n=V.readMPI(t.subarray(r));r+=n.length+2;const a=V.readMPI(t.subarray(r));return r+=a.length+2,{read:r,publicParams:{p:e,q:i,g:n,y:a}}}case re.publicKey.elgamal:{const e=V.readMPI(t.subarray(r));r+=e.length+2;const i=V.readMPI(t.subarray(r));r+=i.length+2;const n=V.readMPI(t.subarray(r));return r+=n.length+2,{read:r,publicParams:{p:e,g:i,y:n}}}case re.publicKey.ecdsa:{const e=new Gi;r+=e.read(t);const i=V.readMPI(t.subarray(r));return r+=i.length+2,{read:r,publicParams:{oid:e,Q:i}}}case re.publicKey.eddsa:{const e=new Gi;r+=e.read(t);let i=V.readMPI(t.subarray(r));return r+=i.length+2,i=V.leftPad(i,33),{read:r,publicParams:{oid:e,Q:i}}}case re.publicKey.ecdh:{const e=new Gi;r+=e.read(t);const i=V.readMPI(t.subarray(r));r+=i.length+2;const n=new zn;return r+=n.read(t.subarray(r)),{read:r,publicParams:{oid:e,Q:i,kdfParams:n}}}default:throw Error("Invalid public key encryption algorithm.")}},parsePrivateKeyParams:function(e,t,r){let i=0;switch(e){case re.publicKey.rsaEncrypt:case re.publicKey.rsaEncryptSign:case re.publicKey.rsaSign:{const e=V.readMPI(t.subarray(i));i+=e.length+2;const r=V.readMPI(t.subarray(i));i+=r.length+2;const n=V.readMPI(t.subarray(i));i+=n.length+2;const a=V.readMPI(t.subarray(i));return i+=a.length+2,{read:i,privateParams:{d:e,p:r,q:n,u:a}}}case re.publicKey.dsa:case re.publicKey.elgamal:{const e=V.readMPI(t.subarray(i));return i+=e.length+2,{read:i,privateParams:{x:e}}}case re.publicKey.ecdsa:case re.publicKey.ecdh:{const e=new rn(r.oid);let n=V.readMPI(t.subarray(i));return i+=n.length+2,n=V.leftPad(n,e.payloadSize),{read:i,privateParams:{d:n}}}case re.publicKey.eddsa:{let e=V.readMPI(t.subarray(i));return i+=e.length+2,e=V.leftPad(e,32),{read:i,privateParams:{seed:e}}}default:throw Error("Invalid public key encryption algorithm.")}},parseEncSessionKeyParams:function(e,t){let r=0;switch(e){case re.publicKey.rsaEncrypt:case re.publicKey.rsaEncryptSign:return{c:V.readMPI(t.subarray(r))};case re.publicKey.elgamal:{const e=V.readMPI(t.subarray(r));r+=e.length+2;return{c1:e,c2:V.readMPI(t.subarray(r))}}case re.publicKey.ecdh:{const e=V.readMPI(t.subarray(r));r+=e.length+2;const i=new Tn;return i.read(t.subarray(r)),{V:e,C:i}}default:throw Error("Invalid public key encryption algorithm.")}},serializeParams:function(e,t){const r=Object.keys(t).map((e=>{const r=t[e];return V.isUint8Array(r)?V.uint8ArrayToMPI(r):r.write()}));return V.concatUint8Array(r)},generateParams:function(e,t,r){switch(e){case re.publicKey.rsaEncrypt:case re.publicKey.rsaEncryptSign:case re.publicKey.rsaSign:return Un.rsa.generate(t,65537).then((({n:e,e:t,d:r,p:i,q:n,u:a})=>({privateParams:{d:r,p:i,q:n,u:a},publicParams:{n:e,e:t}})));case re.publicKey.ecdsa:return Un.elliptic.generate(r).then((({oid:e,Q:t,secret:r})=>({privateParams:{d:r},publicParams:{oid:new Gi(e),Q:t}})));case re.publicKey.eddsa:return Un.elliptic.generate(r).then((({oid:e,Q:t,secret:r})=>({privateParams:{seed:r},publicParams:{oid:new Gi(e),Q:t}})));case re.publicKey.ecdh:return Un.elliptic.generate(r).then((({oid:e,Q:t,secret:r,hash:i,cipher:n})=>({privateParams:{d:r},publicParams:{oid:new Gi(e),Q:t,kdfParams:new zn({hash:i,cipher:n})}})));case re.publicKey.dsa:case re.publicKey.elgamal:throw Error("Unsupported algorithm for key generation.");default:throw Error("Invalid public key algorithm.")}},validateParams:async function(e,t,r){if(!t||!r)throw Error("Missing key parameters");switch(e){case re.publicKey.rsaEncrypt:case re.publicKey.rsaEncryptSign:case re.publicKey.rsaSign:{const{n:e,e:i}=t,{d:n,p:a,q:s,u:o}=r;return Un.rsa.validateParams(e,i,n,a,s,o)}case re.publicKey.dsa:{const{p:e,q:i,g:n,y:a}=t,{x:s}=r;return Un.dsa.validateParams(e,i,n,a,s)}case re.publicKey.elgamal:{const{p:e,g:i,y:n}=t,{x:a}=r;return Un.elgamal.validateParams(e,i,n,a)}case re.publicKey.ecdsa:case re.publicKey.ecdh:{const i=Un.elliptic[re.read(re.publicKey,e)],{oid:n,Q:a}=t,{d:s}=r;return i.validateParams(n,a,s)}case re.publicKey.eddsa:{const{oid:e,Q:i}=t,{seed:n}=r;return Un.elliptic.eddsa.validateParams(e,i,n)}default:throw Error("Invalid public key algorithm.")}},getPrefixRandom:async function(e){const t=await xi(je[e].blockSize),r=new Uint8Array([t[t.length-2],t[t.length-1]]);return V.concat([t,r])},generateSessionKey:function(e){return xi(je[e].keySize)}});const On={cipher:je,hash:Tr,mode:Si,publicKey:Un,signature:Bn,random:Ki,pkcs1:qi,pkcs5:Pn,aesKW:An};Object.assign(On,qn);var Fn="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;function Nn(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)}const Ln={arraySet:function(e,t,r,i,n){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+i),n);else for(let a=0;a<i;a++)e[n+a]=t[r+a]},flattenChunks:function(e){let t,r,i,n,a;for(i=0,t=0,r=e.length;t<r;t++)i+=e[t].length;const s=new Uint8Array(i);for(n=0,t=0,r=e.length;t<r;t++)a=e[t],s.set(a,n),n+=a.length;return s}},jn={arraySet:function(e,t,r,i,n){for(let a=0;a<i;a++)e[n+a]=t[r+a]},flattenChunks:function(e){return[].concat.apply([],e)}};let Wn=Fn?Uint8Array:Array,Hn=Fn?Uint16Array:Array,Gn=Fn?Int32Array:Array,Vn=Fn?Ln.flattenChunks:jn.flattenChunks,$n=Fn?Ln.arraySet:jn.arraySet;const Zn=-2;function Yn(e){let t=e.length;for(;--t>=0;)e[t]=0}const Xn=256,Qn=286,Jn=30,ea=15,ta=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ra=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],ia=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],na=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],aa=Array(576);Yn(aa);const sa=Array(60);Yn(sa);const oa=Array(512);Yn(oa);const ca=Array(256);Yn(ca);const ua=Array(29);Yn(ua);const ha=Array(Jn);function da(e,t,r,i,n){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=i,this.max_length=n,this.has_stree=e&&e.length}let fa,la,pa;function ya(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function ba(e){return e<256?oa[e]:oa[256+(e>>>7)]}function ma(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function ga(e,t,r){e.bi_valid>16-r?(e.bi_buf|=t<<e.bi_valid&65535,ma(e,e.bi_buf),e.bi_buf=t>>16-e.bi_valid,e.bi_valid+=r-16):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function wa(e,t,r){ga(e,r[2*t],r[2*t+1])}function va(e,t){let r=0;do{r|=1&e,e>>>=1,r<<=1}while(--t>0);return r>>>1}function _a(e,t,r){const i=Array(16);let n,a,s=0;for(n=1;n<=ea;n++)i[n]=s=s+r[n-1]<<1;for(a=0;a<=t;a++){const t=e[2*a+1];0!==t&&(e[2*a]=va(i[t]++,t))}}function ka(e){let t;for(t=0;t<Qn;t++)e.dyn_ltree[2*t]=0;for(t=0;t<Jn;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function Aa(e){e.bi_valid>8?ma(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function Sa(e,t,r,i){const n=2*t,a=2*r;return e[n]<e[a]||e[n]===e[a]&&i[t]<=i[r]}function Ea(e,t,r){const i=e.heap[r];let n=r<<1;for(;n<=e.heap_len&&(n<e.heap_len&&Sa(t,e.heap[n+1],e.heap[n],e.depth)&&n++,!Sa(t,i,e.heap[n],e.depth));)e.heap[r]=e.heap[n],r=n,n<<=1;e.heap[r]=i}function Pa(e,t,r){let i,n,a,s,o=0;if(0!==e.last_lit)do{i=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],n=e.pending_buf[e.l_buf+o],o++,0===i?wa(e,n,t):(a=ca[n],wa(e,a+Xn+1,t),s=ta[a],0!==s&&(n-=ua[a],ga(e,n,s)),i--,a=ba(i),wa(e,a,r),s=ra[a],0!==s&&(i-=ha[a],ga(e,i,s)))}while(o<e.last_lit);wa(e,256,t)}function xa(e,t){const r=t.dyn_tree,i=t.stat_desc.static_tree,n=t.stat_desc.has_stree,a=t.stat_desc.elems;let s,o,c,u=-1;for(e.heap_len=0,e.heap_max=573,s=0;s<a;s++)0!==r[2*s]?(e.heap[++e.heap_len]=u=s,e.depth[s]=0):r[2*s+1]=0;for(;e.heap_len<2;)c=e.heap[++e.heap_len]=u<2?++u:0,r[2*c]=1,e.depth[c]=0,e.opt_len--,n&&(e.static_len-=i[2*c+1]);for(t.max_code=u,s=e.heap_len>>1;s>=1;s--)Ea(e,r,s);c=a;do{s=e.heap[1],e.heap[1]=e.heap[e.heap_len--],Ea(e,r,1),o=e.heap[1],e.heap[--e.heap_max]=s,e.heap[--e.heap_max]=o,r[2*c]=r[2*s]+r[2*o],e.depth[c]=(e.depth[s]>=e.depth[o]?e.depth[s]:e.depth[o])+1,r[2*s+1]=r[2*o+1]=c,e.heap[1]=c++,Ea(e,r,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){const r=t.dyn_tree,i=t.max_code,n=t.stat_desc.static_tree,a=t.stat_desc.has_stree,s=t.stat_desc.extra_bits,o=t.stat_desc.extra_base,c=t.stat_desc.max_length;let u,h,d,f,l,p,y=0;for(f=0;f<=ea;f++)e.bl_count[f]=0;for(r[2*e.heap[e.heap_max]+1]=0,u=e.heap_max+1;u<573;u++)h=e.heap[u],f=r[2*r[2*h+1]+1]+1,f>c&&(f=c,y++),r[2*h+1]=f,h>i||(e.bl_count[f]++,l=0,h>=o&&(l=s[h-o]),p=r[2*h],e.opt_len+=p*(f+l),a&&(e.static_len+=p*(n[2*h+1]+l)));if(0!==y){do{for(f=c-1;0===e.bl_count[f];)f--;e.bl_count[f]--,e.bl_count[f+1]+=2,e.bl_count[c]--,y-=2}while(y>0);for(f=c;0!==f;f--)for(h=e.bl_count[f];0!==h;)d=e.heap[--u],d>i||(r[2*d+1]!==f&&(e.opt_len+=(f-r[2*d+1])*r[2*d],r[2*d+1]=f),h--)}}(e,t),_a(r,u,e.bl_count)}function Ma(e,t,r){let i,n,a=-1,s=t[1],o=0,c=7,u=4;for(0===s&&(c=138,u=3),t[2*(r+1)+1]=65535,i=0;i<=r;i++)n=s,s=t[2*(i+1)+1],++o<c&&n===s||(o<u?e.bl_tree[2*n]+=o:0!==n?(n!==a&&e.bl_tree[2*n]++,e.bl_tree[32]++):o<=10?e.bl_tree[34]++:e.bl_tree[36]++,o=0,a=n,0===s?(c=138,u=3):n===s?(c=6,u=3):(c=7,u=4))}function Ca(e,t,r){let i,n,a=-1,s=t[1],o=0,c=7,u=4;for(0===s&&(c=138,u=3),i=0;i<=r;i++)if(n=s,s=t[2*(i+1)+1],!(++o<c&&n===s)){if(o<u)do{wa(e,n,e.bl_tree)}while(0!=--o);else 0!==n?(n!==a&&(wa(e,n,e.bl_tree),o--),wa(e,16,e.bl_tree),ga(e,o-3,2)):o<=10?(wa(e,17,e.bl_tree),ga(e,o-3,3)):(wa(e,18,e.bl_tree),ga(e,o-11,7));o=0,a=n,0===s?(c=138,u=3):n===s?(c=6,u=3):(c=7,u=4)}}Yn(ha);let Ka=!1;function Da(e){Ka||(!function(){let e,t,r,i,n;const a=Array(16);for(r=0,i=0;i<28;i++)for(ua[i]=r,e=0;e<1<<ta[i];e++)ca[r++]=i;for(ca[r-1]=i,n=0,i=0;i<16;i++)for(ha[i]=n,e=0;e<1<<ra[i];e++)oa[n++]=i;for(n>>=7;i<Jn;i++)for(ha[i]=n<<7,e=0;e<1<<ra[i]-7;e++)oa[256+n++]=i;for(t=0;t<=ea;t++)a[t]=0;for(e=0;e<=143;)aa[2*e+1]=8,e++,a[8]++;for(;e<=255;)aa[2*e+1]=9,e++,a[9]++;for(;e<=279;)aa[2*e+1]=7,e++,a[7]++;for(;e<=287;)aa[2*e+1]=8,e++,a[8]++;for(_a(aa,287,a),e=0;e<Jn;e++)sa[2*e+1]=5,sa[2*e]=va(e,5);fa=new da(aa,ta,257,Qn,ea),la=new da(sa,ra,0,Jn,ea),pa=new da([],ia,0,19,7)}(),Ka=!0),e.l_desc=new ya(e.dyn_ltree,fa),e.d_desc=new ya(e.dyn_dtree,la),e.bl_desc=new ya(e.bl_tree,pa),e.bi_buf=0,e.bi_valid=0,ka(e)}function Ra(e,t,r,i){ga(e,0+(i?1:0),3),function(e,t,r,i){Aa(e),i&&(ma(e,r),ma(e,~r)),$n(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}function Ia(e){ga(e,2,3),wa(e,256,aa),function(e){16===e.bi_valid?(ma(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}function Ua(e,t,r,i){let n,a,s=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=function(e){let t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<Xn;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),xa(e,e.l_desc),xa(e,e.d_desc),s=function(e){let t;for(Ma(e,e.dyn_ltree,e.l_desc.max_code),Ma(e,e.dyn_dtree,e.d_desc.max_code),xa(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*na[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),n=e.opt_len+3+7>>>3,a=e.static_len+3+7>>>3,a<=n&&(n=a)):n=a=r+5,r+4<=n&&-1!==t?Ra(e,t,r,i):4===e.strategy||a===n?(ga(e,2+(i?1:0),3),Pa(e,aa,sa)):(ga(e,4+(i?1:0),3),function(e,t,r,i){let n;for(ga(e,t-257,5),ga(e,r-1,5),ga(e,i-4,4),n=0;n<i;n++)ga(e,e.bl_tree[2*na[n]+1],3);Ca(e,e.dyn_ltree,t-1),Ca(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,s+1),Pa(e,e.dyn_ltree,e.dyn_dtree)),ka(e),i&&Aa(e)}function Ba(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(ca[r]+Xn+1)]++,e.dyn_dtree[2*ba(t)]++),e.last_lit===e.lit_bufsize-1}function Ta(e,t,r,i){let n=65535&e|0,a=e>>>16&65535|0,s=0;for(;0!==r;){s=r>2e3?2e3:r,r-=s;do{n=n+t[i++]|0,a=a+n|0}while(--s);n%=65521,a%=65521}return n|a<<16|0}const za=function(){let e;const t=[];for(let r=0;r<256;r++){e=r;for(let t=0;t<8;t++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();function qa(e,t,r,i){const n=za,a=i+r;e^=-1;for(let r=i;r<a;r++)e=e>>>8^n[255&(e^t[r])];return-1^e}var Oa={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"};const Fa=258,Na=262,La=103,ja=113,Wa=666;function Ha(e,t){return e.msg=Oa[t],t}function Ga(e){return(e<<1)-(e>4?9:0)}function Va(e){let t=e.length;for(;--t>=0;)e[t]=0}function $a(e){const t=e.state;let r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&($n(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function Za(e,t){Ua(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,$a(e.strm)}function Ya(e,t){e.pending_buf[e.pending++]=t}function Xa(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function Qa(e,t,r,i){let n=e.avail_in;return n>i&&(n=i),0===n?0:(e.avail_in-=n,$n(t,e.input,e.next_in,n,r),1===e.state.wrap?e.adler=Ta(e.adler,t,n,r):2===e.state.wrap&&(e.adler=qa(e.adler,t,n,r)),e.next_in+=n,e.total_in+=n,n)}function Ja(e,t){let r,i,n=e.max_chain_length,a=e.strstart,s=e.prev_length,o=e.nice_match;const c=e.strstart>e.w_size-Na?e.strstart-(e.w_size-Na):0,u=e.window,h=e.w_mask,d=e.prev,f=e.strstart+Fa;let l=u[a+s-1],p=u[a+s];e.prev_length>=e.good_match&&(n>>=2),o>e.lookahead&&(o=e.lookahead);do{if(r=t,u[r+s]===p&&u[r+s-1]===l&&u[r]===u[a]&&u[++r]===u[a+1]){a+=2,r++;do{}while(u[++a]===u[++r]&&u[++a]===u[++r]&&u[++a]===u[++r]&&u[++a]===u[++r]&&u[++a]===u[++r]&&u[++a]===u[++r]&&u[++a]===u[++r]&&u[++a]===u[++r]&&a<f);if(i=Fa-(f-a),a=f-Fa,i>s){if(e.match_start=t,s=i,i>=o)break;l=u[a+s-1],p=u[a+s]}}}while((t=d[t&h])>c&&0!=--n);return s<=e.lookahead?s:e.lookahead}function es(e){const t=e.w_size;let r,i,n,a,s;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-Na)){$n(e.window,e.window,t,t,0),e.match_start-=t,e.strstart-=t,e.block_start-=t,i=e.hash_size,r=i;do{n=e.head[--r],e.head[r]=n>=t?n-t:0}while(--i);i=t,r=i;do{n=e.prev[--r],e.prev[r]=n>=t?n-t:0}while(--i);a+=t}if(0===e.strm.avail_in)break;if(i=Qa(e.strm,e.window,e.strstart+e.lookahead,a),e.lookahead+=i,e.lookahead+e.insert>=3)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+3-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead<Na&&0!==e.strm.avail_in)}function ts(e,t){let r,i;for(;;){if(e.lookahead<Na){if(es(e),e.lookahead<Na&&0===t)return 1;if(0===e.lookahead)break}if(r=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-Na&&(e.match_length=Ja(e,r)),e.match_length>=3)if(i=Ba(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else i=Ba(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(i&&(Za(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,4===t?(Za(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Za(e,!1),0===e.strm.avail_out)?1:2}function rs(e,t){let r,i,n;for(;;){if(e.lookahead<Na){if(es(e),e.lookahead<Na&&0===t)return 1;if(0===e.lookahead)break}if(r=0,e.lookahead>=3&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-Na&&(e.match_length=Ja(e,r),e.match_length<=5&&(1===e.strategy||3===e.match_length&&e.strstart-e.match_start>4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){n=e.strstart+e.lookahead-3,i=Ba(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=n&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+3-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,i&&(Za(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if(i=Ba(e,0,e.window[e.strstart-1]),i&&Za(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(i=Ba(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,4===t?(Za(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Za(e,!1),0===e.strm.avail_out)?1:2}class is{constructor(e,t,r,i,n){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=i,this.func=n}}const ns=[new is(0,0,0,0,(function(e,t){let r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(es(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;const i=e.block_start+r;if((0===e.strstart||e.strstart>=i)&&(e.lookahead=e.strstart-i,e.strstart=i,Za(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-Na&&(Za(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(Za(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(Za(e,!1),e.strm.avail_out),1)})),new is(4,4,8,4,ts),new is(4,5,16,8,ts),new is(4,6,32,32,ts),new is(4,4,16,16,rs),new is(8,16,32,32,rs),new is(8,16,128,128,rs),new is(8,32,128,256,rs),new is(32,128,258,1024,rs),new is(32,258,258,4096,rs)];class as{constructor(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=8,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Hn(1146),this.dyn_dtree=new Hn(122),this.bl_tree=new Hn(78),Va(this.dyn_ltree),Va(this.dyn_dtree),Va(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Hn(16),this.heap=new Hn(573),Va(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Hn(573),Va(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}}function ss(e){const t=function(e){let t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=2,t=e.state,t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?42:ja,e.adler=2===t.wrap?0:1,t.last_flush=0,Da(t),0):Ha(e,Zn)}(e);return 0===t&&function(e){e.window_size=2*e.w_size,Va(e.head),e.max_lazy_match=ns[e.level].max_lazy,e.good_match=ns[e.level].good_length,e.nice_match=ns[e.level].nice_length,e.max_chain_length=ns[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=2,e.match_available=0,e.ins_h=0}(e.state),t}function os(e,t){let r,i,n,a;if(!e||!e.state||t>5||t<0)return e?Ha(e,Zn):Zn;if(i=e.state,!e.output||!e.input&&0!==e.avail_in||i.status===Wa&&4!==t)return Ha(e,0===e.avail_out?-5:Zn);if(i.strm=e,r=i.last_flush,i.last_flush=t,42===i.status)if(2===i.wrap)e.adler=0,Ya(i,31),Ya(i,139),Ya(i,8),i.gzhead?(Ya(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),Ya(i,255&i.gzhead.time),Ya(i,i.gzhead.time>>8&255),Ya(i,i.gzhead.time>>16&255),Ya(i,i.gzhead.time>>24&255),Ya(i,9===i.level?2:i.strategy>=2||i.level<2?4:0),Ya(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(Ya(i,255&i.gzhead.extra.length),Ya(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=qa(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(Ya(i,0),Ya(i,0),Ya(i,0),Ya(i,0),Ya(i,0),Ya(i,9===i.level?2:i.strategy>=2||i.level<2?4:0),Ya(i,3),i.status=ja);else{let t=8+(i.w_bits-8<<4)<<8,r=-1;r=i.strategy>=2||i.level<2?0:i.level<6?1:6===i.level?2:3,t|=r<<6,0!==i.strstart&&(t|=32),t+=31-t%31,i.status=ja,Xa(i,t),0!==i.strstart&&(Xa(i,e.adler>>>16),Xa(i,65535&e.adler)),e.adler=1}if(69===i.status)if(i.gzhead.extra){for(n=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>n&&(e.adler=qa(e.adler,i.pending_buf,i.pending-n,n)),$a(e),n=i.pending,i.pending!==i.pending_buf_size));)Ya(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>n&&(e.adler=qa(e.adler,i.pending_buf,i.pending-n,n)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(e.adler=qa(e.adler,i.pending_buf,i.pending-n,n)),$a(e),n=i.pending,i.pending===i.pending_buf_size)){a=1;break}a=i.gzindex<i.gzhead.name.length?255&i.gzhead.name.charCodeAt(i.gzindex++):0,Ya(i,a)}while(0!==a);i.gzhead.hcrc&&i.pending>n&&(e.adler=qa(e.adler,i.pending_buf,i.pending-n,n)),0===a&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){n=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>n&&(e.adler=qa(e.adler,i.pending_buf,i.pending-n,n)),$a(e),n=i.pending,i.pending===i.pending_buf_size)){a=1;break}a=i.gzindex<i.gzhead.comment.length?255&i.gzhead.comment.charCodeAt(i.gzindex++):0,Ya(i,a)}while(0!==a);i.gzhead.hcrc&&i.pending>n&&(e.adler=qa(e.adler,i.pending_buf,i.pending-n,n)),0===a&&(i.status=La)}else i.status=La;if(i.status===La&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&$a(e),i.pending+2<=i.pending_buf_size&&(Ya(i,255&e.adler),Ya(i,e.adler>>8&255),e.adler=0,i.status=ja)):i.status=ja),0!==i.pending){if($a(e),0===e.avail_out)return i.last_flush=-1,0}else if(0===e.avail_in&&Ga(t)<=Ga(r)&&4!==t)return Ha(e,-5);if(i.status===Wa&&0!==e.avail_in)return Ha(e,-5);if(0!==e.avail_in||0!==i.lookahead||0!==t&&i.status!==Wa){var s=2===i.strategy?function(e,t){let r;for(;;){if(0===e.lookahead&&(es(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,r=Ba(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(Za(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(Za(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Za(e,!1),0===e.strm.avail_out)?1:2}(i,t):3===i.strategy?function(e,t){let r,i,n,a;const s=e.window;for(;;){if(e.lookahead<=Fa){if(es(e),e.lookahead<=Fa&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(n=e.strstart-1,i=s[n],i===s[++n]&&i===s[++n]&&i===s[++n])){a=e.strstart+Fa;do{}while(i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&n<a);e.match_length=Fa-(a-n),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(r=Ba(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=Ba(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(Za(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(Za(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Za(e,!1),0===e.strm.avail_out)?1:2}(i,t):ns[i.level].func(i,t);if(3!==s&&4!==s||(i.status=Wa),1===s||3===s)return 0===e.avail_out&&(i.last_flush=-1),0;if(2===s&&(1===t?Ia(i):5!==t&&(Ra(i,0,0,!1),3===t&&(Va(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),$a(e),0===e.avail_out))return i.last_flush=-1,0}return 4!==t?0:i.wrap<=0?1:(2===i.wrap?(Ya(i,255&e.adler),Ya(i,e.adler>>8&255),Ya(i,e.adler>>16&255),Ya(i,e.adler>>24&255),Ya(i,255&e.total_in),Ya(i,e.total_in>>8&255),Ya(i,e.total_in>>16&255),Ya(i,e.total_in>>24&255)):(Xa(i,e.adler>>>16),Xa(i,65535&e.adler)),$a(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?0:1)}try{String.fromCharCode.call(null,0)}catch(e){}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){}const cs=new Wn(256);for(let e=0;e<256;e++)cs[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;function us(e){let t,r,i,n,a=0;const s=e.length;for(i=0;i<s;i++)t=e.charCodeAt(i),55296==(64512&t)&&i+1<s&&(r=e.charCodeAt(i+1),56320==(64512&r)&&(t=65536+(t-55296<<10)+(r-56320),i++)),a+=t<128?1:t<2048?2:t<65536?3:4;const o=new Wn(a);for(n=0,i=0;n<a;i++)t=e.charCodeAt(i),55296==(64512&t)&&i+1<s&&(r=e.charCodeAt(i+1),56320==(64512&r)&&(t=65536+(t-55296<<10)+(r-56320),i++)),t<128?o[n++]=t:t<2048?(o[n++]=192|t>>>6,o[n++]=128|63&t):t<65536?(o[n++]=224|t>>>12,o[n++]=128|t>>>6&63,o[n++]=128|63&t):(o[n++]=240|t>>>18,o[n++]=128|t>>>12&63,o[n++]=128|t>>>6&63,o[n++]=128|63&t);return o}cs[254]=cs[254]=1;class hs{constructor(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}}class ds{constructor(e){this.options={level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,...e||{}};const t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new hs,this.strm.avail_out=0;var r,i,n=function(e,t,r,i,n,a){if(!e)return Zn;let s=1;if(-1===t&&(t=6),i<0?(s=0,i=-i):i>15&&(s=2,i-=16),n<1||n>9||8!==r||i<8||i>15||t<0||t>9||a<0||a>4)return Ha(e,Zn);8===i&&(i=9);const o=new as;return e.state=o,o.strm=e,o.wrap=s,o.gzhead=null,o.w_bits=i,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=n+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+3-1)/3),o.window=new Wn(2*o.w_size),o.head=new Hn(o.hash_size),o.prev=new Hn(o.w_size),o.lit_bufsize=1<<n+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new Wn(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=a,o.method=r,ss(e)}(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(0!==n)throw Error(Oa[n]);if(t.header&&(r=this.strm,i=t.header,r&&r.state&&(2!==r.state.wrap||(r.state.gzhead=i))),t.dictionary){let e;if(e="string"==typeof t.dictionary?us(t.dictionary):t.dictionary instanceof ArrayBuffer?new Uint8Array(t.dictionary):t.dictionary,0!==(n=function(e,t){let r,i,n,a,s,o,c,u,h=t.length;if(!e||!e.state)return Zn;if(r=e.state,a=r.wrap,2===a||1===a&&42!==r.status||r.lookahead)return Zn;for(1===a&&(e.adler=Ta(e.adler,t,h,0)),r.wrap=0,h>=r.w_size&&(0===a&&(Va(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new Wn(r.w_size),$n(u,t,h-r.w_size,r.w_size,0),t=u,h=r.w_size),s=e.avail_in,o=e.next_in,c=e.input,e.avail_in=h,e.next_in=0,e.input=t,es(r);r.lookahead>=3;){i=r.strstart,n=r.lookahead-2;do{r.ins_h=(r.ins_h<<r.hash_shift^r.window[i+3-1])&r.hash_mask,r.prev[i&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=i,i++}while(--n);r.strstart=i,r.lookahead=2,es(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=2,r.match_available=0,e.next_in=o,e.input=c,e.avail_in=s,r.wrap=a,0}(this.strm,e)))throw Error(Oa[n]);this._dict_set=!0}}push(e,t){const{strm:r,options:{chunkSize:i}}=this;var n,a;if(this.ended)return!1;a=t===~~t?t:!0===t?4:0,"string"==typeof e?r.input=us(e):e instanceof ArrayBuffer?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;do{if(0===r.avail_out&&(r.output=new Wn(i),r.next_out=0,r.avail_out=i),1!==(n=os(r,a))&&0!==n)return this.onEnd(n),this.ended=!0,!1;0!==r.avail_out&&(0!==r.avail_in||4!==a&&2!==a)||this.onData(Nn(r.output,r.next_out))}while((r.avail_in>0||0===r.avail_out)&&1!==n);return 4===a?(n=function(e){let t;return e&&e.state?(t=e.state.status,42!==t&&69!==t&&73!==t&&91!==t&&t!==La&&t!==ja&&t!==Wa?Ha(e,Zn):(e.state=null,t===ja?Ha(e,-3):0)):Zn}(this.strm),this.onEnd(n),this.ended=!0,0===n):2!==a||(this.onEnd(0),r.avail_out=0,!0)}onData(e){this.chunks.push(e)}onEnd(e){0===e&&(this.result=Vn(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg}}function fs(e,t){let r,i,n,a,s,o,c,u,h,d;const f=e.state;r=e.next_in;const l=e.input,p=r+(e.avail_in-5);i=e.next_out;const y=e.output,b=i-(t-e.avail_out),m=i+(e.avail_out-257),g=f.dmax,w=f.wsize,v=f.whave,_=f.wnext,k=f.window;n=f.hold,a=f.bits;const A=f.lencode,S=f.distcode,E=(1<<f.lenbits)-1,P=(1<<f.distbits)-1;e:do{a<15&&(n+=l[r++]<<a,a+=8,n+=l[r++]<<a,a+=8),s=A[n&E];t:for(;;){if(o=s>>>24,n>>>=o,a-=o,o=s>>>16&255,0===o)y[i++]=65535&s;else{if(!(16&o)){if(0==(64&o)){s=A[(65535&s)+(n&(1<<o)-1)];continue t}if(32&o){f.mode=12;break e}e.msg="invalid literal/length code",f.mode=30;break e}c=65535&s,o&=15,o&&(a<o&&(n+=l[r++]<<a,a+=8),c+=n&(1<<o)-1,n>>>=o,a-=o),a<15&&(n+=l[r++]<<a,a+=8,n+=l[r++]<<a,a+=8),s=S[n&P];r:for(;;){if(o=s>>>24,n>>>=o,a-=o,o=s>>>16&255,!(16&o)){if(0==(64&o)){s=S[(65535&s)+(n&(1<<o)-1)];continue r}e.msg="invalid distance code",f.mode=30;break e}if(u=65535&s,o&=15,a<o&&(n+=l[r++]<<a,a+=8,a<o&&(n+=l[r++]<<a,a+=8)),u+=n&(1<<o)-1,u>g){e.msg="invalid distance too far back",f.mode=30;break e}if(n>>>=o,a-=o,o=i-b,u>o){if(o=u-o,o>v&&f.sane){e.msg="invalid distance too far back",f.mode=30;break e}if(h=0,d=k,0===_){if(h+=w-o,o<c){c-=o;do{y[i++]=k[h++]}while(--o);h=i-u,d=y}}else if(_<o){if(h+=w+_-o,o-=_,o<c){c-=o;do{y[i++]=k[h++]}while(--o);if(h=0,_<c){o=_,c-=o;do{y[i++]=k[h++]}while(--o);h=i-u,d=y}}}else if(h+=_-o,o<c){c-=o;do{y[i++]=k[h++]}while(--o);h=i-u,d=y}for(;c>2;)y[i++]=d[h++],y[i++]=d[h++],y[i++]=d[h++],c-=3;c&&(y[i++]=d[h++],c>1&&(y[i++]=d[h++]))}else{h=i-u;do{y[i++]=y[h++],y[i++]=y[h++],y[i++]=y[h++],c-=3}while(c>2);c&&(y[i++]=y[h++],c>1&&(y[i++]=y[h++]))}break}}break}}while(r<p&&i<m);c=a>>3,r-=c,a-=c<<3,n&=(1<<a)-1,e.next_in=r,e.next_out=i,e.avail_in=r<p?p-r+5:5-(r-p),e.avail_out=i<m?m-i+257:257-(i-m),f.hold=n,f.bits=a}const ls=15,ps=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],ys=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],bs=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],ms=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];function gs(e,t,r,i,n,a,s,o){const c=o.bits;let u,h,d,f,l,p=0,y=0,b=0,m=0,g=0,w=0,v=0,_=0,k=0,A=0,S=null,E=0;const P=new Hn(16),x=new Hn(16);let M,C,K,D=null,R=0;for(p=0;p<=ls;p++)P[p]=0;for(y=0;y<i;y++)P[t[r+y]]++;for(g=c,m=ls;m>=1&&0===P[m];m--);if(g>m&&(g=m),0===m)return n[a++]=20971520,n[a++]=20971520,o.bits=1,0;for(b=1;b<m&&0===P[b];b++);for(g<b&&(g=b),_=1,p=1;p<=ls;p++)if(_<<=1,_-=P[p],_<0)return-1;if(_>0&&(0===e||1!==m))return-1;for(x[1]=0,p=1;p<ls;p++)x[p+1]=x[p]+P[p];for(y=0;y<i;y++)0!==t[r+y]&&(s[x[t[r+y]]++]=y);0===e?(S=D=s,l=19):1===e?(S=ps,E-=257,D=ys,R-=257,l=256):(S=bs,D=ms,l=-1),A=0,y=0,p=b,f=a,w=g,v=0,d=-1,k=1<<g;const I=k-1;if(1===e&&k>852||2===e&&k>592)return 1;for(;;){M=p-v,s[y]<l?(C=0,K=s[y]):s[y]>l?(C=D[R+s[y]],K=S[E+s[y]]):(C=96,K=0),u=1<<p-v,h=1<<w,b=h;do{h-=u,n[f+(A>>v)+h]=M<<24|C<<16|K|0}while(0!==h);for(u=1<<p-1;A&u;)u>>=1;if(0!==u?(A&=u-1,A+=u):A=0,y++,0==--P[p]){if(p===m)break;p=t[r+s[y]]}if(p>g&&(A&I)!==d){for(0===v&&(v=g),f+=b,w=p-v,_=1<<w;w+v<m&&(_-=P[w+v],!(_<=0));)w++,_<<=1;if(k+=1<<w,1===e&&k>852||2===e&&k>592)return 1;d=A&I,n[d]=g<<24|w<<16|f-a|0}}return 0!==A&&(n[f+A]=p-v<<24|64<<16|0),o.bits=g,0}const ws=12,vs=30;function _s(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}class ks{constructor(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Hn(320),this.work=new Hn(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}}function As(e){let t;return e&&e.state?(t=e.state,t.wsize=0,t.whave=0,t.wnext=0,function(e){let t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Gn(852),t.distcode=t.distdyn=new Gn(592),t.sane=1,t.back=-1,0):Zn}(e)):Zn}function Ss(e,t){let r,i;return e?(i=new ks,e.state=i,i.window=null,r=function(e,t){let r,i;return e&&e.state?(i=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?Zn:(null!==i.window&&i.wbits!==t&&(i.window=null),i.wrap=r,i.wbits=t,As(e))):Zn}(e,t),0!==r&&(e.state=null),r):Zn}let Es,Ps,xs=!0;function Ms(e){if(xs){let t;for(Es=new Gn(512),Ps=new Gn(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(gs(1,e.lens,0,288,Es,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;gs(2,e.lens,0,32,Ps,0,e.work,{bits:5}),xs=!1}e.lencode=Es,e.lenbits=9,e.distcode=Ps,e.distbits=5}function Cs(e,t,r,i){let n;const a=e.state;return null===a.window&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new Wn(a.wsize)),i>=a.wsize?($n(a.window,t,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(n=a.wsize-a.wnext,n>i&&(n=i),$n(a.window,t,r-i,n,a.wnext),(i-=n)?($n(a.window,t,r-i,i,0),a.wnext=i,a.whave=a.wsize):(a.wnext+=n,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=n))),0}function Ks(e,t){let r,i,n,a,s,o,c,u,h,d,f,l,p,y,b,m,g,w,v,_,k,A,S,E,P=0,x=new Wn(4);const M=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return Zn;r=e.state,r.mode===ws&&(r.mode=13),s=e.next_out,n=e.output,c=e.avail_out,a=e.next_in,i=e.input,o=e.avail_in,u=r.hold,h=r.bits,d=o,f=c,A=0;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;h<16;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(2&r.wrap&&35615===u){r.check=0,x[0]=255&u,x[1]=u>>>8&255,r.check=qa(r.check,x,2,0),u=0,h=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg="incorrect header check",r.mode=vs;break}if(8!=(15&u)){e.msg="unknown compression method",r.mode=vs;break}if(u>>>=4,h-=4,k=8+(15&u),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=vs;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:ws,u=0,h=0;break;case 2:for(;h<16;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(r.flags=u,8!=(255&r.flags)){e.msg="unknown compression method",r.mode=vs;break}if(57344&r.flags){e.msg="unknown header flags set",r.mode=vs;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(x[0]=255&u,x[1]=u>>>8&255,r.check=qa(r.check,x,2,0)),u=0,h=0,r.mode=3;case 3:for(;h<32;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}r.head&&(r.head.time=u),512&r.flags&&(x[0]=255&u,x[1]=u>>>8&255,x[2]=u>>>16&255,x[3]=u>>>24&255,r.check=qa(r.check,x,4,0)),u=0,h=0,r.mode=4;case 4:for(;h<16;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(x[0]=255&u,x[1]=u>>>8&255,r.check=qa(r.check,x,2,0)),u=0,h=0,r.mode=5;case 5:if(1024&r.flags){for(;h<16;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(x[0]=255&u,x[1]=u>>>8&255,r.check=qa(r.check,x,2,0)),u=0,h=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(l=r.length,l>o&&(l=o),l&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=Array(r.head.extra_len)),$n(r.head.extra,i,a,l,k)),512&r.flags&&(r.check=qa(r.check,i,l,a)),o-=l,a+=l,r.length-=l),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;l=0;do{k=i[a+l++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k))}while(k&&l<o);if(512&r.flags&&(r.check=qa(r.check,i,l,a)),o-=l,a+=l,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;l=0;do{k=i[a+l++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k))}while(k&&l<o);if(512&r.flags&&(r.check=qa(r.check,i,l,a)),o-=l,a+=l,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;h<16;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(u!==(65535&r.check)){e.msg="header crc mismatch",r.mode=vs;break}u=0,h=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=ws;break;case 10:for(;h<32;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}e.adler=r.check=_s(u),u=0,h=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=u,r.bits=h,2;e.adler=r.check=1,r.mode=ws;case ws:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&h,h-=7&h,r.mode=27;break}for(;h<3;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}switch(r.last=1&u,u>>>=1,h-=1,3&u){case 0:r.mode=14;break;case 1:if(Ms(r),r.mode=20,6===t){u>>>=2,h-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=vs}u>>>=2,h-=2;break;case 14:for(u>>>=7&h,h-=7&h;h<32;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if((65535&u)!=(u>>>16^65535)){e.msg="invalid stored block lengths",r.mode=vs;break}if(r.length=65535&u,u=0,h=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(l=r.length,l){if(l>o&&(l=o),l>c&&(l=c),0===l)break e;$n(n,i,a,l,s),o-=l,a+=l,c-=l,s+=l,r.length-=l;break}r.mode=ws;break;case 17:for(;h<14;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(r.nlen=257+(31&u),u>>>=5,h-=5,r.ndist=1+(31&u),u>>>=5,h-=5,r.ncode=4+(15&u),u>>>=4,h-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=vs;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;h<3;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}r.lens[M[r.have++]]=7&u,u>>>=3,h-=3}for(;r.have<19;)r.lens[M[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},A=gs(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,A){e.msg="invalid code lengths set",r.mode=vs;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;P=r.lencode[u&(1<<r.lenbits)-1],b=P>>>24,m=P>>>16&255,g=65535&P,!(b<=h);){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(g<16)u>>>=b,h-=b,r.lens[r.have++]=g;else{if(16===g){for(E=b+2;h<E;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(u>>>=b,h-=b,0===r.have){e.msg="invalid bit length repeat",r.mode=vs;break}k=r.lens[r.have-1],l=3+(3&u),u>>>=2,h-=2}else if(17===g){for(E=b+3;h<E;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}u>>>=b,h-=b,k=0,l=3+(7&u),u>>>=3,h-=3}else{for(E=b+7;h<E;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}u>>>=b,h-=b,k=0,l=11+(127&u),u>>>=7,h-=7}if(r.have+l>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=vs;break}for(;l--;)r.lens[r.have++]=k}}if(r.mode===vs)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=vs;break}if(r.lenbits=9,S={bits:r.lenbits},A=gs(1,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,A){e.msg="invalid literal/lengths set",r.mode=vs;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},A=gs(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,A){e.msg="invalid distances set",r.mode=vs;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(o>=6&&c>=258){e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=u,r.bits=h,fs(e,f),s=e.next_out,n=e.output,c=e.avail_out,a=e.next_in,i=e.input,o=e.avail_in,u=r.hold,h=r.bits,r.mode===ws&&(r.back=-1);break}for(r.back=0;P=r.lencode[u&(1<<r.lenbits)-1],b=P>>>24,m=P>>>16&255,g=65535&P,!(b<=h);){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(m&&0==(240&m)){for(w=b,v=m,_=g;P=r.lencode[_+((u&(1<<w+v)-1)>>w)],b=P>>>24,m=P>>>16&255,g=65535&P,!(w+b<=h);){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}u>>>=w,h-=w,r.back+=w}if(u>>>=b,h-=b,r.back+=b,r.length=g,0===m){r.mode=26;break}if(32&m){r.back=-1,r.mode=ws;break}if(64&m){e.msg="invalid literal/length code",r.mode=vs;break}r.extra=15&m,r.mode=22;case 22:if(r.extra){for(E=r.extra;h<E;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,h-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;P=r.distcode[u&(1<<r.distbits)-1],b=P>>>24,m=P>>>16&255,g=65535&P,!(b<=h);){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(0==(240&m)){for(w=b,v=m,_=g;P=r.distcode[_+((u&(1<<w+v)-1)>>w)],b=P>>>24,m=P>>>16&255,g=65535&P,!(w+b<=h);){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}u>>>=w,h-=w,r.back+=w}if(u>>>=b,h-=b,r.back+=b,64&m){e.msg="invalid distance code",r.mode=vs;break}r.offset=g,r.extra=15&m,r.mode=24;case 24:if(r.extra){for(E=r.extra;h<E;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,h-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=vs;break}r.mode=25;case 25:if(0===c)break e;if(l=f-c,r.offset>l){if(l=r.offset-l,l>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=vs;break}l>r.wnext?(l-=r.wnext,p=r.wsize-l):p=r.wnext-l,l>r.length&&(l=r.length),y=r.window}else y=n,p=s-r.offset,l=r.length;l>c&&(l=c),c-=l,r.length-=l;do{n[s++]=y[p++]}while(--l);0===r.length&&(r.mode=21);break;case 26:if(0===c)break e;n[s++]=r.length,c--,r.mode=21;break;case 27:if(r.wrap){for(;h<32;){if(0===o)break e;o--,u|=i[a++]<<h,h+=8}if(f-=c,e.total_out+=f,r.total+=f,f&&(e.adler=r.check=r.flags?qa(r.check,n,f,s-f):Ta(r.check,n,f,s-f)),f=c,(r.flags?u:_s(u))!==r.check){e.msg="incorrect data check",r.mode=vs;break}u=0,h=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;h<32;){if(0===o)break e;o--,u+=i[a++]<<h,h+=8}if(u!==(4294967295&r.total)){e.msg="incorrect length check",r.mode=vs;break}u=0,h=0}r.mode=29;case 29:A=1;break e;case vs:A=-3;break e;case 32:default:return Zn}return e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,r.hold=u,r.bits=h,(r.wsize||f!==e.avail_out&&r.mode<vs&&(r.mode<27||4!==t))&&Cs(e,e.output,e.next_out,f-e.avail_out),d-=e.avail_in,f-=e.avail_out,e.total_in+=d,e.total_out+=f,r.total+=f,r.wrap&&f&&(e.adler=r.check=r.flags?qa(r.check,n,f,e.next_out-f):Ta(r.check,n,f,e.next_out-f)),e.data_type=r.bits+(r.last?64:0)+(r.mode===ws?128:0)+(20===r.mode||15===r.mode?256:0),(0===d&&0===f||4===t)&&0===A&&(A=-5),A}function Ds(e,t){const r=t.length;let i,n;return e&&e.state?(i=e.state,0!==i.wrap&&11!==i.mode?Zn:11===i.mode&&(n=1,n=Ta(n,t,r,0),n!==i.check)?-3:(Cs(e,t,r,r),i.havedict=1,0)):Zn}class Rs{constructor(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}}class Is{constructor(e){this.options={chunkSize:16384,windowBits:0,...e||{}};const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new hs,this.strm.avail_out=0;let r=Ss(this.strm,t.windowBits);if(0!==r)throw Error(Oa[r]);if(this.header=new Rs,function(e,t){let r;e&&e.state&&(r=e.state,0==(2&r.wrap)||(r.head=t,t.done=!1))}(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=us(t.dictionary):t.dictionary instanceof ArrayBuffer&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=Ds(this.strm,t.dictionary),0!==r)))throw Error(Oa[r])}push(e,t){const{strm:r,options:{chunkSize:i,dictionary:n}}=this;let a,s,o=!1;if(this.ended)return!1;s=t===~~t?t:!0===t?4:0,"string"==typeof e?r.input=function(e){const t=new Wn(e.length);for(let r=0,i=t.length;r<i;r++)t[r]=e.charCodeAt(r);return t}(e):e instanceof ArrayBuffer?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;do{if(0===r.avail_out&&(r.output=new Wn(i),r.next_out=0,r.avail_out=i),a=Ks(r,0),2===a&&n&&(a=Ds(this.strm,n)),-5===a&&!0===o&&(a=0,o=!1),1!==a&&0!==a)return this.onEnd(a),this.ended=!0,!1;r.next_out&&(0!==r.avail_out&&1!==a&&(0!==r.avail_in||4!==s&&2!==s)||this.onData(Nn(r.output,r.next_out))),0===r.avail_in&&0===r.avail_out&&(o=!0)}while((r.avail_in>0||0===r.avail_out)&&1!==a);return 1===a&&(s=4),4===s?(a=function(e){if(!e||!e.state)return Zn;const t=e.state;return t.window&&(t.window=null),e.state=null,0}(this.strm),this.onEnd(a),this.ended=!0,0===a):2!==s||(this.onEnd(0),r.avail_out=0,!0)}onData(e){this.chunks.push(e)}onEnd(e){0===e&&(this.result=Vn(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg}}var Us=[0,1,3,7,15,31,63,127,255],Bs=function(e){this.stream=e,this.bitOffset=0,this.curByte=0,this.hasByte=!1};Bs.prototype._ensureByte=function(){this.hasByte||(this.curByte=this.stream.readByte(),this.hasByte=!0)},Bs.prototype.read=function(e){for(var t=0;e>0;){this._ensureByte();var r=8-this.bitOffset;if(e>=r)t<<=r,t|=Us[r]&this.curByte,this.hasByte=!1,this.bitOffset=0,e-=r;else{t<<=e;var i=r-e;t|=(this.curByte&Us[e]<<i)>>i,this.bitOffset+=e,e=0}}return t},Bs.prototype.seek=function(e){var t=e%8,r=(e-t)/8;this.bitOffset=t,this.stream.seek(r),this.hasByte=!1},Bs.prototype.pi=function(){var e,t=new Uint8Array(6);for(e=0;e<t.length;e++)t[e]=this.read(8);return function(e){return Array.prototype.map.call(e,(e=>("00"+e.toString(16)).slice(-2))).join("")}(t)};var Ts=Bs,zs=function(){};zs.prototype.readByte=function(){throw Error("abstract method readByte() not implemented")},zs.prototype.read=function(e,t,r){for(var i=0;i<r;){var n=this.readByte();if(n<0)return 0===i?-1:i;e[t++]=n,i++}return i},zs.prototype.seek=function(e){throw Error("abstract method seek() not implemented")},zs.prototype.writeByte=function(e){throw Error("abstract method readByte() not implemented")},zs.prototype.write=function(e,t,r){var i;for(i=0;i<r;i++)this.writeByte(e[t++]);return r},zs.prototype.flush=function(){};var qs,Os=zs,Fs=(qs=new Uint32Array([0,79764919,159529838,222504665,319059676,398814059,445009330,507990021,638119352,583659535,797628118,726387553,890018660,835552979,1015980042,944750013,1276238704,1221641927,1167319070,1095957929,1595256236,1540665371,1452775106,1381403509,1780037320,1859660671,1671105958,1733955601,2031960084,2111593891,1889500026,1952343757,2552477408,2632100695,2443283854,2506133561,2334638140,2414271883,2191915858,2254759653,3190512472,3135915759,3081330742,3009969537,2905550212,2850959411,2762807018,2691435357,3560074640,3505614887,3719321342,3648080713,3342211916,3287746299,3467911202,3396681109,4063920168,4143685023,4223187782,4286162673,3779000052,3858754371,3904687514,3967668269,881225847,809987520,1023691545,969234094,662832811,591600412,771767749,717299826,311336399,374308984,453813921,533576470,25881363,88864420,134795389,214552010,2023205639,2086057648,1897238633,1976864222,1804852699,1867694188,1645340341,1724971778,1587496639,1516133128,1461550545,1406951526,1302016099,1230646740,1142491917,1087903418,2896545431,2825181984,2770861561,2716262478,3215044683,3143675388,3055782693,3001194130,2326604591,2389456536,2200899649,2280525302,2578013683,2640855108,2418763421,2498394922,3769900519,3832873040,3912640137,3992402750,4088425275,4151408268,4197601365,4277358050,3334271071,3263032808,3476998961,3422541446,3585640067,3514407732,3694837229,3640369242,1762451694,1842216281,1619975040,1682949687,2047383090,2127137669,1938468188,2001449195,1325665622,1271206113,1183200824,1111960463,1543535498,1489069629,1434599652,1363369299,622672798,568075817,748617968,677256519,907627842,853037301,1067152940,995781531,51762726,131386257,177728840,240578815,269590778,349224269,429104020,491947555,4046411278,4126034873,4172115296,4234965207,3794477266,3874110821,3953728444,4016571915,3609705398,3555108353,3735388376,3664026991,3290680682,3236090077,3449943556,3378572211,3174993278,3120533705,3032266256,2961025959,2923101090,2868635157,2813903052,2742672763,2604032198,2683796849,2461293480,2524268063,2284983834,2364738477,2175806836,2238787779,1569362073,1498123566,1409854455,1355396672,1317987909,1246755826,1192025387,1137557660,2072149281,2135122070,1912620623,1992383480,1753615357,1816598090,1627664531,1707420964,295390185,358241886,404320391,483945776,43990325,106832002,186451547,266083308,932423249,861060070,1041341759,986742920,613929101,542559546,756411363,701822548,3316196985,3244833742,3425377559,3370778784,3601682597,3530312978,3744426955,3689838204,3819031489,3881883254,3928223919,4007849240,4037393693,4100235434,4180117107,4259748804,2310601993,2373574846,2151335527,2231098320,2596047829,2659030626,2470359227,2550115596,2947551409,2876312838,2788305887,2733848168,3165939309,3094707162,3040238851,2985771188]),function(){var e=4294967295;this.getCRC=function(){return~e>>>0},this.updateCRC=function(t){e=e<<8^qs[255&(e>>>24^t)]},this.updateCRCRun=function(t,r){for(;r-- >0;)e=e<<8^qs[255&(e>>>24^t)]}}),Ns=function(e,t){var r,i=e[t];for(r=t;r>0;r--)e[r]=e[r-1];return e[0]=i,i},Ls={OK:0,LAST_BLOCK:-1,NOT_BZIP_DATA:-2,UNEXPECTED_INPUT_EOF:-3,UNEXPECTED_OUTPUT_EOF:-4,DATA_ERROR:-5,OUT_OF_MEMORY:-6,OBSOLETE_INPUT:-7,END_OF_BLOCK:-8},js={};js[Ls.LAST_BLOCK]="Bad file checksum",js[Ls.NOT_BZIP_DATA]="Not bzip data",js[Ls.UNEXPECTED_INPUT_EOF]="Unexpected input EOF",js[Ls.UNEXPECTED_OUTPUT_EOF]="Unexpected output EOF",js[Ls.DATA_ERROR]="Data error",js[Ls.OUT_OF_MEMORY]="Out of memory",js[Ls.OBSOLETE_INPUT]="Obsolete (pre 0.9.5) bzip format not supported.";var Ws=function(e,t){var r=js[e]||"unknown error";t&&(r+=": "+t);var i=new TypeError(r);throw i.errorCode=e,i},Hs=function(e,t){this.writePos=this.writeCurrent=this.writeCount=0,this._start_bunzip(e,t)};Hs.prototype._init_block=function(){return this._get_next_block()?(this.blockCRC=new Fs,!0):(this.writeCount=-1,!1)},Hs.prototype._start_bunzip=function(e,t){var r=new Uint8Array(4);4===e.read(r,0,4)&&"BZh"===String.fromCharCode(r[0],r[1],r[2])||Ws(Ls.NOT_BZIP_DATA,"bad magic");var i=r[3]-48;(i<1||i>9)&&Ws(Ls.NOT_BZIP_DATA,"level out of range"),this.reader=new Ts(e),this.dbufSize=1e5*i,this.nextoutput=0,this.outputStream=t,this.streamCRC=0},Hs.prototype._get_next_block=function(){var e,t,r,i=this.reader,n=i.pi();if("177245385090"===n)return!1;"314159265359"!==n&&Ws(Ls.NOT_BZIP_DATA),this.targetBlockCRC=i.read(32)>>>0,this.streamCRC=(this.targetBlockCRC^(this.streamCRC<<1|this.streamCRC>>>31))>>>0,i.read(1)&&Ws(Ls.OBSOLETE_INPUT);var a=i.read(24);a>this.dbufSize&&Ws(Ls.DATA_ERROR,"initial position out of bounds");var s=i.read(16),o=new Uint8Array(256),c=0;for(e=0;e<16;e++)if(s&1<<15-e){var u=16*e;for(r=i.read(16),t=0;t<16;t++)r&1<<15-t&&(o[c++]=u+t)}var h=i.read(3);(h<2||h>6)&&Ws(Ls.DATA_ERROR);var d=i.read(15);0===d&&Ws(Ls.DATA_ERROR);var f=new Uint8Array(256);for(e=0;e<h;e++)f[e]=e;var l=new Uint8Array(d);for(e=0;e<d;e++){for(t=0;i.read(1);t++)t>=h&&Ws(Ls.DATA_ERROR);l[e]=Ns(f,t)}var p,y=c+2,b=[];for(t=0;t<h;t++){var m,g,w=new Uint8Array(y),v=new Uint16Array(21);for(s=i.read(5),e=0;e<y;e++){for(;(s<1||s>20)&&Ws(Ls.DATA_ERROR),i.read(1);)i.read(1)?s--:s++;w[e]=s}for(m=g=w[0],e=1;e<y;e++)w[e]>g?g=w[e]:w[e]<m&&(m=w[e]);p={},b.push(p),p.permute=new Uint16Array(258),p.limit=new Uint32Array(22),p.base=new Uint32Array(21),p.minLen=m,p.maxLen=g;var _=0;for(e=m;e<=g;e++)for(v[e]=p.limit[e]=0,s=0;s<y;s++)w[s]===e&&(p.permute[_++]=s);for(e=0;e<y;e++)v[w[e]]++;for(_=s=0,e=m;e<g;e++)_+=v[e],p.limit[e]=_-1,_<<=1,s+=v[e],p.base[e+1]=_-s;p.limit[g+1]=Number.MAX_VALUE,p.limit[g]=_+v[g]-1,p.base[m]=0}var k=new Uint32Array(256);for(e=0;e<256;e++)f[e]=e;var A,S=0,E=0,P=0,x=this.dbuf=new Uint32Array(this.dbufSize);for(y=0;;){for(y--||(y=49,P>=d&&Ws(Ls.DATA_ERROR),p=b[l[P++]]),e=p.minLen,t=i.read(e);e>p.maxLen&&Ws(Ls.DATA_ERROR),!(t<=p.limit[e]);e++)t=t<<1|i.read(1);((t-=p.base[e])<0||t>=258)&&Ws(Ls.DATA_ERROR);var M=p.permute[t];if(0!==M&&1!==M){if(S)for(S=0,E+s>this.dbufSize&&Ws(Ls.DATA_ERROR),k[A=o[f[0]]]+=s;s--;)x[E++]=A;if(M>c)break;E>=this.dbufSize&&Ws(Ls.DATA_ERROR),k[A=o[A=Ns(f,e=M-1)]]++,x[E++]=A}else S||(S=1,s=0),s+=0===M?S:2*S,S<<=1}for((a<0||a>=E)&&Ws(Ls.DATA_ERROR),t=0,e=0;e<256;e++)r=t+k[e],k[e]=t,t=r;for(e=0;e<E;e++)x[k[A=255&x[e]]]|=e<<8,k[A]++;var C=0,K=0,D=0;return E&&(K=255&(C=x[a]),C>>=8,D=-1),this.writePos=C,this.writeCurrent=K,this.writeCount=E,this.writeRun=D,!0},Hs.prototype._read_bunzip=function(e,t){var r,i,n;if(this.writeCount<0)return 0;var a=this.dbuf,s=this.writePos,o=this.writeCurrent,c=this.writeCount;this.outputsize;for(var u=this.writeRun;c;){for(c--,i=o,o=255&(s=a[s]),s>>=8,3==u++?(r=o,n=i,o=-1):(r=1,n=o),this.blockCRC.updateCRCRun(n,r);r--;)this.outputStream.writeByte(n),this.nextoutput++;o!=i&&(u=0)}return this.writeCount=c,this.blockCRC.getCRC()!==this.targetBlockCRC&&Ws(Ls.DATA_ERROR,"Bad block CRC (got "+this.blockCRC.getCRC().toString(16)+" expected "+this.targetBlockCRC.toString(16)+")"),this.nextoutput};var Gs=function(e){if("readByte"in e)return e;var t=new Os;return t.pos=0,t.readByte=function(){return e[this.pos++]},t.seek=function(e){this.pos=e},t.eof=function(){return this.pos>=e.length},t},Vs=function(e){var t=new Os,r=!0;if(e)if("number"==typeof e)t.buffer=new Uint8Array(e),r=!1;else{if("writeByte"in e)return e;t.buffer=e,r=!1}else t.buffer=new Uint8Array(16384);return t.pos=0,t.writeByte=function(e){if(r&&this.pos>=this.buffer.length){var t=new Uint8Array(2*this.buffer.length);t.set(this.buffer),this.buffer=t}this.buffer[this.pos++]=e},t.getBuffer=function(){if(this.pos!==this.buffer.length){if(!r)throw new TypeError("outputsize does not match decoded input");var e=new Uint8Array(this.pos);e.set(this.buffer.subarray(0,this.pos)),this.buffer=e}return this.buffer},t._coerced=!0,t};var $s=function(e,t,r){for(var i=Gs(e),n=Vs(t),a=new Hs(i,n);!("eof"in i)||!i.eof();)if(a._init_block())a._read_bunzip();else{var s=a.reader.read(32)>>>0;if(s!==a.streamCRC&&Ws(Ls.DATA_ERROR,"Bad stream CRC (got "+a.streamCRC.toString(16)+" expected "+s.toString(16)+")"),!r||!("eof"in i)||i.eof())break;a._start_bunzip(i,n)}if("getBuffer"in n)return n.getBuffer()};class Zs{static get tag(){return re.packet.literalData}constructor(e=new Date){this.format="utf8",this.date=V.normalizeDate(e),this.text=null,this.data=null,this.filename=""}setText(e,t="utf8"){this.format=t,this.text=e,this.data=null}getText(e=!1){return(null===this.text||V.isStream(this.text))&&(this.text=V.decodeUTF8(V.nativeEOL(this.getBytes(e)))),this.text}setBytes(e,t){this.format=t,this.data=e,this.text=null}getBytes(e=!1){return null===this.data&&(this.data=V.canonicalizeEOL(V.encodeUTF8(this.text))),e?O(this.data):this.data}setFilename(e){this.filename=e}getFilename(){return this.filename}async read(e){await z(e,(async e=>{const t=re.read(re.literal,await e.readByte()),r=await e.readByte();this.filename=V.decodeUTF8(await e.readBytes(r)),this.date=V.readDate(await e.readBytes(4));const i=e.remainder();this.setBytes(i,t)}))}writeHeader(){const e=V.encodeUTF8(this.filename),t=new Uint8Array([e.length]),r=new Uint8Array([re.write(re.literal,this.format)]),i=V.writeDate(this.date);return V.concatUint8Array([r,t,e,i])}write(){const e=this.writeHeader(),t=this.getBytes();return V.concat([e,t])}}function Ys(e){let t,r=0;const i=e[0];return i<192?([r]=e,t=1):i<255?(r=(e[0]-192<<8)+e[1]+192,t=2):255===i&&(r=V.readNumber(e.subarray(1,5)),t=5),{len:r,offset:t}}function Xs(e){return e<192?new Uint8Array([e]):e>191&&e<8384?new Uint8Array([192+(e-192>>8),e-192&255]):V.concatUint8Array([new Uint8Array([255]),V.writeNumber(e,4)])}function Qs(e){if(e<0||e>30)throw Error("Partial Length power must be between 1 and 30");return new Uint8Array([224+e])}function Js(e){return new Uint8Array([192|e])}function eo(e,t){return V.concatUint8Array([Js(e),Xs(t)])}function to(e){return[re.packet.literalData,re.packet.compressedData,re.packet.symmetricallyEncryptedData,re.packet.symEncryptedIntegrityProtectedData,re.packet.aeadEncryptedData].includes(e)}async function ro(e,t){const r=K(e);let i,n;try{const s=await r.peekBytes(2);if(!s||s.length<2||0==(128&s[0]))throw Error("Error during parsing. This message / key probably does not conform to a valid OpenPGP format.");const o=await r.readByte();let c,u,h=-1,d=-1;d=0,0!=(64&o)&&(d=1),d?h=63&o:(h=(63&o)>>2,u=3&o);const f=to(h);let l,p=null;if(f){if("array"===V.isStream(e)){const e=new a;i=D(e),p=e}else{const e=new S;i=D(e.writable),p=e.readable}n=t({tag:h,packet:p})}else p=[];do{if(d){const e=await r.readByte();if(l=!1,e<192)c=e;else if(e>=192&&e<224)c=(e-192<<8)+await r.readByte()+192;else if(e>223&&e<255){if(c=1<<(31&e),l=!0,!f)throw new TypeError("This packet type does not support partial lengths.")}else c=await r.readByte()<<24|await r.readByte()<<16|await r.readByte()<<8|await r.readByte()}else switch(u){case 0:c=await r.readByte();break;case 1:c=await r.readByte()<<8|await r.readByte();break;case 2:c=await r.readByte()<<24|await r.readByte()<<16|await r.readByte()<<8|await r.readByte();break;default:c=1/0}if(c>0){let e=0;for(;;){i&&await i.ready;const{done:t,value:n}=await r.read();if(t){if(c===1/0)break;throw Error("Unexpected end of packet")}const a=c===1/0?n:n.subarray(0,c-e);if(i?await i.write(a):p.push(a),e+=n.length,e>=c){r.unshift(n.subarray(c-e+n.length));break}}}}while(l);const y=await r.peekBytes(f?1/0:2);return i?(await i.ready,await i.close()):(p=V.concatUint8Array(p),await t({tag:h,packet:p})),!y||!y.length}catch(e){if(i)return await i.abort(e),!0;throw e}finally{i&&await n,r.releaseLock()}}class io extends Error{constructor(...e){super(...e),Error.captureStackTrace&&Error.captureStackTrace(this,io),this.name="UnsupportedError"}}const no=Symbol("verified"),ao=new Set([re.signatureSubpacket.issuer,re.signatureSubpacket.issuerFingerprint,re.signatureSubpacket.embeddedSignature]);class so{static get tag(){return re.packet.signature}constructor(){this.version=null,this.signatureType=null,this.hashAlgorithm=null,this.publicKeyAlgorithm=null,this.signatureData=null,this.unhashedSubpackets=[],this.signedHashValue=null,this.created=null,this.signatureExpirationTime=null,this.signatureNeverExpires=!0,this.exportable=null,this.trustLevel=null,this.trustAmount=null,this.regularExpression=null,this.revocable=null,this.keyExpirationTime=null,this.keyNeverExpires=null,this.preferredSymmetricAlgorithms=null,this.revocationKeyClass=null,this.revocationKeyAlgorithm=null,this.revocationKeyFingerprint=null,this.issuerKeyID=new le,this.rawNotations=[],this.notations={},this.preferredHashAlgorithms=null,this.preferredCompressionAlgorithms=null,this.keyServerPreferences=null,this.preferredKeyServer=null,this.isPrimaryUserID=null,this.policyURI=null,this.keyFlags=null,this.signersUserID=null,this.reasonForRevocationFlag=null,this.reasonForRevocationString=null,this.features=null,this.signatureTargetPublicKeyAlgorithm=null,this.signatureTargetHashAlgorithm=null,this.signatureTargetHash=null,this.embeddedSignature=null,this.issuerKeyVersion=null,this.issuerFingerprint=null,this.preferredAEADAlgorithms=null,this.revoked=null,this[no]=null}read(e){let t=0;if(this.version=e[t++],4!==this.version&&5!==this.version)throw new io(`Version ${this.version} of the signature packet is unsupported.`);if(this.signatureType=e[t++],this.publicKeyAlgorithm=e[t++],this.hashAlgorithm=e[t++],t+=this.readSubPackets(e.subarray(t,e.length),!0),!this.created)throw Error("Missing signature creation time subpacket.");this.signatureData=e.subarray(0,t),t+=this.readSubPackets(e.subarray(t,e.length),!1),this.signedHashValue=e.subarray(t,t+2),t+=2,this.params=On.signature.parseSignatureParams(this.publicKeyAlgorithm,e.subarray(t,e.length))}writeParams(){return this.params instanceof Promise?W((async()=>On.serializeParams(this.publicKeyAlgorithm,await this.params))):On.serializeParams(this.publicKeyAlgorithm,this.params)}write(){const e=[];return e.push(this.signatureData),e.push(this.writeUnhashedSubPackets()),e.push(this.signedHashValue),e.push(this.writeParams()),V.concat(e)}async sign(e,t,r=new Date,i=!1){const n=re.write(re.signature,this.signatureType),a=re.write(re.publicKey,this.publicKeyAlgorithm),s=re.write(re.hash,this.hashAlgorithm);5===e.version?this.version=5:this.version=4;const o=[new Uint8Array([this.version,n,a,s])];this.created=V.normalizeDate(r),this.issuerKeyVersion=e.version,this.issuerFingerprint=e.getFingerprintBytes(),this.issuerKeyID=e.getKeyID(),o.push(this.writeHashedSubPackets()),this.signatureData=V.concat(o);const c=this.toHash(n,t,i),u=await this.hash(n,t,c,i);this.signedHashValue=N(q(u),0,2);const h=async()=>On.signature.sign(a,s,e.publicParams,e.privateParams,c,await L(u));V.isStream(u)?this.params=h():(this.params=await h(),this[no]=!0)}writeHashedSubPackets(){const e=re.signatureSubpacket,t=[];let r;if(null===this.created)throw Error("Missing signature creation time");t.push(oo(e.signatureCreationTime,V.writeDate(this.created))),null!==this.signatureExpirationTime&&t.push(oo(e.signatureExpirationTime,V.writeNumber(this.signatureExpirationTime,4))),null!==this.exportable&&t.push(oo(e.exportableCertification,new Uint8Array([this.exportable?1:0]))),null!==this.trustLevel&&(r=new Uint8Array([this.trustLevel,this.trustAmount]),t.push(oo(e.trustSignature,r))),null!==this.regularExpression&&t.push(oo(e.regularExpression,this.regularExpression)),null!==this.revocable&&t.push(oo(e.revocable,new Uint8Array([this.revocable?1:0]))),null!==this.keyExpirationTime&&t.push(oo(e.keyExpirationTime,V.writeNumber(this.keyExpirationTime,4))),null!==this.preferredSymmetricAlgorithms&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.preferredSymmetricAlgorithms)),t.push(oo(e.preferredSymmetricAlgorithms,r))),null!==this.revocationKeyClass&&(r=new Uint8Array([this.revocationKeyClass,this.revocationKeyAlgorithm]),r=V.concat([r,this.revocationKeyFingerprint]),t.push(oo(e.revocationKey,r))),this.rawNotations.forEach((([{name:i,value:n,humanReadable:a}])=>{r=[new Uint8Array([a?128:0,0,0,0])],r.push(V.writeNumber(i.length,2)),r.push(V.writeNumber(n.length,2)),r.push(V.stringToUint8Array(i)),r.push(n),r=V.concat(r),t.push(oo(e.notationData,r))})),null!==this.preferredHashAlgorithms&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.preferredHashAlgorithms)),t.push(oo(e.preferredHashAlgorithms,r))),null!==this.preferredCompressionAlgorithms&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.preferredCompressionAlgorithms)),t.push(oo(e.preferredCompressionAlgorithms,r))),null!==this.keyServerPreferences&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.keyServerPreferences)),t.push(oo(e.keyServerPreferences,r))),null!==this.preferredKeyServer&&t.push(oo(e.preferredKeyServer,V.stringToUint8Array(this.preferredKeyServer))),null!==this.isPrimaryUserID&&t.push(oo(e.primaryUserID,new Uint8Array([this.isPrimaryUserID?1:0]))),null!==this.policyURI&&t.push(oo(e.policyURI,V.stringToUint8Array(this.policyURI))),null!==this.keyFlags&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.keyFlags)),t.push(oo(e.keyFlags,r))),null!==this.signersUserID&&t.push(oo(e.signersUserID,V.stringToUint8Array(this.signersUserID))),null!==this.reasonForRevocationFlag&&(r=V.stringToUint8Array(String.fromCharCode(this.reasonForRevocationFlag)+this.reasonForRevocationString),t.push(oo(e.reasonForRevocation,r))),null!==this.features&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.features)),t.push(oo(e.features,r))),null!==this.signatureTargetPublicKeyAlgorithm&&(r=[new Uint8Array([this.signatureTargetPublicKeyAlgorithm,this.signatureTargetHashAlgorithm])],r.push(V.stringToUint8Array(this.signatureTargetHash)),r=V.concat(r),t.push(oo(e.signatureTarget,r))),null!==this.preferredAEADAlgorithms&&(r=V.stringToUint8Array(V.uint8ArrayToString(this.preferredAEADAlgorithms)),t.push(oo(e.preferredAEADAlgorithms,r)));const i=V.concat(t),n=V.writeNumber(i.length,2);return V.concat([n,i])}writeUnhashedSubPackets(){const e=re.signatureSubpacket,t=[];let r;this.issuerKeyID.isNull()||5===this.issuerKeyVersion||t.push(oo(e.issuer,this.issuerKeyID.write())),null!==this.embeddedSignature&&t.push(oo(e.embeddedSignature,this.embeddedSignature.write())),null!==this.issuerFingerprint&&(r=[new Uint8Array([this.issuerKeyVersion]),this.issuerFingerprint],r=V.concat(r),t.push(oo(e.issuerFingerprint,r))),this.unhashedSubpackets.forEach((e=>{t.push(Xs(e.length)),t.push(e)}));const i=V.concat(t),n=V.writeNumber(i.length,2);return V.concat([n,i])}readSubPacket(e,t=!0){let r=0;const i=128&e[r],n=127&e[r];if(t||ao.has(n))switch(r++,n){case re.signatureSubpacket.signatureCreationTime:this.created=V.readDate(e.subarray(r,e.length));break;case re.signatureSubpacket.signatureExpirationTime:{const t=V.readNumber(e.subarray(r,e.length));this.signatureNeverExpires=0===t,this.signatureExpirationTime=t;break}case re.signatureSubpacket.exportableCertification:this.exportable=1===e[r++];break;case re.signatureSubpacket.trustSignature:this.trustLevel=e[r++],this.trustAmount=e[r++];break;case re.signatureSubpacket.regularExpression:this.regularExpression=e[r];break;case re.signatureSubpacket.revocable:this.revocable=1===e[r++];break;case re.signatureSubpacket.keyExpirationTime:{const t=V.readNumber(e.subarray(r,e.length));this.keyExpirationTime=t,this.keyNeverExpires=0===t;break}case re.signatureSubpacket.preferredSymmetricAlgorithms:this.preferredSymmetricAlgorithms=[...e.subarray(r,e.length)];break;case re.signatureSubpacket.revocationKey:this.revocationKeyClass=e[r++],this.revocationKeyAlgorithm=e[r++],this.revocationKeyFingerprint=e.subarray(r,r+20);break;case re.signatureSubpacket.issuer:this.issuerKeyID.read(e.subarray(r,e.length));break;case re.signatureSubpacket.notationData:{const t=!!(128&e[r]);r+=4;const n=V.readNumber(e.subarray(r,r+2));r+=2;const a=V.readNumber(e.subarray(r,r+2));r+=2;const s=V.uint8ArrayToString(e.subarray(r,r+n)),o=e.subarray(r+n,r+n+a);this.rawNotations.push({name:s,humanReadable:t,value:o,critical:i}),t&&(this.notations[s]=V.uint8ArrayToString(o));break}case re.signatureSubpacket.preferredHashAlgorithms:this.preferredHashAlgorithms=[...e.subarray(r,e.length)];break;case re.signatureSubpacket.preferredCompressionAlgorithms:this.preferredCompressionAlgorithms=[...e.subarray(r,e.length)];break;case re.signatureSubpacket.keyServerPreferences:this.keyServerPreferences=[...e.subarray(r,e.length)];break;case re.signatureSubpacket.preferredKeyServer:this.preferredKeyServer=V.uint8ArrayToString(e.subarray(r,e.length));break;case re.signatureSubpacket.primaryUserID:this.isPrimaryUserID=0!==e[r++];break;case re.signatureSubpacket.policyURI:this.policyURI=V.uint8ArrayToString(e.subarray(r,e.length));break;case re.signatureSubpacket.keyFlags:this.keyFlags=[...e.subarray(r,e.length)];break;case re.signatureSubpacket.signersUserID:this.signersUserID=V.uint8ArrayToString(e.subarray(r,e.length));break;case re.signatureSubpacket.reasonForRevocation:this.reasonForRevocationFlag=e[r++],this.reasonForRevocationString=V.uint8ArrayToString(e.subarray(r,e.length));break;case re.signatureSubpacket.features:this.features=[...e.subarray(r,e.length)];break;case re.signatureSubpacket.signatureTarget:{this.signatureTargetPublicKeyAlgorithm=e[r++],this.signatureTargetHashAlgorithm=e[r++];const t=On.getHashByteLength(this.signatureTargetHashAlgorithm);this.signatureTargetHash=V.uint8ArrayToString(e.subarray(r,r+t));break}case re.signatureSubpacket.embeddedSignature:this.embeddedSignature=new so,this.embeddedSignature.read(e.subarray(r,e.length));break;case re.signatureSubpacket.issuerFingerprint:this.issuerKeyVersion=e[r++],this.issuerFingerprint=e.subarray(r,e.length),5===this.issuerKeyVersion?this.issuerKeyID.read(this.issuerFingerprint):this.issuerKeyID.read(this.issuerFingerprint.subarray(-8));break;case re.signatureSubpacket.preferredAEADAlgorithms:this.preferredAEADAlgorithms=[...e.subarray(r,e.length)];break;default:{const e=Error("Unknown signature subpacket type "+n);if(i)throw e;V.printDebug(e)}}else this.unhashedSubpackets.push(e.subarray(r,e.length))}readSubPackets(e,t=!0,r){const i=V.readNumber(e.subarray(0,2));let n=2;for(;n<2+i;){const i=Ys(e.subarray(n,e.length));n+=i.offset,this.readSubPacket(e.subarray(n,n+i.len),t,r),n+=i.len}return n}toSign(e,t){const r=re.signature;switch(e){case r.binary:return null!==t.text?V.encodeUTF8(t.getText(!0)):t.getBytes(!0);case r.text:{const e=t.getBytes(!0);return V.canonicalizeEOL(e)}case r.standalone:return new Uint8Array(0);case r.certGeneric:case r.certPersona:case r.certCasual:case r.certPositive:case r.certRevocation:{let e,i;if(t.userID)i=180,e=t.userID;else{if(!t.userAttribute)throw Error("Either a userID or userAttribute packet needs to be supplied for certification.");i=209,e=t.userAttribute}const n=e.write();return V.concat([this.toSign(r.key,t),new Uint8Array([i]),V.writeNumber(n.length,4),n])}case r.subkeyBinding:case r.subkeyRevocation:case r.keyBinding:return V.concat([this.toSign(r.key,t),this.toSign(r.key,{key:t.bind})]);case r.key:if(void 0===t.key)throw Error("Key packet is required for this signature.");return t.key.writeForHash(this.version);case r.keyRevocation:return this.toSign(r.key,t);case r.timestamp:return new Uint8Array(0);case r.thirdParty:throw Error("Not implemented");default:throw Error("Unknown signature type.")}}calculateTrailer(e,t){let r=0;return B(q(this.signatureData),(e=>{r+=e.length}),(()=>{const i=[];return 5!==this.version||this.signatureType!==re.signature.binary&&this.signatureType!==re.signature.text||(t?i.push(new Uint8Array(6)):i.push(e.writeHeader())),i.push(new Uint8Array([this.version,255])),5===this.version&&i.push(new Uint8Array(4)),i.push(V.writeNumber(r,4)),V.concat(i)}))}toHash(e,t,r=!1){const i=this.toSign(e,t);return V.concat([i,this.signatureData,this.calculateTrailer(t,r)])}async hash(e,t,r,i=!1){const n=re.write(re.hash,this.hashAlgorithm);return r||(r=this.toHash(e,t,i)),On.hash.digest(n,r)}async verify(e,t,r,i=new Date,n=!1,a=ie){const s=re.write(re.publicKey,this.publicKeyAlgorithm),o=re.write(re.hash,this.hashAlgorithm);if(!this.issuerKeyID.equals(e.getKeyID()))throw Error("Signature was not issued by the given public key");if(s!==re.write(re.publicKey,e.algorithm))throw Error("Public key algorithm used to sign signature does not match issuer key algorithm.");const c=t===re.signature.binary||t===re.signature.text;if(!(this[no]&&!c)){let i,a;if(this.hashed?a=await this.hashed:(i=this.toHash(t,r,n),a=await this.hash(t,r,i)),a=await L(a),this.signedHashValue[0]!==a[0]||this.signedHashValue[1]!==a[1])throw Error("Signed digest did not match");if(this.params=await this.params,this[no]=await On.signature.verify(s,o,this.params,e.publicParams,i,a),!this[no])throw Error("Signature verification failed")}const u=V.normalizeDate(i);if(u&&this.created>u)throw Error("Signature creation time is in the future");if(u&&u>=this.getExpirationTime())throw Error("Signature is expired");if(a.rejectHashAlgorithms.has(o))throw Error("Insecure hash algorithm: "+re.read(re.hash,o).toUpperCase());if(a.rejectMessageHashAlgorithms.has(o)&&[re.signature.binary,re.signature.text].includes(this.signatureType))throw Error("Insecure message hash algorithm: "+re.read(re.hash,o).toUpperCase());if(this.rawNotations.forEach((({name:e,critical:t})=>{if(t&&a.knownNotations.indexOf(e)<0)throw Error("Unknown critical notation: "+e)})),null!==this.revocationKeyClass)throw Error("This key is intended to be revoked with an authorized key, which OpenPGP.js does not support.")}isExpired(e=new Date){const t=V.normalizeDate(e);return null!==t&&!(this.created<=t&&t<this.getExpirationTime())}getExpirationTime(){return this.signatureNeverExpires?1/0:new Date(this.created.getTime()+1e3*this.signatureExpirationTime)}}function oo(e,t){const r=[];return r.push(Xs(t.length+1)),r.push(new Uint8Array([e])),r.push(t),V.concat(r)}class co{static get tag(){return re.packet.onePassSignature}constructor(){this.version=null,this.signatureType=null,this.hashAlgorithm=null,this.publicKeyAlgorithm=null,this.issuerKeyID=null,this.flags=null}read(e){let t=0;if(this.version=e[t++],3!==this.version)throw new io(`Version ${this.version} of the one-pass signature packet is unsupported.`);return this.signatureType=e[t++],this.hashAlgorithm=e[t++],this.publicKeyAlgorithm=e[t++],this.issuerKeyID=new le,this.issuerKeyID.read(e.subarray(t,t+8)),t+=8,this.flags=e[t++],this}write(){const e=new Uint8Array([3,re.write(re.signature,this.signatureType),re.write(re.hash,this.hashAlgorithm),re.write(re.publicKey,this.publicKeyAlgorithm)]),t=new Uint8Array([this.flags]);return V.concatUint8Array([e,this.issuerKeyID.write(),t])}calculateTrailer(...e){return W((async()=>so.prototype.calculateTrailer.apply(await this.correspondingSig,e)))}async verify(){const e=await this.correspondingSig;if(!e||e.constructor.tag!==re.packet.signature)throw Error("Corresponding signature packet missing");if(e.signatureType!==this.signatureType||e.hashAlgorithm!==this.hashAlgorithm||e.publicKeyAlgorithm!==this.publicKeyAlgorithm||!e.issuerKeyID.equals(this.issuerKeyID))throw Error("Corresponding signature packet does not match one-pass signature packet");return e.hashed=this.hashed,e.verify.apply(e,arguments)}}function uo(e,t){if(!t[e]){let t;try{t=re.read(re.packet,e)}catch(t){throw new io("Unknown packet type with tag: "+e)}throw Error("Packet not allowed in this context: "+t)}return new t[e]}co.prototype.hash=so.prototype.hash,co.prototype.toHash=so.prototype.toHash,co.prototype.toSign=so.prototype.toSign;class ho extends Array{static async fromBinary(e,t,r=ie){const i=new ho;return await i.read(e,t,r),i}async read(e,t,r=ie){this.stream=T(e,(async(e,i)=>{const n=D(i);try{for(;;){await n.ready;if(await ro(e,(async e=>{try{if(e.tag===re.packet.marker||e.tag===re.packet.trust)return;const i=uo(e.tag,t);i.packets=new ho,i.fromStream=V.isStream(e.packet),await i.read(e.packet,r),await n.write(i)}catch(t){const i=!r.ignoreUnsupportedPackets&&t instanceof io,a=!(r.ignoreMalformedPackets||t instanceof io);(i||a||to(e.tag))&&await n.abort(t),V.printDebugError(t)}})))return await n.ready,void await n.close()}}catch(e){await n.abort(e)}}));const i=K(this.stream);for(;;){const{done:e,value:t}=await i.read();if(e?this.stream=null:this.push(t),e||to(t.constructor.tag))break}i.releaseLock()}write(){const e=[];for(let t=0;t<this.length;t++){const r=this[t].write();if(V.isStream(r)&&to(this[t].constructor.tag)){let i=[],n=0;const a=512;e.push(Js(this[t].constructor.tag)),e.push(B(r,(e=>{if(i.push(e),n+=e.length,n>=a){const e=Math.min(Math.log(n)/Math.LN2|0,30),t=2**e,r=V.concat([Qs(e)].concat(i));return i=[r.subarray(1+t)],n=i[0].length,r.subarray(0,1+t)}}),(()=>V.concat([Xs(n)].concat(i)))))}else{if(V.isStream(r)){let i=0;e.push(B(q(r),(e=>{i+=e.length}),(()=>eo(this[t].constructor.tag,i))))}else e.push(eo(this[t].constructor.tag,r.length));e.push(r)}}return V.concat(e)}filterByTag(...e){const t=new ho,r=e=>t=>e===t;for(let i=0;i<this.length;i++)e.some(r(this[i].constructor.tag))&&t.push(this[i]);return t}findPacket(e){return this.find((t=>t.constructor.tag===e))}indexOfTag(...e){const t=[],r=this,i=e=>t=>e===t;for(let n=0;n<this.length;n++)e.some(i(r[n].constructor.tag))&&t.push(n);return t}}const fo=/*#__PURE__*/V.constructAllowedPackets([Zs,co,so]);class lo{static get tag(){return re.packet.compressedData}constructor(e=ie){this.packets=null,this.algorithm=re.read(re.compression,e.preferredCompressionAlgorithm),this.compressed=null,this.deflateLevel=e.deflateLevel}async read(e,t=ie){await z(e,(async e=>{this.algorithm=re.read(re.compression,await e.readByte()),this.compressed=e.remainder(),await this.decompress(t)}))}write(){return null===this.compressed&&this.compress(),V.concat([new Uint8Array([re.write(re.compression,this.algorithm)]),this.compressed])}async decompress(e=ie){if(!vo[this.algorithm])throw Error(this.algorithm+" decompression not supported");this.packets=await ho.fromBinary(vo[this.algorithm](this.compressed),fo,e)}compress(){if(!wo[this.algorithm])throw Error(this.algorithm+" compression not supported");this.compressed=wo[this.algorithm](this.packets.write(),this.deflateLevel)}}const po=V.getNodeZlib();function yo(e){return e}function bo(e,t,r={}){return function(i){return!V.isStream(i)||s(i)?W((()=>L(i).then((t=>new Promise(((i,n)=>{e(t,r,((e,t)=>{if(e)return n(e);i(t)}))})))))):y(b(i).pipe(t(r)))}}function mo(e,t={}){return function(r){const i=new e(t);return B(r,(e=>{if(e.length)return i.push(e,2),i.result}),(()=>{if(e===ds)return i.push([],4),i.result}))}}function go(e){return function(t){return W((async()=>e(await L(t))))}}const wo=po?{zip:/*#__PURE__*/(e,t)=>bo(po.deflateRaw,po.createDeflateRaw,{level:t})(e),zlib:/*#__PURE__*/(e,t)=>bo(po.deflate,po.createDeflate,{level:t})(e)}:{zip:/*#__PURE__*/(e,t)=>mo(ds,{raw:!0,level:t})(e),zlib:/*#__PURE__*/(e,t)=>mo(ds,{level:t})(e)},vo=po?{uncompressed:yo,zip:/*#__PURE__*/bo(po.inflateRaw,po.createInflateRaw),zlib:/*#__PURE__*/bo(po.inflate,po.createInflate),bzip2:/*#__PURE__*/go($s)}:{uncompressed:yo,zip:/*#__PURE__*/mo(Is,{raw:!0}),zlib:/*#__PURE__*/mo(Is),bzip2:/*#__PURE__*/go($s)},_o=/*#__PURE__*/V.constructAllowedPackets([Zs,lo,co,so]);class ko{static get tag(){return re.packet.symEncryptedIntegrityProtectedData}constructor(){this.version=1,this.encrypted=null,this.packets=null}async read(e){await z(e,(async e=>{const t=await e.readByte();if(1!==t)throw new io(`Version ${t} of the SEIP packet is unsupported.`);this.encrypted=e.remainder()}))}write(){return V.concat([new Uint8Array([1]),this.encrypted])}async encrypt(e,t,r=ie){let i=this.packets.write();s(i)&&(i=await L(i));const n=await On.getPrefixRandom(e),a=new Uint8Array([211,20]),o=V.concat([n,i,a]),c=await On.hash.sha1(O(o)),u=V.concat([o,c]);return this.encrypted=await On.mode.cfb.encrypt(e,t,u,new Uint8Array(On.cipher[e].blockSize),r),!0}async decrypt(e,t,r=ie){let i=q(this.encrypted);s(i)&&(i=await L(i));const n=await On.mode.cfb.decrypt(e,t,i,new Uint8Array(On.cipher[e].blockSize)),a=N(O(n),-20),o=N(n,0,-20),c=Promise.all([L(await On.hash.sha1(O(o))),L(a)]).then((([e,t])=>{if(!V.equalsUint8Array(e,t))throw Error("Modification detected.");return new Uint8Array})),u=N(o,On.cipher[e].blockSize+2);let h=N(u,0,-2);return h=C([h,W((()=>c))]),V.isStream(i)&&r.allowUnauthenticatedStream||(h=await L(h)),this.packets=await ho.fromBinary(h,_o,r),!0}}const Ao=/*#__PURE__*/V.constructAllowedPackets([Zs,lo,co,so]);class So{static get tag(){return re.packet.aeadEncryptedData}constructor(){this.version=1,this.cipherAlgo=null,this.aeadAlgorithm="eax",this.aeadAlgo=null,this.chunkSizeByte=null,this.iv=null,this.encrypted=null,this.packets=null}async read(e){await z(e,(async e=>{const t=await e.readByte();if(1!==t)throw new io(`Version ${t} of the AEAD-encrypted data packet is not supported.`);this.cipherAlgo=await e.readByte(),this.aeadAlgo=await e.readByte(),this.chunkSizeByte=await e.readByte();const r=On.mode[re.read(re.aead,this.aeadAlgo)];this.iv=await e.readBytes(r.ivLength),this.encrypted=e.remainder()}))}write(){return V.concat([new Uint8Array([this.version,this.cipherAlgo,this.aeadAlgo,this.chunkSizeByte]),this.iv,this.encrypted])}async decrypt(e,t,r=ie){this.packets=await ho.fromBinary(await this.crypt("decrypt",t,q(this.encrypted)),Ao,r)}async encrypt(e,t,r=ie){this.cipherAlgo=re.write(re.symmetric,e),this.aeadAlgo=re.write(re.aead,this.aeadAlgorithm);const i=On.mode[re.read(re.aead,this.aeadAlgo)];this.iv=await On.random.getRandomBytes(i.ivLength),this.chunkSizeByte=r.aeadChunkSizeByte;const n=this.packets.write();this.encrypted=await this.crypt("encrypt",t,n)}async crypt(e,t,r){const i=re.read(re.symmetric,this.cipherAlgo),n=On.mode[re.read(re.aead,this.aeadAlgo)],a=await n(i,t),s="decrypt"===e?n.tagLength:0,o="encrypt"===e?n.tagLength:0,c=2**(this.chunkSizeByte+6)+s,u=new ArrayBuffer(21),h=new Uint8Array(u,0,13),d=new Uint8Array(u),f=new DataView(u),l=new Uint8Array(u,5,8);h.set([192|So.tag,this.version,this.cipherAlgo,this.aeadAlgo,this.chunkSizeByte],0);let p=0,y=Promise.resolve(),b=0,m=0;const g=this.iv;return T(r,(async(t,r)=>{if("array"!==V.isStream(t)){const e=new S({},{highWaterMark:V.getHardwareConcurrency()*2**(this.chunkSizeByte+6),size:e=>e.length});R(e.readable,r),r=e.writable}const i=K(t),u=D(r);try{for(;;){let t=await i.readBytes(c+s)||new Uint8Array;const r=t.subarray(t.length-s);let w,v;if(t=t.subarray(0,t.length-s),!p||t.length?(i.unshift(r),w=a[e](t,n.getNonce(g,l),h),m+=t.length-s+o):(f.setInt32(17,b),w=a[e](r,n.getNonce(g,l),d),m+=o,v=!0),b+=t.length-s,y=y.then((()=>w)).then((async e=>{await u.ready,await u.write(e),m-=e.length})).catch((e=>u.abort(e))),(v||m>u.desiredSize)&&await y,v){await u.close();break}f.setInt32(9,++p)}}catch(e){await u.abort(e)}}))}}class Eo{static get tag(){return re.packet.publicKeyEncryptedSessionKey}constructor(){this.version=3,this.publicKeyID=new le,this.publicKeyAlgorithm=null,this.sessionKey=null,this.sessionKeyAlgorithm=null,this.encrypted={}}read(e){if(this.version=e[0],3!==this.version)throw new io(`Version ${this.version} of the PKESK packet is unsupported.`);this.publicKeyID.read(e.subarray(1,e.length)),this.publicKeyAlgorithm=re.read(re.publicKey,e[9]);const t=re.write(re.publicKey,this.publicKeyAlgorithm);this.encrypted=On.parseEncSessionKeyParams(t,e.subarray(10))}write(){const e=re.write(re.publicKey,this.publicKeyAlgorithm),t=[new Uint8Array([this.version]),this.publicKeyID.write(),new Uint8Array([re.write(re.publicKey,this.publicKeyAlgorithm)]),On.serializeParams(e,this.encrypted)];return V.concatUint8Array(t)}async encrypt(e){const t=V.concatUint8Array([new Uint8Array([re.write(re.symmetric,this.sessionKeyAlgorithm)]),this.sessionKey,V.writeChecksum(this.sessionKey)]),r=re.write(re.publicKey,this.publicKeyAlgorithm);this.encrypted=await On.publicKeyEncrypt(r,e.publicParams,t,e.getFingerprintBytes())}async decrypt(e){const t=re.write(re.publicKey,this.publicKeyAlgorithm);if(t!==re.write(re.publicKey,e.algorithm))throw Error("Decryption error");const r=await On.publicKeyDecrypt(t,e.publicParams,e.privateParams,this.encrypted,e.getFingerprintBytes()),i=r.subarray(r.length-2),n=r.subarray(1,r.length-2);if(!V.equalsUint8Array(i,V.writeChecksum(n)))throw Error("Decryption error");this.sessionKey=n,this.sessionKeyAlgorithm=re.read(re.symmetric,r[0])}}class Po{constructor(e=ie){this.algorithm="sha256",this.type="iterated",this.c=e.s2kIterationCountByte,this.salt=null}getCount(){return 16+(15&this.c)<<6+(this.c>>4)}read(e){let t=0;switch(this.type=re.read(re.s2k,e[t++]),this.algorithm=e[t++],"gnu"!==this.type&&(this.algorithm=re.read(re.hash,this.algorithm)),this.type){case"simple":break;case"salted":this.salt=e.subarray(t,t+8),t+=8;break;case"iterated":this.salt=e.subarray(t,t+8),t+=8,this.c=e[t++];break;case"gnu":if("GNU"!==V.uint8ArrayToString(e.subarray(t,t+3)))throw Error("Unknown s2k type.");t+=3;if(1001!==1e3+e[t++])throw Error("Unknown s2k gnu protection mode.");this.type="gnu-dummy";break;default:throw Error("Unknown s2k type.")}return t}write(){if("gnu-dummy"===this.type)return new Uint8Array([101,0,...V.stringToUint8Array("GNU"),1]);const e=[new Uint8Array([re.write(re.s2k,this.type),re.write(re.hash,this.algorithm)])];switch(this.type){case"simple":break;case"salted":e.push(this.salt);break;case"iterated":e.push(this.salt),e.push(new Uint8Array([this.c]));break;case"gnu":throw Error("GNU s2k type not supported.");default:throw Error("Unknown s2k type.")}return V.concatUint8Array(e)}async produceKey(e,t){e=V.encodeUTF8(e);const r=re.write(re.hash,this.algorithm),i=[];let n=0,a=0;for(;n<t;){let t;switch(this.type){case"simple":t=V.concatUint8Array([new Uint8Array(a),e]);break;case"salted":t=V.concatUint8Array([new Uint8Array(a),this.salt,e]);break;case"iterated":{const r=V.concatUint8Array([this.salt,e]);let i=r.length;const n=Math.max(this.getCount(),i);t=new Uint8Array(a+n),t.set(r,a);for(let e=a+i;e<n;e+=i,i*=2)t.copyWithin(e,a,e);break}case"gnu":throw Error("GNU s2k type not supported.");default:throw Error("Unknown s2k type.")}const s=await On.hash.digest(r,t);i.push(s),n+=s.length,a++}return V.concatUint8Array(i).subarray(0,t)}}class xo{static get tag(){return re.packet.symEncryptedSessionKey}constructor(e=ie){this.version=e.aeadProtect?5:4,this.sessionKey=null,this.sessionKeyEncryptionAlgorithm=null,this.sessionKeyAlgorithm="aes256",this.aeadAlgorithm=re.read(re.aead,e.preferredAEADAlgorithm),this.encrypted=null,this.s2k=null,this.iv=null}read(e){let t=0;if(this.version=e[t++],4!==this.version&&5!==this.version)throw new io(`Version ${this.version} of the SKESK packet is unsupported.`);const r=re.read(re.symmetric,e[t++]);if(5===this.version&&(this.aeadAlgorithm=re.read(re.aead,e[t++])),this.s2k=new Po,t+=this.s2k.read(e.subarray(t,e.length)),5===this.version){const r=On.mode[this.aeadAlgorithm];this.iv=e.subarray(t,t+=r.ivLength)}5===this.version||t<e.length?(this.encrypted=e.subarray(t,e.length),this.sessionKeyEncryptionAlgorithm=r):this.sessionKeyAlgorithm=r}write(){const e=null===this.encrypted?this.sessionKeyAlgorithm:this.sessionKeyEncryptionAlgorithm;let t;return 5===this.version?t=V.concatUint8Array([new Uint8Array([this.version,re.write(re.symmetric,e),re.write(re.aead,this.aeadAlgorithm)]),this.s2k.write(),this.iv,this.encrypted]):(t=V.concatUint8Array([new Uint8Array([this.version,re.write(re.symmetric,e)]),this.s2k.write()]),null!==this.encrypted&&(t=V.concatUint8Array([t,this.encrypted]))),t}async decrypt(e){const t=null!==this.sessionKeyEncryptionAlgorithm?this.sessionKeyEncryptionAlgorithm:this.sessionKeyAlgorithm,r=On.cipher[t].keySize,i=await this.s2k.produceKey(e,r);if(5===this.version){const e=On.mode[this.aeadAlgorithm],r=new Uint8Array([192|xo.tag,this.version,re.write(re.symmetric,this.sessionKeyEncryptionAlgorithm),re.write(re.aead,this.aeadAlgorithm)]),n=await e(t,i);this.sessionKey=await n.decrypt(this.encrypted,this.iv,r)}else if(null!==this.encrypted){const e=await On.mode.cfb.decrypt(t,i,this.encrypted,new Uint8Array(On.cipher[t].blockSize));this.sessionKeyAlgorithm=re.read(re.symmetric,e[0]),this.sessionKey=e.subarray(1,e.length)}else this.sessionKey=i}async encrypt(e,t=ie){const r=null!==this.sessionKeyEncryptionAlgorithm?this.sessionKeyEncryptionAlgorithm:this.sessionKeyAlgorithm;this.sessionKeyEncryptionAlgorithm=r,this.s2k=new Po(t),this.s2k.salt=await On.random.getRandomBytes(8);const i=On.cipher[r].keySize,n=await this.s2k.produceKey(e,i);if(null===this.sessionKey&&(this.sessionKey=await On.generateSessionKey(this.sessionKeyAlgorithm)),5===this.version){const e=On.mode[this.aeadAlgorithm];this.iv=await On.random.getRandomBytes(e.ivLength);const t=new Uint8Array([192|xo.tag,this.version,re.write(re.symmetric,this.sessionKeyEncryptionAlgorithm),re.write(re.aead,this.aeadAlgorithm)]),i=await e(r,n);this.encrypted=await i.encrypt(this.sessionKey,this.iv,t)}else{const e=new Uint8Array([re.write(re.symmetric,this.sessionKeyAlgorithm)]),i=V.concatUint8Array([e,this.sessionKey]);this.encrypted=await On.mode.cfb.encrypt(r,n,i,new Uint8Array(On.cipher[r].blockSize),t)}}}class Mo{static get tag(){return re.packet.publicKey}constructor(e=new Date,t=ie){this.version=t.v5Keys?5:4,this.created=V.normalizeDate(e),this.algorithm=null,this.publicParams=null,this.expirationTimeV3=0,this.fingerprint=null,this.keyID=null}static fromSecretKeyPacket(e){const t=new Mo,{version:r,created:i,algorithm:n,publicParams:a,keyID:s,fingerprint:o}=e;return t.version=r,t.created=i,t.algorithm=n,t.publicParams=a,t.keyID=s,t.fingerprint=o,t}async read(e){let t=0;if(this.version=e[t++],4===this.version||5===this.version){this.created=V.readDate(e.subarray(t,t+4)),t+=4,this.algorithm=re.read(re.publicKey,e[t++]);const r=re.write(re.publicKey,this.algorithm);5===this.version&&(t+=4);try{const{read:i,publicParams:n}=On.parsePublicKeyParams(r,e.subarray(t));this.publicParams=n,t+=i}catch(e){throw Error("Error reading MPIs")}return await this.computeFingerprintAndKeyID(),t}throw new io(`Version ${this.version} of the key packet is unsupported.`)}write(){const e=[];e.push(new Uint8Array([this.version])),e.push(V.writeDate(this.created));const t=re.write(re.publicKey,this.algorithm);e.push(new Uint8Array([t]));const r=On.serializeParams(t,this.publicParams);return 5===this.version&&e.push(V.writeNumber(r.length,4)),e.push(r),V.concatUint8Array(e)}writeForHash(e){const t=this.writePublicKey();return 5===e?V.concatUint8Array([new Uint8Array([154]),V.writeNumber(t.length,4),t]):V.concatUint8Array([new Uint8Array([153]),V.writeNumber(t.length,2),t])}isDecrypted(){return null}getCreationTime(){return this.created}getKeyID(){return this.keyID}async computeFingerprintAndKeyID(){if(await this.computeFingerprint(),this.keyID=new le,5===this.version)this.keyID.read(this.fingerprint.subarray(0,8));else{if(4!==this.version)throw Error("Unsupported key version");this.keyID.read(this.fingerprint.subarray(12,20))}}async computeFingerprint(){const e=this.writeForHash(this.version);if(5===this.version)this.fingerprint=await On.hash.sha256(e);else{if(4!==this.version)throw Error("Unsupported key version");this.fingerprint=await On.hash.sha1(e)}}getFingerprintBytes(){return this.fingerprint}getFingerprint(){return V.uint8ArrayToHex(this.getFingerprintBytes())}hasSameFingerprintAs(e){return this.version===e.version&&V.equalsUint8Array(this.writePublicKey(),e.writePublicKey())}getAlgorithmInfo(){const e={};e.algorithm=this.algorithm;const t=this.publicParams.n||this.publicParams.p;return t?e.bits=V.uint8ArrayBitLength(t):e.curve=this.publicParams.oid.getName(),e}}Mo.prototype.readPublicKey=Mo.prototype.read,Mo.prototype.writePublicKey=Mo.prototype.write;const Co=/*#__PURE__*/V.constructAllowedPackets([Zs,lo,co,so]);class Ko{static get tag(){return re.packet.symmetricallyEncryptedData}constructor(){this.encrypted=null,this.packets=null}read(e){this.encrypted=e}write(){return this.encrypted}async decrypt(e,t,r=ie){if(!r.allowUnauthenticatedMessages)throw Error("Message is not authenticated.");const i=await L(q(this.encrypted)),n=await On.mode.cfb.decrypt(e,t,i.subarray(On.cipher[e].blockSize+2),i.subarray(2,On.cipher[e].blockSize+2));this.packets=await ho.fromBinary(n,Co,r)}async encrypt(e,t,r=ie){const i=this.packets.write(),n=await On.getPrefixRandom(e),a=await On.mode.cfb.encrypt(e,t,n,new Uint8Array(On.cipher[e].blockSize),r),s=await On.mode.cfb.encrypt(e,t,i,a.subarray(2),r);this.encrypted=V.concat([a,s])}}class Do extends Mo{static get tag(){return re.packet.publicSubkey}constructor(e,t){super(e,t)}static fromSecretSubkeyPacket(e){const t=new Do,{version:r,created:i,algorithm:n,publicParams:a,keyID:s,fingerprint:o}=e;return t.version=r,t.created=i,t.algorithm=n,t.publicParams=a,t.keyID=s,t.fingerprint=o,t}}class Ro{static get tag(){return re.packet.userAttribute}constructor(){this.attributes=[]}read(e){let t=0;for(;t<e.length;){const r=Ys(e.subarray(t,e.length));t+=r.offset,this.attributes.push(V.uint8ArrayToString(e.subarray(t,t+r.len))),t+=r.len}}write(){const e=[];for(let t=0;t<this.attributes.length;t++)e.push(Xs(this.attributes[t].length)),e.push(V.stringToUint8Array(this.attributes[t]));return V.concatUint8Array(e)}equals(e){return!!(e&&e instanceof Ro)&&this.attributes.every((function(t,r){return t===e.attributes[r]}))}}class Io extends Mo{static get tag(){return re.packet.secretKey}constructor(e=new Date,t=ie){super(e,t),this.keyMaterial=null,this.isEncrypted=null,this.s2kUsage=0,this.s2k=null,this.symmetric=null,this.aead=null,this.privateParams=null}async read(e){let t=await this.readPublicKey(e);if(this.s2kUsage=e[t++],5===this.version&&t++,255===this.s2kUsage||254===this.s2kUsage||253===this.s2kUsage){if(this.symmetric=e[t++],this.symmetric=re.read(re.symmetric,this.symmetric),253===this.s2kUsage&&(this.aead=e[t++],this.aead=re.read(re.aead,this.aead)),this.s2k=new Po,t+=this.s2k.read(e.subarray(t,e.length)),"gnu-dummy"===this.s2k.type)return}else this.s2kUsage&&(this.symmetric=this.s2kUsage,this.symmetric=re.read(re.symmetric,this.symmetric));if(this.s2kUsage&&(this.iv=e.subarray(t,t+On.cipher[this.symmetric].blockSize),t+=this.iv.length),5===this.version&&(t+=4),this.keyMaterial=e.subarray(t),this.isEncrypted=!!this.s2kUsage,!this.isEncrypted){const e=this.keyMaterial.subarray(0,-2);if(!V.equalsUint8Array(V.writeChecksum(e),this.keyMaterial.subarray(-2)))throw Error("Key checksum mismatch");try{const t=re.write(re.publicKey,this.algorithm),{privateParams:r}=On.parsePrivateKeyParams(t,e,this.publicParams);this.privateParams=r}catch(e){throw Error("Error reading MPIs")}}}write(){const e=[this.writePublicKey()];e.push(new Uint8Array([this.s2kUsage]));const t=[];if(255!==this.s2kUsage&&254!==this.s2kUsage&&253!==this.s2kUsage||(t.push(re.write(re.symmetric,this.symmetric)),253===this.s2kUsage&&t.push(re.write(re.aead,this.aead)),t.push(...this.s2k.write())),this.s2kUsage&&"gnu-dummy"!==this.s2k.type&&t.push(...this.iv),5===this.version&&e.push(new Uint8Array([t.length])),e.push(new Uint8Array(t)),!this.isDummy()){if(!this.s2kUsage){const e=re.write(re.publicKey,this.algorithm);this.keyMaterial=On.serializeParams(e,this.privateParams)}5===this.version&&e.push(V.writeNumber(this.keyMaterial.length,4)),e.push(this.keyMaterial),this.s2kUsage||e.push(V.writeChecksum(this.keyMaterial))}return V.concatUint8Array(e)}isDecrypted(){return!1===this.isEncrypted}isDummy(){return!(!this.s2k||"gnu-dummy"!==this.s2k.type)}makeDummy(e=ie){this.isDummy()||(this.isDecrypted()&&this.clearPrivateParams(),this.isEncrypted=null,this.keyMaterial=null,this.s2k=new Po(e),this.s2k.algorithm=0,this.s2k.c=0,this.s2k.type="gnu-dummy",this.s2kUsage=254,this.symmetric="aes256")}async encrypt(e,t=ie){if(this.isDummy())return;if(!this.isDecrypted())throw Error("Key packet is already encrypted");if(this.isDecrypted()&&!e)return void(this.s2kUsage=0);if(!e)throw Error("The key must be decrypted before removing passphrase protection.");this.s2k=new Po(t),this.s2k.salt=await On.random.getRandomBytes(8);const r=re.write(re.publicKey,this.algorithm),i=On.serializeParams(r,this.privateParams);this.symmetric="aes256";const n=await Uo(this.s2k,e,this.symmetric),a=On.cipher[this.symmetric].blockSize;if(this.iv=await On.random.getRandomBytes(a),t.aeadProtect){this.s2kUsage=253,this.aead="eax";const e=On.mode[this.aead],t=await e(this.symmetric,n);this.keyMaterial=await t.encrypt(i,this.iv.subarray(0,e.ivLength),new Uint8Array)}else this.s2kUsage=254,this.keyMaterial=await On.mode.cfb.encrypt(this.symmetric,n,V.concatUint8Array([i,await On.hash.sha1(i,t)]),this.iv,t)}async decrypt(e){if(this.isDummy())return!1;if(this.isDecrypted())throw Error("Key packet is already decrypted.");let t,r;if(254!==this.s2kUsage&&253!==this.s2kUsage)throw 255===this.s2kUsage?Error("Encrypted private key is authenticated using an insecure two-byte hash"):Error("Private key is encrypted using an insecure S2K function: unsalted MD5");if(t=await Uo(this.s2k,e,this.symmetric),253===this.s2kUsage){const e=On.mode[this.aead];try{const i=await e(this.symmetric,t);r=await i.decrypt(this.keyMaterial,this.iv.subarray(0,e.ivLength),new Uint8Array)}catch(e){if("Authentication tag mismatch"===e.message)throw Error("Incorrect key passphrase: "+e.message);throw e}}else{const e=await On.mode.cfb.decrypt(this.symmetric,t,this.keyMaterial,this.iv);r=e.subarray(0,-20);const i=await On.hash.sha1(r);if(!V.equalsUint8Array(i,e.subarray(-20)))throw Error("Incorrect key passphrase")}try{const e=re.write(re.publicKey,this.algorithm),{privateParams:t}=On.parsePrivateKeyParams(e,r,this.publicParams);this.privateParams=t}catch(e){throw Error("Error reading MPIs")}this.isEncrypted=!1,this.keyMaterial=null,this.s2kUsage=0}async validate(){if(this.isDummy())return;if(!this.isDecrypted())throw Error("Key is not decrypted");const e=re.write(re.publicKey,this.algorithm);let t;try{t=await On.validateParams(e,this.publicParams,this.privateParams)}catch(e){t=!1}if(!t)throw Error("Key is invalid")}async generate(e,t){const r=re.write(re.publicKey,this.algorithm),{privateParams:i,publicParams:n}=await On.generateParams(r,e,t);this.privateParams=i,this.publicParams=n,this.isEncrypted=!1}clearPrivateParams(){this.isDummy()||(Object.keys(this.privateParams).forEach((e=>{this.privateParams[e].fill(0),delete this.privateParams[e]})),this.privateParams=null,this.isEncrypted=!0)}}async function Uo(e,t,r){return e.produceKey(t,On.cipher[r].keySize)}var Bo=tt((function(e){!function(t){function r(e){function t(){return Ae<Se}function r(){return Ae}function n(e){Ae=e}function a(){Ae=0,Se=ke.length}function s(e,t){return{name:e,tokens:t||"",semantic:t||"",children:[]}}function o(e,t){var r;return null===t?null:((r=s(e)).tokens=t.tokens,r.semantic=t.semantic,r.children.push(t),r)}function c(e,t){return null!==t&&(e.tokens+=t.tokens,e.semantic+=t.semantic),e.children.push(t),e}function u(e){var r;return t()&&e(r=ke[Ae])?(Ae+=1,s("token",r)):null}function h(e){return function(){return o("literal",u((function(t){return t===e})))}}function d(){var e=arguments;return function(){var t,i,a,o;for(o=r(),i=s("and"),t=0;t<e.length;t+=1){if(null===(a=e[t]()))return n(o),null;c(i,a)}return i}}function f(){var e=arguments;return function(){var t,i,a;for(a=r(),t=0;t<e.length;t+=1){if(null!==(i=e[t]()))return i;n(a)}return null}}function l(e){return function(){var t,i;return i=r(),null!==(t=e())?t:(n(i),s("opt"))}}function p(e){return function(){var t=e();return null!==t&&(t.semantic=""),t}}function y(e){return function(){var t=e();return null!==t&&t.semantic.length>0&&(t.semantic=" "),t}}function b(e,t){return function(){var i,a,o,u,h;for(u=r(),i=s("star"),o=0,h=void 0===t?0:t;null!==(a=e());)o+=1,c(i,a);return o>=h?i:(n(u),null)}}function m(e){return e.charCodeAt(0)>=128}function g(){return o("cr",h("\r")())}function w(){return o("crlf",d(g,k)())}function v(){return o("dquote",h('"')())}function _(){return o("htab",h("\t")())}function k(){return o("lf",h("\n")())}function A(){return o("sp",h(" ")())}function S(){return o("vchar",u((function(t){var r=t.charCodeAt(0),i=33<=r&&r<=126;return e.rfc6532&&(i=i||m(t)),i})))}function E(){return o("wsp",f(A,_)())}function P(){var e=o("quoted-pair",f(d(h("\\"),f(S,E)),ie)());return null===e?null:(e.semantic=e.semantic[1],e)}function x(){return o("fws",f(ae,d(l(d(b(E),p(w))),b(E,1)))())}function M(){return o("ctext",f((function(){return u((function(t){var r=t.charCodeAt(0),i=33<=r&&r<=39||42<=r&&r<=91||93<=r&&r<=126;return e.rfc6532&&(i=i||m(t)),i}))}),te)())}function C(){return o("ccontent",f(M,P,K)())}function K(){return o("comment",d(h("("),b(d(l(x),C)),l(x),h(")"))())}function D(){return o("cfws",f(d(b(d(l(x),K),1),l(x)),x)())}function R(){return o("atext",u((function(t){var r="a"<=t&&t<="z"||"A"<=t&&t<="Z"||"0"<=t&&t<="9"||["!","#","$","%","&","'","*","+","-","/","=","?","^","_","`","{","|","}","~"].indexOf(t)>=0;return e.rfc6532&&(r=r||m(t)),r})))}function I(){return o("atom",d(y(l(D)),b(R,1),y(l(D)))())}function U(){var e,t;return null===(e=o("dot-atom-text",b(R,1)()))||null!==(t=b(d(h("."),b(R,1)))())&&c(e,t),e}function B(){return o("dot-atom",d(p(l(D)),U,p(l(D)))())}function T(){return o("qtext",f((function(){return u((function(t){var r=t.charCodeAt(0),i=33===r||35<=r&&r<=91||93<=r&&r<=126;return e.rfc6532&&(i=i||m(t)),i}))}),re)())}function z(){return o("qcontent",f(T,P)())}function q(){return o("quoted-string",d(p(l(D)),p(v),b(d(l(y(x)),z)),l(p(x)),p(v),p(l(D)))())}function O(){return o("word",f(I,q)())}function F(){return o("address",f(N,W)())}function N(){return o("mailbox",f(L,J)())}function L(){return o("name-addr",d(l(H),j)())}function j(){return o("angle-addr",f(d(p(l(D)),h("<"),J,h(">"),p(l(D))),se)())}function W(){return o("group",d(H,h(":"),l($),h(";"),p(l(D)))())}function H(){return o("display-name",(null!==(e=o("phrase",f(ne,b(O,1))()))&&(e.semantic=function(e){return e.replace(/([ \t]|\r\n)+/g," ").replace(/^\s*/,"").replace(/\s*$/,"")}(e.semantic)),e));var e}function G(){return o("mailbox-list",f(d(N,b(d(h(","),N))),ue)())}function V(){return o("address-list",f(d(F,b(d(h(","),F))),he)())}function $(){return o("group-list",f(G,p(D),de)())}function Z(){return o("local-part",f(fe,B,q)())}function Y(){return o("dtext",f((function(){return u((function(t){var r=t.charCodeAt(0),i=33<=r&&r<=90||94<=r&&r<=126;return e.rfc6532&&(i=i||m(t)),i}))}),pe)())}function X(){return o("domain-literal",d(p(l(D)),h("["),b(d(l(x),Y)),l(x),h("]"),p(l(D)))())}function Q(){return o("domain",(t=f(le,B,X)(),e.rejectTLD&&t&&t.semantic&&t.semantic.indexOf(".")<0?null:(t&&(t.semantic=t.semantic.replace(/\s+/g,"")),t)));var t}function J(){return o("addr-spec",d(Z,h("@"),Q)())}function ee(){return e.strict?null:o("obs-NO-WS-CTL",u((function(e){var t=e.charCodeAt(0);return 1<=t&&t<=8||11===t||12===t||14<=t&&t<=31||127===t})))}function te(){return e.strict?null:o("obs-ctext",ee())}function re(){return e.strict?null:o("obs-qtext",ee())}function ie(){return e.strict?null:o("obs-qp",d(h("\\"),f(h("\0"),ee,k,g))())}function ne(){return e.strict?null:e.atInDisplayName?o("obs-phrase",d(O,b(f(O,h("."),h("@"),y(D))))()):o("obs-phrase",d(O,b(f(O,h("."),y(D))))())}function ae(){return e.strict?null:o("obs-FWS",b(d(p(l(w)),E),1)())}function se(){return e.strict?null:o("obs-angle-addr",d(p(l(D)),h("<"),oe,J,h(">"),p(l(D)))())}function oe(){return e.strict?null:o("obs-route",d(ce,h(":"))())}function ce(){return e.strict?null:o("obs-domain-list",d(b(f(p(D),h(","))),h("@"),Q,b(d(h(","),p(l(D)),l(d(h("@"),Q)))))())}function ue(){return e.strict?null:o("obs-mbox-list",d(b(d(p(l(D)),h(","))),N,b(d(h(","),l(d(N,p(D))))))())}function he(){return e.strict?null:o("obs-addr-list",d(b(d(p(l(D)),h(","))),F,b(d(h(","),l(d(F,p(D))))))())}function de(){return e.strict?null:o("obs-group-list",d(b(d(p(l(D)),h(",")),1),p(l(D)))())}function fe(){return e.strict?null:o("obs-local-part",d(O,b(d(h("."),O)))())}function le(){return e.strict?null:o("obs-domain",d(I,b(d(h("."),I)))())}function pe(){return e.strict?null:o("obs-dtext",f(ee,P)())}function ye(e,t){var r,i,n;if(null==t)return null;for(i=[t];i.length>0;){if((n=i.pop()).name===e)return n;for(r=n.children.length-1;r>=0;r-=1)i.push(n.children[r])}return null}function be(e,t){var r,i,n,a,s;if(null==t)return null;for(i=[t],a=[],s={},r=0;r<e.length;r+=1)s[e[r]]=!0;for(;i.length>0;)if((n=i.pop()).name in s)a.push(n);else for(r=n.children.length-1;r>=0;r-=1)i.push(n.children[r]);return a}function me(t){var r,i,n,a,s;if(null===t)return null;for(r=[],i=be(["group","mailbox"],t),n=0;n<i.length;n+=1)"group"===(a=i[n]).name?r.push(ge(a)):"mailbox"===a.name&&r.push(we(a));return s={ast:t,addresses:r},e.simple&&(s=function(e){var t;if(e&&e.addresses)for(t=0;t<e.addresses.length;t+=1)delete e.addresses[t].node;return e}(s)),e.oneResult?function(t){if(!t)return null;if(!e.partial&&t.addresses.length>1)return null;return t.addresses&&t.addresses[0]}(s):e.simple?s&&s.addresses:s}function ge(e){var t,r=ye("display-name",e),i=[],n=be(["mailbox"],e);for(t=0;t<n.length;t+=1)i.push(we(n[t]));return{node:e,parts:{name:r},type:e.name,name:ve(r),addresses:i}}function we(e){var t=ye("display-name",e),r=ye("addr-spec",e),i=function(e,t){var r,i,n,a;if(null==t)return null;for(i=[t],a=[];i.length>0;)for((n=i.pop()).name===e&&a.push(n),r=n.children.length-1;r>=0;r-=1)i.push(n.children[r]);return a}("cfws",e),n=be(["comment"],e),a=ye("local-part",r),s=ye("domain",r);return{node:e,parts:{name:t,address:r,local:a,domain:s,comments:i},type:e.name,name:ve(t),address:ve(r),local:ve(a),domain:ve(s),comments:_e(n),groupName:ve(e.groupName)}}function ve(e){return null!=e?e.semantic:null}function _e(e){var t="";if(e)for(var r=0;r<e.length;r+=1)t+=ve(e[r]);return t}var ke,Ae,Se,Ee,Pe;if(null===(e=i(e,{})))return null;if(ke=e.input,Pe={address:F,"address-list":V,"angle-addr":j,from:function(){return o("from",f(G,V)())},group:W,mailbox:N,"mailbox-list":G,"reply-to":function(){return o("reply-to",V())},sender:function(){return o("sender",f(N,F)())}}[e.startAt]||V,!e.strict){if(a(),e.strict=!0,Ee=Pe(ke),e.partial||!t())return me(Ee);e.strict=!1}return a(),Ee=Pe(ke),!e.partial&&t()?null:me(Ee)}function i(e,t){function r(e){return"[object String]"===Object.prototype.toString.call(e)}function i(e){return null==e}var n,a;if(r(e))e={input:e};else if(!function(e){return e===Object(e)}(e))return null;if(!r(e.input))return null;if(!t)return null;for(a in n={oneResult:!1,partial:!1,rejectTLD:!1,rfc6532:!1,simple:!1,startAt:"address-list",strict:!1,atInDisplayName:!1})i(e[a])&&(e[a]=i(t[a])?n[a]:t[a]);return e}r.parseOneAddress=function(e){return r(i(e,{oneResult:!0,rfc6532:!0,simple:!0,startAt:"address-list"}))},r.parseAddressList=function(e){return r(i(e,{rfc6532:!0,simple:!0,startAt:"address-list"}))},r.parseFrom=function(e){return r(i(e,{rfc6532:!0,simple:!0,startAt:"from"}))},r.parseSender=function(e){return r(i(e,{oneResult:!0,rfc6532:!0,simple:!0,startAt:"sender"}))},r.parseReplyTo=function(e){return r(i(e,{rfc6532:!0,simple:!0,startAt:"reply-to"}))},e.exports=r}()}));class To{static get tag(){return re.packet.userID}constructor(){this.userID="",this.name="",this.email="",this.comment=""}static fromObject(e){if(V.isString(e)||e.name&&!V.isString(e.name)||e.email&&!V.isEmailAddress(e.email)||e.comment&&!V.isString(e.comment))throw Error("Invalid user ID format");const t=new To;Object.assign(t,e);const r=[];return t.name&&r.push(t.name),t.comment&&r.push(`(${t.comment})`),t.email&&r.push(`<${t.email}>`),t.userID=r.join(" "),t}read(e,t=ie){const r=V.decodeUTF8(e);if(r.length>t.maxUserIDLength)throw Error("User ID string is too long");try{const{name:e,address:t,comments:i}=Bo.parseOneAddress({input:r,atInDisplayName:!0});this.comment=i.replace(/^\(|\)$/g,""),this.name=e,this.email=t}catch(e){}this.userID=r}write(){return V.encodeUTF8(this.userID)}equals(e){return e&&e.userID===this.userID}}class zo extends Io{static get tag(){return re.packet.secretSubkey}constructor(e=new Date,t=ie){super(e,t)}}const qo=/*#__PURE__*/V.constructAllowedPackets([so]);class Oo{constructor(e){this.packets=e||new ho}write(){return this.packets.write()}armor(e=ie){return fe(re.armor.signature,this.write(),void 0,void 0,void 0,e)}getSigningKeyIDs(){return this.packets.map((e=>e.issuerKeyID))}}async function Fo(e,t){const r=new zo(e.date,t);return r.packets=null,r.algorithm=re.read(re.publicKey,e.algorithm),await r.generate(e.rsaBits,e.curve),await r.computeFingerprintAndKeyID(),r}async function No(e,t){const r=new Io(e.date,t);return r.packets=null,r.algorithm=re.read(re.publicKey,e.algorithm),await r.generate(e.rsaBits,e.curve,e.config),await r.computeFingerprintAndKeyID(),r}async function Lo(e,t,r,i,n=new Date,a){let s,o;for(let c=e.length-1;c>=0;c--)try{(!s||e[c].created>=s.created)&&(await e[c].verify(t,r,i,n,void 0,a),s=e[c])}catch(e){o=e}if(!s)throw V.wrapError(`Could not find valid ${re.read(re.signature,r)} signature in key ${t.getKeyID().toHex()}`.replace("certGeneric ","self-").replace(/([a-z])([A-Z])/g,((e,t,r)=>t+" "+r.toLowerCase())),o);return s}function jo(e,t,r=new Date){const i=V.normalizeDate(r);if(null!==i){const r=Yo(e,t);return!(e.created<=i&&i<r)}return!1}async function Wo(e,t,r,i){const n={};n.key=t,n.bind=e;const a=new so;return a.signatureType=re.signature.subkeyBinding,a.publicKeyAlgorithm=t.algorithm,a.hashAlgorithm=await Ho(null,e,void 0,void 0,i),r.sign?(a.keyFlags=[re.keyFlags.signData],a.embeddedSignature=await Vo(n,null,e,{signatureType:re.signature.keyBinding},r.date,void 0,void 0,i)):a.keyFlags=[re.keyFlags.encryptCommunication|re.keyFlags.encryptStorage],r.keyExpirationTime>0&&(a.keyExpirationTime=r.keyExpirationTime,a.keyNeverExpires=!1),await a.sign(t,n,r.date),a}async function Ho(e,t,r=new Date,i={},n){let a=n.preferredHashAlgorithm,s=a;if(e){const t=await e.getPrimaryUser(r,i,n);t.selfCertification.preferredHashAlgorithms&&([s]=t.selfCertification.preferredHashAlgorithms,a=On.hash.getHashByteLength(a)<=On.hash.getHashByteLength(s)?s:a)}switch(Object.getPrototypeOf(t)){case Io.prototype:case Mo.prototype:case zo.prototype:case Do.prototype:switch(t.algorithm){case"ecdh":case"ecdsa":case"eddsa":s=On.publicKey.elliptic.getPreferredHashAlgo(t.publicParams.oid)}}return On.hash.getHashByteLength(a)<=On.hash.getHashByteLength(s)?s:a}async function Go(e,t=[],r=new Date,i=[],n=ie){const a={symmetric:re.symmetric.aes128,aead:re.aead.eax,compression:re.compression.uncompressed}[e],s={symmetric:n.preferredSymmetricAlgorithm,aead:n.preferredAEADAlgorithm,compression:n.preferredCompressionAlgorithm}[e],o={symmetric:"preferredSymmetricAlgorithms",aead:"preferredAEADAlgorithms",compression:"preferredCompressionAlgorithms"}[e];return(await Promise.all(t.map((async function(e,t){const a=(await e.getPrimaryUser(r,i[t],n)).selfCertification[o];return!!a&&a.indexOf(s)>=0})))).every(Boolean)?s:a}async function Vo(e,t,r,i,n,a,s=!1,o){if(r.isDummy())throw Error("Cannot sign with a gnu-dummy key.");if(!r.isDecrypted())throw Error("Signing key is not decrypted.");const c=new so;return Object.assign(c,i),c.publicKeyAlgorithm=r.algorithm,c.hashAlgorithm=await Ho(t,r,n,a,o),await c.sign(r,e,n,s),c}async function $o(e,t,r,i=new Date,n){(e=e[r])&&(t[r].length?await Promise.all(e.map((async function(e){e.isExpired(i)||n&&!await n(e)||t[r].some((function(t){return V.equalsUint8Array(t.writeParams(),e.writeParams())}))||t[r].push(e)}))):t[r]=e)}async function Zo(e,t,r,i,n,a,s=new Date,o){a=a||e;const c=[];return await Promise.all(i.map((async function(e){try{n&&!e.issuerKeyID.equals(n.issuerKeyID)||(await e.verify(a,t,r,o.revocationsExpire?s:null,!1,o),c.push(e.issuerKeyID))}catch(e){}}))),n?(n.revoked=!!c.some((e=>e.equals(n.issuerKeyID)))||(n.revoked||!1),n.revoked):c.length>0}function Yo(e,t){let r;return!1===t.keyNeverExpires&&(r=e.created.getTime()+1e3*t.keyExpirationTime),r?new Date(r):1/0}function Xo(e,t={}){switch(e.type=e.type||t.type,e.curve=e.curve||t.curve,e.rsaBits=e.rsaBits||t.rsaBits,e.keyExpirationTime=void 0!==e.keyExpirationTime?e.keyExpirationTime:t.keyExpirationTime,e.passphrase=V.isString(e.passphrase)?e.passphrase:t.passphrase,e.date=e.date||t.date,e.sign=e.sign||!1,e.type){case"ecc":try{e.curve=re.write(re.curve,e.curve)}catch(e){throw Error("Invalid curve")}e.curve!==re.curve.ed25519&&e.curve!==re.curve.curve25519||(e.curve=e.sign?re.curve.ed25519:re.curve.curve25519),e.sign?e.algorithm=e.curve===re.curve.ed25519?re.publicKey.eddsa:re.publicKey.ecdsa:e.algorithm=re.publicKey.ecdh;break;case"rsa":e.algorithm=re.publicKey.rsaEncryptSign;break;default:throw Error("Unsupported key type "+e.type)}return e}function Qo(e,t){const r=re.write(re.publicKey,e.algorithm);return r!==re.publicKey.rsaEncrypt&&r!==re.publicKey.elgamal&&r!==re.publicKey.ecdh&&(!t.keyFlags||0!=(t.keyFlags[0]&re.keyFlags.signData))}function Jo(e,t){const r=re.write(re.publicKey,e.algorithm);return r!==re.publicKey.dsa&&r!==re.publicKey.rsaSign&&r!==re.publicKey.ecdsa&&r!==re.publicKey.eddsa&&(!t.keyFlags||0!=(t.keyFlags[0]&re.keyFlags.encryptCommunication)||0!=(t.keyFlags[0]&re.keyFlags.encryptStorage))}function ec(e,t){return!!t.allowInsecureDecryptionWithSigningKeys||(!e.keyFlags||0!=(e.keyFlags[0]&re.keyFlags.encryptCommunication)||0!=(e.keyFlags[0]&re.keyFlags.encryptStorage))}function tc(e,t){const r=re.write(re.publicKey,e.algorithm);if(t.rejectPublicKeyAlgorithms.has(r))throw Error(e.algorithm+" keys are considered too weak.");const i=e.getAlgorithmInfo();switch(r){case re.publicKey.rsaEncryptSign:case re.publicKey.rsaSign:case re.publicKey.rsaEncrypt:if(i.bits<t.minRSABits)throw Error(`RSA keys shorter than ${t.minRSABits} bits are considered too weak.`);break;case re.publicKey.ecdsa:case re.publicKey.eddsa:case re.publicKey.ecdh:if(t.rejectCurves.has(i.curve))throw Error(`Support for ${e.algorithm} keys using curve ${i.curve} is disabled.`)}}class rc{constructor(e,t){this.userID=e.constructor.tag===re.packet.userID?e:null,this.userAttribute=e.constructor.tag===re.packet.userAttribute?e:null,this.selfCertifications=[],this.otherCertifications=[],this.revocationSignatures=[],this.mainKey=t}toPacketList(){const e=new ho;return e.push(this.userID||this.userAttribute),e.push(...this.revocationSignatures),e.push(...this.selfCertifications),e.push(...this.otherCertifications),e}clone(){const e=new rc(this.userID||this.userAttribute,this.mainKey);return e.selfCertifications=[...this.selfCertifications],e.otherCertifications=[...this.otherCertifications],e.revocationSignatures=[...this.revocationSignatures],e}async certify(e,t,r){const i=this.mainKey.keyPacket,n={userID:this.userID,userAttribute:this.userAttribute,key:i},a=new rc(n.userID||n.userAttribute,this.mainKey);return a.otherCertifications=await Promise.all(e.map((async function(e){if(!e.isPrivate())throw Error("Need private key for signing");if(e.hasSameFingerprintAs(i))throw Error("The user's own key can only be used for self-certifications");const a=await e.getSigningKey(void 0,t,void 0,r);return Vo(n,e,a.keyPacket,{signatureType:re.signature.certGeneric,keyFlags:[re.keyFlags.certifyKeys|re.keyFlags.signData]},t,void 0,void 0,r)}))),await a.update(this,t,r),a}async isRevoked(e,t,r=new Date,i){const n=this.mainKey.keyPacket;return Zo(n,re.signature.certRevocation,{key:n,userID:this.userID,userAttribute:this.userAttribute},this.revocationSignatures,e,t,r,i)}async verifyCertificate(e,t,r=new Date,i){const n=this,a=this.mainKey.keyPacket,s={userID:this.userID,userAttribute:this.userAttribute,key:a},{issuerKeyID:o}=e,c=t.filter((e=>e.getKeys(o).length>0));return 0===c.length?null:(await Promise.all(c.map((async t=>{const a=await t.getSigningKey(o,e.created,void 0,i);if(e.revoked||await n.isRevoked(e,a.keyPacket,r,i))throw Error("User certificate is revoked");try{await e.verify(a.keyPacket,re.signature.certGeneric,s,r,void 0,i)}catch(e){throw V.wrapError("User certificate is invalid",e)}}))),!0)}async verifyAllCertifications(e,t=new Date,r){const i=this,n=this.selfCertifications.concat(this.otherCertifications);return Promise.all(n.map((async n=>({keyID:n.issuerKeyID,valid:await i.verifyCertificate(n,e,t,r).catch((()=>!1))}))))}async verify(e=new Date,t){if(!this.selfCertifications.length)throw Error("No self-certifications found");const r=this,i=this.mainKey.keyPacket,n={userID:this.userID,userAttribute:this.userAttribute,key:i};let a;for(let s=this.selfCertifications.length-1;s>=0;s--)try{const a=this.selfCertifications[s];if(a.revoked||await r.isRevoked(a,void 0,e,t))throw Error("Self-certification is revoked");try{await a.verify(i,re.signature.certGeneric,n,e,void 0,t)}catch(e){throw V.wrapError("Self-certification is invalid",e)}return!0}catch(e){a=e}throw a}async update(e,t,r){const i=this.mainKey.keyPacket,n={userID:this.userID,userAttribute:this.userAttribute,key:i};await $o(e,this,"selfCertifications",t,(async function(e){try{return await e.verify(i,re.signature.certGeneric,n,t,!1,r),!0}catch(e){return!1}})),await $o(e,this,"otherCertifications",t),await $o(e,this,"revocationSignatures",t,(function(e){return Zo(i,re.signature.certRevocation,n,[e],void 0,void 0,t,r)}))}}class ic{constructor(e,t){this.keyPacket=e,this.bindingSignatures=[],this.revocationSignatures=[],this.mainKey=t}toPacketList(){const e=new ho;return e.push(this.keyPacket),e.push(...this.revocationSignatures),e.push(...this.bindingSignatures),e}clone(){const e=new ic(this.keyPacket,this.mainKey);return e.bindingSignatures=[...this.bindingSignatures],e.revocationSignatures=[...this.revocationSignatures],e}async isRevoked(e,t,r=new Date,i=ie){const n=this.mainKey.keyPacket;return Zo(n,re.signature.subkeyRevocation,{key:n,bind:this.keyPacket},this.revocationSignatures,e,t,r,i)}async verify(e=new Date,t=ie){const r=this.mainKey.keyPacket,i={key:r,bind:this.keyPacket},n=await Lo(this.bindingSignatures,r,re.signature.subkeyBinding,i,e,t);if(n.revoked||await this.isRevoked(n,null,e,t))throw Error("Subkey is revoked");if(jo(this.keyPacket,n,e))throw Error("Subkey is expired");return n}async getExpirationTime(e=new Date,t=ie){const r=this.mainKey.keyPacket,i={key:r,bind:this.keyPacket};let n;try{n=await Lo(this.bindingSignatures,r,re.signature.subkeyBinding,i,e,t)}catch(e){return null}const a=Yo(this.keyPacket,n),s=n.getExpirationTime();return a<s?a:s}async update(e,t=new Date,r=ie){const i=this.mainKey.keyPacket;if(!this.hasSameFingerprintAs(e))throw Error("Subkey update method: fingerprints of subkeys not equal");this.keyPacket.constructor.tag===re.packet.publicSubkey&&e.keyPacket.constructor.tag===re.packet.secretSubkey&&(this.keyPacket=e.keyPacket);const n=this,a={key:i,bind:n.keyPacket};await $o(e,this,"bindingSignatures",t,(async function(e){for(let t=0;t<n.bindingSignatures.length;t++)if(n.bindingSignatures[t].issuerKeyID.equals(e.issuerKeyID))return e.created>n.bindingSignatures[t].created&&(n.bindingSignatures[t]=e),!1;try{return await e.verify(i,re.signature.subkeyBinding,a,t,void 0,r),!0}catch(e){return!1}})),await $o(e,this,"revocationSignatures",t,(function(e){return Zo(i,re.signature.subkeyRevocation,a,[e],void 0,void 0,t,r)}))}async revoke(e,{flag:t=re.reasonForRevocation.noReason,string:r=""}={},i=new Date,n=ie){const a={key:e,bind:this.keyPacket},s=new ic(this.keyPacket,this.mainKey);return s.revocationSignatures.push(await Vo(a,null,e,{signatureType:re.signature.subkeyRevocation,reasonForRevocationFlag:re.write(re.reasonForRevocation,t),reasonForRevocationString:r},i,void 0,!1,n)),await s.update(this),s}hasSameFingerprintAs(e){return this.keyPacket.hasSameFingerprintAs(e.keyPacket||e)}}["getKeyID","getFingerprint","getAlgorithmInfo","getCreationTime","isDecrypted"].forEach((e=>{ic.prototype[e]=function(){return this.keyPacket[e]()}}));const nc=/*#__PURE__*/V.constructAllowedPackets([so]);class ac{packetListToStructure(e,t=new Set){let r,i,n;for(const a of e){const e=a.constructor.tag;if(t.has(e))throw Error("Unexpected packet type: "+e);switch(e){case re.packet.publicKey:case re.packet.secretKey:if(this.keyPacket)throw Error("Key block contains multiple keys");if(this.keyPacket=a,i=this.getKeyID(),!i)throw Error("Missing Key ID");break;case re.packet.userID:case re.packet.userAttribute:r=new rc(a,this),this.users.push(r);break;case re.packet.publicSubkey:case re.packet.secretSubkey:r=null,n=new ic(a,this),this.subkeys.push(n);break;case re.packet.signature:switch(a.signatureType){case re.signature.certGeneric:case re.signature.certPersona:case re.signature.certCasual:case re.signature.certPositive:if(!r){V.printDebug("Dropping certification signatures without preceding user packet");continue}a.issuerKeyID.equals(i)?r.selfCertifications.push(a):r.otherCertifications.push(a);break;case re.signature.certRevocation:r?r.revocationSignatures.push(a):this.directSignatures.push(a);break;case re.signature.key:this.directSignatures.push(a);break;case re.signature.subkeyBinding:if(!n){V.printDebug("Dropping subkey binding signature without preceding subkey packet");continue}n.bindingSignatures.push(a);break;case re.signature.keyRevocation:this.revocationSignatures.push(a);break;case re.signature.subkeyRevocation:if(!n){V.printDebug("Dropping subkey revocation signature without preceding subkey packet");continue}n.revocationSignatures.push(a)}}}}toPacketList(){const e=new ho;return e.push(this.keyPacket),e.push(...this.revocationSignatures),e.push(...this.directSignatures),this.users.map((t=>e.push(...t.toPacketList()))),this.subkeys.map((t=>e.push(...t.toPacketList()))),e}clone(e=!1){const t=new this.constructor(this.toPacketList());return e&&t.getKeys().forEach((e=>{if(e.keyPacket=Object.create(Object.getPrototypeOf(e.keyPacket),Object.getOwnPropertyDescriptors(e.keyPacket)),!e.keyPacket.isDecrypted())return;const t={};Object.keys(e.keyPacket.privateParams).forEach((r=>{t[r]=new Uint8Array(e.keyPacket.privateParams[r])})),e.keyPacket.privateParams=t})),t}getSubkeys(e=null){return this.subkeys.filter((t=>!e||t.getKeyID().equals(e,!0)))}getKeys(e=null){const t=[];return e&&!this.getKeyID().equals(e,!0)||t.push(this),t.concat(this.getSubkeys(e))}getKeyIDs(){return this.getKeys().map((e=>e.getKeyID()))}getUserIDs(){return this.users.map((e=>e.userID?e.userID.userID:null)).filter((e=>null!==e))}write(){return this.toPacketList().write()}async getSigningKey(e=null,t=new Date,r={},i=ie){await this.verifyPrimaryKey(t,r,i);const n=this.keyPacket,a=this.subkeys.slice().sort(((e,t)=>t.keyPacket.created-e.keyPacket.created));let s;for(const r of a)if(!e||r.getKeyID().equals(e))try{await r.verify(t,i);const e={key:n,bind:r.keyPacket},a=await Lo(r.bindingSignatures,n,re.signature.subkeyBinding,e,t,i);if(!Qo(r.keyPacket,a))continue;if(!a.embeddedSignature)throw Error("Missing embedded signature");return await Lo([a.embeddedSignature],r.keyPacket,re.signature.keyBinding,e,t,i),tc(r.keyPacket,i),r}catch(e){s=e}try{const a=await this.getPrimaryUser(t,r,i);if((!e||n.getKeyID().equals(e))&&Qo(n,a.selfCertification))return tc(n,i),this}catch(e){s=e}throw V.wrapError("Could not find valid signing key packet in key "+this.getKeyID().toHex(),s)}async getEncryptionKey(e,t=new Date,r={},i=ie){await this.verifyPrimaryKey(t,r,i);const n=this.keyPacket,a=this.subkeys.slice().sort(((e,t)=>t.keyPacket.created-e.keyPacket.created));let s;for(const r of a)if(!e||r.getKeyID().equals(e))try{await r.verify(t,i);const e={key:n,bind:r.keyPacket},a=await Lo(r.bindingSignatures,n,re.signature.subkeyBinding,e,t,i);if(Jo(r.keyPacket,a))return tc(r.keyPacket,i),r}catch(e){s=e}try{const a=await this.getPrimaryUser(t,r,i);if((!e||n.getKeyID().equals(e))&&Jo(n,a.selfCertification))return tc(n,i),this}catch(e){s=e}throw V.wrapError("Could not find valid encryption key packet in key "+this.getKeyID().toHex(),s)}async isRevoked(e,t,r=new Date,i=ie){return Zo(this.keyPacket,re.signature.keyRevocation,{key:this.keyPacket},this.revocationSignatures,e,t,r,i)}async verifyPrimaryKey(e=new Date,t={},r=ie){const i=this.keyPacket;if(await this.isRevoked(null,null,e,r))throw Error("Primary key is revoked");const{selfCertification:n}=await this.getPrimaryUser(e,t,r);if(jo(i,n,e))throw Error("Primary key is expired");const a=await Lo(this.directSignatures,i,re.signature.key,{key:i},e,r).catch((()=>{}));if(a&&jo(i,a,e))throw Error("Primary key is expired")}async getExpirationTime(e,t=ie){let r;try{const{selfCertification:i}=await this.getPrimaryUser(null,e,t),n=Yo(this.keyPacket,i),a=i.getExpirationTime(),s=await Lo(this.directSignatures,this.keyPacket,re.signature.key,{key:this.keyPacket},null,t).catch((()=>{}));if(s){const e=Yo(this.keyPacket,s);r=Math.min(n,a,e)}else r=n<a?n:a}catch(e){r=null}return V.normalizeDate(r)}async getPrimaryUser(e=new Date,t={},r=ie){const i=this.keyPacket,n=[];let a;for(let s=0;s<this.users.length;s++)try{const a=this.users[s];if(!a.userID)continue;if(void 0!==t.name&&a.userID.name!==t.name||void 0!==t.email&&a.userID.email!==t.email||void 0!==t.comment&&a.userID.comment!==t.comment)throw Error("Could not find user that matches that user ID");const o={userID:a.userID,key:i},c=await Lo(a.selfCertifications,i,re.signature.certGeneric,o,e,r);n.push({index:s,user:a,selfCertification:c})}catch(e){a=e}if(!n.length)throw a||Error("Could not find primary user");await Promise.all(n.map((async function(t){return t.user.revoked||t.user.isRevoked(t.selfCertification,null,e,r)})));const s=n.sort((function(e,t){const r=e.selfCertification,i=t.selfCertification;return i.revoked-r.revoked||r.isPrimaryUserID-i.isPrimaryUserID||r.created-i.created})).pop(),{user:o,selfCertification:c}=s;if(c.revoked||await o.isRevoked(c,null,e,r))throw Error("Primary user is revoked");return s}async update(e,t=new Date,r=ie){if(!this.hasSameFingerprintAs(e))throw Error("Primary key fingerprints must be equal to update the key");if(!this.isPrivate()&&e.isPrivate()){if(!(this.subkeys.length===e.subkeys.length&&this.subkeys.every((t=>e.subkeys.some((e=>t.hasSameFingerprintAs(e)))))))throw Error("Cannot update public key with private key if subkeys mismatch");return e.update(this,r)}const i=this.clone();return await $o(e,i,"revocationSignatures",t,(n=>Zo(i.keyPacket,re.signature.keyRevocation,i,[n],null,e.keyPacket,t,r))),await $o(e,i,"directSignatures",t),await Promise.all(e.users.map((async e=>{const n=i.users.filter((t=>e.userID&&e.userID.equals(t.userID)||e.userAttribute&&e.userAttribute.equals(t.userAttribute)));if(n.length>0)await Promise.all(n.map((i=>i.update(e,t,r))));else{const t=e.clone();t.mainKey=i,i.users.push(t)}}))),await Promise.all(e.subkeys.map((async e=>{const n=i.subkeys.filter((t=>t.hasSameFingerprintAs(e)));if(n.length>0)await Promise.all(n.map((i=>i.update(e,t,r))));else{const t=e.clone();t.mainKey=i,i.subkeys.push(t)}}))),i}async getRevocationCertificate(e=new Date,t=ie){const r={key:this.keyPacket},i=await Lo(this.revocationSignatures,this.keyPacket,re.signature.keyRevocation,r,e,t),n=new ho;return n.push(i),fe(re.armor.publicKey,n.write(),null,null,"This is a revocation certificate")}async applyRevocationCertificate(e,t=new Date,r=ie){const i=await de(e,r),n=(await ho.fromBinary(i.data,nc,r)).findPacket(re.packet.signature);if(!n||n.signatureType!==re.signature.keyRevocation)throw Error("Could not find revocation signature packet");if(!n.issuerKeyID.equals(this.getKeyID()))throw Error("Revocation signature does not match key");try{await n.verify(this.keyPacket,re.signature.keyRevocation,{key:this.keyPacket},t,void 0,r)}catch(e){throw V.wrapError("Could not verify revocation signature",e)}const a=this.clone();return a.revocationSignatures.push(n),a}async signPrimaryUser(e,t,r,i=ie){const{index:n,user:a}=await this.getPrimaryUser(t,r,i),s=await a.certify(e,t,i),o=this.clone();return o.users[n]=s,o}async signAllUsers(e,t=new Date,r=ie){const i=this.clone();return i.users=await Promise.all(this.users.map((function(i){return i.certify(e,t,r)}))),i}async verifyPrimaryUser(e,t=new Date,r,i=ie){const n=this.keyPacket,{user:a}=await this.getPrimaryUser(t,r,i);return e?await a.verifyAllCertifications(e,t,i):[{keyID:n.getKeyID(),valid:await a.verify(t,i).catch((()=>!1))}]}async verifyAllUsers(e,t=new Date,r=ie){const i=this.keyPacket,n=[];return await Promise.all(this.users.map((async a=>{const s=e?await a.verifyAllCertifications(e,t,r):[{keyID:i.getKeyID(),valid:await a.verify(t,r).catch((()=>!1))}];n.push(...s.map((e=>({userID:a.userID.userID,keyID:e.keyID,valid:e.valid}))))}))),n}}function sc(e){for(const t of e)switch(t.constructor.tag){case re.packet.secretKey:return new cc(e);case re.packet.publicKey:return new oc(e)}throw Error("No key packet found")}["getKeyID","getFingerprint","getAlgorithmInfo","getCreationTime","hasSameFingerprintAs"].forEach((e=>{ac.prototype[e]=ic.prototype[e]}));class oc extends ac{constructor(e){if(super(),this.keyPacket=null,this.revocationSignatures=[],this.directSignatures=[],this.users=[],this.subkeys=[],e&&(this.packetListToStructure(e,new Set([re.packet.secretKey,re.packet.secretSubkey])),!this.keyPacket))throw Error("Invalid key: missing public-key packet")}isPrivate(){return!1}toPublic(){return this}armor(e=ie){return fe(re.armor.publicKey,this.toPacketList().write(),void 0,void 0,void 0,e)}}class cc extends oc{constructor(e){if(super(),this.packetListToStructure(e,new Set([re.packet.publicKey,re.packet.publicSubkey])),!this.keyPacket)throw Error("Invalid key: missing private-key packet")}isPrivate(){return!0}toPublic(){const e=new ho,t=this.toPacketList();for(const r of t)switch(r.constructor.tag){case re.packet.secretKey:{const t=Mo.fromSecretKeyPacket(r);e.push(t);break}case re.packet.secretSubkey:{const t=Do.fromSecretSubkeyPacket(r);e.push(t);break}default:e.push(r)}return new oc(e)}armor(e=ie){return fe(re.armor.privateKey,this.toPacketList().write(),void 0,void 0,void 0,e)}async getDecryptionKeys(e,t=new Date,r={},i=ie){const n=this.keyPacket,a=[];for(let r=0;r<this.subkeys.length;r++)if(!e||this.subkeys[r].getKeyID().equals(e,!0))try{const e={key:n,bind:this.subkeys[r].keyPacket};ec(await Lo(this.subkeys[r].bindingSignatures,n,re.signature.subkeyBinding,e,t,i),i)&&a.push(this.subkeys[r])}catch(e){}const s=await this.getPrimaryUser(t,r,i);return e&&!n.getKeyID().equals(e,!0)||!ec(s.selfCertification,i)||a.push(this),a}isDecrypted(){return this.getKeys().some((({keyPacket:e})=>e.isDecrypted()))}async validate(e=ie){if(!this.isPrivate())throw Error("Cannot validate a public key");let t;if(this.keyPacket.isDummy()){const r=await this.getSigningKey(null,null,void 0,{...e,rejectPublicKeyAlgorithms:new Set,minRSABits:0});r&&!r.keyPacket.isDummy()&&(t=r.keyPacket)}else t=this.keyPacket;if(t)return t.validate();{const e=this.getKeys();if(e.map((e=>e.keyPacket.isDummy())).every(Boolean))throw Error("Cannot validate an all-gnu-dummy key");return Promise.all(e.map((async e=>e.keyPacket.validate())))}}clearPrivateParams(){this.getKeys().forEach((({keyPacket:e})=>{e.isDecrypted()&&e.clearPrivateParams()}))}async revoke({flag:e=re.reasonForRevocation.noReason,string:t=""}={},r=new Date,i=ie){if(!this.isPrivate())throw Error("Need private key for revoking");const n={key:this.keyPacket},a=this.clone();return a.revocationSignatures.push(await Vo(n,null,this.keyPacket,{signatureType:re.signature.keyRevocation,reasonForRevocationFlag:re.write(re.reasonForRevocation,e),reasonForRevocationString:t},r,void 0,void 0,i)),a}async addSubkey(e={}){const t={...ie,...e.config};if(e.passphrase)throw Error("Subkey could not be encrypted here, please encrypt whole key");if(e.rsaBits<t.minRSABits)throw Error(`rsaBits should be at least ${t.minRSABits}, got: ${e.rsaBits}`);const r=this.keyPacket;if(r.isDummy())throw Error("Cannot add subkey to gnu-dummy primary key");if(!r.isDecrypted())throw Error("Key is not decrypted");const i=r.getAlgorithmInfo();i.type=i.curve?"ecc":"rsa",i.rsaBits=i.bits||4096,i.curve=i.curve||"curve25519",e=Xo(e,i);const n=await Fo(e),a=await Wo(n,r,e,t),s=this.toPacketList();return s.push(n,a),new cc(s)}}const uc=/*#__PURE__*/V.constructAllowedPackets([Mo,Do,Io,zo,To,Ro,so]);async function hc(e,t,r,i){r.passphrase&&await e.encrypt(r.passphrase,i),await Promise.all(t.map((async function(e,t){const n=r.subkeys[t].passphrase;n&&await e.encrypt(n,i)})));const n=new ho;n.push(e),await Promise.all(r.userIDs.map((async function(t,n){function a(e,t){return[t,...e.filter((e=>e!==t))]}const s=To.fromObject(t),o={};o.userID=s,o.key=e;const c=new so;return c.signatureType=re.signature.certGeneric,c.publicKeyAlgorithm=e.algorithm,c.hashAlgorithm=await Ho(null,e,void 0,void 0,i),c.keyFlags=[re.keyFlags.certifyKeys|re.keyFlags.signData],c.preferredSymmetricAlgorithms=a([re.symmetric.aes256,re.symmetric.aes128,re.symmetric.aes192],i.preferredSymmetricAlgorithm),i.aeadProtect&&(c.preferredAEADAlgorithms=a([re.aead.eax,re.aead.ocb],i.preferredAEADAlgorithm)),c.preferredHashAlgorithms=a([re.hash.sha256,re.hash.sha512],i.preferredHashAlgorithm),c.preferredCompressionAlgorithms=a([re.compression.zlib,re.compression.zip,re.compression.uncompressed],i.preferredCompressionAlgorithm),0===n&&(c.isPrimaryUserID=!0),c.features=[0],c.features[0]|=re.features.modificationDetection,i.aeadProtect&&(c.features[0]|=re.features.aead),i.v5Keys&&(c.features[0]|=re.features.v5Keys),r.keyExpirationTime>0&&(c.keyExpirationTime=r.keyExpirationTime,c.keyNeverExpires=!1),await c.sign(e,o,r.date),{userIDPacket:s,signaturePacket:c}}))).then((e=>{e.forEach((({userIDPacket:e,signaturePacket:t})=>{n.push(e),n.push(t)}))})),await Promise.all(t.map((async function(t,n){const a=r.subkeys[n];return{secretSubkeyPacket:t,subkeySignaturePacket:await Wo(t,e,a,i)}}))).then((e=>{e.forEach((({secretSubkeyPacket:e,subkeySignaturePacket:t})=>{n.push(e),n.push(t)}))}));const a={key:e};return n.push(await Vo(a,null,e,{signatureType:re.signature.keyRevocation,reasonForRevocationFlag:re.reasonForRevocation.noReason,reasonForRevocationString:""},r.date,void 0,void 0,i)),r.passphrase&&e.clearPrivateParams(),await Promise.all(t.map((async function(e,t){r.subkeys[t].passphrase&&e.clearPrivateParams()}))),new cc(n)}const dc=/*#__PURE__*/V.constructAllowedPackets([Zs,lo,So,ko,Ko,Eo,xo,co,so]),fc=/*#__PURE__*/V.constructAllowedPackets([xo]),lc=/*#__PURE__*/V.constructAllowedPackets([so]);class pc{constructor(e){this.packets=e||new ho}getEncryptionKeyIDs(){const e=[];return this.packets.filterByTag(re.packet.publicKeyEncryptedSessionKey).forEach((function(t){e.push(t.publicKeyID)})),e}getSigningKeyIDs(){const e=this.unwrapCompressed(),t=e.packets.filterByTag(re.packet.onePassSignature);if(t.length>0)return t.map((e=>e.issuerKeyID));return e.packets.filterByTag(re.packet.signature).map((e=>e.issuerKeyID))}async decrypt(e,t,r,i=new Date,n=ie){const a=r||await this.decryptSessionKeys(e,t,i,n),s=this.packets.filterByTag(re.packet.symmetricallyEncryptedData,re.packet.symEncryptedIntegrityProtectedData,re.packet.aeadEncryptedData);if(0===s.length)return this;const o=s[0];let c=null;const u=Promise.all(a.map((async e=>{if(!e||!V.isUint8Array(e.data)||!V.isString(e.algorithm))throw Error("Invalid session key for decryption.");try{await o.decrypt(e.algorithm,e.data,n)}catch(e){V.printDebugError(e),c=e}})));if(j(o.encrypted),o.encrypted=null,await u,!o.packets||!o.packets.length)throw c||Error("Decryption failed.");const h=new pc(o.packets);return o.packets=new ho,h}async decryptSessionKeys(e,t,r=new Date,i=ie){let n,a=[];if(t){const e=this.packets.filterByTag(re.packet.symEncryptedSessionKey);if(0===e.length)throw Error("No symmetrically encrypted session key packet found.");await Promise.all(t.map((async function(t,r){let n;n=r?await ho.fromBinary(e.write(),fc,i):e,await Promise.all(n.map((async function(e){try{await e.decrypt(t),a.push(e)}catch(e){V.printDebugError(e)}})))})))}else{if(!e)throw Error("No key or password specified.");{const t=this.packets.filterByTag(re.packet.publicKeyEncryptedSessionKey);if(0===t.length)throw Error("No public key encrypted session key packet found.");await Promise.all(t.map((async function(t){await Promise.all(e.map((async function(e){let s=[re.symmetric.aes256,re.symmetric.aes128,re.symmetric.tripledes,re.symmetric.cast5];try{const t=await e.getPrimaryUser(r,void 0,i);t.selfCertification.preferredSymmetricAlgorithms&&(s=s.concat(t.selfCertification.preferredSymmetricAlgorithms))}catch(e){}const o=(await e.getDecryptionKeys(t.publicKeyID,null,void 0,i)).map((e=>e.keyPacket));await Promise.all(o.map((async function(e){if(e&&!e.isDummy()){if(!e.isDecrypted())throw Error("Decryption key is not decrypted.");try{if(await t.decrypt(e),!s.includes(re.write(re.symmetric,t.sessionKeyAlgorithm)))throw Error("A non-preferred symmetric algorithm was used.");a.push(t)}catch(e){V.printDebugError(e),n=e}}})))}))),j(t.encrypted),t.encrypted=null})))}}if(a.length){if(a.length>1){const e=new Set;a=a.filter((t=>{const r=t.sessionKeyAlgorithm+V.uint8ArrayToString(t.sessionKey);return!e.has(r)&&(e.add(r),!0)}))}return a.map((e=>({data:e.sessionKey,algorithm:e.sessionKeyAlgorithm})))}throw n||Error("Session key decryption failed.")}getLiteralData(){const e=this.unwrapCompressed().packets.findPacket(re.packet.literalData);return e&&e.getBytes()||null}getFilename(){const e=this.unwrapCompressed().packets.findPacket(re.packet.literalData);return e&&e.getFilename()||null}getText(){const e=this.unwrapCompressed().packets.findPacket(re.packet.literalData);return e?e.getText():null}static async generateSessionKey(e=[],t=new Date,r=[],i=ie){const n=re.read(re.symmetric,await Go("symmetric",e,t,r,i)),a=i.aeadProtect&&await async function(e,t=new Date,r=[],i=ie){let n=!0;return await Promise.all(e.map((async function(e,a){const s=await e.getPrimaryUser(t,r[a],i);s.selfCertification.features&&s.selfCertification.features[0]&re.features.aead||(n=!1)}))),n}(e,t,r,i)?re.read(re.aead,await Go("aead",e,t,r,i)):void 0;return{data:await On.generateSessionKey(n),algorithm:n,aeadAlgorithm:a}}async encrypt(e,t,r,i=!1,n=[],a=new Date,s=[],o=ie){if(r){if(!V.isUint8Array(r.data)||!V.isString(r.algorithm))throw Error("Invalid session key for encryption.")}else if(e&&e.length)r=await pc.generateSessionKey(e,a,s,o);else{if(!t||!t.length)throw Error("No keys, passwords, or session key provided.");r=await pc.generateSessionKey(void 0,void 0,void 0,o)}const{data:c,algorithm:u,aeadAlgorithm:h}=r,d=await pc.encryptSessionKey(c,u,h,e,t,i,n,a,s,o);let f;return h?(f=new So,f.aeadAlgorithm=h):f=new ko,f.packets=this.packets,await f.encrypt(u,c,o),d.packets.push(f),f.packets=new ho,d}static async encryptSessionKey(e,t,r,i,n,a=!1,s=[],o=new Date,c=[],u=ie){const h=new ho;if(i){const r=await Promise.all(i.map((async function(r,i){const n=await r.getEncryptionKey(s[i],o,c,u),h=new Eo;return h.publicKeyID=a?le.wildcard():n.getKeyID(),h.publicKeyAlgorithm=n.keyPacket.algorithm,h.sessionKey=e,h.sessionKeyAlgorithm=t,await h.encrypt(n.keyPacket),delete h.sessionKey,h})));h.push(...r)}if(n){const i=async function(e,t){try{return await e.decrypt(t),1}catch(e){return 0}},a=(e,t)=>e+t,s=async function(e,t,r,o){const c=new xo(u);if(c.sessionKey=e,c.sessionKeyAlgorithm=t,r&&(c.aeadAlgorithm=r),await c.encrypt(o,u),u.passwordCollisionCheck){if(1!==(await Promise.all(n.map((e=>i(c,e))))).reduce(a))return s(e,t,o)}return delete c.sessionKey,c},o=await Promise.all(n.map((i=>s(e,t,r,i))));h.push(...o)}return new pc(h)}async sign(e=[],t=null,r=[],i=new Date,n=[],a=ie){const s=new ho,o=this.packets.findPacket(re.packet.literalData);if(!o)throw Error("No literal data packet to sign.");let c,u;const h=null===o.text?re.signature.binary:re.signature.text;if(t)for(u=t.packets.filterByTag(re.packet.signature),c=u.length-1;c>=0;c--){const t=u[c],r=new co;r.signatureType=t.signatureType,r.hashAlgorithm=t.hashAlgorithm,r.publicKeyAlgorithm=t.publicKeyAlgorithm,r.issuerKeyID=t.issuerKeyID,e.length||0!==c||(r.flags=1),s.push(r)}return await Promise.all(Array.from(e).reverse().map((async function(t,s){if(!t.isPrivate())throw Error("Need private key for signing");const o=r[e.length-1-s],c=await t.getSigningKey(o,i,n,a),u=new co;return u.signatureType=h,u.hashAlgorithm=await Ho(t,c.keyPacket,i,n,a),u.publicKeyAlgorithm=c.keyPacket.algorithm,u.issuerKeyID=c.getKeyID(),s===e.length-1&&(u.flags=1),u}))).then((e=>{e.forEach((e=>s.push(e)))})),s.push(o),s.push(...await yc(o,e,t,r,i,n,!1,a)),new pc(s)}compress(e,t=ie){if(e===re.compression.uncompressed)return this;const r=new lo(t);r.algorithm=re.read(re.compression,e),r.packets=this.packets;const i=new ho;return i.push(r),new pc(i)}async signDetached(e=[],t=null,r=[],i=new Date,n=[],a=ie){const s=this.packets.findPacket(re.packet.literalData);if(!s)throw Error("No literal data packet to sign.");return new Oo(await yc(s,e,t,r,i,n,!0,a))}async verify(e,t=new Date,r=ie){const i=this.unwrapCompressed(),n=i.packets.filterByTag(re.packet.literalData);if(1!==n.length)throw Error("Can only verify message with one literal data packet.");s(i.packets.stream)&&i.packets.push(...await L(i.packets.stream,(e=>e||[])));const a=i.packets.filterByTag(re.packet.onePassSignature).reverse(),o=i.packets.filterByTag(re.packet.signature);return a.length&&!o.length&&V.isStream(i.packets.stream)&&!s(i.packets.stream)?(await Promise.all(a.map((async e=>{e.correspondingSig=new Promise(((t,r)=>{e.correspondingSigResolve=t,e.correspondingSigReject=r})),e.signatureData=W((async()=>(await e.correspondingSig).signatureData)),e.hashed=L(await e.hash(e.signatureType,n[0],void 0,!1)),e.hashed.catch((()=>{}))}))),i.packets.stream=T(i.packets.stream,(async(e,t)=>{const r=K(e),i=D(t);try{for(let e=0;e<a.length;e++){const{value:t}=await r.read();a[e].correspondingSigResolve(t)}await r.readToEnd(),await i.ready,await i.close()}catch(e){a.forEach((t=>{t.correspondingSigReject(e)})),await i.abort(e)}})),bc(a,n,e,t,!1,r)):bc(o,n,e,t,!1,r)}verifyDetached(e,t,r=new Date,i=ie){const n=this.unwrapCompressed().packets.filterByTag(re.packet.literalData);if(1!==n.length)throw Error("Can only verify message with one literal data packet.");return bc(e.packets,n,t,r,!0,i)}unwrapCompressed(){const e=this.packets.filterByTag(re.packet.compressedData);return e.length?new pc(e[0].packets):this}async appendSignature(e,t=ie){await this.packets.read(V.isUint8Array(e)?e:(await de(e)).data,lc,t)}write(){return this.packets.write()}armor(e=ie){return fe(re.armor.message,this.write(),null,null,null,e)}}async function yc(e,t,r=null,i=[],n=new Date,a=[],s=!1,o=ie){const c=new ho,u=null===e.text?re.signature.binary:re.signature.text;if(await Promise.all(t.map((async(t,r)=>{const c=a[r];if(!t.isPrivate())throw Error("Need private key for signing");const h=await t.getSigningKey(i[r],n,c,o);return Vo(e,t,h.keyPacket,{signatureType:u},n,c,s,o)}))).then((e=>{c.push(...e)})),r){const e=r.packets.filterByTag(re.packet.signature);c.push(...e)}return c}async function bc(e,t,r,i=new Date,n=!1,a=ie){return Promise.all(e.filter((function(e){return["text","binary"].includes(re.read(re.signature,e.signatureType))})).map((async function(e){return async function(e,t,r,i=new Date,n=!1,a=ie){let s,o;for(const t of r){const r=t.getKeys(e.issuerKeyID);if(r.length>0){s=t,o=r[0];break}}const c=e instanceof co?e.correspondingSig:e,u={keyID:e.issuerKeyID,verified:(async()=>{if(!o)throw Error("Could not find signing key with key ID "+e.issuerKeyID.toHex());await e.verify(o.keyPacket,e.signatureType,t[0],i,n,a);const r=await c;if(o.getCreationTime()>r.created)throw Error("Key is newer than the signature");return await s.getSigningKey(o.getKeyID(),r.created,void 0,a),!0})(),signature:(async()=>{const e=await c,t=new ho;return e&&t.push(e),new Oo(t)})()};return u.signature.catch((()=>{})),u.verified.catch((()=>{})),u}(e,t,r,i,n,a)})))}const mc=/*#__PURE__*/V.constructAllowedPackets([so]);class gc{constructor(e,t){if(this.text=V.removeTrailingSpaces(e).replace(/\r?\n/g,"\r\n"),t&&!(t instanceof Oo))throw Error("Invalid signature input");this.signature=t||new Oo(new ho)}getSigningKeyIDs(){const e=[];return this.signature.packets.forEach((function(t){e.push(t.issuerKeyID)})),e}async sign(e,t=null,r=[],i=new Date,n=[],a=ie){const s=new Zs;s.setText(this.text);const o=new Oo(await yc(s,e,t,r,i,n,!0,a));return new gc(this.text,o)}verify(e,t=new Date,r=ie){const i=this.signature.packets,n=new Zs;return n.setText(this.text),bc(i,[n],e,t,!0,r)}getText(){return this.text.replace(/\r\n/g,"\n")}armor(e=ie){let t=this.signature.packets.map((function(e){return re.read(re.hash,e.hashAlgorithm).toUpperCase()}));t=t.filter((function(e,t,r){return r.indexOf(e)===t}));const r={hash:t.join(),text:this.text,data:this.signature.packets.write()};return fe(re.armor.signed,r,void 0,void 0,void 0,e)}}function wc(e){if(!(e instanceof pc))throw Error("Parameter [message] needs to be of type Message")}function vc(e){if(!(e instanceof gc||e instanceof pc))throw Error("Parameter [message] needs to be of type Message or CleartextMessage")}function _c(e){if("armored"!==e&&"binary"!==e&&"object"!==e)throw Error("Unsupported format "+e)}const kc=Object.keys(ie).length;function Ac(e){const t=Object.keys(e);if(t.length!==kc)for(const e of t)if(void 0===ie[e])throw Error("Unknown config property: "+e)}function Sc(e){return e&&!V.isArray(e)&&(e=[e]),e}async function Ec(e,t,r="utf8"){const i=V.isStream(e);return"array"===i?L(e):"node"===t?(e=b(e),"binary"!==r&&e.setEncoding(r),e):"web"===t&&"ponyfill"===i?_(e):e}function Pc(e,t){e.data=T(t.packets.stream,(async(t,r)=>{await R(e.data,r,{preventClose:!0});const i=D(r);try{await L(t,(e=>e)),await i.close()}catch(e){await i.abort(e)}}))}function xc(e,t,r){switch(t){case"object":return e;case"armored":return e.armor(r);case"binary":return e.write();default:throw Error("Unsupported format "+t)}}const Mc="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol:e=>`Symbol(${e})`;function Cc(){}const Kc="undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:void 0;function Dc(e){return"object"==typeof e&&null!==e||"function"==typeof e}const Rc=Cc,Ic=Promise,Uc=Promise.prototype.then,Bc=Promise.resolve.bind(Ic),Tc=Promise.reject.bind(Ic);function zc(e){return new Ic(e)}function qc(e){return Bc(e)}function Oc(e){return Tc(e)}function Fc(e,t,r){return Uc.call(e,t,r)}function Nc(e,t,r){Fc(Fc(e,t,r),void 0,Rc)}function Lc(e,t){Nc(e,t)}function jc(e,t){Nc(e,void 0,t)}function Wc(e,t,r){return Fc(e,t,r)}function Hc(e){Fc(e,void 0,Rc)}const Gc=(()=>{const e=Kc&&Kc.queueMicrotask;if("function"==typeof e)return e;const t=qc(void 0);return e=>Fc(t,e)})();function Vc(e,t,r){if("function"!=typeof e)throw new TypeError("Argument is not a function");return Function.prototype.apply.call(e,t,r)}function $c(e,t,r){try{return qc(Vc(e,t,r))}catch(e){return Oc(e)}}class Zc{constructor(){this._cursor=0,this._size=0,this._front={_elements:[],_next:void 0},this._back=this._front,this._cursor=0,this._size=0}get length(){return this._size}push(e){const t=this._back;let r=t;16383===t._elements.length&&(r={_elements:[],_next:void 0}),t._elements.push(e),r!==t&&(this._back=r,t._next=r),++this._size}shift(){const e=this._front;let t=e;const r=this._cursor;let i=r+1;const n=e._elements,a=n[r];return 16384===i&&(t=e._next,i=0),--this._size,this._cursor=i,e!==t&&(this._front=t),n[r]=void 0,a}forEach(e){let t=this._cursor,r=this._front,i=r._elements;for(;!(t===i.length&&void 0===r._next||t===i.length&&(r=r._next,i=r._elements,t=0,0===i.length));)e(i[t]),++t}peek(){const e=this._front,t=this._cursor;return e._elements[t]}}function Yc(e,t){e._ownerReadableStream=t,t._reader=e,"readable"===t._state?eu(e):"closed"===t._state?function(e){eu(e),iu(e)}(e):tu(e,t._storedError)}function Xc(e,t){return Ud(e._ownerReadableStream,t)}function Qc(e){"readable"===e._ownerReadableStream._state?ru(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")):function(e,t){tu(e,t)}(e,new TypeError("Reader was released and can no longer be used to monitor the stream's closedness")),e._ownerReadableStream._reader=void 0,e._ownerReadableStream=void 0}function Jc(e){return new TypeError("Cannot "+e+" a stream using a released reader")}function eu(e){e._closedPromise=zc(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r}))}function tu(e,t){eu(e),ru(e,t)}function ru(e,t){void 0!==e._closedPromise_reject&&(Hc(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}function iu(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0)}const nu=Mc("[[AbortSteps]]"),au=Mc("[[ErrorSteps]]"),su=Mc("[[CancelSteps]]"),ou=Mc("[[PullSteps]]"),cu=Number.isFinite||function(e){return"number"==typeof e&&isFinite(e)},uu=Math.trunc||function(e){return e<0?Math.ceil(e):Math.floor(e)};function hu(e,t){if(void 0!==e&&("object"!=typeof(r=e)&&"function"!=typeof r))throw new TypeError(t+" is not an object.");var r}function du(e,t){if("function"!=typeof e)throw new TypeError(t+" is not a function.")}function fu(e,t){if(!function(e){return"object"==typeof e&&null!==e||"function"==typeof e}(e))throw new TypeError(t+" is not an object.")}function lu(e,t,r){if(void 0===e)throw new TypeError(`Parameter ${t} is required in '${r}'.`)}function pu(e,t,r){if(void 0===e)throw new TypeError(`${t} is required in '${r}'.`)}function yu(e){return Number(e)}function bu(e){return 0===e?0:e}function mu(e,t){const r=Number.MAX_SAFE_INTEGER;let i=Number(e);if(i=bu(i),!cu(i))throw new TypeError(t+" is not a finite number");if(i=function(e){return bu(uu(e))}(i),i<0||i>r)throw new TypeError(`${t} is outside the accepted range of 0 to ${r}, inclusive`);return cu(i)&&0!==i?i:0}function gu(e,t){if(!Rd(e))throw new TypeError(t+" is not a ReadableStream.")}function wu(e){return new Su(e)}function vu(e,t){e._reader._readRequests.push(t)}function _u(e,t,r){const i=e._reader._readRequests.shift();r?i._closeSteps():i._chunkSteps(t)}function ku(e){return e._reader._readRequests.length}function Au(e){const t=e._reader;return void 0!==t&&!!Eu(t)}class Su{constructor(e){if(lu(e,1,"ReadableStreamDefaultReader"),gu(e,"First parameter"),Id(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");Yc(this,e),this._readRequests=new Zc}get closed(){return Eu(this)?this._closedPromise:Oc(xu("closed"))}cancel(e){return Eu(this)?void 0===this._ownerReadableStream?Oc(Jc("cancel")):Xc(this,e):Oc(xu("cancel"))}read(){if(!Eu(this))return Oc(xu("read"));if(void 0===this._ownerReadableStream)return Oc(Jc("read from"));let e,t;const r=zc(((r,i)=>{e=r,t=i}));return Pu(this,{_chunkSteps:t=>e({value:t,done:!1}),_closeSteps:()=>e({value:void 0,done:!0}),_errorSteps:e=>t(e)}),r}releaseLock(){if(!Eu(this))throw xu("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");Qc(this)}}}function Eu(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_readRequests")}function Pu(e,t){const r=e._ownerReadableStream;r._disturbed=!0,"closed"===r._state?t._closeSteps():"errored"===r._state?t._errorSteps(r._storedError):r._readableStreamController[ou](t)}function xu(e){return new TypeError(`ReadableStreamDefaultReader.prototype.${e} can only be used on a ReadableStreamDefaultReader`)}let Mu;Object.defineProperties(Su.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Su.prototype,Mc.toStringTag,{value:"ReadableStreamDefaultReader",configurable:!0}),"symbol"==typeof Mc.asyncIterator&&(Mu={[Mc.asyncIterator](){return this}},Object.defineProperty(Mu,Mc.asyncIterator,{enumerable:!1}));class Cu{constructor(e,t){this._ongoingPromise=void 0,this._isFinished=!1,this._reader=e,this._preventCancel=t}next(){const e=()=>this._nextSteps();return this._ongoingPromise=this._ongoingPromise?Wc(this._ongoingPromise,e,e):e(),this._ongoingPromise}return(e){const t=()=>this._returnSteps(e);return this._ongoingPromise?Wc(this._ongoingPromise,t,t):t()}_nextSteps(){if(this._isFinished)return Promise.resolve({value:void 0,done:!0});const e=this._reader;if(void 0===e._ownerReadableStream)return Oc(Jc("iterate"));let t,r;const i=zc(((e,i)=>{t=e,r=i}));return Pu(e,{_chunkSteps:e=>{this._ongoingPromise=void 0,Gc((()=>t({value:e,done:!1})))},_closeSteps:()=>{this._ongoingPromise=void 0,this._isFinished=!0,Qc(e),t({value:void 0,done:!0})},_errorSteps:t=>{this._ongoingPromise=void 0,this._isFinished=!0,Qc(e),r(t)}}),i}_returnSteps(e){if(this._isFinished)return Promise.resolve({value:e,done:!0});this._isFinished=!0;const t=this._reader;if(void 0===t._ownerReadableStream)return Oc(Jc("finish iterating"));if(!this._preventCancel){const r=Xc(t,e);return Qc(t),Wc(r,(()=>({value:e,done:!0})))}return Qc(t),qc({value:e,done:!0})}}const Ku={next(){return Du(this)?this._asyncIteratorImpl.next():Oc(Ru("next"))},return(e){return Du(this)?this._asyncIteratorImpl.return(e):Oc(Ru("return"))}};function Du(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_asyncIteratorImpl")}function Ru(e){return new TypeError(`ReadableStreamAsyncIterator.${e} can only be used on a ReadableSteamAsyncIterator`)}void 0!==Mu&&Object.setPrototypeOf(Ku,Mu);const Iu=Number.isNaN||function(e){return e!=e};function Uu(e){return!!function(e){if("number"!=typeof e)return!1;if(Iu(e))return!1;if(e<0)return!1;return!0}(e)&&e!==1/0}function Bu(e){const t=e._queue.shift();return e._queueTotalSize-=t.size,e._queueTotalSize<0&&(e._queueTotalSize=0),t.value}function Tu(e,t,r){if(!Uu(r=Number(r)))throw new RangeError("Size must be a finite, non-NaN, non-negative number.");e._queue.push({value:t,size:r}),e._queueTotalSize+=r}function zu(e){e._queue=new Zc,e._queueTotalSize=0}function qu(e){return e.slice()}class Ou{constructor(){throw new TypeError("Illegal constructor")}get view(){if(!Lu(this))throw nh("view");return this._view}respond(e){if(!Lu(this))throw nh("respond");if(lu(e,1,"respond"),e=mu(e,"First parameter"),void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");this._view.buffer,function(e,t){if(!Uu(t=Number(t)))throw new RangeError("bytesWritten must be a finite");Qu(e,t)}(this._associatedReadableByteStreamController,e)}respondWithNewView(e){if(!Lu(this))throw nh("respondWithNewView");if(lu(e,1,"respondWithNewView"),!ArrayBuffer.isView(e))throw new TypeError("You can only respond with array buffer views");if(0===e.byteLength)throw new TypeError("chunk must have non-zero byteLength");if(0===e.buffer.byteLength)throw new TypeError("chunk's buffer must have non-zero byteLength");if(void 0===this._associatedReadableByteStreamController)throw new TypeError("This BYOB request has been invalidated");!function(e,t){const r=e._pendingPullIntos.peek();if(r.byteOffset+r.bytesFilled!==t.byteOffset)throw new RangeError("The region specified by view does not match byobRequest");if(r.byteLength!==t.byteLength)throw new RangeError("The buffer of view has different capacity than byobRequest");r.buffer=t.buffer,Qu(e,t.byteLength)}(this._associatedReadableByteStreamController,e)}}Object.defineProperties(Ou.prototype,{respond:{enumerable:!0},respondWithNewView:{enumerable:!0},view:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Ou.prototype,Mc.toStringTag,{value:"ReadableStreamBYOBRequest",configurable:!0});class Fu{constructor(){throw new TypeError("Illegal constructor")}get byobRequest(){if(!Nu(this))throw ah("byobRequest");if(null===this._byobRequest&&this._pendingPullIntos.length>0){const e=this._pendingPullIntos.peek(),t=new Uint8Array(e.buffer,e.byteOffset+e.bytesFilled,e.byteLength-e.bytesFilled),r=Object.create(Ou.prototype);!function(e,t,r){e._associatedReadableByteStreamController=t,e._view=r}(r,this,t),this._byobRequest=r}return this._byobRequest}get desiredSize(){if(!Nu(this))throw ah("desiredSize");return rh(this)}close(){if(!Nu(this))throw ah("close");if(this._closeRequested)throw new TypeError("The stream has already been closed; do not close it again!");const e=this._controlledReadableByteStream._state;if("readable"!==e)throw new TypeError(`The stream (in ${e} state) is not in the readable state and cannot be closed`);!function(e){const t=e._controlledReadableByteStream;if(e._closeRequested||"readable"!==t._state)return;if(e._queueTotalSize>0)return void(e._closeRequested=!0);if(e._pendingPullIntos.length>0){if(e._pendingPullIntos.peek().bytesFilled>0){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");throw th(e,t),t}}eh(e),Bd(t)}(this)}enqueue(e){if(!Nu(this))throw ah("enqueue");if(lu(e,1,"enqueue"),!ArrayBuffer.isView(e))throw new TypeError("chunk must be an array buffer view");if(0===e.byteLength)throw new TypeError("chunk must have non-zero byteLength");if(0===e.buffer.byteLength)throw new TypeError("chunk's buffer must have non-zero byteLength");if(this._closeRequested)throw new TypeError("stream is closed or draining");const t=this._controlledReadableByteStream._state;if("readable"!==t)throw new TypeError(`The stream (in ${t} state) is not in the readable state and cannot be enqueued to`);!function(e,t){const r=e._controlledReadableByteStream;if(e._closeRequested||"readable"!==r._state)return;const i=t.buffer,n=t.byteOffset,a=t.byteLength,s=i;if(Au(r))if(0===ku(r))Gu(e,s,n,a);else{_u(r,new Uint8Array(s,n,a),!1)}else ch(r)?(Gu(e,s,n,a),Xu(e)):Gu(e,s,n,a);ju(e)}(this,e)}error(e){if(!Nu(this))throw ah("error");th(this,e)}[su](e){if(this._pendingPullIntos.length>0){this._pendingPullIntos.peek().bytesFilled=0}zu(this);const t=this._cancelAlgorithm(e);return eh(this),t}[ou](e){const t=this._controlledReadableByteStream;if(this._queueTotalSize>0){const t=this._queue.shift();this._queueTotalSize-=t.byteLength,Zu(this);const r=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);return void e._chunkSteps(r)}const r=this._autoAllocateChunkSize;if(void 0!==r){let t;try{t=new ArrayBuffer(r)}catch(t){return void e._errorSteps(t)}const i={buffer:t,byteOffset:0,byteLength:r,bytesFilled:0,elementSize:1,viewConstructor:Uint8Array,readerType:"default"};this._pendingPullIntos.push(i)}vu(t,e),ju(this)}}function Nu(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableByteStream")}function Lu(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_associatedReadableByteStreamController")}function ju(e){if(!function(e){const t=e._controlledReadableByteStream;if("readable"!==t._state)return!1;if(e._closeRequested)return!1;if(!e._started)return!1;if(Au(t)&&ku(t)>0)return!0;if(ch(t)&&oh(t)>0)return!0;if(rh(e)>0)return!0;return!1}(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;Nc(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,ju(e))}),(t=>{th(e,t)}))}function Wu(e,t){let r=!1;"closed"===e._state&&(r=!0);const i=Hu(t);"default"===t.readerType?_u(e,i,r):function(e,t,r){const i=e._reader._readIntoRequests.shift();r?i._closeSteps(t):i._chunkSteps(t)}(e,i,r)}function Hu(e){const t=e.bytesFilled,r=e.elementSize;return new e.viewConstructor(e.buffer,e.byteOffset,t/r)}function Gu(e,t,r,i){e._queue.push({buffer:t,byteOffset:r,byteLength:i}),e._queueTotalSize+=i}function Vu(e,t){const r=t.elementSize,i=t.bytesFilled-t.bytesFilled%r,n=Math.min(e._queueTotalSize,t.byteLength-t.bytesFilled),a=t.bytesFilled+n,s=a-a%r;let o=n,c=!1;s>i&&(o=s-t.bytesFilled,c=!0);const u=e._queue;for(;o>0;){const r=u.peek(),i=Math.min(o,r.byteLength),n=t.byteOffset+t.bytesFilled;h=t.buffer,d=n,f=r.buffer,l=r.byteOffset,p=i,new Uint8Array(h).set(new Uint8Array(f,l,p),d),r.byteLength===i?u.shift():(r.byteOffset+=i,r.byteLength-=i),e._queueTotalSize-=i,$u(e,i,t),o-=i}var h,d,f,l,p;return c}function $u(e,t,r){Yu(e),r.bytesFilled+=t}function Zu(e){0===e._queueTotalSize&&e._closeRequested?(eh(e),Bd(e._controlledReadableByteStream)):ju(e)}function Yu(e){null!==e._byobRequest&&(e._byobRequest._associatedReadableByteStreamController=void 0,e._byobRequest._view=null,e._byobRequest=null)}function Xu(e){for(;e._pendingPullIntos.length>0;){if(0===e._queueTotalSize)return;const t=e._pendingPullIntos.peek();Vu(e,t)&&(Ju(e),Wu(e._controlledReadableByteStream,t))}}function Qu(e,t){const r=e._pendingPullIntos.peek();if("closed"===e._controlledReadableByteStream._state){if(0!==t)throw new TypeError("bytesWritten must be 0 when calling respond() on a closed stream");!function(e,t){t.buffer=t.buffer;const r=e._controlledReadableByteStream;if(ch(r))for(;oh(r)>0;)Wu(r,Ju(e))}(e,r)}else!function(e,t,r){if(r.bytesFilled+t>r.byteLength)throw new RangeError("bytesWritten out of range");if($u(e,t,r),r.bytesFilled<r.elementSize)return;Ju(e);const i=r.bytesFilled%r.elementSize;if(i>0){const t=r.byteOffset+r.bytesFilled,n=r.buffer.slice(t-i,t);Gu(e,n,0,n.byteLength)}r.buffer=r.buffer,r.bytesFilled-=i,Wu(e._controlledReadableByteStream,r),Xu(e)}(e,t,r);ju(e)}function Ju(e){const t=e._pendingPullIntos.shift();return Yu(e),t}function eh(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0}function th(e,t){const r=e._controlledReadableByteStream;"readable"===r._state&&(!function(e){Yu(e),e._pendingPullIntos=new Zc}(e),zu(e),eh(e),Td(r,t))}function rh(e){const t=e._controlledReadableByteStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function ih(e,t,r){const i=Object.create(Fu.prototype);let n=()=>{},a=()=>qc(void 0),s=()=>qc(void 0);void 0!==t.start&&(n=()=>t.start(i)),void 0!==t.pull&&(a=()=>t.pull(i)),void 0!==t.cancel&&(s=e=>t.cancel(e));const o=t.autoAllocateChunkSize;if(0===o)throw new TypeError("autoAllocateChunkSize must be greater than 0");!function(e,t,r,i,n,a,s){t._controlledReadableByteStream=e,t._pullAgain=!1,t._pulling=!1,t._byobRequest=null,t._queue=t._queueTotalSize=void 0,zu(t),t._closeRequested=!1,t._started=!1,t._strategyHWM=a,t._pullAlgorithm=i,t._cancelAlgorithm=n,t._autoAllocateChunkSize=s,t._pendingPullIntos=new Zc,e._readableStreamController=t,Nc(qc(r()),(()=>{t._started=!0,ju(t)}),(e=>{th(t,e)}))}(e,i,n,a,s,r,o)}function nh(e){return new TypeError(`ReadableStreamBYOBRequest.prototype.${e} can only be used on a ReadableStreamBYOBRequest`)}function ah(e){return new TypeError(`ReadableByteStreamController.prototype.${e} can only be used on a ReadableByteStreamController`)}function sh(e,t){e._reader._readIntoRequests.push(t)}function oh(e){return e._reader._readIntoRequests.length}function ch(e){const t=e._reader;return void 0!==t&&!!hh(t)}Object.defineProperties(Fu.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},byobRequest:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Fu.prototype,Mc.toStringTag,{value:"ReadableByteStreamController",configurable:!0});class uh{constructor(e){if(lu(e,1,"ReadableStreamBYOBReader"),gu(e,"First parameter"),Id(e))throw new TypeError("This stream has already been locked for exclusive reading by another reader");if(!Nu(e._readableStreamController))throw new TypeError("Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte source");Yc(this,e),this._readIntoRequests=new Zc}get closed(){return hh(this)?this._closedPromise:Oc(dh("closed"))}cancel(e){return hh(this)?void 0===this._ownerReadableStream?Oc(Jc("cancel")):Xc(this,e):Oc(dh("cancel"))}read(e){if(!hh(this))return Oc(dh("read"));if(!ArrayBuffer.isView(e))return Oc(new TypeError("view must be an array buffer view"));if(0===e.byteLength)return Oc(new TypeError("view must have non-zero byteLength"));if(0===e.buffer.byteLength)return Oc(new TypeError("view's buffer must have non-zero byteLength"));if(void 0===this._ownerReadableStream)return Oc(Jc("read from"));let t,r;const i=zc(((e,i)=>{t=e,r=i}));return function(e,t,r){const i=e._ownerReadableStream;i._disturbed=!0,"errored"===i._state?r._errorSteps(i._storedError):function(e,t,r){const i=e._controlledReadableByteStream;let n=1;t.constructor!==DataView&&(n=t.constructor.BYTES_PER_ELEMENT);const a=t.constructor,s={buffer:t.buffer,byteOffset:t.byteOffset,byteLength:t.byteLength,bytesFilled:0,elementSize:n,viewConstructor:a,readerType:"byob"};if(e._pendingPullIntos.length>0)return e._pendingPullIntos.push(s),void sh(i,r);if("closed"!==i._state){if(e._queueTotalSize>0){if(Vu(e,s)){const t=Hu(s);return Zu(e),void r._chunkSteps(t)}if(e._closeRequested){const t=new TypeError("Insufficient bytes to fill elements in the given buffer");return th(e,t),void r._errorSteps(t)}}e._pendingPullIntos.push(s),sh(i,r),ju(e)}else{const e=new a(s.buffer,s.byteOffset,0);r._closeSteps(e)}}(i._readableStreamController,t,r)}(this,e,{_chunkSteps:e=>t({value:e,done:!1}),_closeSteps:e=>t({value:e,done:!0}),_errorSteps:e=>r(e)}),i}releaseLock(){if(!hh(this))throw dh("releaseLock");if(void 0!==this._ownerReadableStream){if(this._readIntoRequests.length>0)throw new TypeError("Tried to release a reader lock when that reader has pending read() calls un-settled");Qc(this)}}}function hh(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_readIntoRequests")}function dh(e){return new TypeError(`ReadableStreamBYOBReader.prototype.${e} can only be used on a ReadableStreamBYOBReader`)}function fh(e,t){const{highWaterMark:r}=e;if(void 0===r)return t;if(Iu(r)||r<0)throw new RangeError("Invalid highWaterMark");return r}function lh(e){const{size:t}=e;return t||(()=>1)}function ph(e,t){hu(e,t);const r=null==e?void 0:e.highWaterMark,i=null==e?void 0:e.size;return{highWaterMark:void 0===r?void 0:yu(r),size:void 0===i?void 0:yh(i,t+" has member 'size' that")}}function yh(e,t){return du(e,t),t=>yu(e(t))}function bh(e,t,r){return du(e,r),r=>$c(e,t,[r])}function mh(e,t,r){return du(e,r),()=>$c(e,t,[])}function gh(e,t,r){return du(e,r),r=>Vc(e,t,[r])}function wh(e,t,r){return du(e,r),(r,i)=>$c(e,t,[r,i])}function vh(e,t){if(!Sh(e))throw new TypeError(t+" is not a WritableStream.")}Object.defineProperties(uh.prototype,{cancel:{enumerable:!0},read:{enumerable:!0},releaseLock:{enumerable:!0},closed:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(uh.prototype,Mc.toStringTag,{value:"ReadableStreamBYOBReader",configurable:!0});class _h{constructor(e={},t={}){void 0===e?e=null:fu(e,"First parameter");const r=ph(t,"Second parameter"),i=function(e,t){hu(e,t);const r=null==e?void 0:e.abort,i=null==e?void 0:e.close,n=null==e?void 0:e.start,a=null==e?void 0:e.type,s=null==e?void 0:e.write;return{abort:void 0===r?void 0:bh(r,e,t+" has member 'abort' that"),close:void 0===i?void 0:mh(i,e,t+" has member 'close' that"),start:void 0===n?void 0:gh(n,e,t+" has member 'start' that"),write:void 0===s?void 0:wh(s,e,t+" has member 'write' that"),type:a}}(e,"First parameter");Ah(this);if(void 0!==i.type)throw new RangeError("Invalid type is specified");const n=lh(r);!function(e,t,r,i){const n=Object.create(Lh.prototype);let a=()=>{},s=()=>qc(void 0),o=()=>qc(void 0),c=()=>qc(void 0);void 0!==t.start&&(a=()=>t.start(n));void 0!==t.write&&(s=e=>t.write(e,n));void 0!==t.close&&(o=()=>t.close());void 0!==t.abort&&(c=e=>t.abort(e));jh(e,n,a,s,o,c,r,i)}(this,i,fh(r,1),n)}get locked(){if(!Sh(this))throw Yh("locked");return Eh(this)}abort(e){return Sh(this)?Eh(this)?Oc(new TypeError("Cannot abort a stream that already has a writer")):Ph(this,e):Oc(Yh("abort"))}close(){return Sh(this)?Eh(this)?Oc(new TypeError("Cannot close a stream that already has a writer")):Dh(this)?Oc(new TypeError("Cannot close an already-closing stream")):xh(this):Oc(Yh("close"))}getWriter(){if(!Sh(this))throw Yh("getWriter");return kh(this)}}function kh(e){return new Uh(e)}function Ah(e){e._state="writable",e._storedError=void 0,e._writer=void 0,e._writableStreamController=void 0,e._writeRequests=new Zc,e._inFlightWriteRequest=void 0,e._closeRequest=void 0,e._inFlightCloseRequest=void 0,e._pendingAbortRequest=void 0,e._backpressure=!1}function Sh(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_writableStreamController")}function Eh(e){return void 0!==e._writer}function Ph(e,t){const r=e._state;if("closed"===r||"errored"===r)return qc(void 0);if(void 0!==e._pendingAbortRequest)return e._pendingAbortRequest._promise;let i=!1;"erroring"===r&&(i=!0,t=void 0);const n=zc(((r,n)=>{e._pendingAbortRequest={_promise:void 0,_resolve:r,_reject:n,_reason:t,_wasAlreadyErroring:i}}));return e._pendingAbortRequest._promise=n,i||Ch(e,t),n}function xh(e){const t=e._state;if("closed"===t||"errored"===t)return Oc(new TypeError(`The stream (in ${t} state) is not in the writable state and cannot be closed`));const r=zc(((t,r)=>{const i={_resolve:t,_reject:r};e._closeRequest=i})),i=e._writer;var n;return void 0!==i&&e._backpressure&&"writable"===t&&od(i),Tu(n=e._writableStreamController,Nh,0),Gh(n),r}function Mh(e,t){"writable"!==e._state?Kh(e):Ch(e,t)}function Ch(e,t){const r=e._writableStreamController;e._state="erroring",e._storedError=t;const i=e._writer;void 0!==i&&qh(i,t),!function(e){if(void 0===e._inFlightWriteRequest&&void 0===e._inFlightCloseRequest)return!1;return!0}(e)&&r._started&&Kh(e)}function Kh(e){e._state="errored",e._writableStreamController[au]();const t=e._storedError;if(e._writeRequests.forEach((e=>{e._reject(t)})),e._writeRequests=new Zc,void 0===e._pendingAbortRequest)return void Rh(e);const r=e._pendingAbortRequest;if(e._pendingAbortRequest=void 0,r._wasAlreadyErroring)return r._reject(t),void Rh(e);Nc(e._writableStreamController[nu](r._reason),(()=>{r._resolve(),Rh(e)}),(t=>{r._reject(t),Rh(e)}))}function Dh(e){return void 0!==e._closeRequest||void 0!==e._inFlightCloseRequest}function Rh(e){void 0!==e._closeRequest&&(e._closeRequest._reject(e._storedError),e._closeRequest=void 0);const t=e._writer;void 0!==t&&td(t,e._storedError)}function Ih(e,t){const r=e._writer;void 0!==r&&t!==e._backpressure&&(t?function(e){id(e)}(r):od(r)),e._backpressure=t}Object.defineProperties(_h.prototype,{abort:{enumerable:!0},close:{enumerable:!0},getWriter:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(_h.prototype,Mc.toStringTag,{value:"WritableStream",configurable:!0});class Uh{constructor(e){if(lu(e,1,"WritableStreamDefaultWriter"),vh(e,"First parameter"),Eh(e))throw new TypeError("This stream has already been locked for exclusive writing by another writer");this._ownerWritableStream=e,e._writer=this;const t=e._state;if("writable"===t)!Dh(e)&&e._backpressure?id(this):ad(this),Jh(this);else if("erroring"===t)nd(this,e._storedError),Jh(this);else if("closed"===t)ad(this),Jh(r=this),rd(r);else{const t=e._storedError;nd(this,t),ed(this,t)}var r}get closed(){return Bh(this)?this._closedPromise:Oc(Xh("closed"))}get desiredSize(){if(!Bh(this))throw Xh("desiredSize");if(void 0===this._ownerWritableStream)throw Qh("desiredSize");return function(e){const t=e._ownerWritableStream,r=t._state;if("errored"===r||"erroring"===r)return null;if("closed"===r)return 0;return Hh(t._writableStreamController)}(this)}get ready(){return Bh(this)?this._readyPromise:Oc(Xh("ready"))}abort(e){return Bh(this)?void 0===this._ownerWritableStream?Oc(Qh("abort")):function(e,t){return Ph(e._ownerWritableStream,t)}(this,e):Oc(Xh("abort"))}close(){if(!Bh(this))return Oc(Xh("close"));const e=this._ownerWritableStream;return void 0===e?Oc(Qh("close")):Dh(e)?Oc(new TypeError("Cannot close an already-closing stream")):Th(this)}releaseLock(){if(!Bh(this))throw Xh("releaseLock");void 0!==this._ownerWritableStream&&Oh(this)}write(e){return Bh(this)?void 0===this._ownerWritableStream?Oc(Qh("write to")):Fh(this,e):Oc(Xh("write"))}}function Bh(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_ownerWritableStream")}function Th(e){return xh(e._ownerWritableStream)}function zh(e,t){"pending"===e._closedPromiseState?td(e,t):function(e,t){ed(e,t)}(e,t)}function qh(e,t){"pending"===e._readyPromiseState?sd(e,t):function(e,t){nd(e,t)}(e,t)}function Oh(e){const t=e._ownerWritableStream,r=new TypeError("Writer was released and can no longer be used to monitor the stream's closedness");qh(e,r),zh(e,r),t._writer=void 0,e._ownerWritableStream=void 0}function Fh(e,t){const r=e._ownerWritableStream,i=r._writableStreamController,n=function(e,t){try{return e._strategySizeAlgorithm(t)}catch(t){return Vh(e,t),1}}(i,t);if(r!==e._ownerWritableStream)return Oc(Qh("write to"));const a=r._state;if("errored"===a)return Oc(r._storedError);if(Dh(r)||"closed"===a)return Oc(new TypeError("The stream is closing or closed and cannot be written to"));if("erroring"===a)return Oc(r._storedError);const s=function(e){return zc(((t,r)=>{const i={_resolve:t,_reject:r};e._writeRequests.push(i)}))}(r);return function(e,t,r){try{Tu(e,t,r)}catch(t){return void Vh(e,t)}const i=e._controlledWritableStream;if(!Dh(i)&&"writable"===i._state){Ih(i,$h(e))}Gh(e)}(i,t,n),s}Object.defineProperties(Uh.prototype,{abort:{enumerable:!0},close:{enumerable:!0},releaseLock:{enumerable:!0},write:{enumerable:!0},closed:{enumerable:!0},desiredSize:{enumerable:!0},ready:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Uh.prototype,Mc.toStringTag,{value:"WritableStreamDefaultWriter",configurable:!0});const Nh={};class Lh{constructor(){throw new TypeError("Illegal constructor")}error(e){if(!function(e){if(!Dc(e))return!1;if(!Object.prototype.hasOwnProperty.call(e,"_controlledWritableStream"))return!1;return!0}(this))throw new TypeError("WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController");"writable"===this._controlledWritableStream._state&&Zh(this,e)}[nu](e){const t=this._abortAlgorithm(e);return Wh(this),t}[au](){zu(this)}}function jh(e,t,r,i,n,a,s,o){t._controlledWritableStream=e,e._writableStreamController=t,t._queue=void 0,t._queueTotalSize=void 0,zu(t),t._started=!1,t._strategySizeAlgorithm=o,t._strategyHWM=s,t._writeAlgorithm=i,t._closeAlgorithm=n,t._abortAlgorithm=a;const c=$h(t);Ih(e,c);Nc(qc(r()),(()=>{t._started=!0,Gh(t)}),(r=>{t._started=!0,Mh(e,r)}))}function Wh(e){e._writeAlgorithm=void 0,e._closeAlgorithm=void 0,e._abortAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function Hh(e){return e._strategyHWM-e._queueTotalSize}function Gh(e){const t=e._controlledWritableStream;if(!e._started)return;if(void 0!==t._inFlightWriteRequest)return;if("erroring"===t._state)return void Kh(t);if(0===e._queue.length)return;const r=e._queue.peek().value;r===Nh?function(e){const t=e._controlledWritableStream;(function(e){e._inFlightCloseRequest=e._closeRequest,e._closeRequest=void 0})(t),Bu(e);const r=e._closeAlgorithm();Wh(e),Nc(r,(()=>{!function(e){e._inFlightCloseRequest._resolve(void 0),e._inFlightCloseRequest=void 0,"erroring"===e._state&&(e._storedError=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._resolve(),e._pendingAbortRequest=void 0)),e._state="closed";const t=e._writer;void 0!==t&&rd(t)}(t)}),(e=>{!function(e,t){e._inFlightCloseRequest._reject(t),e._inFlightCloseRequest=void 0,void 0!==e._pendingAbortRequest&&(e._pendingAbortRequest._reject(t),e._pendingAbortRequest=void 0),Mh(e,t)}(t,e)}))}(e):function(e,t){const r=e._controlledWritableStream;!function(e){e._inFlightWriteRequest=e._writeRequests.shift()}(r);Nc(e._writeAlgorithm(t),(()=>{!function(e){e._inFlightWriteRequest._resolve(void 0),e._inFlightWriteRequest=void 0}(r);const t=r._state;if(Bu(e),!Dh(r)&&"writable"===t){const t=$h(e);Ih(r,t)}Gh(e)}),(t=>{"writable"===r._state&&Wh(e),function(e,t){e._inFlightWriteRequest._reject(t),e._inFlightWriteRequest=void 0,Mh(e,t)}(r,t)}))}(e,r)}function Vh(e,t){"writable"===e._controlledWritableStream._state&&Zh(e,t)}function $h(e){return Hh(e)<=0}function Zh(e,t){const r=e._controlledWritableStream;Wh(e),Ch(r,t)}function Yh(e){return new TypeError(`WritableStream.prototype.${e} can only be used on a WritableStream`)}function Xh(e){return new TypeError(`WritableStreamDefaultWriter.prototype.${e} can only be used on a WritableStreamDefaultWriter`)}function Qh(e){return new TypeError("Cannot "+e+" a stream using a released writer")}function Jh(e){e._closedPromise=zc(((t,r)=>{e._closedPromise_resolve=t,e._closedPromise_reject=r,e._closedPromiseState="pending"}))}function ed(e,t){Jh(e),td(e,t)}function td(e,t){void 0!==e._closedPromise_reject&&(Hc(e._closedPromise),e._closedPromise_reject(t),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="rejected")}function rd(e){void 0!==e._closedPromise_resolve&&(e._closedPromise_resolve(void 0),e._closedPromise_resolve=void 0,e._closedPromise_reject=void 0,e._closedPromiseState="resolved")}function id(e){e._readyPromise=zc(((t,r)=>{e._readyPromise_resolve=t,e._readyPromise_reject=r})),e._readyPromiseState="pending"}function nd(e,t){id(e),sd(e,t)}function ad(e){id(e),od(e)}function sd(e,t){void 0!==e._readyPromise_reject&&(Hc(e._readyPromise),e._readyPromise_reject(t),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="rejected")}function od(e){void 0!==e._readyPromise_resolve&&(e._readyPromise_resolve(void 0),e._readyPromise_resolve=void 0,e._readyPromise_reject=void 0,e._readyPromiseState="fulfilled")}Object.defineProperties(Lh.prototype,{error:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Lh.prototype,Mc.toStringTag,{value:"WritableStreamDefaultController",configurable:!0});const cd="undefined"!=typeof DOMException?DOMException:void 0;const ud=function(e){if("function"!=typeof e&&"object"!=typeof e)return!1;try{return new e,!0}catch(e){return!1}}(cd)?cd:function(){const e=function(e,t){this.message=e||"",this.name=t||"Error",Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)};return Object.defineProperty(e.prototype=Object.create(Error.prototype),"constructor",{value:e,writable:!0,configurable:!0}),e}();function hd(e,t,r,i,n,a){const s=wu(e),o=kh(t);e._disturbed=!0;let c=!1,u=qc(void 0);return zc(((h,d)=>{let f;if(void 0!==a){if(f=()=>{const r=new ud("Aborted","AbortError"),a=[];i||a.push((()=>"writable"===t._state?Ph(t,r):qc(void 0))),n||a.push((()=>"readable"===e._state?Ud(e,r):qc(void 0))),y((()=>Promise.all(a.map((e=>e())))),!0,r)},a.aborted)return void f();a.addEventListener("abort",f)}if(p(e,s._closedPromise,(e=>{i?b(!0,e):y((()=>Ph(t,e)),!0,e)})),p(t,o._closedPromise,(t=>{n?b(!0,t):y((()=>Ud(e,t)),!0,t)})),function(e,t,r){"closed"===e._state?r():Lc(t,r)}(e,s._closedPromise,(()=>{r?b():y((()=>function(e){const t=e._ownerWritableStream,r=t._state;return Dh(t)||"closed"===r?qc(void 0):"errored"===r?Oc(t._storedError):Th(e)}(o)))})),Dh(t)||"closed"===t._state){const t=new TypeError("the destination writable stream closed before all data could be piped to it");n?b(!0,t):y((()=>Ud(e,t)),!0,t)}function l(){const e=u;return Fc(u,(()=>e!==u?l():void 0))}function p(e,t,r){"errored"===e._state?r(e._storedError):jc(t,r)}function y(e,r,i){function n(){Nc(e(),(()=>m(r,i)),(e=>m(!0,e)))}c||(c=!0,"writable"!==t._state||Dh(t)?n():Lc(l(),n))}function b(e,r){c||(c=!0,"writable"!==t._state||Dh(t)?m(e,r):Lc(l(),(()=>m(e,r))))}function m(e,t){Oh(o),Qc(s),void 0!==a&&a.removeEventListener("abort",f),e?d(t):h(void 0)}Hc(zc(((e,t)=>{!function r(i){i?e():Fc(c?qc(!0):Fc(o._readyPromise,(()=>zc(((e,t)=>{Pu(s,{_chunkSteps:t=>{u=Fc(Fh(o,t),void 0,Cc),e(!1)},_closeSteps:()=>e(!0),_errorSteps:t})})))),r,t)}(!1)})))}))}class dd{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!fd(this))throw kd("desiredSize");return wd(this)}close(){if(!fd(this))throw kd("close");if(!vd(this))throw new TypeError("The stream is not in a state that permits close");bd(this)}enqueue(e){if(!fd(this))throw kd("enqueue");if(!vd(this))throw new TypeError("The stream is not in a state that permits enqueue");return md(this,e)}error(e){if(!fd(this))throw kd("error");gd(this,e)}[su](e){zu(this);const t=this._cancelAlgorithm(e);return yd(this),t}[ou](e){const t=this._controlledReadableStream;if(this._queue.length>0){const r=Bu(this);this._closeRequested&&0===this._queue.length?(yd(this),Bd(t)):ld(this),e._chunkSteps(r)}else vu(t,e),ld(this)}}function fd(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledReadableStream")}function ld(e){if(!pd(e))return;if(e._pulling)return void(e._pullAgain=!0);e._pulling=!0;Nc(e._pullAlgorithm(),(()=>{e._pulling=!1,e._pullAgain&&(e._pullAgain=!1,ld(e))}),(t=>{gd(e,t)}))}function pd(e){const t=e._controlledReadableStream;if(!vd(e))return!1;if(!e._started)return!1;if(Id(t)&&ku(t)>0)return!0;return wd(e)>0}function yd(e){e._pullAlgorithm=void 0,e._cancelAlgorithm=void 0,e._strategySizeAlgorithm=void 0}function bd(e){if(!vd(e))return;const t=e._controlledReadableStream;e._closeRequested=!0,0===e._queue.length&&(yd(e),Bd(t))}function md(e,t){if(!vd(e))return;const r=e._controlledReadableStream;if(Id(r)&&ku(r)>0)_u(r,t,!1);else{let r;try{r=e._strategySizeAlgorithm(t)}catch(t){throw gd(e,t),t}try{Tu(e,t,r)}catch(t){throw gd(e,t),t}}ld(e)}function gd(e,t){const r=e._controlledReadableStream;"readable"===r._state&&(zu(e),yd(e),Td(r,t))}function wd(e){const t=e._controlledReadableStream._state;return"errored"===t?null:"closed"===t?0:e._strategyHWM-e._queueTotalSize}function vd(e){const t=e._controlledReadableStream._state;return!e._closeRequested&&"readable"===t}function _d(e,t,r,i,n,a,s){t._controlledReadableStream=e,t._queue=void 0,t._queueTotalSize=void 0,zu(t),t._started=!1,t._closeRequested=!1,t._pullAgain=!1,t._pulling=!1,t._strategySizeAlgorithm=s,t._strategyHWM=a,t._pullAlgorithm=i,t._cancelAlgorithm=n,e._readableStreamController=t;Nc(qc(r()),(()=>{t._started=!0,ld(t)}),(e=>{gd(t,e)}))}function kd(e){return new TypeError(`ReadableStreamDefaultController.prototype.${e} can only be used on a ReadableStreamDefaultController`)}function Ad(e,t,r){return du(e,r),r=>$c(e,t,[r])}function Sd(e,t,r){return du(e,r),r=>$c(e,t,[r])}function Ed(e,t,r){return du(e,r),r=>Vc(e,t,[r])}function Pd(e,t){if("bytes"!==(e=""+e))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamType`);return e}function xd(e,t){if("byob"!==(e=""+e))throw new TypeError(`${t} '${e}' is not a valid enumeration value for ReadableStreamReaderMode`);return e}function Md(e,t){hu(e,t);const r=null==e?void 0:e.preventAbort,i=null==e?void 0:e.preventCancel,n=null==e?void 0:e.preventClose,a=null==e?void 0:e.signal;return void 0!==a&&function(e,t){if(!function(e){if("object"!=typeof e||null===e)return!1;try{return"boolean"==typeof e.aborted}catch(e){return!1}}(e))throw new TypeError(t+" is not an AbortSignal.")}(a,t+" has member 'signal' that"),{preventAbort:!!r,preventCancel:!!i,preventClose:!!n,signal:a}}Object.defineProperties(dd.prototype,{close:{enumerable:!0},enqueue:{enumerable:!0},error:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(dd.prototype,Mc.toStringTag,{value:"ReadableStreamDefaultController",configurable:!0});class Cd{constructor(e={},t={}){void 0===e?e=null:fu(e,"First parameter");const r=ph(t,"Second parameter"),i=function(e,t){hu(e,t);const r=e,i=null==r?void 0:r.autoAllocateChunkSize,n=null==r?void 0:r.cancel,a=null==r?void 0:r.pull,s=null==r?void 0:r.start,o=null==r?void 0:r.type;return{autoAllocateChunkSize:void 0===i?void 0:mu(i,t+" has member 'autoAllocateChunkSize' that"),cancel:void 0===n?void 0:Ad(n,r,t+" has member 'cancel' that"),pull:void 0===a?void 0:Sd(a,r,t+" has member 'pull' that"),start:void 0===s?void 0:Ed(s,r,t+" has member 'start' that"),type:void 0===o?void 0:Pd(o,t+" has member 'type' that")}}(e,"First parameter");if(Dd(this),"bytes"===i.type){if(void 0!==r.size)throw new RangeError("The strategy for a byte stream cannot have a size function");ih(this,i,fh(r,0))}else{const e=lh(r);!function(e,t,r,i){const n=Object.create(dd.prototype);let a=()=>{},s=()=>qc(void 0),o=()=>qc(void 0);void 0!==t.start&&(a=()=>t.start(n)),void 0!==t.pull&&(s=()=>t.pull(n)),void 0!==t.cancel&&(o=e=>t.cancel(e)),_d(e,n,a,s,o,r,i)}(this,i,fh(r,1),e)}}get locked(){if(!Rd(this))throw zd("locked");return Id(this)}cancel(e){return Rd(this)?Id(this)?Oc(new TypeError("Cannot cancel a stream that already has a reader")):Ud(this,e):Oc(zd("cancel"))}getReader(e){if(!Rd(this))throw zd("getReader");return void 0===function(e,t){hu(e,t);const r=null==e?void 0:e.mode;return{mode:void 0===r?void 0:xd(r,t+" has member 'mode' that")}}(e,"First parameter").mode?wu(this):function(e){return new uh(e)}(this)}pipeThrough(e,t={}){if(!Rd(this))throw zd("pipeThrough");lu(e,1,"pipeThrough");const r=function(e,t){hu(e,t);const r=null==e?void 0:e.readable;pu(r,"readable","ReadableWritablePair"),gu(r,t+" has member 'readable' that");const i=null==e?void 0:e.writable;return pu(i,"writable","ReadableWritablePair"),vh(i,t+" has member 'writable' that"),{readable:r,writable:i}}(e,"First parameter"),i=Md(t,"Second parameter");if(Id(this))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream");if(Eh(r.writable))throw new TypeError("ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream");return Hc(hd(this,r.writable,i.preventClose,i.preventAbort,i.preventCancel,i.signal)),r.readable}pipeTo(e,t={}){if(!Rd(this))return Oc(zd("pipeTo"));if(void 0===e)return Oc("Parameter 1 is required in 'pipeTo'.");if(!Sh(e))return Oc(new TypeError("ReadableStream.prototype.pipeTo's first argument must be a WritableStream"));let r;try{r=Md(t,"Second parameter")}catch(e){return Oc(e)}return Id(this)?Oc(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream")):Eh(e)?Oc(new TypeError("ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream")):hd(this,e,r.preventClose,r.preventAbort,r.preventCancel,r.signal)}tee(){if(!Rd(this))throw zd("tee");const e=function(e,t){const r=wu(e);let i,n,a,s,o,c=!1,u=!1,h=!1;const d=zc((e=>{o=e}));function f(){return c||(c=!0,Pu(r,{_chunkSteps:e=>{Gc((()=>{c=!1;const t=e,r=e;u||md(a._readableStreamController,t),h||md(s._readableStreamController,r)}))},_closeSteps:()=>{c=!1,u||bd(a._readableStreamController),h||bd(s._readableStreamController),u&&h||o(void 0)},_errorSteps:()=>{c=!1}})),qc(void 0)}function l(){}return a=Kd(l,f,(function(t){if(u=!0,i=t,h){const t=qu([i,n]),r=Ud(e,t);o(r)}return d})),s=Kd(l,f,(function(t){if(h=!0,n=t,u){const t=qu([i,n]),r=Ud(e,t);o(r)}return d})),jc(r._closedPromise,(e=>{gd(a._readableStreamController,e),gd(s._readableStreamController,e),u&&h||o(void 0)})),[a,s]}(this);return qu(e)}values(e){if(!Rd(this))throw zd("values");return function(e,t){const r=wu(e),i=new Cu(r,t),n=Object.create(Ku);return n._asyncIteratorImpl=i,n}(this,function(e,t){return hu(e,t),{preventCancel:!!(null==e?void 0:e.preventCancel)}}(e,"First parameter").preventCancel)}}function Kd(e,t,r,i=1,n=(()=>1)){const a=Object.create(Cd.prototype);Dd(a);return _d(a,Object.create(dd.prototype),e,t,r,i,n),a}function Dd(e){e._state="readable",e._reader=void 0,e._storedError=void 0,e._disturbed=!1}function Rd(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_readableStreamController")}function Id(e){return void 0!==e._reader}function Ud(e,t){if(e._disturbed=!0,"closed"===e._state)return qc(void 0);if("errored"===e._state)return Oc(e._storedError);Bd(e);return Wc(e._readableStreamController[su](t),Cc)}function Bd(e){e._state="closed";const t=e._reader;void 0!==t&&(iu(t),Eu(t)&&(t._readRequests.forEach((e=>{e._closeSteps()})),t._readRequests=new Zc))}function Td(e,t){e._state="errored",e._storedError=t;const r=e._reader;void 0!==r&&(ru(r,t),Eu(r)?(r._readRequests.forEach((e=>{e._errorSteps(t)})),r._readRequests=new Zc):(r._readIntoRequests.forEach((e=>{e._errorSteps(t)})),r._readIntoRequests=new Zc))}function zd(e){return new TypeError(`ReadableStream.prototype.${e} can only be used on a ReadableStream`)}function qd(e,t){hu(e,t);const r=null==e?void 0:e.highWaterMark;return pu(r,"highWaterMark","QueuingStrategyInit"),{highWaterMark:yu(r)}}Object.defineProperties(Cd.prototype,{cancel:{enumerable:!0},getReader:{enumerable:!0},pipeThrough:{enumerable:!0},pipeTo:{enumerable:!0},tee:{enumerable:!0},values:{enumerable:!0},locked:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Cd.prototype,Mc.toStringTag,{value:"ReadableStream",configurable:!0}),"symbol"==typeof Mc.asyncIterator&&Object.defineProperty(Cd.prototype,Mc.asyncIterator,{value:Cd.prototype.values,writable:!0,configurable:!0});const Od=function(e){return e.byteLength};class Fd{constructor(e){lu(e,1,"ByteLengthQueuingStrategy"),e=qd(e,"First parameter"),this._byteLengthQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!Ld(this))throw Nd("highWaterMark");return this._byteLengthQueuingStrategyHighWaterMark}get size(){if(!Ld(this))throw Nd("size");return Od}}function Nd(e){return new TypeError(`ByteLengthQueuingStrategy.prototype.${e} can only be used on a ByteLengthQueuingStrategy`)}function Ld(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_byteLengthQueuingStrategyHighWaterMark")}Object.defineProperties(Fd.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Fd.prototype,Mc.toStringTag,{value:"ByteLengthQueuingStrategy",configurable:!0});const jd=function(){return 1};class Wd{constructor(e){lu(e,1,"CountQueuingStrategy"),e=qd(e,"First parameter"),this._countQueuingStrategyHighWaterMark=e.highWaterMark}get highWaterMark(){if(!Gd(this))throw Hd("highWaterMark");return this._countQueuingStrategyHighWaterMark}get size(){if(!Gd(this))throw Hd("size");return jd}}function Hd(e){return new TypeError(`CountQueuingStrategy.prototype.${e} can only be used on a CountQueuingStrategy`)}function Gd(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_countQueuingStrategyHighWaterMark")}function Vd(e,t,r){return du(e,r),r=>$c(e,t,[r])}function $d(e,t,r){return du(e,r),r=>Vc(e,t,[r])}function Zd(e,t,r){return du(e,r),(r,i)=>$c(e,t,[r,i])}Object.defineProperties(Wd.prototype,{highWaterMark:{enumerable:!0},size:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Wd.prototype,Mc.toStringTag,{value:"CountQueuingStrategy",configurable:!0});class Yd{constructor(e={},t={},r={}){void 0===e&&(e=null);const i=ph(t,"Second parameter"),n=ph(r,"Third parameter"),a=function(e,t){hu(e,t);const r=null==e?void 0:e.flush,i=null==e?void 0:e.readableType,n=null==e?void 0:e.start,a=null==e?void 0:e.transform,s=null==e?void 0:e.writableType;return{flush:void 0===r?void 0:Vd(r,e,t+" has member 'flush' that"),readableType:i,start:void 0===n?void 0:$d(n,e,t+" has member 'start' that"),transform:void 0===a?void 0:Zd(a,e,t+" has member 'transform' that"),writableType:s}}(e,"First parameter");if(void 0!==a.readableType)throw new RangeError("Invalid readableType specified");if(void 0!==a.writableType)throw new RangeError("Invalid writableType specified");const s=fh(n,0),o=lh(n),c=fh(i,1),u=lh(i);let h;!function(e,t,r,i,n,a){function s(){return t}function o(t){return function(e,t){const r=e._transformStreamController;if(e._backpressure){return Wc(e._backpressureChangePromise,(()=>{const i=e._writable;if("erroring"===i._state)throw i._storedError;return sf(r,t)}))}return sf(r,t)}(e,t)}function c(t){return function(e,t){return Qd(e,t),qc(void 0)}(e,t)}function u(){return function(e){const t=e._readable,r=e._transformStreamController,i=r._flushAlgorithm();return nf(r),Wc(i,(()=>{if("errored"===t._state)throw t._storedError;bd(t._readableStreamController)}),(r=>{throw Qd(e,r),t._storedError}))}(e)}function h(){return function(e){return ef(e,!1),e._backpressureChangePromise}(e)}function d(t){return Jd(e,t),qc(void 0)}e._writable=function(e,t,r,i,n=1,a=(()=>1)){const s=Object.create(_h.prototype);return Ah(s),jh(s,Object.create(Lh.prototype),e,t,r,i,n,a),s}(s,o,u,c,r,i),e._readable=Kd(s,h,d,n,a),e._backpressure=void 0,e._backpressureChangePromise=void 0,e._backpressureChangePromise_resolve=void 0,ef(e,!0),e._transformStreamController=void 0}(this,zc((e=>{h=e})),c,u,s,o),function(e,t){const r=Object.create(tf.prototype);let i=e=>{try{return af(r,e),qc(void 0)}catch(e){return Oc(e)}},n=()=>qc(void 0);void 0!==t.transform&&(i=e=>t.transform(e,r));void 0!==t.flush&&(n=()=>t.flush(r));!function(e,t,r,i){t._controlledTransformStream=e,e._transformStreamController=t,t._transformAlgorithm=r,t._flushAlgorithm=i}(e,r,i,n)}(this,a),void 0!==a.start?h(a.start(this._transformStreamController)):h(void 0)}get readable(){if(!Xd(this))throw cf("readable");return this._readable}get writable(){if(!Xd(this))throw cf("writable");return this._writable}}function Xd(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_transformStreamController")}function Qd(e,t){gd(e._readable._readableStreamController,t),Jd(e,t)}function Jd(e,t){nf(e._transformStreamController),Vh(e._writable._writableStreamController,t),e._backpressure&&ef(e,!1)}function ef(e,t){void 0!==e._backpressureChangePromise&&e._backpressureChangePromise_resolve(),e._backpressureChangePromise=zc((t=>{e._backpressureChangePromise_resolve=t})),e._backpressure=t}Object.defineProperties(Yd.prototype,{readable:{enumerable:!0},writable:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(Yd.prototype,Mc.toStringTag,{value:"TransformStream",configurable:!0});class tf{constructor(){throw new TypeError("Illegal constructor")}get desiredSize(){if(!rf(this))throw of("desiredSize");return wd(this._controlledTransformStream._readable._readableStreamController)}enqueue(e){if(!rf(this))throw of("enqueue");af(this,e)}error(e){if(!rf(this))throw of("error");var t;t=e,Qd(this._controlledTransformStream,t)}terminate(){if(!rf(this))throw of("terminate");!function(e){const t=e._controlledTransformStream;bd(t._readable._readableStreamController);Jd(t,new TypeError("TransformStream terminated"))}(this)}}function rf(e){return!!Dc(e)&&!!Object.prototype.hasOwnProperty.call(e,"_controlledTransformStream")}function nf(e){e._transformAlgorithm=void 0,e._flushAlgorithm=void 0}function af(e,t){const r=e._controlledTransformStream,i=r._readable._readableStreamController;if(!vd(i))throw new TypeError("Readable side is not in a state that permits enqueue");try{md(i,t)}catch(e){throw Jd(r,e),r._readable._storedError}(function(e){return!pd(e)})(i)!==r._backpressure&&ef(r,!0)}function sf(e,t){return Wc(e._transformAlgorithm(t),void 0,(t=>{throw Qd(e._controlledTransformStream,t),t}))}function of(e){return new TypeError(`TransformStreamDefaultController.prototype.${e} can only be used on a TransformStreamDefaultController`)}function cf(e){return new TypeError(`TransformStream.prototype.${e} can only be used on a TransformStream`)}Object.defineProperties(tf.prototype,{enqueue:{enumerable:!0},error:{enumerable:!0},terminate:{enumerable:!0},desiredSize:{enumerable:!0}}),"symbol"==typeof Mc.toStringTag&&Object.defineProperty(tf.prototype,Mc.toStringTag,{value:"TransformStreamDefaultController",configurable:!0});var uf=/*#__PURE__*/Object.freeze({__proto__:null,ByteLengthQueuingStrategy:Fd,CountQueuingStrategy:Wd,ReadableByteStreamController:Fu,ReadableStream:Cd,ReadableStreamBYOBReader:uh,ReadableStreamBYOBRequest:Ou,ReadableStreamDefaultController:dd,ReadableStreamDefaultReader:Su,TransformStream:Yd,TransformStreamDefaultController:tf,WritableStream:_h,WritableStreamDefaultController:Lh,WritableStreamDefaultWriter:Uh}),hf=function(e,t){return(hf=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)};
/*! *****************************************************************************
  Copyright (c) Microsoft Corporation.

  Permission to use, copy, modify, and/or distribute this software for any
  purpose with or without fee is hereby granted.

  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  PERFORMANCE OF THIS SOFTWARE.
  ***************************************************************************** */function df(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+t+" is not a constructor or null");function r(){this.constructor=e}hf(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function ff(e){if(!e)throw new TypeError("Assertion failed")}function lf(){}function pf(e){return"object"==typeof e&&null!==e||"function"==typeof e}function yf(e){if("function"!=typeof e)return!1;var t=!1;try{new e({start:function(){t=!0}})}catch(e){}return t}function bf(e){return!!pf(e)&&"function"==typeof e.getReader}function mf(e){return!!pf(e)&&"function"==typeof e.getWriter}function gf(e){return!!pf(e)&&(!!bf(e.readable)&&!!mf(e.writable))}function wf(e){try{return e.getReader({mode:"byob"}).releaseLock(),!0}catch(e){return!1}}function vf(e,t){var r=(void 0===t?{}:t).type;return ff(bf(e)),ff(!1===e.locked),"bytes"===(r=_f(r))?new Ef(e):new Af(e)}function _f(e){var t=e+"";if("bytes"===t)return t;if(void 0===e)return e;throw new RangeError("Invalid type is specified")}var kf=function(){function e(e){this._underlyingReader=void 0,this._readerMode=void 0,this._readableStreamController=void 0,this._pendingRead=void 0,this._underlyingStream=e,this._attachDefaultReader()}return e.prototype.start=function(e){this._readableStreamController=e},e.prototype.cancel=function(e){return ff(void 0!==this._underlyingReader),this._underlyingReader.cancel(e)},e.prototype._attachDefaultReader=function(){if("default"!==this._readerMode){this._detachReader();var e=this._underlyingStream.getReader();this._readerMode="default",this._attachReader(e)}},e.prototype._attachReader=function(e){var t=this;ff(void 0===this._underlyingReader),this._underlyingReader=e;var r=this._underlyingReader.closed;r&&r.then((function(){return t._finishPendingRead()})).then((function(){e===t._underlyingReader&&t._readableStreamController.close()}),(function(r){e===t._underlyingReader&&t._readableStreamController.error(r)})).catch(lf)},e.prototype._detachReader=function(){void 0!==this._underlyingReader&&(this._underlyingReader.releaseLock(),this._underlyingReader=void 0,this._readerMode=void 0)},e.prototype._pullWithDefaultReader=function(){var e=this;this._attachDefaultReader();var t=this._underlyingReader.read().then((function(t){var r=e._readableStreamController;t.done?e._tryClose():r.enqueue(t.value)}));return this._setPendingRead(t),t},e.prototype._tryClose=function(){try{this._readableStreamController.close()}catch(e){}},e.prototype._setPendingRead=function(e){var t,r=this,i=function(){r._pendingRead===t&&(r._pendingRead=void 0)};this._pendingRead=t=e.then(i,i)},e.prototype._finishPendingRead=function(){var e=this;if(this._pendingRead){var t=function(){return e._finishPendingRead()};return this._pendingRead.then(t,t)}},e}(),Af=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return df(t,e),t.prototype.pull=function(){return this._pullWithDefaultReader()},t}(kf);function Sf(e){return new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}var Ef=function(e){function t(t){var r=this,i=wf(t);return(r=e.call(this,t)||this)._supportsByob=i,r}return df(t,e),Object.defineProperty(t.prototype,"type",{get:function(){return"bytes"},enumerable:!1,configurable:!0}),t.prototype._attachByobReader=function(){if("byob"!==this._readerMode){ff(this._supportsByob),this._detachReader();var e=this._underlyingStream.getReader({mode:"byob"});this._readerMode="byob",this._attachReader(e)}},t.prototype.pull=function(){if(this._supportsByob){var e=this._readableStreamController.byobRequest;if(e)return this._pullWithByobRequest(e)}return this._pullWithDefaultReader()},t.prototype._pullWithByobRequest=function(e){var t=this;this._attachByobReader();var r=new Uint8Array(e.view.byteLength),i=this._underlyingReader.read(r).then((function(r){var i,n,a;t._readableStreamController,r.done?(t._tryClose(),e.respond(0)):(i=r.value,n=e.view,a=Sf(i),Sf(n).set(a,0),e.respond(r.value.byteLength))}));return this._setPendingRead(i),i},t}(kf);function Pf(e){ff(mf(e)),ff(!1===e.locked);var t=e.getWriter();return new xf(t)}var xf=function(){function e(e){var t=this;this._writableStreamController=void 0,this._pendingWrite=void 0,this._state="writable",this._storedError=void 0,this._underlyingWriter=e,this._errorPromise=new Promise((function(e,r){t._errorPromiseReject=r})),this._errorPromise.catch(lf)}return e.prototype.start=function(e){var t=this;this._writableStreamController=e,this._underlyingWriter.closed.then((function(){t._state="closed"})).catch((function(e){return t._finishErroring(e)}))},e.prototype.write=function(e){var t=this,r=this._underlyingWriter;if(null===r.desiredSize)return r.ready;var i=r.write(e);i.catch((function(e){return t._finishErroring(e)})),r.ready.catch((function(e){return t._startErroring(e)}));var n=Promise.race([i,this._errorPromise]);return this._setPendingWrite(n),n},e.prototype.close=function(){var e=this;return void 0===this._pendingWrite?this._underlyingWriter.close():this._finishPendingWrite().then((function(){return e.close()}))},e.prototype.abort=function(e){if("errored"!==this._state)return this._underlyingWriter.abort(e)},e.prototype._setPendingWrite=function(e){var t,r=this,i=function(){r._pendingWrite===t&&(r._pendingWrite=void 0)};this._pendingWrite=t=e.then(i,i)},e.prototype._finishPendingWrite=function(){var e=this;if(void 0===this._pendingWrite)return Promise.resolve();var t=function(){return e._finishPendingWrite()};return this._pendingWrite.then(t,t)},e.prototype._startErroring=function(e){var t=this;if("writable"===this._state){this._state="erroring",this._storedError=e;var r=function(){return t._finishErroring(e)};void 0===this._pendingWrite?r():this._finishPendingWrite().then(r,r),this._writableStreamController.error(e)}},e.prototype._finishErroring=function(e){"writable"===this._state&&this._startErroring(e),"erroring"===this._state&&(this._state="errored",this._errorPromiseReject(this._storedError))},e}();function Mf(e){ff(gf(e));var t=e.readable,r=e.writable;ff(!1===t.locked),ff(!1===r.locked);var i,n=t.getReader();try{i=r.getWriter()}catch(e){throw n.releaseLock(),e}return new Cf(n,i)}var Cf=function(){function e(e,t){var r=this;this._transformStreamController=void 0,this._onRead=function(e){if(!e.done)return r._transformStreamController.enqueue(e.value),r._reader.read().then(r._onRead)},this._onError=function(e){r._flushReject(e),r._transformStreamController.error(e),r._reader.cancel(e).catch(lf),r._writer.abort(e).catch(lf)},this._onTerminate=function(){r._flushResolve(),r._transformStreamController.terminate();var e=new TypeError("TransformStream terminated");r._writer.abort(e).catch(lf)},this._reader=e,this._writer=t,this._flushPromise=new Promise((function(e,t){r._flushResolve=e,r._flushReject=t}))}return e.prototype.start=function(e){this._transformStreamController=e,this._reader.read().then(this._onRead).then(this._onTerminate,this._onError);var t=this._reader.closed;t&&t.then(this._onTerminate,this._onError)},e.prototype.transform=function(e){return this._writer.write(e)},e.prototype.flush=function(){var e=this;return this._writer.close().then((function(){return e._flushPromise}))},e}(),Kf=/*#__PURE__*/Object.freeze({__proto__:null,createReadableStreamWrapper:function(e){ff(function(e){return!!yf(e)&&!!bf(new e)}(e));var t=function(e){try{return new e({type:"bytes"}),!0}catch(e){return!1}}(e);return function(r,i){var n=(void 0===i?{}:i).type;if("bytes"!==(n=_f(n))||t||(n=void 0),r.constructor===e&&("bytes"!==n||wf(r)))return r;if("bytes"===n){var a=vf(r,{type:n});return new e(a)}a=vf(r);return new e(a)}},createTransformStreamWrapper:function(e){return ff(function(e){return!!yf(e)&&!!gf(new e)}(e)),function(t){if(t.constructor===e)return t;var r=Mf(t);return new e(r)}},createWrappingReadableSource:vf,createWrappingTransformer:Mf,createWrappingWritableSink:Pf,createWritableStreamWrapper:function(e){return ff(function(e){return!!yf(e)&&!!mf(new e)}(e)),function(t){if(t.constructor===e)return t;var r=Pf(t);return new e(r)}}}),Df=tt((function(e){!function(e,t){function r(e,t){if(!e)throw Error(t||"Assertion failed")}function i(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function n(e,t,r){if(n.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(r=t,t=10),this._init(e||0,t||10,r||"be"))}var a;"object"==typeof e?e.exports=n:t.BN=n,n.BN=n,n.wordSize=26;try{a=void 0}catch(e){}function s(e,t,r){for(var i=0,n=Math.min(e.length,r),a=t;a<n;a++){var s=e.charCodeAt(a)-48;i<<=4,i|=s>=49&&s<=54?s-49+10:s>=17&&s<=22?s-17+10:15&s}return i}function o(e,t,r,i){for(var n=0,a=Math.min(e.length,r),s=t;s<a;s++){var o=e.charCodeAt(s)-48;n*=i,n+=o>=49?o-49+10:o>=17?o-17+10:o}return n}n.isBN=function(e){return e instanceof n||null!==e&&"object"==typeof e&&e.constructor.wordSize===n.wordSize&&Array.isArray(e.words)},n.max=function(e,t){return e.cmp(t)>0?e:t},n.min=function(e,t){return e.cmp(t)<0?e:t},n.prototype._init=function(e,t,i){if("number"==typeof e)return this._initNumber(e,t,i);if("object"==typeof e)return this._initArray(e,t,i);"hex"===t&&(t=16),r(t===(0|t)&&t>=2&&t<=36);var n=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&n++,16===t?this._parseHex(e,n):this._parseBase(e,t,n),"-"===e[0]&&(this.negative=1),this.strip(),"le"===i&&this._initArray(this.toArray(),t,i)},n.prototype._initNumber=function(e,t,i){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(r(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===i&&this._initArray(this.toArray(),t,i)},n.prototype._initArray=function(e,t,i){if(r("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var a,s,o=0;if("be"===i)for(n=e.length-1,a=0;n>=0;n-=3)s=e[n]|e[n-1]<<8|e[n-2]<<16,this.words[a]|=s<<o&67108863,this.words[a+1]=s>>>26-o&67108863,(o+=24)>=26&&(o-=26,a++);else if("le"===i)for(n=0,a=0;n<e.length;n+=3)s=e[n]|e[n+1]<<8|e[n+2]<<16,this.words[a]|=s<<o&67108863,this.words[a+1]=s>>>26-o&67108863,(o+=24)>=26&&(o-=26,a++);return this.strip()},n.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var i,n,a=0;for(r=e.length-6,i=0;r>=t;r-=6)n=s(e,r,r+6),this.words[i]|=n<<a&67108863,this.words[i+1]|=n>>>26-a&4194303,(a+=24)>=26&&(a-=26,i++);r+6!==t&&(n=s(e,t,r+6),this.words[i]|=n<<a&67108863,this.words[i+1]|=n>>>26-a&4194303),this.strip()},n.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var i=0,n=1;n<=67108863;n*=t)i++;i--,n=n/t|0;for(var a=e.length-r,s=a%i,c=Math.min(a,a-s)+r,u=0,h=r;h<c;h+=i)u=o(e,h,h+i,t),this.imuln(n),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==s){var d=1;for(u=o(e,h,e.length,t),h=0;h<s;h++)d*=t;this.imuln(d),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},n.prototype.copy=function(e){e.words=Array(this.length);for(var t=0;t<this.length;t++)e.words[t]=this.words[t];e.length=this.length,e.negative=this.negative,e.red=this.red},n.prototype.clone=function(){var e=new n(null);return this.copy(e),e},n.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],u=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function d(e,t,r){r.negative=t.negative^e.negative;var i=e.length+t.length|0;r.length=i,i=i-1|0;var n=0|e.words[0],a=0|t.words[0],s=n*a,o=67108863&s,c=s/67108864|0;r.words[0]=o;for(var u=1;u<i;u++){for(var h=c>>>26,d=67108863&c,f=Math.min(u,t.length-1),l=Math.max(0,u-e.length+1);l<=f;l++){var p=u-l|0;h+=(s=(n=0|e.words[p])*(a=0|t.words[l])+d)/67108864|0,d=67108863&s}r.words[u]=0|d,c=0|h}return 0!==c?r.words[u]=0|c:r.length--,r.strip()}n.prototype.toString=function(e,t){var i;if(t=0|t||1,16===(e=e||10)||"hex"===e){i="";for(var n=0,a=0,s=0;s<this.length;s++){var o=this.words[s],d=(16777215&(o<<n|a)).toString(16);i=0!==(a=o>>>24-n&16777215)||s!==this.length-1?c[6-d.length]+d+i:d+i,(n+=2)>=26&&(n-=26,s--)}for(0!==a&&(i=a.toString(16)+i);i.length%t!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}if(e===(0|e)&&e>=2&&e<=36){var f=u[e],l=h[e];i="";var p=this.clone();for(p.negative=0;!p.isZero();){var y=p.modn(l).toString(e);i=(p=p.idivn(l)).isZero()?y+i:c[f-y.length]+y+i}for(this.isZero()&&(i="0"+i);i.length%t!=0;)i="0"+i;return 0!==this.negative&&(i="-"+i),i}r(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&r(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(e,t){return r(void 0!==a),this.toArrayLike(a,e,t)},n.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},n.prototype.toArrayLike=function(e,t,i){var n=this.byteLength(),a=i||Math.max(1,n);r(n<=a,"byte array longer than desired length"),r(a>0,"Requested array length <= 0"),this.strip();var s,o,c="le"===t,u=new e(a),h=this.clone();if(c){for(o=0;!h.isZero();o++)s=h.andln(255),h.iushrn(8),u[o]=s;for(;o<a;o++)u[o]=0}else{for(o=0;o<a-n;o++)u[o]=0;for(o=0;!h.isZero();o++)s=h.andln(255),h.iushrn(8),u[a-o-1]=s}return u},n.prototype._countBits=Math.clz32?function(e){return 32-Math.clz32(e)}:function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},n.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},n.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;t<this.length;t++){var r=this._zeroBits(this.words[t]);if(e+=r,26!==r)break}return e},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(e){return 0!==this.negative?this.abs().inotn(e).iaddn(1):this.clone()},n.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]|e.words[t];return this.strip()},n.prototype.ior=function(e){return r(0==(this.negative|e.negative)),this.iuor(e)},n.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},n.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},n.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;r<t.length;r++)this.words[r]=this.words[r]&e.words[r];return this.length=t.length,this.strip()},n.prototype.iand=function(e){return r(0==(this.negative|e.negative)),this.iuand(e)},n.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},n.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},n.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var i=0;i<r.length;i++)this.words[i]=t.words[i]^r.words[i];if(this!==t)for(;i<t.length;i++)this.words[i]=t.words[i];return this.length=t.length,this.strip()},n.prototype.ixor=function(e){return r(0==(this.negative|e.negative)),this.iuxor(e)},n.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},n.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},n.prototype.inotn=function(e){r("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),i=e%26;this._expand(t),i>0&&t--;for(var n=0;n<t;n++)this.words[n]=67108863&~this.words[n];return i>0&&(this.words[n]=~this.words[n]&67108863>>26-i),this.strip()},n.prototype.notn=function(e){return this.clone().inotn(e)},n.prototype.setn=function(e,t){r("number"==typeof e&&e>=0);var i=e/26|0,n=e%26;return this._expand(i+1),this.words[i]=t?this.words[i]|1<<n:this.words[i]&~(1<<n),this.strip()},n.prototype.iadd=function(e){var t,r,i;if(0!==this.negative&&0===e.negative)return this.negative=0,t=this.isub(e),this.negative^=1,this._normSign();if(0===this.negative&&0!==e.negative)return e.negative=0,t=this.isub(e),e.negative=1,t._normSign();this.length>e.length?(r=this,i=e):(r=e,i=this);for(var n=0,a=0;a<i.length;a++)t=(0|r.words[a])+(0|i.words[a])+n,this.words[a]=67108863&t,n=t>>>26;for(;0!==n&&a<r.length;a++)t=(0|r.words[a])+n,this.words[a]=67108863&t,n=t>>>26;if(this.length=r.length,0!==n)this.words[this.length]=n,this.length++;else if(r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this},n.prototype.add=function(e){var t;return 0!==e.negative&&0===this.negative?(e.negative=0,t=this.sub(e),e.negative^=1,t):0===e.negative&&0!==this.negative?(this.negative=0,t=e.sub(this),this.negative=1,t):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},n.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,i,n=this.cmp(e);if(0===n)return this.negative=0,this.length=1,this.words[0]=0,this;n>0?(r=this,i=e):(r=e,i=this);for(var a=0,s=0;s<i.length;s++)a=(t=(0|r.words[s])-(0|i.words[s])+a)>>26,this.words[s]=67108863&t;for(;0!==a&&s<r.length;s++)a=(t=(0|r.words[s])+a)>>26,this.words[s]=67108863&t;if(0===a&&s<r.length&&r!==this)for(;s<r.length;s++)this.words[s]=r.words[s];return this.length=Math.max(this.length,s),r!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(e){return this.clone().isub(e)};var f=function(e,t,r){var i,n,a,s=e.words,o=t.words,c=r.words,u=0,h=0|s[0],d=8191&h,f=h>>>13,l=0|s[1],p=8191&l,y=l>>>13,b=0|s[2],m=8191&b,g=b>>>13,w=0|s[3],v=8191&w,_=w>>>13,k=0|s[4],A=8191&k,S=k>>>13,E=0|s[5],P=8191&E,x=E>>>13,M=0|s[6],C=8191&M,K=M>>>13,D=0|s[7],R=8191&D,I=D>>>13,U=0|s[8],B=8191&U,T=U>>>13,z=0|s[9],q=8191&z,O=z>>>13,F=0|o[0],N=8191&F,L=F>>>13,j=0|o[1],W=8191&j,H=j>>>13,G=0|o[2],V=8191&G,$=G>>>13,Z=0|o[3],Y=8191&Z,X=Z>>>13,Q=0|o[4],J=8191&Q,ee=Q>>>13,te=0|o[5],re=8191&te,ie=te>>>13,ne=0|o[6],ae=8191&ne,se=ne>>>13,oe=0|o[7],ce=8191&oe,ue=oe>>>13,he=0|o[8],de=8191&he,fe=he>>>13,le=0|o[9],pe=8191&le,ye=le>>>13;r.negative=e.negative^t.negative,r.length=19;var be=(u+(i=Math.imul(d,N))|0)+((8191&(n=(n=Math.imul(d,L))+Math.imul(f,N)|0))<<13)|0;u=((a=Math.imul(f,L))+(n>>>13)|0)+(be>>>26)|0,be&=67108863,i=Math.imul(p,N),n=(n=Math.imul(p,L))+Math.imul(y,N)|0,a=Math.imul(y,L);var me=(u+(i=i+Math.imul(d,W)|0)|0)+((8191&(n=(n=n+Math.imul(d,H)|0)+Math.imul(f,W)|0))<<13)|0;u=((a=a+Math.imul(f,H)|0)+(n>>>13)|0)+(me>>>26)|0,me&=67108863,i=Math.imul(m,N),n=(n=Math.imul(m,L))+Math.imul(g,N)|0,a=Math.imul(g,L),i=i+Math.imul(p,W)|0,n=(n=n+Math.imul(p,H)|0)+Math.imul(y,W)|0,a=a+Math.imul(y,H)|0;var ge=(u+(i=i+Math.imul(d,V)|0)|0)+((8191&(n=(n=n+Math.imul(d,$)|0)+Math.imul(f,V)|0))<<13)|0;u=((a=a+Math.imul(f,$)|0)+(n>>>13)|0)+(ge>>>26)|0,ge&=67108863,i=Math.imul(v,N),n=(n=Math.imul(v,L))+Math.imul(_,N)|0,a=Math.imul(_,L),i=i+Math.imul(m,W)|0,n=(n=n+Math.imul(m,H)|0)+Math.imul(g,W)|0,a=a+Math.imul(g,H)|0,i=i+Math.imul(p,V)|0,n=(n=n+Math.imul(p,$)|0)+Math.imul(y,V)|0,a=a+Math.imul(y,$)|0;var we=(u+(i=i+Math.imul(d,Y)|0)|0)+((8191&(n=(n=n+Math.imul(d,X)|0)+Math.imul(f,Y)|0))<<13)|0;u=((a=a+Math.imul(f,X)|0)+(n>>>13)|0)+(we>>>26)|0,we&=67108863,i=Math.imul(A,N),n=(n=Math.imul(A,L))+Math.imul(S,N)|0,a=Math.imul(S,L),i=i+Math.imul(v,W)|0,n=(n=n+Math.imul(v,H)|0)+Math.imul(_,W)|0,a=a+Math.imul(_,H)|0,i=i+Math.imul(m,V)|0,n=(n=n+Math.imul(m,$)|0)+Math.imul(g,V)|0,a=a+Math.imul(g,$)|0,i=i+Math.imul(p,Y)|0,n=(n=n+Math.imul(p,X)|0)+Math.imul(y,Y)|0,a=a+Math.imul(y,X)|0;var ve=(u+(i=i+Math.imul(d,J)|0)|0)+((8191&(n=(n=n+Math.imul(d,ee)|0)+Math.imul(f,J)|0))<<13)|0;u=((a=a+Math.imul(f,ee)|0)+(n>>>13)|0)+(ve>>>26)|0,ve&=67108863,i=Math.imul(P,N),n=(n=Math.imul(P,L))+Math.imul(x,N)|0,a=Math.imul(x,L),i=i+Math.imul(A,W)|0,n=(n=n+Math.imul(A,H)|0)+Math.imul(S,W)|0,a=a+Math.imul(S,H)|0,i=i+Math.imul(v,V)|0,n=(n=n+Math.imul(v,$)|0)+Math.imul(_,V)|0,a=a+Math.imul(_,$)|0,i=i+Math.imul(m,Y)|0,n=(n=n+Math.imul(m,X)|0)+Math.imul(g,Y)|0,a=a+Math.imul(g,X)|0,i=i+Math.imul(p,J)|0,n=(n=n+Math.imul(p,ee)|0)+Math.imul(y,J)|0,a=a+Math.imul(y,ee)|0;var _e=(u+(i=i+Math.imul(d,re)|0)|0)+((8191&(n=(n=n+Math.imul(d,ie)|0)+Math.imul(f,re)|0))<<13)|0;u=((a=a+Math.imul(f,ie)|0)+(n>>>13)|0)+(_e>>>26)|0,_e&=67108863,i=Math.imul(C,N),n=(n=Math.imul(C,L))+Math.imul(K,N)|0,a=Math.imul(K,L),i=i+Math.imul(P,W)|0,n=(n=n+Math.imul(P,H)|0)+Math.imul(x,W)|0,a=a+Math.imul(x,H)|0,i=i+Math.imul(A,V)|0,n=(n=n+Math.imul(A,$)|0)+Math.imul(S,V)|0,a=a+Math.imul(S,$)|0,i=i+Math.imul(v,Y)|0,n=(n=n+Math.imul(v,X)|0)+Math.imul(_,Y)|0,a=a+Math.imul(_,X)|0,i=i+Math.imul(m,J)|0,n=(n=n+Math.imul(m,ee)|0)+Math.imul(g,J)|0,a=a+Math.imul(g,ee)|0,i=i+Math.imul(p,re)|0,n=(n=n+Math.imul(p,ie)|0)+Math.imul(y,re)|0,a=a+Math.imul(y,ie)|0;var ke=(u+(i=i+Math.imul(d,ae)|0)|0)+((8191&(n=(n=n+Math.imul(d,se)|0)+Math.imul(f,ae)|0))<<13)|0;u=((a=a+Math.imul(f,se)|0)+(n>>>13)|0)+(ke>>>26)|0,ke&=67108863,i=Math.imul(R,N),n=(n=Math.imul(R,L))+Math.imul(I,N)|0,a=Math.imul(I,L),i=i+Math.imul(C,W)|0,n=(n=n+Math.imul(C,H)|0)+Math.imul(K,W)|0,a=a+Math.imul(K,H)|0,i=i+Math.imul(P,V)|0,n=(n=n+Math.imul(P,$)|0)+Math.imul(x,V)|0,a=a+Math.imul(x,$)|0,i=i+Math.imul(A,Y)|0,n=(n=n+Math.imul(A,X)|0)+Math.imul(S,Y)|0,a=a+Math.imul(S,X)|0,i=i+Math.imul(v,J)|0,n=(n=n+Math.imul(v,ee)|0)+Math.imul(_,J)|0,a=a+Math.imul(_,ee)|0,i=i+Math.imul(m,re)|0,n=(n=n+Math.imul(m,ie)|0)+Math.imul(g,re)|0,a=a+Math.imul(g,ie)|0,i=i+Math.imul(p,ae)|0,n=(n=n+Math.imul(p,se)|0)+Math.imul(y,ae)|0,a=a+Math.imul(y,se)|0;var Ae=(u+(i=i+Math.imul(d,ce)|0)|0)+((8191&(n=(n=n+Math.imul(d,ue)|0)+Math.imul(f,ce)|0))<<13)|0;u=((a=a+Math.imul(f,ue)|0)+(n>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,i=Math.imul(B,N),n=(n=Math.imul(B,L))+Math.imul(T,N)|0,a=Math.imul(T,L),i=i+Math.imul(R,W)|0,n=(n=n+Math.imul(R,H)|0)+Math.imul(I,W)|0,a=a+Math.imul(I,H)|0,i=i+Math.imul(C,V)|0,n=(n=n+Math.imul(C,$)|0)+Math.imul(K,V)|0,a=a+Math.imul(K,$)|0,i=i+Math.imul(P,Y)|0,n=(n=n+Math.imul(P,X)|0)+Math.imul(x,Y)|0,a=a+Math.imul(x,X)|0,i=i+Math.imul(A,J)|0,n=(n=n+Math.imul(A,ee)|0)+Math.imul(S,J)|0,a=a+Math.imul(S,ee)|0,i=i+Math.imul(v,re)|0,n=(n=n+Math.imul(v,ie)|0)+Math.imul(_,re)|0,a=a+Math.imul(_,ie)|0,i=i+Math.imul(m,ae)|0,n=(n=n+Math.imul(m,se)|0)+Math.imul(g,ae)|0,a=a+Math.imul(g,se)|0,i=i+Math.imul(p,ce)|0,n=(n=n+Math.imul(p,ue)|0)+Math.imul(y,ce)|0,a=a+Math.imul(y,ue)|0;var Se=(u+(i=i+Math.imul(d,de)|0)|0)+((8191&(n=(n=n+Math.imul(d,fe)|0)+Math.imul(f,de)|0))<<13)|0;u=((a=a+Math.imul(f,fe)|0)+(n>>>13)|0)+(Se>>>26)|0,Se&=67108863,i=Math.imul(q,N),n=(n=Math.imul(q,L))+Math.imul(O,N)|0,a=Math.imul(O,L),i=i+Math.imul(B,W)|0,n=(n=n+Math.imul(B,H)|0)+Math.imul(T,W)|0,a=a+Math.imul(T,H)|0,i=i+Math.imul(R,V)|0,n=(n=n+Math.imul(R,$)|0)+Math.imul(I,V)|0,a=a+Math.imul(I,$)|0,i=i+Math.imul(C,Y)|0,n=(n=n+Math.imul(C,X)|0)+Math.imul(K,Y)|0,a=a+Math.imul(K,X)|0,i=i+Math.imul(P,J)|0,n=(n=n+Math.imul(P,ee)|0)+Math.imul(x,J)|0,a=a+Math.imul(x,ee)|0,i=i+Math.imul(A,re)|0,n=(n=n+Math.imul(A,ie)|0)+Math.imul(S,re)|0,a=a+Math.imul(S,ie)|0,i=i+Math.imul(v,ae)|0,n=(n=n+Math.imul(v,se)|0)+Math.imul(_,ae)|0,a=a+Math.imul(_,se)|0,i=i+Math.imul(m,ce)|0,n=(n=n+Math.imul(m,ue)|0)+Math.imul(g,ce)|0,a=a+Math.imul(g,ue)|0,i=i+Math.imul(p,de)|0,n=(n=n+Math.imul(p,fe)|0)+Math.imul(y,de)|0,a=a+Math.imul(y,fe)|0;var Ee=(u+(i=i+Math.imul(d,pe)|0)|0)+((8191&(n=(n=n+Math.imul(d,ye)|0)+Math.imul(f,pe)|0))<<13)|0;u=((a=a+Math.imul(f,ye)|0)+(n>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,i=Math.imul(q,W),n=(n=Math.imul(q,H))+Math.imul(O,W)|0,a=Math.imul(O,H),i=i+Math.imul(B,V)|0,n=(n=n+Math.imul(B,$)|0)+Math.imul(T,V)|0,a=a+Math.imul(T,$)|0,i=i+Math.imul(R,Y)|0,n=(n=n+Math.imul(R,X)|0)+Math.imul(I,Y)|0,a=a+Math.imul(I,X)|0,i=i+Math.imul(C,J)|0,n=(n=n+Math.imul(C,ee)|0)+Math.imul(K,J)|0,a=a+Math.imul(K,ee)|0,i=i+Math.imul(P,re)|0,n=(n=n+Math.imul(P,ie)|0)+Math.imul(x,re)|0,a=a+Math.imul(x,ie)|0,i=i+Math.imul(A,ae)|0,n=(n=n+Math.imul(A,se)|0)+Math.imul(S,ae)|0,a=a+Math.imul(S,se)|0,i=i+Math.imul(v,ce)|0,n=(n=n+Math.imul(v,ue)|0)+Math.imul(_,ce)|0,a=a+Math.imul(_,ue)|0,i=i+Math.imul(m,de)|0,n=(n=n+Math.imul(m,fe)|0)+Math.imul(g,de)|0,a=a+Math.imul(g,fe)|0;var Pe=(u+(i=i+Math.imul(p,pe)|0)|0)+((8191&(n=(n=n+Math.imul(p,ye)|0)+Math.imul(y,pe)|0))<<13)|0;u=((a=a+Math.imul(y,ye)|0)+(n>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,i=Math.imul(q,V),n=(n=Math.imul(q,$))+Math.imul(O,V)|0,a=Math.imul(O,$),i=i+Math.imul(B,Y)|0,n=(n=n+Math.imul(B,X)|0)+Math.imul(T,Y)|0,a=a+Math.imul(T,X)|0,i=i+Math.imul(R,J)|0,n=(n=n+Math.imul(R,ee)|0)+Math.imul(I,J)|0,a=a+Math.imul(I,ee)|0,i=i+Math.imul(C,re)|0,n=(n=n+Math.imul(C,ie)|0)+Math.imul(K,re)|0,a=a+Math.imul(K,ie)|0,i=i+Math.imul(P,ae)|0,n=(n=n+Math.imul(P,se)|0)+Math.imul(x,ae)|0,a=a+Math.imul(x,se)|0,i=i+Math.imul(A,ce)|0,n=(n=n+Math.imul(A,ue)|0)+Math.imul(S,ce)|0,a=a+Math.imul(S,ue)|0,i=i+Math.imul(v,de)|0,n=(n=n+Math.imul(v,fe)|0)+Math.imul(_,de)|0,a=a+Math.imul(_,fe)|0;var xe=(u+(i=i+Math.imul(m,pe)|0)|0)+((8191&(n=(n=n+Math.imul(m,ye)|0)+Math.imul(g,pe)|0))<<13)|0;u=((a=a+Math.imul(g,ye)|0)+(n>>>13)|0)+(xe>>>26)|0,xe&=67108863,i=Math.imul(q,Y),n=(n=Math.imul(q,X))+Math.imul(O,Y)|0,a=Math.imul(O,X),i=i+Math.imul(B,J)|0,n=(n=n+Math.imul(B,ee)|0)+Math.imul(T,J)|0,a=a+Math.imul(T,ee)|0,i=i+Math.imul(R,re)|0,n=(n=n+Math.imul(R,ie)|0)+Math.imul(I,re)|0,a=a+Math.imul(I,ie)|0,i=i+Math.imul(C,ae)|0,n=(n=n+Math.imul(C,se)|0)+Math.imul(K,ae)|0,a=a+Math.imul(K,se)|0,i=i+Math.imul(P,ce)|0,n=(n=n+Math.imul(P,ue)|0)+Math.imul(x,ce)|0,a=a+Math.imul(x,ue)|0,i=i+Math.imul(A,de)|0,n=(n=n+Math.imul(A,fe)|0)+Math.imul(S,de)|0,a=a+Math.imul(S,fe)|0;var Me=(u+(i=i+Math.imul(v,pe)|0)|0)+((8191&(n=(n=n+Math.imul(v,ye)|0)+Math.imul(_,pe)|0))<<13)|0;u=((a=a+Math.imul(_,ye)|0)+(n>>>13)|0)+(Me>>>26)|0,Me&=67108863,i=Math.imul(q,J),n=(n=Math.imul(q,ee))+Math.imul(O,J)|0,a=Math.imul(O,ee),i=i+Math.imul(B,re)|0,n=(n=n+Math.imul(B,ie)|0)+Math.imul(T,re)|0,a=a+Math.imul(T,ie)|0,i=i+Math.imul(R,ae)|0,n=(n=n+Math.imul(R,se)|0)+Math.imul(I,ae)|0,a=a+Math.imul(I,se)|0,i=i+Math.imul(C,ce)|0,n=(n=n+Math.imul(C,ue)|0)+Math.imul(K,ce)|0,a=a+Math.imul(K,ue)|0,i=i+Math.imul(P,de)|0,n=(n=n+Math.imul(P,fe)|0)+Math.imul(x,de)|0,a=a+Math.imul(x,fe)|0;var Ce=(u+(i=i+Math.imul(A,pe)|0)|0)+((8191&(n=(n=n+Math.imul(A,ye)|0)+Math.imul(S,pe)|0))<<13)|0;u=((a=a+Math.imul(S,ye)|0)+(n>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,i=Math.imul(q,re),n=(n=Math.imul(q,ie))+Math.imul(O,re)|0,a=Math.imul(O,ie),i=i+Math.imul(B,ae)|0,n=(n=n+Math.imul(B,se)|0)+Math.imul(T,ae)|0,a=a+Math.imul(T,se)|0,i=i+Math.imul(R,ce)|0,n=(n=n+Math.imul(R,ue)|0)+Math.imul(I,ce)|0,a=a+Math.imul(I,ue)|0,i=i+Math.imul(C,de)|0,n=(n=n+Math.imul(C,fe)|0)+Math.imul(K,de)|0,a=a+Math.imul(K,fe)|0;var Ke=(u+(i=i+Math.imul(P,pe)|0)|0)+((8191&(n=(n=n+Math.imul(P,ye)|0)+Math.imul(x,pe)|0))<<13)|0;u=((a=a+Math.imul(x,ye)|0)+(n>>>13)|0)+(Ke>>>26)|0,Ke&=67108863,i=Math.imul(q,ae),n=(n=Math.imul(q,se))+Math.imul(O,ae)|0,a=Math.imul(O,se),i=i+Math.imul(B,ce)|0,n=(n=n+Math.imul(B,ue)|0)+Math.imul(T,ce)|0,a=a+Math.imul(T,ue)|0,i=i+Math.imul(R,de)|0,n=(n=n+Math.imul(R,fe)|0)+Math.imul(I,de)|0,a=a+Math.imul(I,fe)|0;var De=(u+(i=i+Math.imul(C,pe)|0)|0)+((8191&(n=(n=n+Math.imul(C,ye)|0)+Math.imul(K,pe)|0))<<13)|0;u=((a=a+Math.imul(K,ye)|0)+(n>>>13)|0)+(De>>>26)|0,De&=67108863,i=Math.imul(q,ce),n=(n=Math.imul(q,ue))+Math.imul(O,ce)|0,a=Math.imul(O,ue),i=i+Math.imul(B,de)|0,n=(n=n+Math.imul(B,fe)|0)+Math.imul(T,de)|0,a=a+Math.imul(T,fe)|0;var Re=(u+(i=i+Math.imul(R,pe)|0)|0)+((8191&(n=(n=n+Math.imul(R,ye)|0)+Math.imul(I,pe)|0))<<13)|0;u=((a=a+Math.imul(I,ye)|0)+(n>>>13)|0)+(Re>>>26)|0,Re&=67108863,i=Math.imul(q,de),n=(n=Math.imul(q,fe))+Math.imul(O,de)|0,a=Math.imul(O,fe);var Ie=(u+(i=i+Math.imul(B,pe)|0)|0)+((8191&(n=(n=n+Math.imul(B,ye)|0)+Math.imul(T,pe)|0))<<13)|0;u=((a=a+Math.imul(T,ye)|0)+(n>>>13)|0)+(Ie>>>26)|0,Ie&=67108863;var Ue=(u+(i=Math.imul(q,pe))|0)+((8191&(n=(n=Math.imul(q,ye))+Math.imul(O,pe)|0))<<13)|0;return u=((a=Math.imul(O,ye))+(n>>>13)|0)+(Ue>>>26)|0,Ue&=67108863,c[0]=be,c[1]=me,c[2]=ge,c[3]=we,c[4]=ve,c[5]=_e,c[6]=ke,c[7]=Ae,c[8]=Se,c[9]=Ee,c[10]=Pe,c[11]=xe,c[12]=Me,c[13]=Ce,c[14]=Ke,c[15]=De,c[16]=Re,c[17]=Ie,c[18]=Ue,0!==u&&(c[19]=u,r.length++),r};function l(e,t,r){return(new p).mulp(e,t,r)}function p(e,t){this.x=e,this.y=t}Math.imul||(f=d),n.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?f(this,e,t):r<63?d(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var i=0,n=0,a=0;a<r.length-1;a++){var s=n;n=0;for(var o=67108863&i,c=Math.min(a,t.length-1),u=Math.max(0,a-e.length+1);u<=c;u++){var h=a-u,d=(0|e.words[h])*(0|t.words[u]),f=67108863&d;o=67108863&(f=f+o|0),n+=(s=(s=s+(d/67108864|0)|0)+(f>>>26)|0)>>>26,s&=67108863}r.words[a]=o,i=s,s=n}return 0!==i?r.words[a]=i:r.length--,r.strip()}(this,e,t):l(this,e,t)},p.prototype.makeRBT=function(e){for(var t=Array(e),r=n.prototype._countBits(e)-1,i=0;i<e;i++)t[i]=this.revBin(i,r,e);return t},p.prototype.revBin=function(e,t,r){if(0===e||e===r-1)return e;for(var i=0,n=0;n<t;n++)i|=(1&e)<<t-n-1,e>>=1;return i},p.prototype.permute=function(e,t,r,i,n,a){for(var s=0;s<a;s++)i[s]=t[e[s]],n[s]=r[e[s]]},p.prototype.transform=function(e,t,r,i,n,a){this.permute(a,e,t,r,i,n);for(var s=1;s<n;s<<=1)for(var o=s<<1,c=Math.cos(2*Math.PI/o),u=Math.sin(2*Math.PI/o),h=0;h<n;h+=o)for(var d=c,f=u,l=0;l<s;l++){var p=r[h+l],y=i[h+l],b=r[h+l+s],m=i[h+l+s],g=d*b-f*m;m=d*m+f*b,b=g,r[h+l]=p+b,i[h+l]=y+m,r[h+l+s]=p-b,i[h+l+s]=y-m,l!==o&&(g=c*d-u*f,f=c*f+u*d,d=g)}},p.prototype.guessLen13b=function(e,t){var r=1|Math.max(t,e),i=1&r,n=0;for(r=r/2|0;r;r>>>=1)n++;return 1<<n+1+i},p.prototype.conjugate=function(e,t,r){if(!(r<=1))for(var i=0;i<r/2;i++){var n=e[i];e[i]=e[r-i-1],e[r-i-1]=n,n=t[i],t[i]=-t[r-i-1],t[r-i-1]=-n}},p.prototype.normalize13b=function(e,t){for(var r=0,i=0;i<t/2;i++){var n=8192*Math.round(e[2*i+1]/t)+Math.round(e[2*i]/t)+r;e[i]=67108863&n,r=n<67108864?0:n/67108864|0}return e},p.prototype.convert13b=function(e,t,i,n){for(var a=0,s=0;s<t;s++)a+=0|e[s],i[2*s]=8191&a,a>>>=13,i[2*s+1]=8191&a,a>>>=13;for(s=2*t;s<n;++s)i[s]=0;r(0===a),r(0==(-8192&a))},p.prototype.stub=function(e){for(var t=Array(e),r=0;r<e;r++)t[r]=0;return t},p.prototype.mulp=function(e,t,r){var i=2*this.guessLen13b(e.length,t.length),n=this.makeRBT(i),a=this.stub(i),s=Array(i),o=Array(i),c=Array(i),u=Array(i),h=Array(i),d=Array(i),f=r.words;f.length=i,this.convert13b(e.words,e.length,s,i),this.convert13b(t.words,t.length,u,i),this.transform(s,a,o,c,i,n),this.transform(u,a,h,d,i,n);for(var l=0;l<i;l++){var p=o[l]*h[l]-c[l]*d[l];c[l]=o[l]*d[l]+c[l]*h[l],o[l]=p}return this.conjugate(o,c,i),this.transform(o,c,f,a,i,n),this.conjugate(f,a,i),this.normalize13b(f,i),r.negative=e.negative^t.negative,r.length=e.length+t.length,r.strip()},n.prototype.mul=function(e){var t=new n(null);return t.words=Array(this.length+e.length),this.mulTo(e,t)},n.prototype.mulf=function(e){var t=new n(null);return t.words=Array(this.length+e.length),l(this,e,t)},n.prototype.imul=function(e){return this.clone().mulTo(e,this)},n.prototype.imuln=function(e){r("number"==typeof e),r(e<67108864);for(var t=0,i=0;i<this.length;i++){var n=(0|this.words[i])*e,a=(67108863&n)+(67108863&t);t>>=26,t+=n/67108864|0,t+=a>>>26,this.words[i]=67108863&a}return 0!==t&&(this.words[i]=t,this.length++),this},n.prototype.muln=function(e){return this.clone().imuln(e)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(e){var t=function(e){for(var t=Array(e.bitLength()),r=0;r<t.length;r++){var i=r/26|0,n=r%26;t[r]=(e.words[i]&1<<n)>>>n}return t}(e);if(0===t.length)return new n(1);for(var r=this,i=0;i<t.length&&0===t[i];i++,r=r.sqr());if(++i<t.length)for(var a=r.sqr();i<t.length;i++,a=a.sqr())0!==t[i]&&(r=r.mul(a));return r},n.prototype.iushln=function(e){r("number"==typeof e&&e>=0);var t,i=e%26,n=(e-i)/26,a=67108863>>>26-i<<26-i;if(0!==i){var s=0;for(t=0;t<this.length;t++){var o=this.words[t]&a,c=(0|this.words[t])-o<<i;this.words[t]=c|s,s=o>>>26-i}s&&(this.words[t]=s,this.length++)}if(0!==n){for(t=this.length-1;t>=0;t--)this.words[t+n]=this.words[t];for(t=0;t<n;t++)this.words[t]=0;this.length+=n}return this.strip()},n.prototype.ishln=function(e){return r(0===this.negative),this.iushln(e)},n.prototype.iushrn=function(e,t,i){var n;r("number"==typeof e&&e>=0),n=t?(t-t%26)/26:0;var a=e%26,s=Math.min((e-a)/26,this.length),o=67108863^67108863>>>a<<a,c=i;if(n=Math.max(0,n-=s),c){for(var u=0;u<s;u++)c.words[u]=this.words[u];c.length=s}if(0===s);else if(this.length>s)for(this.length-=s,u=0;u<this.length;u++)this.words[u]=this.words[u+s];else this.words[0]=0,this.length=1;var h=0;for(u=this.length-1;u>=0&&(0!==h||u>=n);u--){var d=0|this.words[u];this.words[u]=h<<26-a|d>>>a,h=d&o}return c&&0!==h&&(c.words[c.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(e,t,i){return r(0===this.negative),this.iushrn(e,t,i)},n.prototype.shln=function(e){return this.clone().ishln(e)},n.prototype.ushln=function(e){return this.clone().iushln(e)},n.prototype.shrn=function(e){return this.clone().ishrn(e)},n.prototype.ushrn=function(e){return this.clone().iushrn(e)},n.prototype.testn=function(e){r("number"==typeof e&&e>=0);var t=e%26,i=(e-t)/26,n=1<<t;return!(this.length<=i)&&!!(this.words[i]&n)},n.prototype.imaskn=function(e){r("number"==typeof e&&e>=0);var t=e%26,i=(e-t)/26;if(r(0===this.negative,"imaskn works only with positive numbers"),this.length<=i)return this;if(0!==t&&i++,this.length=Math.min(i,this.length),0!==t){var n=67108863^67108863>>>t<<t;this.words[this.length-1]&=n}return this.strip()},n.prototype.maskn=function(e){return this.clone().imaskn(e)},n.prototype.iaddn=function(e){return r("number"==typeof e),r(e<67108864),e<0?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])<e?(this.words[0]=e-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},n.prototype._iaddn=function(e){this.words[0]+=e;for(var t=0;t<this.length&&this.words[t]>=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},n.prototype.isubn=function(e){if(r("number"==typeof e),r(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this.strip()},n.prototype.addn=function(e){return this.clone().iaddn(e)},n.prototype.subn=function(e){return this.clone().isubn(e)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(e,t,i){var n,a,s=e.length+i;this._expand(s);var o=0;for(n=0;n<e.length;n++){a=(0|this.words[n+i])+o;var c=(0|e.words[n])*t;o=((a-=67108863&c)>>26)-(c/67108864|0),this.words[n+i]=67108863&a}for(;n<this.length-i;n++)o=(a=(0|this.words[n+i])+o)>>26,this.words[n+i]=67108863&a;if(0===o)return this.strip();for(r(-1===o),o=0,n=0;n<this.length;n++)o=(a=-(0|this.words[n])+o)>>26,this.words[n]=67108863&a;return this.negative=1,this.strip()},n.prototype._wordDiv=function(e,t){var r=(this.length,e.length),i=this.clone(),a=e,s=0|a.words[a.length-1];0!==(r=26-this._countBits(s))&&(a=a.ushln(r),i.iushln(r),s=0|a.words[a.length-1]);var o,c=i.length-a.length;if("mod"!==t){(o=new n(null)).length=c+1,o.words=Array(o.length);for(var u=0;u<o.length;u++)o.words[u]=0}var h=i.clone()._ishlnsubmul(a,1,c);0===h.negative&&(i=h,o&&(o.words[c]=1));for(var d=c-1;d>=0;d--){var f=67108864*(0|i.words[a.length+d])+(0|i.words[a.length+d-1]);for(f=Math.min(f/s|0,67108863),i._ishlnsubmul(a,f,d);0!==i.negative;)f--,i.negative=0,i._ishlnsubmul(a,1,d),i.isZero()||(i.negative^=1);o&&(o.words[d]=f)}return o&&o.strip(),i.strip(),"div"!==t&&0!==r&&i.iushrn(r),{div:o||null,mod:i}},n.prototype.divmod=function(e,t,i){return r(!e.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===e.negative?(o=this.neg().divmod(e,t),"mod"!==t&&(a=o.div.neg()),"div"!==t&&(s=o.mod.neg(),i&&0!==s.negative&&s.iadd(e)),{div:a,mod:s}):0===this.negative&&0!==e.negative?(o=this.divmod(e.neg(),t),"mod"!==t&&(a=o.div.neg()),{div:a,mod:o.mod}):0!=(this.negative&e.negative)?(o=this.neg().divmod(e.neg(),t),"div"!==t&&(s=o.mod.neg(),i&&0!==s.negative&&s.isub(e)),{div:o.div,mod:s}):e.length>this.length||this.cmp(e)<0?{div:new n(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new n(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new n(this.modn(e.words[0]))}:this._wordDiv(e,t);var a,s,o},n.prototype.div=function(e){return this.divmod(e,"div",!1).div},n.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},n.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},n.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,i=e.ushrn(1),n=e.andln(1),a=r.cmp(i);return a<0||1===n&&0===a?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},n.prototype.modn=function(e){r(e<=67108863);for(var t=(1<<26)%e,i=0,n=this.length-1;n>=0;n--)i=(t*i+(0|this.words[n]))%e;return i},n.prototype.idivn=function(e){r(e<=67108863);for(var t=0,i=this.length-1;i>=0;i--){var n=(0|this.words[i])+67108864*t;this.words[i]=n/e|0,t=n%e}return this.strip()},n.prototype.divn=function(e){return this.clone().idivn(e)},n.prototype.egcd=function(e){r(0===e.negative),r(!e.isZero());var t=this,i=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var a=new n(1),s=new n(0),o=new n(0),c=new n(1),u=0;t.isEven()&&i.isEven();)t.iushrn(1),i.iushrn(1),++u;for(var h=i.clone(),d=t.clone();!t.isZero();){for(var f=0,l=1;0==(t.words[0]&l)&&f<26;++f,l<<=1);if(f>0)for(t.iushrn(f);f-- >0;)(a.isOdd()||s.isOdd())&&(a.iadd(h),s.isub(d)),a.iushrn(1),s.iushrn(1);for(var p=0,y=1;0==(i.words[0]&y)&&p<26;++p,y<<=1);if(p>0)for(i.iushrn(p);p-- >0;)(o.isOdd()||c.isOdd())&&(o.iadd(h),c.isub(d)),o.iushrn(1),c.iushrn(1);t.cmp(i)>=0?(t.isub(i),a.isub(o),s.isub(c)):(i.isub(t),o.isub(a),c.isub(s))}return{a:o,b:c,gcd:i.iushln(u)}},n.prototype._invmp=function(e){r(0===e.negative),r(!e.isZero());var t=this,i=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var a,s=new n(1),o=new n(0),c=i.clone();t.cmpn(1)>0&&i.cmpn(1)>0;){for(var u=0,h=1;0==(t.words[0]&h)&&u<26;++u,h<<=1);if(u>0)for(t.iushrn(u);u-- >0;)s.isOdd()&&s.iadd(c),s.iushrn(1);for(var d=0,f=1;0==(i.words[0]&f)&&d<26;++d,f<<=1);if(d>0)for(i.iushrn(d);d-- >0;)o.isOdd()&&o.iadd(c),o.iushrn(1);t.cmp(i)>=0?(t.isub(i),s.isub(o)):(i.isub(t),o.isub(s))}return(a=0===t.cmpn(1)?s:o).cmpn(0)<0&&a.iadd(e),a},n.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var i=0;t.isEven()&&r.isEven();i++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var n=t.cmp(r);if(n<0){var a=t;t=r,r=a}else if(0===n||0===r.cmpn(1))break;t.isub(r)}return r.iushln(i)},n.prototype.invm=function(e){return this.egcd(e).a.umod(e)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(e){return this.words[0]&e},n.prototype.bincn=function(e){r("number"==typeof e);var t=e%26,i=(e-t)/26,n=1<<t;if(this.length<=i)return this._expand(i+1),this.words[i]|=n,this;for(var a=n,s=i;0!==a&&s<this.length;s++){var o=0|this.words[s];a=(o+=a)>>>26,o&=67108863,this.words[s]=o}return 0!==a&&(this.words[s]=a,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(e){var t,i=e<0;if(0!==this.negative&&!i)return-1;if(0===this.negative&&i)return 1;if(this.strip(),this.length>1)t=1;else{i&&(e=-e),r(e<=67108863,"Number is too big");var n=0|this.words[0];t=n===e?0:n<e?-1:1}return 0!==this.negative?0|-t:t},n.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?0|-t:t},n.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var t=0,r=this.length-1;r>=0;r--){var i=0|this.words[r],n=0|e.words[r];if(i!==n){i<n?t=-1:i>n&&(t=1);break}}return t},n.prototype.gtn=function(e){return 1===this.cmpn(e)},n.prototype.gt=function(e){return 1===this.cmp(e)},n.prototype.gten=function(e){return this.cmpn(e)>=0},n.prototype.gte=function(e){return this.cmp(e)>=0},n.prototype.ltn=function(e){return-1===this.cmpn(e)},n.prototype.lt=function(e){return-1===this.cmp(e)},n.prototype.lten=function(e){return this.cmpn(e)<=0},n.prototype.lte=function(e){return this.cmp(e)<=0},n.prototype.eqn=function(e){return 0===this.cmpn(e)},n.prototype.eq=function(e){return 0===this.cmp(e)},n.red=function(e){return new _(e)},n.prototype.toRed=function(e){return r(!this.red,"Already a number in reduction context"),r(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},n.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(e){return this.red=e,this},n.prototype.forceRed=function(e){return r(!this.red,"Already a number in reduction context"),this._forceRed(e)},n.prototype.redAdd=function(e){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},n.prototype.redIAdd=function(e){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},n.prototype.redSub=function(e){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},n.prototype.redISub=function(e){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},n.prototype.redShl=function(e){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},n.prototype.redMul=function(e){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},n.prototype.redIMul=function(e){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},n.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(e){return r(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var y={k256:null,p224:null,p192:null,p25519:null};function b(e,t){this.name=e,this.p=new n(t,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function m(){b.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function g(){b.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){b.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function v(){b.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function _(e){if("string"==typeof e){var t=n._prime(e);this.m=t.p,this.prime=t}else r(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function k(e){_.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}b.prototype._tmp=function(){var e=new n(null);return e.words=Array(Math.ceil(this.n/13)),e},b.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var i=t<this.n?-1:r.ucmp(this.p);return 0===i?(r.words[0]=0,r.length=1):i>0?r.isub(this.p):r.strip(),r},b.prototype.split=function(e,t){e.iushrn(this.n,0,t)},b.prototype.imulK=function(e){return e.imul(this.k)},i(m,b),m.prototype.split=function(e,t){for(var r=4194303,i=Math.min(e.length,9),n=0;n<i;n++)t.words[n]=e.words[n];if(t.length=i,e.length<=9)return e.words[0]=0,void(e.length=1);var a=e.words[9];for(t.words[t.length++]=a&r,n=10;n<e.length;n++){var s=0|e.words[n];e.words[n-10]=(s&r)<<4|a>>>22,a=s}a>>>=22,e.words[n-10]=a,0===a&&e.length>10?e.length-=10:e.length-=9},m.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r<e.length;r++){var i=0|e.words[r];t+=977*i,e.words[r]=67108863&t,t=64*i+(t/67108864|0)}return 0===e.words[e.length-1]&&(e.length--,0===e.words[e.length-1]&&e.length--),e},i(g,b),i(w,b),i(v,b),v.prototype.imulK=function(e){for(var t=0,r=0;r<e.length;r++){var i=19*(0|e.words[r])+t,n=67108863&i;i>>>=26,e.words[r]=n,t=i}return 0!==t&&(e.words[e.length++]=t),e},n._prime=function(e){if(y[e])return y[e];var t;if("k256"===e)t=new m;else if("p224"===e)t=new g;else if("p192"===e)t=new w;else{if("p25519"!==e)throw Error("Unknown prime "+e);t=new v}return y[e]=t,t},_.prototype._verify1=function(e){r(0===e.negative,"red works only with positives"),r(e.red,"red works only with red numbers")},_.prototype._verify2=function(e,t){r(0==(e.negative|t.negative),"red works only with positives"),r(e.red&&e.red===t.red,"red works only with red numbers")},_.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},_.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},_.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},_.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},_.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},_.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},_.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},_.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},_.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},_.prototype.isqr=function(e){return this.imul(e,e.clone())},_.prototype.sqr=function(e){return this.mul(e,e)},_.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(r(t%2==1),3===t){var i=this.m.add(new n(1)).iushrn(2);return this.pow(e,i)}for(var a=this.m.subn(1),s=0;!a.isZero()&&0===a.andln(1);)s++,a.iushrn(1);r(!a.isZero());var o=new n(1).toRed(this),c=o.redNeg(),u=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new n(2*h*h).toRed(this);0!==this.pow(h,u).cmp(c);)h.redIAdd(c);for(var d=this.pow(h,a),f=this.pow(e,a.addn(1).iushrn(1)),l=this.pow(e,a),p=s;0!==l.cmp(o);){for(var y=l,b=0;0!==y.cmp(o);b++)y=y.redSqr();r(b<p);var m=this.pow(d,new n(1).iushln(p-b-1));f=f.redMul(m),d=m.redSqr(),l=l.redMul(d),p=b}return f},_.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},_.prototype.pow=function(e,t){if(t.isZero())return new n(1).toRed(this);if(0===t.cmpn(1))return e.clone();var r=Array(16);r[0]=new n(1).toRed(this),r[1]=e;for(var i=2;i<r.length;i++)r[i]=this.mul(r[i-1],e);var a=r[0],s=0,o=0,c=t.bitLength()%26;for(0===c&&(c=26),i=t.length-1;i>=0;i--){for(var u=t.words[i],h=c-1;h>=0;h--){var d=u>>h&1;a!==r[0]&&(a=this.sqr(a)),0!==d||0!==s?(s<<=1,s|=d,(4===++o||0===i&&0===h)&&(a=this.mul(a,r[s]),o=0,s=0)):o=0}c=26}return a},_.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},_.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},n.mont=function(e){return new k(e)},i(k,_),k.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},k.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},k.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),n=r.isub(i).iushrn(this.shift),a=n;return n.cmp(this.m)>=0?a=n.isub(this.m):n.cmpn(0)<0&&(a=n.iadd(this.m)),a._forceRed(this)},k.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new n(0)._forceRed(this);var r=e.mul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a=r.isub(i).iushrn(this.shift),s=a;return a.cmp(this.m)>=0?s=a.isub(this.m):a.cmpn(0)<0&&(s=a.iadd(this.m)),s._forceRed(this)},k.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(e,et)})),Rf=/*#__PURE__*/Object.freeze({__proto__:null,default:Df,__moduleExports:Df});class If{constructor(e){if(void 0===e)throw Error("Invalid BigInteger input");this.value=new Df(e)}clone(){const e=new If(null);return this.value.copy(e.value),e}iinc(){return this.value.iadd(new Df(1)),this}inc(){return this.clone().iinc()}idec(){return this.value.isub(new Df(1)),this}dec(){return this.clone().idec()}iadd(e){return this.value.iadd(e.value),this}add(e){return this.clone().iadd(e)}isub(e){return this.value.isub(e.value),this}sub(e){return this.clone().isub(e)}imul(e){return this.value.imul(e.value),this}mul(e){return this.clone().imul(e)}imod(e){return this.value=this.value.umod(e.value),this}mod(e){return this.clone().imod(e)}modExp(e,t){const r=t.isEven()?Df.red(t.value):Df.mont(t.value),i=this.clone();return i.value=i.value.toRed(r).redPow(e.value).fromRed(),i}modInv(e){if(!this.gcd(e).isOne())throw Error("Inverse does not exist");return new If(this.value.invm(e.value))}gcd(e){return new If(this.value.gcd(e.value))}ileftShift(e){return this.value.ishln(e.value.toNumber()),this}leftShift(e){return this.clone().ileftShift(e)}irightShift(e){return this.value.ishrn(e.value.toNumber()),this}rightShift(e){return this.clone().irightShift(e)}equal(e){return this.value.eq(e.value)}lt(e){return this.value.lt(e.value)}lte(e){return this.value.lte(e.value)}gt(e){return this.value.gt(e.value)}gte(e){return this.value.gte(e.value)}isZero(){return this.value.isZero()}isOne(){return this.value.eq(new Df(1))}isNegative(){return this.value.isNeg()}isEven(){return this.value.isEven()}abs(){const e=this.clone();return e.value=e.value.abs(),e}toString(){return this.value.toString()}toNumber(){return this.value.toNumber()}getBit(e){return this.value.testn(e)?1:0}bitLength(){return this.value.bitLength()}byteLength(){return this.value.byteLength()}toUint8Array(e="be",t){return this.value.toArrayLike(Uint8Array,e,t)}}var Uf,Bf=/*#__PURE__*/Object.freeze({__proto__:null,default:If}),Tf=tt((function(e,t){var r=t;function i(e){return 1===e.length?"0"+e:e}function n(e){for(var t="",r=0;r<e.length;r++)t+=i(e[r].toString(16));return t}r.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if("string"!=typeof e){for(var i=0;i<e.length;i++)r[i]=0|e[i];return r}if("hex"===t){(e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e);for(i=0;i<e.length;i+=2)r.push(parseInt(e[i]+e[i+1],16))}else for(i=0;i<e.length;i++){var n=e.charCodeAt(i),a=n>>8,s=255&n;a?r.push(a,s):r.push(s)}return r},r.zero2=i,r.toHex=n,r.encode=function(e,t){return"hex"===t?n(e):e}})),zf=tt((function(e,t){var r=t;r.assert=Qe,r.toArray=Tf.toArray,r.zero2=Tf.zero2,r.toHex=Tf.toHex,r.encode=Tf.encode,r.getNAF=function(e,t){for(var r=[],i=1<<t+1,n=e.clone();n.cmpn(1)>=0;){var a;if(n.isOdd()){var s=n.andln(i-1);a=s>(i>>1)-1?(i>>1)-s:s,n.isubn(a)}else a=0;r.push(a);for(var o=0!==n.cmpn(0)&&0===n.andln(i-1)?t+1:1,c=1;c<o;c++)r.push(0);n.iushrn(o)}return r},r.getJSF=function(e,t){var r=[[],[]];e=e.clone(),t=t.clone();for(var i=0,n=0;e.cmpn(-i)>0||t.cmpn(-n)>0;){var a,s,o,c=e.andln(3)+i&3,u=t.andln(3)+n&3;if(3===c&&(c=-1),3===u&&(u=-1),0==(1&c))a=0;else a=3!==(o=e.andln(7)+i&7)&&5!==o||2!==u?c:-c;if(r[0].push(a),0==(1&u))s=0;else s=3!==(o=t.andln(7)+n&7)&&5!==o||2!==c?u:-u;r[1].push(s),2*i===a+1&&(i=1-i),2*n===s+1&&(n=1-n),e.iushrn(1),t.iushrn(1)}return r},r.cachedProperty=function(e,t,r){var i="_"+t;e.prototype[t]=function(){return void 0!==this[i]?this[i]:this[i]=r.call(this)}},r.parseBytes=function(e){return"string"==typeof e?r.toArray(e,"hex"):e},r.intFromLE=function(e){return new Df(e,"hex","le")}})),qf=function(e){return Uf||(Uf=new Of(null)),Uf.generate(e)};function Of(e){this.rand=e}var Ff=Of;if(Of.prototype.generate=function(e){return this._rand(e)},Of.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;r<t.length;r++)t[r]=this.rand.getByte();return t},"object"==typeof self)self.crypto&&self.crypto.getRandomValues?Of.prototype._rand=function(e){var t=new Uint8Array(e);return self.crypto.getRandomValues(t),t}:self.msCrypto&&self.msCrypto.getRandomValues?Of.prototype._rand=function(e){var t=new Uint8Array(e);return self.msCrypto.getRandomValues(t),t}:"object"==typeof window&&(Of.prototype._rand=function(){throw Error("Not implemented yet")});else try{var Nf=void 0;if("function"!=typeof Nf.randomBytes)throw Error("Not supported");Of.prototype._rand=function(e){return Nf.randomBytes(e)}}catch(e){}qf.Rand=Ff;var Lf=zf.getNAF,jf=zf.getJSF,Wf=zf.assert;function Hf(e,t){this.type=e,this.p=new Df(t.p,16),this.red=t.prime?Df.red(t.prime):Df.mont(this.p),this.zero=new Df(0).toRed(this.red),this.one=new Df(1).toRed(this.red),this.two=new Df(2).toRed(this.red),this.n=t.n&&new Df(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=[,,,,],this._wnafT2=[,,,,],this._wnafT3=[,,,,],this._wnafT4=[,,,,];var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}var Gf=Hf;function Vf(e,t){this.curve=e,this.type=t,this.precomputed=null}Hf.prototype.point=function(){throw Error("Not implemented")},Hf.prototype.validate=function(){throw Error("Not implemented")},Hf.prototype._fixedNafMul=function(e,t){Wf(e.precomputed);var r=e._getDoubles(),i=Lf(t,1),n=(1<<r.step+1)-(r.step%2==0?2:1);n/=3;for(var a=[],s=0;s<i.length;s+=r.step){var o=0;for(t=s+r.step-1;t>=s;t--)o=(o<<1)+i[t];a.push(o)}for(var c=this.jpoint(null,null,null),u=this.jpoint(null,null,null),h=n;h>0;h--){for(s=0;s<a.length;s++){(o=a[s])===h?u=u.mixedAdd(r.points[s]):o===-h&&(u=u.mixedAdd(r.points[s].neg()))}c=c.add(u)}return c.toP()},Hf.prototype._wnafMul=function(e,t){var r=4,i=e._getNAFPoints(r);r=i.wnd;for(var n=i.points,a=Lf(t,r),s=this.jpoint(null,null,null),o=a.length-1;o>=0;o--){for(t=0;o>=0&&0===a[o];o--)t++;if(o>=0&&t++,s=s.dblp(t),o<0)break;var c=a[o];Wf(0!==c),s="affine"===e.type?c>0?s.mixedAdd(n[c-1>>1]):s.mixedAdd(n[-c-1>>1].neg()):c>0?s.add(n[c-1>>1]):s.add(n[-c-1>>1].neg())}return"affine"===e.type?s.toP():s},Hf.prototype._wnafMulAdd=function(e,t,r,i,n){for(var a=this._wnafT1,s=this._wnafT2,o=this._wnafT3,c=0,u=0;u<i;u++){var h=(A=t[u])._getNAFPoints(e);a[u]=h.wnd,s[u]=h.points}for(u=i-1;u>=1;u-=2){var d=u-1,f=u;if(1===a[d]&&1===a[f]){var l=[t[d],null,null,t[f]];0===t[d].y.cmp(t[f].y)?(l[1]=t[d].add(t[f]),l[2]=t[d].toJ().mixedAdd(t[f].neg())):0===t[d].y.cmp(t[f].y.redNeg())?(l[1]=t[d].toJ().mixedAdd(t[f]),l[2]=t[d].add(t[f].neg())):(l[1]=t[d].toJ().mixedAdd(t[f]),l[2]=t[d].toJ().mixedAdd(t[f].neg()));var p=[-3,-1,-5,-7,0,7,5,1,3],y=jf(r[d],r[f]);c=Math.max(y[0].length,c),o[d]=Array(c),o[f]=Array(c);for(var b=0;b<c;b++){var m=0|y[0][b],g=0|y[1][b];o[d][b]=p[3*(m+1)+(g+1)],o[f][b]=0,s[d]=l}}else o[d]=Lf(r[d],a[d]),o[f]=Lf(r[f],a[f]),c=Math.max(o[d].length,c),c=Math.max(o[f].length,c)}var w=this.jpoint(null,null,null),v=this._wnafT4;for(u=c;u>=0;u--){for(var _=0;u>=0;){var k=!0;for(b=0;b<i;b++)v[b]=0|o[b][u],0!==v[b]&&(k=!1);if(!k)break;_++,u--}if(u>=0&&_++,w=w.dblp(_),u<0)break;for(b=0;b<i;b++){var A,S=v[b];0!==S&&(S>0?A=s[b][S-1>>1]:S<0&&(A=s[b][-S-1>>1].neg()),w="affine"===A.type?w.mixedAdd(A):w.add(A))}}for(u=0;u<i;u++)s[u]=null;return n?w:w.toP()},Hf.BasePoint=Vf,Vf.prototype.eq=function(){throw Error("Not implemented")},Vf.prototype.validate=function(){return this.curve.validate(this)},Hf.prototype.decodePoint=function(e,t){e=zf.toArray(e,t);var r=this.p.byteLength();if((4===e[0]||6===e[0]||7===e[0])&&e.length-1==2*r)return 6===e[0]?Wf(e[e.length-1]%2==0):7===e[0]&&Wf(e[e.length-1]%2==1),this.point(e.slice(1,1+r),e.slice(1+r,1+2*r));if((2===e[0]||3===e[0])&&e.length-1===r)return this.pointFromX(e.slice(1,1+r),3===e[0]);throw Error("Unknown point format")},Vf.prototype.encodeCompressed=function(e){return this.encode(e,!0)},Vf.prototype._encode=function(e){var t=this.curve.p.byteLength(),r=this.getX().toArray("be",t);return e?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray("be",t))},Vf.prototype.encode=function(e,t){return zf.encode(this._encode(t),e)},Vf.prototype.precompute=function(e){if(this.precomputed)return this;var t={doubles:null,naf:null,beta:null};return t.naf=this._getNAFPoints(8),t.doubles=this._getDoubles(4,e),t.beta=this._getBeta(),this.precomputed=t,this},Vf.prototype._hasDoubles=function(e){if(!this.precomputed)return!1;var t=this.precomputed.doubles;return!!t&&t.points.length>=Math.ceil((e.bitLength()+1)/t.step)},Vf.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],i=this,n=0;n<t;n+=e){for(var a=0;a<e;a++)i=i.dbl();r.push(i)}return{step:e,points:r}},Vf.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var t=[this],r=(1<<e)-1,i=1===r?null:this.dbl(),n=1;n<r;n++)t[n]=t[n-1].add(i);return{wnd:e,points:t}},Vf.prototype._getBeta=function(){return null},Vf.prototype.dblp=function(e){for(var t=this,r=0;r<e;r++)t=t.dbl();return t};var $f=zf.assert;function Zf(e){Gf.call(this,"short",e),this.a=new Df(e.a,16).toRed(this.red),this.b=new Df(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=[,,,,],this._endoWnafT2=[,,,,]}rt(Zf,Gf);var Yf=Zf;function Xf(e,t,r,i){Gf.BasePoint.call(this,e,"affine"),null===t&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new Df(t,16),this.y=new Df(r,16),i&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function Qf(e,t,r,i){Gf.BasePoint.call(this,e,"jacobian"),null===t&&null===r&&null===i?(this.x=this.curve.one,this.y=this.curve.one,this.z=new Df(0)):(this.x=new Df(t,16),this.y=new Df(r,16),this.z=new Df(i,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}function Jf(e){Gf.call(this,"mont",e),this.a=new Df(e.a,16).toRed(this.red),this.b=new Df(e.b,16).toRed(this.red),this.i4=new Df(4).toRed(this.red).redInvm(),this.two=new Df(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}Zf.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,r;if(e.beta)t=new Df(e.beta,16).toRed(this.red);else{var i=this._getEndoRoots(this.p);t=(t=i[0].cmp(i[1])<0?i[0]:i[1]).toRed(this.red)}if(e.lambda)r=new Df(e.lambda,16);else{var n=this._getEndoRoots(this.n);0===this.g.mul(n[0]).x.cmp(this.g.x.redMul(t))?r=n[0]:(r=n[1],$f(0===this.g.mul(r).x.cmp(this.g.x.redMul(t))))}return{beta:t,lambda:r,basis:e.basis?e.basis.map((function(e){return{a:new Df(e.a,16),b:new Df(e.b,16)}})):this._getEndoBasis(r)}}},Zf.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:Df.mont(e),r=new Df(2).toRed(t).redInvm(),i=r.redNeg(),n=new Df(3).toRed(t).redNeg().redSqrt().redMul(r);return[i.redAdd(n).fromRed(),i.redSub(n).fromRed()]},Zf.prototype._getEndoBasis=function(e){for(var t,r,i,n,a,s,o,c,u,h=this.n.ushrn(Math.floor(this.n.bitLength()/2)),d=e,f=this.n.clone(),l=new Df(1),p=new Df(0),y=new Df(0),b=new Df(1),m=0;0!==d.cmpn(0);){var g=f.div(d);c=f.sub(g.mul(d)),u=y.sub(g.mul(l));var w=b.sub(g.mul(p));if(!i&&c.cmp(h)<0)t=o.neg(),r=l,i=c.neg(),n=u;else if(i&&2==++m)break;o=c,f=d,d=c,y=l,l=u,b=p,p=w}a=c.neg(),s=u;var v=i.sqr().add(n.sqr());return a.sqr().add(s.sqr()).cmp(v)>=0&&(a=t,s=r),i.negative&&(i=i.neg(),n=n.neg()),a.negative&&(a=a.neg(),s=s.neg()),[{a:i,b:n},{a,b:s}]},Zf.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],i=t[1],n=i.b.mul(e).divRound(this.n),a=r.b.neg().mul(e).divRound(this.n),s=n.mul(r.a),o=a.mul(i.a),c=n.mul(r.b),u=a.mul(i.b);return{k1:e.sub(s).sub(o),k2:c.add(u).neg()}},Zf.prototype.pointFromX=function(e,t){(e=new Df(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),i=r.redSqrt();if(0!==i.redSqr().redSub(r).cmp(this.zero))throw Error("invalid point");var n=i.fromRed().isOdd();return(t&&!n||!t&&n)&&(i=i.redNeg()),this.point(e,i)},Zf.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,i=this.a.redMul(t),n=t.redSqr().redMul(t).redIAdd(i).redIAdd(this.b);return 0===r.redSqr().redISub(n).cmpn(0)},Zf.prototype._endoWnafMulAdd=function(e,t,r){for(var i=this._endoWnafT1,n=this._endoWnafT2,a=0;a<e.length;a++){var s=this._endoSplit(t[a]),o=e[a],c=o._getBeta();s.k1.negative&&(s.k1.ineg(),o=o.neg(!0)),s.k2.negative&&(s.k2.ineg(),c=c.neg(!0)),i[2*a]=o,i[2*a+1]=c,n[2*a]=s.k1,n[2*a+1]=s.k2}for(var u=this._wnafMulAdd(1,i,n,2*a,r),h=0;h<2*a;h++)i[h]=null,n[h]=null;return u},rt(Xf,Gf.BasePoint),Zf.prototype.point=function(e,t,r){return new Xf(this,e,t,r)},Zf.prototype.pointFromJSON=function(e,t){return Xf.fromJSON(this,e,t)},Xf.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var t=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var r=this.curve,i=function(e){return r.point(e.x.redMul(r.endo.beta),e.y)};e.beta=t,t.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(i)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(i)}}}return t}},Xf.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},Xf.fromJSON=function(e,t,r){"string"==typeof t&&(t=JSON.parse(t));var i=e.point(t[0],t[1],r);if(!t[2])return i;function n(t){return e.point(t[0],t[1],r)}var a=t[2];return i.precomputed={beta:null,doubles:a.doubles&&{step:a.doubles.step,points:[i].concat(a.doubles.points.map(n))},naf:a.naf&&{wnd:a.naf.wnd,points:[i].concat(a.naf.points.map(n))}},i},Xf.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},Xf.prototype.isInfinity=function(){return this.inf},Xf.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),i=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,i)},Xf.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),i=e.redInvm(),n=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(i),a=n.redSqr().redISub(this.x.redAdd(this.x)),s=n.redMul(this.x.redSub(a)).redISub(this.y);return this.curve.point(a,s)},Xf.prototype.getX=function(){return this.x.fromRed()},Xf.prototype.getY=function(){return this.y.fromRed()},Xf.prototype.mul=function(e){return e=new Df(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},Xf.prototype.mulAdd=function(e,t,r){var i=[this,t],n=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(i,n):this.curve._wnafMulAdd(1,i,n,2)},Xf.prototype.jmulAdd=function(e,t,r){var i=[this,t],n=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(i,n,!0):this.curve._wnafMulAdd(1,i,n,2,!0)},Xf.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},Xf.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,i=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(i)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(i)}}}return t},Xf.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},rt(Qf,Gf.BasePoint),Zf.prototype.jpoint=function(e,t,r){return new Qf(this,e,t,r)},Qf.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),i=this.y.redMul(t).redMul(e);return this.curve.point(r,i)},Qf.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},Qf.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),i=this.x.redMul(t),n=e.x.redMul(r),a=this.y.redMul(t.redMul(e.z)),s=e.y.redMul(r.redMul(this.z)),o=i.redSub(n),c=a.redSub(s);if(0===o.cmpn(0))return 0!==c.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=o.redSqr(),h=u.redMul(o),d=i.redMul(u),f=c.redSqr().redIAdd(h).redISub(d).redISub(d),l=c.redMul(d.redISub(f)).redISub(a.redMul(h)),p=this.z.redMul(e.z).redMul(o);return this.curve.jpoint(f,l,p)},Qf.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,i=e.x.redMul(t),n=this.y,a=e.y.redMul(t).redMul(this.z),s=r.redSub(i),o=n.redSub(a);if(0===s.cmpn(0))return 0!==o.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var c=s.redSqr(),u=c.redMul(s),h=r.redMul(c),d=o.redSqr().redIAdd(u).redISub(h).redISub(h),f=o.redMul(h.redISub(d)).redISub(n.redMul(u)),l=this.z.redMul(s);return this.curve.jpoint(d,f,l)},Qf.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,r=0;r<e;r++)t=t.dbl();return t}var i=this.curve.a,n=this.curve.tinv,a=this.x,s=this.y,o=this.z,c=o.redSqr().redSqr(),u=s.redAdd(s);for(r=0;r<e;r++){var h=a.redSqr(),d=u.redSqr(),f=d.redSqr(),l=h.redAdd(h).redIAdd(h).redIAdd(i.redMul(c)),p=a.redMul(d),y=l.redSqr().redISub(p.redAdd(p)),b=p.redISub(y),m=l.redMul(b);m=m.redIAdd(m).redISub(f);var g=u.redMul(o);r+1<e&&(c=c.redMul(f)),a=y,o=g,u=m}return this.curve.jpoint(a,u.redMul(n),o)},Qf.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},Qf.prototype._zeroDbl=function(){var e,t,r;if(this.zOne){var i=this.x.redSqr(),n=this.y.redSqr(),a=n.redSqr(),s=this.x.redAdd(n).redSqr().redISub(i).redISub(a);s=s.redIAdd(s);var o=i.redAdd(i).redIAdd(i),c=o.redSqr().redISub(s).redISub(s),u=a.redIAdd(a);u=(u=u.redIAdd(u)).redIAdd(u),e=c,t=o.redMul(s.redISub(c)).redISub(u),r=this.y.redAdd(this.y)}else{var h=this.x.redSqr(),d=this.y.redSqr(),f=d.redSqr(),l=this.x.redAdd(d).redSqr().redISub(h).redISub(f);l=l.redIAdd(l);var p=h.redAdd(h).redIAdd(h),y=p.redSqr(),b=f.redIAdd(f);b=(b=b.redIAdd(b)).redIAdd(b),e=y.redISub(l).redISub(l),t=p.redMul(l.redISub(e)).redISub(b),r=(r=this.y.redMul(this.z)).redIAdd(r)}return this.curve.jpoint(e,t,r)},Qf.prototype._threeDbl=function(){var e,t,r;if(this.zOne){var i=this.x.redSqr(),n=this.y.redSqr(),a=n.redSqr(),s=this.x.redAdd(n).redSqr().redISub(i).redISub(a);s=s.redIAdd(s);var o=i.redAdd(i).redIAdd(i).redIAdd(this.curve.a),c=o.redSqr().redISub(s).redISub(s);e=c;var u=a.redIAdd(a);u=(u=u.redIAdd(u)).redIAdd(u),t=o.redMul(s.redISub(c)).redISub(u),r=this.y.redAdd(this.y)}else{var h=this.z.redSqr(),d=this.y.redSqr(),f=this.x.redMul(d),l=this.x.redSub(h).redMul(this.x.redAdd(h));l=l.redAdd(l).redIAdd(l);var p=f.redIAdd(f),y=(p=p.redIAdd(p)).redAdd(p);e=l.redSqr().redISub(y),r=this.y.redAdd(this.z).redSqr().redISub(d).redISub(h);var b=d.redSqr();b=(b=(b=b.redIAdd(b)).redIAdd(b)).redIAdd(b),t=l.redMul(p.redISub(e)).redISub(b)}return this.curve.jpoint(e,t,r)},Qf.prototype._dbl=function(){var e=this.curve.a,t=this.x,r=this.y,i=this.z,n=i.redSqr().redSqr(),a=t.redSqr(),s=r.redSqr(),o=a.redAdd(a).redIAdd(a).redIAdd(e.redMul(n)),c=t.redAdd(t),u=(c=c.redIAdd(c)).redMul(s),h=o.redSqr().redISub(u.redAdd(u)),d=u.redISub(h),f=s.redSqr();f=(f=(f=f.redIAdd(f)).redIAdd(f)).redIAdd(f);var l=o.redMul(d).redISub(f),p=r.redAdd(r).redMul(i);return this.curve.jpoint(h,l,p)},Qf.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr(),i=t.redSqr(),n=e.redAdd(e).redIAdd(e),a=n.redSqr(),s=this.x.redAdd(t).redSqr().redISub(e).redISub(i),o=(s=(s=(s=s.redIAdd(s)).redAdd(s).redIAdd(s)).redISub(a)).redSqr(),c=i.redIAdd(i);c=(c=(c=c.redIAdd(c)).redIAdd(c)).redIAdd(c);var u=n.redIAdd(s).redSqr().redISub(a).redISub(o).redISub(c),h=t.redMul(u);h=(h=h.redIAdd(h)).redIAdd(h);var d=this.x.redMul(o).redISub(h);d=(d=d.redIAdd(d)).redIAdd(d);var f=this.y.redMul(u.redMul(c.redISub(u)).redISub(s.redMul(o)));f=(f=(f=f.redIAdd(f)).redIAdd(f)).redIAdd(f);var l=this.z.redAdd(s).redSqr().redISub(r).redISub(o);return this.curve.jpoint(d,f,l)},Qf.prototype.mul=function(e,t){return e=new Df(e,t),this.curve._wnafMul(this,e)},Qf.prototype.eq=function(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;var t=this.z.redSqr(),r=e.z.redSqr();if(0!==this.x.redMul(r).redISub(e.x.redMul(t)).cmpn(0))return!1;var i=t.redMul(this.z),n=r.redMul(e.z);return 0===this.y.redMul(n).redISub(e.y.redMul(i)).cmpn(0)},Qf.prototype.eqXToP=function(e){var t=this.z.redSqr(),r=e.toRed(this.curve.red).redMul(t);if(0===this.x.cmp(r))return!0;for(var i=e.clone(),n=this.curve.redN.redMul(t);;){if(i.iadd(this.curve.n),i.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(n),0===this.x.cmp(r))return!0}},Qf.prototype.inspect=function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},Qf.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},rt(Jf,Gf);var el=Jf;function tl(e,t,r){Gf.BasePoint.call(this,e,"projective"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new Df(t,16),this.z=new Df(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}Jf.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),i=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t);return 0===i.redSqrt().redSqr().cmp(i)},rt(tl,Gf.BasePoint),Jf.prototype.decodePoint=function(e,t){if(33===(e=zf.toArray(e,t)).length&&64===e[0]&&(e=e.slice(1,33).reverse()),32!==e.length)throw Error("Unknown point compression format");return this.point(e,1)},Jf.prototype.point=function(e,t){return new tl(this,e,t)},Jf.prototype.pointFromJSON=function(e){return tl.fromJSON(this,e)},tl.prototype.precompute=function(){},tl.prototype._encode=function(e){var t=this.curve.p.byteLength();return e?[64].concat(this.getX().toArray("le",t)):this.getX().toArray("be",t)},tl.fromJSON=function(e,t){return new tl(e,t[0],t[1]||e.one)},tl.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},tl.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},tl.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),r=e.redSub(t),i=e.redMul(t),n=r.redMul(t.redAdd(this.curve.a24.redMul(r)));return this.curve.point(i,n)},tl.prototype.add=function(){throw Error("Not supported on Montgomery curve")},tl.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),i=this.x.redSub(this.z),n=e.x.redAdd(e.z),a=e.x.redSub(e.z).redMul(r),s=n.redMul(i),o=t.z.redMul(a.redAdd(s).redSqr()),c=t.x.redMul(a.redISub(s).redSqr());return this.curve.point(o,c)},tl.prototype.mul=function(e){for(var t=(e=new Df(e,16)).clone(),r=this,i=this.curve.point(null,null),n=[];0!==t.cmpn(0);t.iushrn(1))n.push(t.andln(1));for(var a=n.length-1;a>=0;a--)0===n[a]?(r=r.diffAdd(i,this),i=i.dbl()):(i=r.diffAdd(i,this),r=r.dbl());return i},tl.prototype.mulAdd=function(){throw Error("Not supported on Montgomery curve")},tl.prototype.jumlAdd=function(){throw Error("Not supported on Montgomery curve")},tl.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},tl.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},tl.prototype.getX=function(){return this.normalize(),this.x.fromRed()};var rl=zf.assert;function il(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,Gf.call(this,"edwards",e),this.a=new Df(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new Df(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new Df(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),rl(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|e.c)}rt(il,Gf);var nl=il;function al(e,t,r,i,n){Gf.BasePoint.call(this,e,"projective"),null===t&&null===r&&null===i?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new Df(t,16),this.y=new Df(r,16),this.z=i?new Df(i,16):this.curve.one,this.t=n&&new Df(n,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}il.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},il.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},il.prototype.jpoint=function(e,t,r,i){return this.point(e,t,r,i)},il.prototype.pointFromX=function(e,t){(e=new Df(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),i=this.c2.redSub(this.a.redMul(r)),n=this.one.redSub(this.c2.redMul(this.d).redMul(r)),a=i.redMul(n.redInvm()),s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw Error("invalid point");var o=s.fromRed().isOdd();return(t&&!o||!t&&o)&&(s=s.redNeg()),this.point(e,s)},il.prototype.pointFromY=function(e,t){(e=new Df(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),i=r.redSub(this.c2),n=r.redMul(this.d).redMul(this.c2).redSub(this.a),a=i.redMul(n.redInvm());if(0===a.cmp(this.zero)){if(t)throw Error("invalid point");return this.point(this.zero,e)}var s=a.redSqrt();if(0!==s.redSqr().redSub(a).cmp(this.zero))throw Error("invalid point");return s.fromRed().isOdd()!==t&&(s=s.redNeg()),this.point(s,e)},il.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),r=e.y.redSqr(),i=t.redMul(this.a).redAdd(r),n=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(r)));return 0===i.cmp(n)},rt(al,Gf.BasePoint),il.prototype.pointFromJSON=function(e){return al.fromJSON(this,e)},il.prototype.point=function(e,t,r,i){return new al(this,e,t,r,i)},al.fromJSON=function(e,t){return new al(e,t[0],t[1],t[2])},al.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},al.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},al.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var i=this.curve._mulA(e),n=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),a=i.redAdd(t),s=a.redSub(r),o=i.redSub(t),c=n.redMul(s),u=a.redMul(o),h=n.redMul(o),d=s.redMul(a);return this.curve.point(c,u,d,h)},al.prototype._projDbl=function(){var e,t,r,i=this.x.redAdd(this.y).redSqr(),n=this.x.redSqr(),a=this.y.redSqr();if(this.curve.twisted){var s=(u=this.curve._mulA(n)).redAdd(a);if(this.zOne)e=i.redSub(n).redSub(a).redMul(s.redSub(this.curve.two)),t=s.redMul(u.redSub(a)),r=s.redSqr().redSub(s).redSub(s);else{var o=this.z.redSqr(),c=s.redSub(o).redISub(o);e=i.redSub(n).redISub(a).redMul(c),t=s.redMul(u.redSub(a)),r=s.redMul(c)}}else{var u=n.redAdd(a);o=this.curve._mulC(this.z).redSqr(),c=u.redSub(o).redSub(o);e=this.curve._mulC(i.redISub(u)).redMul(c),t=this.curve._mulC(u).redMul(n.redISub(a)),r=u.redMul(c)}return this.curve.point(e,t,r)},al.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},al.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),i=this.t.redMul(this.curve.dd).redMul(e.t),n=this.z.redMul(e.z.redAdd(e.z)),a=r.redSub(t),s=n.redSub(i),o=n.redAdd(i),c=r.redAdd(t),u=a.redMul(s),h=o.redMul(c),d=a.redMul(c),f=s.redMul(o);return this.curve.point(u,h,f,d)},al.prototype._projAdd=function(e){var t,r,i=this.z.redMul(e.z),n=i.redSqr(),a=this.x.redMul(e.x),s=this.y.redMul(e.y),o=this.curve.d.redMul(a).redMul(s),c=n.redSub(o),u=n.redAdd(o),h=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(a).redISub(s),d=i.redMul(c).redMul(h);return this.curve.twisted?(t=i.redMul(u).redMul(s.redSub(this.curve._mulA(a))),r=c.redMul(u)):(t=i.redMul(u).redMul(s.redSub(a)),r=this.curve._mulC(c).redMul(u)),this.curve.point(d,t,r)},al.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},al.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},al.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!1)},al.prototype.jmulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!0)},al.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},al.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},al.prototype.getX=function(){return this.normalize(),this.x.fromRed()},al.prototype.getY=function(){return this.normalize(),this.y.fromRed()},al.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},al.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var r=e.clone(),i=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(i),0===this.x.cmp(t))return!0}},al.prototype.toP=al.prototype.normalize,al.prototype.mixedAdd=al.prototype.add;var sl=tt((function(e,t){var r=t;r.base=Gf,r.short=Yf,r.mont=el,r.edwards=nl})),ol=st.rotl32,cl=st.sum32,ul=st.sum32_5,hl=pt.ft_1,dl=ut.BlockHash,fl=[1518500249,1859775393,2400959708,3395469782];function ll(){if(!(this instanceof ll))return new ll;dl.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=Array(80)}st.inherits(ll,dl);var pl=ll;ll.blockSize=512,ll.outSize=160,ll.hmacStrength=80,ll.padLength=64,ll.prototype._update=function(e,t){for(var r=this.W,i=0;i<16;i++)r[i]=e[t+i];for(;i<r.length;i++)r[i]=ol(r[i-3]^r[i-8]^r[i-14]^r[i-16],1);var n=this.h[0],a=this.h[1],s=this.h[2],o=this.h[3],c=this.h[4];for(i=0;i<r.length;i++){var u=~~(i/20),h=ul(ol(n,5),hl(u,a,s,o),c,r[i],fl[u]);c=o,o=s,s=ol(a,30),a=n,n=h}this.h[0]=cl(this.h[0],n),this.h[1]=cl(this.h[1],a),this.h[2]=cl(this.h[2],s),this.h[3]=cl(this.h[3],o),this.h[4]=cl(this.h[4],c)},ll.prototype._digest=function(e){return"hex"===e?st.toHex32(this.h,"big"):st.split32(this.h,"big")};var yl={sha1:pl,sha224:Ct,sha256:xt,sha384:nr,sha512:Wt};function bl(e,t,r){if(!(this instanceof bl))return new bl(e,t,r);this.Hash=e,this.blockSize=e.blockSize/8,this.outSize=e.outSize/8,this.inner=null,this.outer=null,this._init(st.toArray(t,r))}var ml=bl;bl.prototype._init=function(e){e.length>this.blockSize&&(e=(new this.Hash).update(e).digest()),Qe(e.length<=this.blockSize);for(var t=e.length;t<this.blockSize;t++)e.push(0);for(t=0;t<e.length;t++)e[t]^=54;for(this.inner=(new this.Hash).update(e),t=0;t<e.length;t++)e[t]^=106;this.outer=(new this.Hash).update(e)},bl.prototype.update=function(e,t){return this.inner.update(e,t),this},bl.prototype.digest=function(e){return this.outer.update(this.inner.digest()),this.outer.digest(e)};var gl=tt((function(e,t){var r=t;r.utils=st,r.common=ut,r.sha=yl,r.ripemd=wr,r.hmac=ml,r.sha1=r.sha.sha1,r.sha256=r.sha.sha256,r.sha224=r.sha.sha224,r.sha384=r.sha.sha384,r.sha512=r.sha.sha512,r.ripemd160=r.ripemd.ripemd160})),wl={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}},vl=tt((function(e,t){var r,i=t,n=zf.assert;function a(e){if("short"===e.type)this.curve=new sl.short(e);else if("edwards"===e.type)this.curve=new sl.edwards(e);else{if("mont"!==e.type)throw Error("Unknown curve type.");this.curve=new sl.mont(e)}this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,n(this.g.validate(),"Invalid curve"),n(this.g.mul(this.n).isInfinity(),"Invalid curve, n*G != O")}function s(e,t){Object.defineProperty(i,e,{configurable:!0,enumerable:!0,get:function(){var r=new a(t);return Object.defineProperty(i,e,{configurable:!0,enumerable:!0,value:r}),r}})}i.PresetCurve=a,s("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:gl.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),s("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:gl.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),s("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:gl.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),s("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:gl.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),s("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:gl.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),s("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",cofactor:"8",hash:gl.sha256,gRed:!1,g:["9"]}),s("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",cofactor:"8",hash:gl.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]}),s("brainpoolP256r1",{type:"short",prime:null,p:"A9FB57DB A1EEA9BC 3E660A90 9D838D72 6E3BF623 D5262028 2013481D 1F6E5377",a:"7D5A0975 FC2C3057 EEF67530 417AFFE7 FB8055C1 26DC5C6C E94A4B44 F330B5D9",b:"26DC5C6C E94A4B44 F330B5D9 BBD77CBF 95841629 5CF7E1CE 6BCCDC18 FF8C07B6",n:"A9FB57DB A1EEA9BC 3E660A90 9D838D71 8C397AA3 B561A6F7 901E0E82 974856A7",hash:gl.sha256,gRed:!1,g:["8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262","547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997"]}),s("brainpoolP384r1",{type:"short",prime:null,p:"8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B4 12B1DA19 7FB71123ACD3A729 901D1A71 87470013 3107EC53",a:"7BC382C6 3D8C150C 3C72080A CE05AFA0 C2BEA28E 4FB22787 139165EF BA91F90F8AA5814A 503AD4EB 04A8C7DD 22CE2826",b:"04A8C7DD 22CE2826 8B39B554 16F0447C 2FB77DE1 07DCD2A6 2E880EA5 3EEB62D57CB43902 95DBC994 3AB78696 FA504C11",n:"8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B3 1F166E6C AC0425A7CF3AB6AF 6B7FC310 3B883202 E9046565",hash:gl.sha384,gRed:!1,g:["1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1E","8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315"]}),s("brainpoolP512r1",{type:"short",prime:null,p:"AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E D6639CCA 703308717D4D9B00 9BC66842 AECDA12A E6A380E6 2881FF2F 2D82C685 28AA6056 583A48F3",a:"7830A331 8B603B89 E2327145 AC234CC5 94CBDD8D 3DF91610 A83441CA EA9863BC2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 7F1117A7 2BF2C7B9 E7C1AC4D 77FC94CA",b:"3DF91610 A83441CA EA9863BC 2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 7F1117A72BF2C7B9 E7C1AC4D 77FC94CA DC083E67 984050B7 5EBAE5DD 2809BD63 8016F723",n:"AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E D6639CCA 70330870553E5C41 4CA92619 41866119 7FAC1047 1DB1D381 085DDADD B5879682 9CA90069",hash:gl.sha512,gRed:!1,g:["81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822","7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892"]});try{r=wl}catch(e){r=void 0}s("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:gl.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",r]})}));function _l(e){if(!(this instanceof _l))return new _l(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=Tf.toArray(e.entropy,e.entropyEnc||"hex"),r=Tf.toArray(e.nonce,e.nonceEnc||"hex"),i=Tf.toArray(e.pers,e.persEnc||"hex");Qe(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(t,r,i)}var kl=_l;_l.prototype._init=function(e,t,r){var i=e.concat(t).concat(r);this.K=Array(this.outLen/8),this.V=Array(this.outLen/8);for(var n=0;n<this.V.length;n++)this.K[n]=0,this.V[n]=1;this._update(i),this._reseed=1,this.reseedInterval=281474976710656},_l.prototype._hmac=function(){return new gl.hmac(this.hash,this.K)},_l.prototype._update=function(e){var t=this._hmac().update(this.V).update([0]);e&&(t=t.update(e)),this.K=t.digest(),this.V=this._hmac().update(this.V).digest(),e&&(this.K=this._hmac().update(this.V).update([1]).update(e).digest(),this.V=this._hmac().update(this.V).digest())},_l.prototype.reseed=function(e,t,r,i){"string"!=typeof t&&(i=r,r=t,t=null),e=Tf.toArray(e,t),r=Tf.toArray(r,i),Qe(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(r||[])),this._reseed=1},_l.prototype.generate=function(e,t,r,i){if(this._reseed>this.reseedInterval)throw Error("Reseed is required");"string"!=typeof t&&(i=r,r=t,t=null),r&&(r=Tf.toArray(r,i||"hex"),this._update(r));for(var n=[];n.length<e;)this.V=this._hmac().update(this.V).digest(),n=n.concat(this.V);var a=n.slice(0,e);return this._update(r),this._reseed++,Tf.encode(a,t)};var Al=zf.assert;function Sl(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}var El=Sl;Sl.fromPublic=function(e,t,r){return t instanceof Sl?t:new Sl(e,{pub:t,pubEnc:r})},Sl.fromPrivate=function(e,t,r){return t instanceof Sl?t:new Sl(e,{priv:t,privEnc:r})},Sl.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},Sl.prototype.getPublic=function(e,t){return this.pub||(this.pub=this.ec.g.mul(this.priv)),e?this.pub.encode(e,t):this.pub},Sl.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},Sl.prototype._importPrivate=function(e,t){if(this.priv=new Df(e,t||16),"mont"===this.ec.curve.type){var r=this.ec.curve.one,i=r.ushln(252).sub(r).ushln(3);this.priv=this.priv.or(r.ushln(254)),this.priv=this.priv.and(i)}else this.priv=this.priv.umod(this.ec.curve.n)},Sl.prototype._importPublic=function(e,t){if(e.x||e.y)return"mont"===this.ec.curve.type?Al(e.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||Al(e.x&&e.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},Sl.prototype.derive=function(e){return e.mul(this.priv).getX()},Sl.prototype.sign=function(e,t,r){return this.ec.sign(e,this,t,r)},Sl.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},Sl.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"};var Pl=zf.assert;function xl(e,t){if(e instanceof xl)return e;this._importDER(e,t)||(Pl(e.r&&e.s,"Signature without r or s"),this.r=new Df(e.r,16),this.s=new Df(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}var Ml=xl;function Cl(){this.place=0}function Kl(e,t){var r=e[t.place++];if(!(128&r))return r;for(var i=15&r,n=0,a=0,s=t.place;a<i;a++,s++)n<<=8,n|=e[s];return t.place=s,n}function Dl(e){for(var t=0,r=e.length-1;!e[t]&&!(128&e[t+1])&&t<r;)t++;return 0===t?e:e.slice(t)}function Rl(e,t){if(t<128)e.push(t);else{var r=1+(Math.log(t)/Math.LN2>>>3);for(e.push(128|r);--r;)e.push(t>>>(r<<3)&255);e.push(t)}}xl.prototype._importDER=function(e,t){e=zf.toArray(e,t);var r=new Cl;if(48!==e[r.place++])return!1;if(Kl(e,r)+r.place!==e.length)return!1;if(2!==e[r.place++])return!1;var i=Kl(e,r),n=e.slice(r.place,i+r.place);if(r.place+=i,2!==e[r.place++])return!1;var a=Kl(e,r);if(e.length!==a+r.place)return!1;var s=e.slice(r.place,a+r.place);return 0===n[0]&&128&n[1]&&(n=n.slice(1)),0===s[0]&&128&s[1]&&(s=s.slice(1)),this.r=new Df(n),this.s=new Df(s),this.recoveryParam=null,!0},xl.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r)),t=Dl(t),r=Dl(r);!(r[0]||128&r[1]);)r=r.slice(1);var i=[2];Rl(i,t.length),(i=i.concat(t)).push(2),Rl(i,r.length);var n=i.concat(r),a=[48];return Rl(a,n.length),a=a.concat(n),zf.encode(a,e)};var Il=zf.assert;function Ul(e){if(!(this instanceof Ul))return new Ul(e);"string"==typeof e&&(Il(vl.hasOwnProperty(e),"Unknown curve "+e),e=vl[e]),e instanceof vl.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}var Bl=Ul;Ul.prototype.keyPair=function(e){return new El(this,e)},Ul.prototype.keyFromPrivate=function(e,t){return El.fromPrivate(this,e,t)},Ul.prototype.keyFromPublic=function(e,t){return El.fromPublic(this,e,t)},Ul.prototype.genKeyPair=function(e){e||(e={});var t=new kl({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||qf(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.n.toArray()});if("mont"===this.curve.type){var r=new Df(t.generate(32));return this.keyFromPrivate(r)}for(var i=this.n.byteLength(),n=this.n.sub(new Df(2));;){if(!((r=new Df(t.generate(i))).cmp(n)>0))return r.iaddn(1),this.keyFromPrivate(r)}},Ul.prototype._truncateToN=function(e,t,r){var i=(r=r||8*e.byteLength())-this.n.bitLength();return i>0&&(e=e.ushrn(i)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},Ul.prototype.truncateMsg=function(e){var t;return e instanceof Uint8Array?(t=8*e.byteLength,e=this._truncateToN(new Df(e,16),!1,t)):"string"==typeof e?(t=4*e.length,e=this._truncateToN(new Df(e,16),!1,t)):e=this._truncateToN(new Df(e,16)),e},Ul.prototype.sign=function(e,t,r,i){"object"==typeof r&&(i=r,r=null),i||(i={}),t=this.keyFromPrivate(t,r),e=this.truncateMsg(e);for(var n=this.n.byteLength(),a=t.getPrivate().toArray("be",n),s=e.toArray("be",n),o=new kl({hash:this.hash,entropy:a,nonce:s,pers:i.pers,persEnc:i.persEnc||"utf8"}),c=this.n.sub(new Df(1)),u=0;;u++){var h=i.k?i.k(u):new Df(o.generate(this.n.byteLength()));if(!((h=this._truncateToN(h,!0)).cmpn(1)<=0||h.cmp(c)>=0)){var d=this.g.mul(h);if(!d.isInfinity()){var f=d.getX(),l=f.umod(this.n);if(0!==l.cmpn(0)){var p=h.invm(this.n).mul(l.mul(t.getPrivate()).iadd(e));if(0!==(p=p.umod(this.n)).cmpn(0)){var y=(d.getY().isOdd()?1:0)|(0!==f.cmp(l)?2:0);return i.canonical&&p.cmp(this.nh)>0&&(p=this.n.sub(p),y^=1),new Ml({r:l,s:p,recoveryParam:y})}}}}}},Ul.prototype.verify=function(e,t,r,i){return r=this.keyFromPublic(r,i),t=new Ml(t,"hex"),this._verify(this.truncateMsg(e),t,r)||this._verify(this._truncateToN(new Df(e,16)),t,r)},Ul.prototype._verify=function(e,t,r){var i=t.r,n=t.s;if(i.cmpn(1)<0||i.cmp(this.n)>=0)return!1;if(n.cmpn(1)<0||n.cmp(this.n)>=0)return!1;var a,s=n.invm(this.n),o=s.mul(e).umod(this.n),c=s.mul(i).umod(this.n);return this.curve._maxwellTrick?!(a=this.g.jmulAdd(o,r.getPublic(),c)).isInfinity()&&a.eqXToP(i):!(a=this.g.mulAdd(o,r.getPublic(),c)).isInfinity()&&0===a.getX().umod(this.n).cmp(i)},Ul.prototype.recoverPubKey=function(e,t,r,i){Il((3&r)===r,"The recovery param is more than two bits"),t=new Ml(t,i);var n=this.n,a=new Df(e),s=t.r,o=t.s,c=1&r,u=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&u)throw Error("Unable to find sencond key candinate");s=u?this.curve.pointFromX(s.add(this.curve.n),c):this.curve.pointFromX(s,c);var h=t.r.invm(n),d=n.sub(a).mul(h).umod(n),f=o.mul(h).umod(n);return this.g.mulAdd(d,s,f)},Ul.prototype.getKeyRecoveryParam=function(e,t,r,i){if(null!==(t=new Ml(t,i)).recoveryParam)return t.recoveryParam;for(var n=0;n<4;n++){var a;try{a=this.recoverPubKey(e,t,n)}catch(e){continue}if(a.eq(r))return n}throw Error("Unable to find valid recovery factor")};var Tl=zf.assert,zl=zf.parseBytes,ql=zf.cachedProperty;function Ol(e,t){if(this.eddsa=e,t.hasOwnProperty("secret")&&(this._secret=zl(t.secret)),e.isPoint(t.pub))this._pub=t.pub;else if(this._pubBytes=zl(t.pub),this._pubBytes&&33===this._pubBytes.length&&64===this._pubBytes[0]&&(this._pubBytes=this._pubBytes.slice(1,33)),this._pubBytes&&32!==this._pubBytes.length)throw Error("Unknown point compression format")}Ol.fromPublic=function(e,t){return t instanceof Ol?t:new Ol(e,{pub:t})},Ol.fromSecret=function(e,t){return t instanceof Ol?t:new Ol(e,{secret:t})},Ol.prototype.secret=function(){return this._secret},ql(Ol,"pubBytes",(function(){return this.eddsa.encodePoint(this.pub())})),ql(Ol,"pub",(function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())})),ql(Ol,"privBytes",(function(){var e=this.eddsa,t=this.hash(),r=e.encodingLength-1,i=t.slice(0,e.encodingLength);return i[0]&=248,i[r]&=127,i[r]|=64,i})),ql(Ol,"priv",(function(){return this.eddsa.decodeInt(this.privBytes())})),ql(Ol,"hash",(function(){return this.eddsa.hash().update(this.secret()).digest()})),ql(Ol,"messagePrefix",(function(){return this.hash().slice(this.eddsa.encodingLength)})),Ol.prototype.sign=function(e){return Tl(this._secret,"KeyPair can only verify"),this.eddsa.sign(e,this)},Ol.prototype.verify=function(e,t){return this.eddsa.verify(e,t,this)},Ol.prototype.getSecret=function(e){return Tl(this._secret,"KeyPair is public only"),zf.encode(this.secret(),e)},Ol.prototype.getPublic=function(e,t){return zf.encode((t?[64]:[]).concat(this.pubBytes()),e)};var Fl=Ol,Nl=zf.assert,Ll=zf.cachedProperty,jl=zf.parseBytes;function Wl(e,t){this.eddsa=e,"object"!=typeof t&&(t=jl(t)),Array.isArray(t)&&(t={R:t.slice(0,e.encodingLength),S:t.slice(e.encodingLength)}),Nl(t.R&&t.S,"Signature without R or S"),e.isPoint(t.R)&&(this._R=t.R),t.S instanceof Df&&(this._S=t.S),this._Rencoded=Array.isArray(t.R)?t.R:t.Rencoded,this._Sencoded=Array.isArray(t.S)?t.S:t.Sencoded}Ll(Wl,"S",(function(){return this.eddsa.decodeInt(this.Sencoded())})),Ll(Wl,"R",(function(){return this.eddsa.decodePoint(this.Rencoded())})),Ll(Wl,"Rencoded",(function(){return this.eddsa.encodePoint(this.R())})),Ll(Wl,"Sencoded",(function(){return this.eddsa.encodeInt(this.S())})),Wl.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},Wl.prototype.toHex=function(){return zf.encode(this.toBytes(),"hex").toUpperCase()};var Hl=Wl,Gl=zf.assert,Vl=zf.parseBytes;function $l(e){if(Gl("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof $l))return new $l(e);e=vl[e].curve;this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=gl.sha512}var Zl=$l;$l.prototype.sign=function(e,t){e=Vl(e);var r=this.keyFromSecret(t),i=this.hashInt(r.messagePrefix(),e),n=this.g.mul(i),a=this.encodePoint(n),s=this.hashInt(a,r.pubBytes(),e).mul(r.priv()),o=i.add(s).umod(this.curve.n);return this.makeSignature({R:n,S:o,Rencoded:a})},$l.prototype.verify=function(e,t,r){e=Vl(e),t=this.makeSignature(t);var i=this.keyFromPublic(r),n=this.hashInt(t.Rencoded(),i.pubBytes(),e),a=this.g.mul(t.S());return t.R().add(i.pub().mul(n)).eq(a)},$l.prototype.hashInt=function(){for(var e=this.hash(),t=0;t<arguments.length;t++)e.update(arguments[t]);return zf.intFromLE(e.digest()).umod(this.curve.n)},$l.prototype.keyPair=function(e){return new Fl(this,e)},$l.prototype.keyFromPublic=function(e){return Fl.fromPublic(this,e)},$l.prototype.keyFromSecret=function(e){return Fl.fromSecret(this,e)},$l.prototype.genKeyPair=function(e){e||(e={});var t=new kl({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||qf(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.curve.n.toArray()});return this.keyFromSecret(t.generate(32))},$l.prototype.makeSignature=function(e){return e instanceof Hl?e:new Hl(this,e)},$l.prototype.encodePoint=function(e){var t=e.getY().toArray("le",this.encodingLength);return t[this.encodingLength-1]|=e.getX().isOdd()?128:0,t},$l.prototype.decodePoint=function(e){var t=(e=zf.parseBytes(e)).length-1,r=e.slice(0,t).concat(-129&e[t]),i=0!=(128&e[t]),n=zf.intFromLE(r);return this.curve.pointFromY(n,i)},$l.prototype.encodeInt=function(e){return e.toArray("le",this.encodingLength)},$l.prototype.decodeInt=function(e){return zf.intFromLE(e)},$l.prototype.isPoint=function(e){return e instanceof this.pointClass};var Yl=tt((function(e,t){var r=t;r.utils=zf,r.rand=qf,r.curve=sl,r.curves=vl,r.ec=Bl,r.eddsa=Zl})),Xl=/*#__PURE__*/Object.freeze({__proto__:null,default:Yl,__moduleExports:Yl});return e.AEADEncryptedDataPacket=So,e.CleartextMessage=gc,e.CompressedDataPacket=lo,e.LiteralDataPacket=Zs,e.MarkerPacket=class{static get tag(){return re.packet.marker}read(e){return 80===e[0]&&71===e[1]&&80===e[2]}write(){return new Uint8Array([80,71,80])}},e.Message=pc,e.OnePassSignaturePacket=co,e.PacketList=ho,e.PrivateKey=cc,e.PublicKey=oc,e.PublicKeyEncryptedSessionKeyPacket=Eo,e.PublicKeyPacket=Mo,e.PublicSubkeyPacket=Do,e.SecretKeyPacket=Io,e.SecretSubkeyPacket=zo,e.Signature=Oo,e.SignaturePacket=so,e.Subkey=ic,e.SymEncryptedIntegrityProtectedDataPacket=ko,e.SymEncryptedSessionKeyPacket=xo,e.SymmetricallyEncryptedDataPacket=Ko,e.TrustPacket=class{static get tag(){return re.packet.trust}read(){throw new io("Trust packets are not supported")}write(){throw new io("Trust packets are not supported")}},e.UserAttributePacket=Ro,e.UserIDPacket=To,e.armor=fe,e.config=ie,e.createCleartextMessage=async function({text:e,...t}){if(!e)throw Error("createCleartextMessage: must pass options object containing `text`");if(!V.isString(e))throw Error("createCleartextMessage: options.text must be a string");const r=Object.keys(t);if(r.length>0)throw Error("Unknown option: "+r.join(", "));return new gc(e)},e.createMessage=async function({text:e,binary:t,filename:r,date:i=new Date,format:n=(void 0!==e?"utf8":"binary"),...a}){let s=void 0!==e?e:t;if(void 0===s)throw Error("createMessage: must pass options object containing `text` or `binary`");if(e&&!V.isString(e)&&!V.isStream(e))throw Error("createMessage: options.text must be a string or stream");if(t&&!V.isUint8Array(t)&&!V.isStream(t))throw Error("createMessage: options.binary must be a Uint8Array or stream");const o=Object.keys(a);if(o.length>0)throw Error("Unknown option: "+o.join(", "));const c=V.isStream(s);c&&(await E(),s=x(s));const u=new Zs(i);void 0!==e?u.setText(s,n):u.setBytes(s,n),void 0!==r&&u.setFilename(r);const h=new ho;h.push(u);const d=new pc(h);return d.fromStream=c,d},e.decrypt=async function({message:e,decryptionKeys:t,passwords:r,sessionKeys:i,verificationKeys:n,expectSigned:a=!1,format:s="utf8",signature:o=null,date:c=new Date,config:u,...h}){if(Ac(u={...ie,...u}),wc(e),n=Sc(n),t=Sc(t),r=Sc(r),i=Sc(i),h.privateKeys)throw Error("The `privateKeys` option has been removed from openpgp.decrypt, pass `decryptionKeys` instead");if(h.publicKeys)throw Error("The `publicKeys` option has been removed from openpgp.decrypt, pass `verificationKeys` instead");const d=Object.keys(h);if(d.length>0)throw Error("Unknown option: "+d.join(", "));try{const h=await e.decrypt(t,r,i,c,u);n||(n=[]);const d={};if(d.signatures=o?await h.verifyDetached(o,n,c,u):await h.verify(n,c,u),d.data="binary"===s?h.getLiteralData():h.getText(),d.filename=h.getFilename(),Pc(d,e),a){if(0===n.length)throw Error("Verification keys are required to verify message signatures");if(0===d.signatures.length)throw Error("Message is not signed");d.data=C([d.data,W((async()=>{await V.anyPromise(d.signatures.map((e=>e.verified)))}))])}return d.data=await Ec(d.data,e.fromStream,s),d}catch(e){throw V.wrapError("Error decrypting message",e)}},e.decryptKey=async function({privateKey:e,passphrase:t,config:r,...i}){Ac(r={...ie,...r});const n=Object.keys(i);if(n.length>0)throw Error("Unknown option: "+n.join(", "));if(!e.isPrivate())throw Error("Cannot decrypt a public key");const a=e.clone(!0),s=V.isArray(t)?t:[t];try{return await Promise.all(a.getKeys().map((e=>V.anyPromise(s.map((t=>e.keyPacket.decrypt(t))))))),await a.validate(r),a}catch(e){throw a.clearPrivateParams(),V.wrapError("Error decrypting private key",e)}},e.decryptSessionKeys=async function({message:e,decryptionKeys:t,passwords:r,date:i=new Date,config:n,...a}){if(Ac(n={...ie,...n}),wc(e),t=Sc(t),r=Sc(r),a.privateKeys)throw Error("The `privateKeys` option has been removed from openpgp.decryptSessionKeys, pass `decryptionKeys` instead");const s=Object.keys(a);if(s.length>0)throw Error("Unknown option: "+s.join(", "));try{return await e.decryptSessionKeys(t,r,i,n)}catch(e){throw V.wrapError("Error decrypting session keys",e)}},e.encrypt=async function({message:e,encryptionKeys:t,signingKeys:r,passwords:i,sessionKey:n,format:a="armored",signature:s=null,wildcard:o=!1,signingKeyIDs:c=[],encryptionKeyIDs:u=[],date:h=new Date,signingUserIDs:d=[],encryptionUserIDs:f=[],config:l,...p}){if(Ac(l={...ie,...l}),wc(e),_c(a),t=Sc(t),r=Sc(r),i=Sc(i),c=Sc(c),u=Sc(u),d=Sc(d),f=Sc(f),p.detached)throw Error("The `detached` option has been removed from openpgp.encrypt, separately call openpgp.sign instead. Don't forget to remove the `privateKeys` option as well.");if(p.publicKeys)throw Error("The `publicKeys` option has been removed from openpgp.encrypt, pass `encryptionKeys` instead");if(p.privateKeys)throw Error("The `privateKeys` option has been removed from openpgp.encrypt, pass `signingKeys` instead");if(void 0!==p.armor)throw Error("The `armor` option has been removed from openpgp.encrypt, pass `format` instead.");const y=Object.keys(p);if(y.length>0)throw Error("Unknown option: "+y.join(", "));r||(r=[]);const b=e.fromStream;try{if((r.length||s)&&(e=await e.sign(r,s,c,h,d,l)),e=e.compress(await Go("compression",t,h,f,l),l),e=await e.encrypt(t,i,n,o,u,h,f,l),"object"===a)return e;const p="armored"===a;return Ec(p?e.armor(l):e.write(),b,p?"utf8":"binary")}catch(e){throw V.wrapError("Error encrypting message",e)}},e.encryptKey=async function({privateKey:e,passphrase:t,config:r,...i}){Ac(r={...ie,...r});const n=Object.keys(i);if(n.length>0)throw Error("Unknown option: "+n.join(", "));if(!e.isPrivate())throw Error("Cannot encrypt a public key");const a=e.clone(!0),s=a.getKeys(),o=V.isArray(t)?t:Array(s.length).fill(t);if(o.length!==s.length)throw Error("Invalid number of passphrases given for key encryption");try{return await Promise.all(s.map((async(e,t)=>{const{keyPacket:i}=e;await i.encrypt(o[t],r),i.clearPrivateParams()}))),a}catch(e){throw a.clearPrivateParams(),V.wrapError("Error encrypting private key",e)}},e.encryptSessionKey=async function({data:e,algorithm:t,aeadAlgorithm:r,encryptionKeys:i,passwords:n,format:a="armored",wildcard:s=!1,encryptionKeyIDs:o=[],date:c=new Date,encryptionUserIDs:u=[],config:h,...d}){if(Ac(h={...ie,...h}),function(e,t){if(!V.isUint8Array(e))throw Error("Parameter ["+(t||"data")+"] must be of type Uint8Array")}(e),function(e,t){if(!V.isString(e))throw Error("Parameter ["+(t||"data")+"] must be of type String")}(t,"algorithm"),_c(a),i=Sc(i),n=Sc(n),o=Sc(o),u=Sc(u),d.publicKeys)throw Error("The `publicKeys` option has been removed from openpgp.encryptSessionKey, pass `encryptionKeys` instead");const f=Object.keys(d);if(f.length>0)throw Error("Unknown option: "+f.join(", "));try{return xc(await pc.encryptSessionKey(e,t,r,i,n,s,o,c,u,h),a,h)}catch(e){throw V.wrapError("Error encrypting session key",e)}},e.enums=re,e.generateKey=async function({userIDs:e=[],passphrase:t="",type:r="ecc",rsaBits:i=4096,curve:n="curve25519",keyExpirationTime:a=0,date:s=new Date,subkeys:o=[{}],format:c="armored",config:u,...h}){Ac(u={...ie,...u}),e=Sc(e);const d=Object.keys(h);if(d.length>0)throw Error("Unknown option: "+d.join(", "));if(0===e.length)throw Error("UserIDs are required for key generation");if("rsa"===r&&i<u.minRSABits)throw Error(`rsaBits should be at least ${u.minRSABits}, got: ${i}`);const f={userIDs:e,passphrase:t,type:r,rsaBits:i,curve:n,keyExpirationTime:a,date:s,subkeys:o};try{const{key:e,revocationCertificate:t}=await async function(e,t){e.sign=!0,(e=Xo(e)).subkeys=e.subkeys.map(((t,r)=>Xo(e.subkeys[r],e)));let r=[No(e,t)];r=r.concat(e.subkeys.map((e=>Fo(e,t))));const i=await Promise.all(r),n=await hc(i[0],i.slice(1),e,t),a=await n.getRevocationCertificate(e.date,t);return n.revocationSignatures=[],{key:n,revocationCertificate:a}}(f,u);return e.getKeys().forEach((({keyPacket:e})=>tc(e,u))),{privateKey:xc(e,c,u),publicKey:xc(e.toPublic(),c,u),revocationCertificate:t}}catch(e){throw V.wrapError("Error generating keypair",e)}},e.generateSessionKey=async function({encryptionKeys:e,date:t=new Date,encryptionUserIDs:r=[],config:i,...n}){if(Ac(i={...ie,...i}),e=Sc(e),r=Sc(r),n.publicKeys)throw Error("The `publicKeys` option has been removed from openpgp.generateSessionKey, pass `encryptionKeys` instead");const a=Object.keys(n);if(a.length>0)throw Error("Unknown option: "+a.join(", "));try{return await pc.generateSessionKey(e,t,r,i)}catch(e){throw V.wrapError("Error generating session key",e)}},e.readCleartextMessage=async function({cleartextMessage:e,config:t,...r}){if(t={...ie,...t},!e)throw Error("readCleartextMessage: must pass options object containing `cleartextMessage`");if(!V.isString(e))throw Error("readCleartextMessage: options.cleartextMessage must be a string");const i=Object.keys(r);if(i.length>0)throw Error("Unknown option: "+i.join(", "));const n=await de(e);if(n.type!==re.armor.signed)throw Error("No cleartext signed message.");const a=await ho.fromBinary(n.data,mc,t);!function(e,t){const r=function(e){const r=e=>t=>e.hashAlgorithm===t;for(let i=0;i<t.length;i++)if(t[i].constructor.tag===re.packet.signature&&!e.some(r(t[i])))return!1;return!0};let i=null,n=[];if(e.forEach((function(e){if(i=e.match(/Hash: (.+)/),!i)throw Error('Only "Hash" header allowed in cleartext signed message');i=i[1].replace(/\s/g,""),i=i.split(","),i=i.map((function(e){e=e.toLowerCase();try{return re.write(re.hash,e)}catch(t){throw Error("Unknown hash algorithm in armor header: "+e)}})),n=n.concat(i)})),!n.length&&!r([re.hash.md5]))throw Error('If no "Hash" header in cleartext signed message, then only MD5 signatures allowed');if(n.length&&!r(n))throw Error("Hash algorithm mismatch in armor header and signature")}(n.headers,a);const s=new Oo(a);return new gc(n.text,s)},e.readKey=async function({armoredKey:e,binaryKey:t,config:r,...i}){if(r={...ie,...r},!e&&!t)throw Error("readKey: must pass options object containing `armoredKey` or `binaryKey`");if(e&&!V.isString(e))throw Error("readKey: options.armoredKey must be a string");if(t&&!V.isUint8Array(t))throw Error("readKey: options.binaryKey must be a Uint8Array");const n=Object.keys(i);if(n.length>0)throw Error("Unknown option: "+n.join(", "));let a;if(e){const{type:t,data:i}=await de(e,r);if(t!==re.armor.publicKey&&t!==re.armor.privateKey)throw Error("Armored text not of type key");a=i}else a=t;return sc(await ho.fromBinary(a,uc,r))},e.readKeys=async function({armoredKeys:e,binaryKeys:t,config:r,...i}){r={...ie,...r};let n=e||t;if(!n)throw Error("readKeys: must pass options object containing `armoredKeys` or `binaryKeys`");if(e&&!V.isString(e))throw Error("readKeys: options.armoredKeys must be a string");if(t&&!V.isUint8Array(t))throw Error("readKeys: options.binaryKeys must be a Uint8Array");const a=Object.keys(i);if(a.length>0)throw Error("Unknown option: "+a.join(", "));if(e){const{type:t,data:i}=await de(e,r);if(t!==re.armor.publicKey&&t!==re.armor.privateKey)throw Error("Armored text not of type key");n=i}const s=[],o=await ho.fromBinary(n,uc,r),c=o.indexOfTag(re.packet.publicKey,re.packet.secretKey);if(0===c.length)throw Error("No key packet found");for(let e=0;e<c.length;e++){const t=sc(o.slice(c[e],c[e+1]));s.push(t)}return s},e.readMessage=async function({armoredMessage:e,binaryMessage:t,config:r,...i}){r={...ie,...r};let n=e||t;if(!n)throw Error("readMessage: must pass options object containing `armoredMessage` or `binaryMessage`");if(e&&!V.isString(e)&&!V.isStream(e))throw Error("readMessage: options.armoredMessage must be a string or stream");if(t&&!V.isUint8Array(t)&&!V.isStream(t))throw Error("readMessage: options.binaryMessage must be a Uint8Array or stream");const a=Object.keys(i);if(a.length>0)throw Error("Unknown option: "+a.join(", "));const s=V.isStream(n);if(s&&(await E(),n=x(n)),e){const{type:e,data:t}=await de(n,r);if(e!==re.armor.message)throw Error("Armored text not of type message");n=t}const o=await ho.fromBinary(n,dc,r),c=new pc(o);return c.fromStream=s,c},e.readPrivateKey=async function({armoredKey:e,binaryKey:t,config:r,...i}){if(r={...ie,...r},!e&&!t)throw Error("readPrivateKey: must pass options object containing `armoredKey` or `binaryKey`");if(e&&!V.isString(e))throw Error("readPrivateKey: options.armoredKey must be a string");if(t&&!V.isUint8Array(t))throw Error("readPrivateKey: options.binaryKey must be a Uint8Array");const n=Object.keys(i);if(n.length>0)throw Error("Unknown option: "+n.join(", "));let a;if(e){const{type:t,data:i}=await de(e,r);if(t!==re.armor.privateKey)throw Error("Armored text not of type private key");a=i}else a=t;const s=await ho.fromBinary(a,uc,r);return new cc(s)},e.readPrivateKeys=async function({armoredKeys:e,binaryKeys:t,config:r}){r={...ie,...r};let i=e||t;if(!i)throw Error("readPrivateKeys: must pass options object containing `armoredKeys` or `binaryKeys`");if(e&&!V.isString(e))throw Error("readPrivateKeys: options.armoredKeys must be a string");if(t&&!V.isUint8Array(t))throw Error("readPrivateKeys: options.binaryKeys must be a Uint8Array");if(e){const{type:t,data:n}=await de(e,r);if(t!==re.armor.privateKey)throw Error("Armored text not of type private key");i=n}const n=[],a=await ho.fromBinary(i,uc,r),s=a.indexOfTag(re.packet.secretKey);if(0===s.length)throw Error("No secret key packet found");for(let e=0;e<s.length;e++){const t=a.slice(s[e],s[e+1]),r=new cc(t);n.push(r)}return n},e.readSignature=async function({armoredSignature:e,binarySignature:t,config:r,...i}){r={...ie,...r};let n=e||t;if(!n)throw Error("readSignature: must pass options object containing `armoredSignature` or `binarySignature`");if(e&&!V.isString(e))throw Error("readSignature: options.armoredSignature must be a string");if(t&&!V.isUint8Array(t))throw Error("readSignature: options.binarySignature must be a Uint8Array");const a=Object.keys(i);if(a.length>0)throw Error("Unknown option: "+a.join(", "));if(e){const{type:e,data:t}=await de(n,r);if(e!==re.armor.signature)throw Error("Armored text not of type signature");n=t}const s=await ho.fromBinary(n,qo,r);return new Oo(s)},e.reformatKey=async function({privateKey:e,userIDs:t=[],passphrase:r="",keyExpirationTime:i=0,date:n,format:a="armored",config:s,...o}){Ac(s={...ie,...s}),t=Sc(t);const c=Object.keys(o);if(c.length>0)throw Error("Unknown option: "+c.join(", "));if(0===t.length)throw Error("UserIDs are required for key reformat");const u={privateKey:e,userIDs:t,passphrase:r,keyExpirationTime:i,date:n};try{const{key:e,revocationCertificate:t}=await async function(e,t){e=o(e);const{privateKey:r}=e;if(!r.isPrivate())throw Error("Cannot reformat a public key");if(r.keyPacket.isDummy())throw Error("Cannot reformat a gnu-dummy primary key");if(!r.getKeys().every((({keyPacket:e})=>e.isDecrypted())))throw Error("Key is not decrypted");const i=r.keyPacket;e.subkeys||(e.subkeys=await Promise.all(r.subkeys.map((async e=>{const r=e.keyPacket,n={key:i,bind:r},a=await Lo(e.bindingSignatures,i,re.signature.subkeyBinding,n,null,t).catch((()=>({})));return{sign:a.keyFlags&&a.keyFlags[0]&re.keyFlags.signData}}))));const n=r.subkeys.map((e=>e.keyPacket));if(e.subkeys.length!==n.length)throw Error("Number of subkey options does not match number of subkeys");e.subkeys=e.subkeys.map((t=>o(t,e)));const a=await hc(i,n,e,t),s=await a.getRevocationCertificate(e.date,t);return a.revocationSignatures=[],{key:a,revocationCertificate:s};function o(e,t={}){return e.keyExpirationTime=e.keyExpirationTime||t.keyExpirationTime,e.passphrase=V.isString(e.passphrase)?e.passphrase:t.passphrase,e.date=e.date||t.date,e}}(u,s);return{privateKey:xc(e,a,s),publicKey:xc(e.toPublic(),a,s),revocationCertificate:t}}catch(e){throw V.wrapError("Error reformatting keypair",e)}},e.revokeKey=async function({key:e,revocationCertificate:t,reasonForRevocation:r,date:i=new Date,format:n="armored",config:a,...s}){Ac(a={...ie,...a});const o=Object.keys(s);if(o.length>0)throw Error("Unknown option: "+o.join(", "));try{const s=t?await e.applyRevocationCertificate(t,i,a):await e.revoke(r,i,a);return s.isPrivate()?{privateKey:xc(s,n,a),publicKey:xc(s.toPublic(),n,a)}:{privateKey:null,publicKey:xc(s,n,a)}}catch(e){throw V.wrapError("Error revoking key",e)}},e.sign=async function({message:e,signingKeys:t,format:r="armored",detached:i=!1,signingKeyIDs:n=[],date:a=new Date,signingUserIDs:s=[],config:o,...c}){if(Ac(o={...ie,...o}),vc(e),_c(r),t=Sc(t),n=Sc(n),s=Sc(s),c.privateKeys)throw Error("The `privateKeys` option has been removed from openpgp.sign, pass `signingKeys` instead");if(void 0!==c.armor)throw Error("The `armor` option has been removed from openpgp.sign, pass `format` instead.");const u=Object.keys(c);if(u.length>0)throw Error("Unknown option: "+u.join(", "));if(e instanceof gc&&"binary"===r)throw Error("Cannot return signed cleartext message in binary format");if(e instanceof gc&&i)throw Error("Cannot detach-sign a cleartext message");if(!t||0===t.length)throw Error("No signing keys provided");try{let c;if(c=i?await e.signDetached(t,void 0,n,a,s,o):await e.sign(t,void 0,n,a,s,o),"object"===r)return c;const u="armored"===r;return c=u?c.armor(o):c.write(),i&&(c=T(e.packets.write(),(async(e,t)=>{await Promise.all([R(c,t),L(e).catch((()=>{}))])}))),Ec(c,e.fromStream,u?"utf8":"binary")}catch(e){throw V.wrapError("Error signing message",e)}},e.unarmor=de,e.verify=async function({message:e,verificationKeys:t,expectSigned:r=!1,format:i="utf8",signature:n=null,date:a=new Date,config:s,...o}){if(Ac(s={...ie,...s}),vc(e),t=Sc(t),o.publicKeys)throw Error("The `publicKeys` option has been removed from openpgp.verify, pass `verificationKeys` instead");const c=Object.keys(o);if(c.length>0)throw Error("Unknown option: "+c.join(", "));if(e instanceof gc&&"binary"===i)throw Error("Can't return cleartext message data as binary");if(e instanceof gc&&n)throw Error("Can't verify detached cleartext signature");try{const o={};if(o.signatures=n?await e.verifyDetached(n,t,a,s):await e.verify(t,a,s),o.data="binary"===i?e.getLiteralData():e.getText(),e.fromStream&&Pc(o,e),r){if(0===o.signatures.length)throw Error("Message is not signed");o.data=C([o.data,W((async()=>{await V.anyPromise(o.signatures.map((e=>e.verified)))}))])}return o.data=await Ec(o.data,e.fromStream,i),o}catch(e){throw V.wrapError("Error verifying signed message",e)}},Object.defineProperty(e,"__esModule",{value:!0}),e}({});
//# sourceMappingURL=openpgp.min.js.map
PKwc�\�\<�
�

enigma/READMEnu�[���Enigma Plugin for Roundcube

This plugin adds support for viewing and sending of signed and encrypted
messages in PGP (RFC 2440) and PGP/MIME (RFC 3156) format.

The plugin uses gpg binary on the server and stores all keys
(including private keys of the users) on the server.
Encryption/decryption is done server-side. So, this plugin
is for users that trust the server.

For multi-host environments see enigma_multihost setting description.

Implemented features:
+ PGP: signatures verification
+ PGP: messages decryption
+ PGP: Sending of encrypted/signed messages
+ PGP: keys management UI (key import, export, delete)
+ PGP: key generation (client- or server-side)
+ Handling of PGP keys attached to incoming messages
+ User preferences to disable plugin features
+ Attaching public keys to email
+ Key server(s) support (search, import)


INSTALLATION
------------

1. Rename config.inc.php.dist to config.inc.php.
2. Create a directory for keys storage that is writeable for the PHP process.
   This directory should be out of the document root, so it is not accessible
   from the web browser. Set it's location in $config['enigma_pgp_homedir'].
3. Make sure GnuPG is installed.


TODO
----

- Handling of big messages with temp files (? - security)
- Key info in contact details page (optional)
- Extended key management:
   - disable,
   - revoke,
   - change expiration date, change passphrase, add photo,
   - manage user IDs
   - export private keys
- Generate revocation certs
- Search filter to see invalid/expired keys
- Key server(s) support (upload, refresh)
- Mark keys as trusted/untrusted, display appropriate message in verify/decrypt status
- Performance improvements:
   - cache decrypted message key id so we can skip decryption if we have no password in session
   - cache (last or successful only?) sig verification status to not verify on every msg preview (optional)
- S/MIME: Certs generation (?)
- S/MIME: Certs management
- S/MIME: signed messages verification
- S/MIME: encrypted messages decryption
- S/MIME: Sending signed/encrypted messages
- S/MIME: Handling of certs attached to incoming messages
- S/MIME: Certificate info in Contacts details page (optional)


KNOWN ISSUES
------------

There are some known issues with accepting key passphrases on various
system configurations. This is caused by issues in PinEntry handling.
Make sure that vendor/bin/crypt-gpg-pinentry works from command line.

Possible reasons:
- non-working loader in shebang (#! /usr/bin/env php)
  Make sure it works for the user the php scripts are executed upon
  (i.e. apache, www-data, etc.)
- SELinux setting, try command: setsebool -P httpd_unified 0

Note: pinentry is used with gpg >= 2.0 and <= 2.1.12.
Note: for server use GnuPG developers still recommend version 1.4.
PKwc�\H�I��3managesieve/skins/elastic/templates/seteditraw.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="managesieve.filterseteditraw" /></h1>

<div class="formcontent raweditor">
	<roundcube:object name="filterseteditraw" /></form>
</div>

<div class="formbuttons">
	<roundcube:button command="plugin.managesieve-save" class="btn btn-primary submit" label="save" />
</div>

<roundcube:include file="includes/footer.html" />
PKwc�\;�P͕�0managesieve/skins/elastic/templates/setedit.htmlnu�[���<roundcube:include file="includes/layout.html" />

<h1 class="voice"><roundcube:label name="managesieve.newfilterset" /></h1>

<div class="formcontent">
	<roundcube:object name="filtersetform" class="propform" />
</div>

<div class="formbuttons">
	<roundcube:button command="plugin.managesieve-save" class="btn btn-primary submit" label="save" />
</div>

<roundcube:include file="includes/footer.html" />
PKwc�\��*�884managesieve/skins/elastic/templates/managesieve.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" />

<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="managesieve.filters" /></h1>

<!-- filters list -->
<div id="layout-list" class="listbox selected">
	<div class="header">
		<a class="button icon back-sidebar-button" href="#sidebar"><span class="inner"><roundcube:label name="settings" /></span></a>
		<span id="aria-label-filterslist" class="header-title"><roundcube:label name="managesieve.filters" /></span>
		<roundcube:if condition="!env:managesieve_no_set_list" />
			<div class="toolbar menu" role="toolbar">
				<roundcube:button name="filtersetactions" type="link" title="managesieve.arialabelfiltersetactions" label="actions"
					class="actions" innerclass="inner" data-popup="filterset-menu" />
			</div>
		<roundcube:endif />
		<a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a>
	</div>
	<roundcube:if condition="!env:managesieve_no_set_list" />
	<div class="pagenav pagenav-list menu" onclick="UI.switch_nav_list(this)">
		<a class="expand"><span class="inner"></span></a>
		<span id="filterset-name" class="pagenav-text"></span>
		<h2 class="voice" id="aria-label-filtersets"><roundcube:label name="managesieve.filtersets" /></h2>
	</div>
	<div id="filtersetslistbox" class="navlist scroller" aria-labelledby="aria-label-filtersets">
		<roundcube:object name="filtersetslist" id="filtersetslist" class="listing"
			summary="managesieve.ariasummaryfiltersetslist" type="list" noheader="true" role="listbox" />
	</div>
	<roundcube:endif />
	<div class="scroller" aria-labelledby="aria-label-filterslist">
		<roundcube:object name="filterslist" id="filterslist" class="listing" noheader="true"
			role="listbox" data-list="filters_list"
			data-label-msg="listempty" data-label-ext="listusebutton" data-create-command="plugin.managesieve-add" />
	</div>
</div>

<!-- filter details frame -->
<div id="layout-content" role="main">
	<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
	<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
		<!-- toolbar -->
		<div id="responsestoolbar" class="toolbar menu">
			<roundcube:button command="plugin.managesieve-add" type="link"
				label="create" title="managesieve.filteradd" innerClass="inner"
				class="create disabled" classAct="create" data-fab="true" />
			<roundcube:button command="plugin.managesieve-del" type="link"
				label="delete" title="delete" innerClass="inner"
				class="delete disabled" classAct="delete" />
		</div>
	</div>
	<h2 id="aria-label-filterframe" class="voice"><roundcube:label name="managesieve.arialabelfilterform" /></h2>
	<div class="iframe-wrapper">
		<roundcube:object name="contentframe" id="filter-box" src="env:blankpage" title="managesieve.arialabelfilterform"
			aria-labelledby="aria-label-filterform" />
	</div>
</div>

<div id="filterset-menu" class="popupmenu">
	<h3 id="aria-label-setactions" class="voice"><roundcube:label name="managesieve.arialabelfiltersetactions" /></h3>
	<ul class="menu listing" id="filtersetmenu-menu" role="menu" aria-labelledby="aria-label-setactions">
		<roundcube:button type="link-menuitem" command="plugin.managesieve-setadd" label="managesieve.filtersetadd" class="create disabled" classAct="create active" />
		<roundcube:if condition="env:raw_sieve_editor != false" />
			<roundcube:button type="link-menuitem" command="plugin.managesieve-seteditraw" label="managesieve.filterseteditraw" class="edit disabled" classAct="edit active" />
		<roundcube:endif />
		<roundcube:button type="link-menuitem" command="plugin.managesieve-setact" label="managesieve.filtersetswitch" class="status disabled" classAct="status active" />
		<roundcube:button type="link-menuitem" command="plugin.managesieve-setdel" label="managesieve.filtersetdel" class="delete disabled" classAct="delete active" />
		<roundcube:button type="link-menuitem" command="plugin.managesieve-setget" label="download" class="download disabled" classAct="download active" />
		<roundcube:container name="filtersetoptions" id="filtersetmenu-menu" />
	</ul>
</div>

<style>
#filterslist tr.filtermoveup td {
  border-top: 1px dotted #555 !important;
}
#filterslist tr.filtermovedown td {
  border-bottom: 1px dotted #555 !important;
}
</style>

<roundcube:include file="includes/footer.html" />
PKwc�\&�J==3managesieve/skins/elastic/templates/filteredit.htmlnu�[���<roundcube:include file="includes/layout.html" />

<roundcube:if condition="env:task != 'mail'" />
	<h1 class="voice"><roundcube:label name="managesieve.filterdef" /></h1>
<roundcube:endif />

<div class="formcontent">
	<roundcube:object name="filterform" id="filter-form" class="propform" compact-form="true" />
</div>

<roundcube:if condition="env:task != 'mail'" />
<div class="formbuttons">
	<roundcube:button command="plugin.managesieve-save" class="btn btn-primary submit" label="save" />
</div>
<roundcube:endif />

<roundcube:include file="includes/footer.html" />
PKwc�\��F\��1managesieve/skins/elastic/templates/vacation.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" />

<h1 class="voice"><roundcube:label name="managesieve.vacation" /></h1>

<div id="layout-content" class="selected" role="main">
	<div class="header">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
	</div>
	<div class="formcontainer scroller" aria-labelledby="aria-label-vacationform">
		<div class="formcontent">
			<h2 class="voice" id="aria-label-vacationform"><roundcube:label name="managesieve.vacation" /></h2>
			<roundcube:object name="vacationform" id="vacationform" class="propform" />
		</div>
		<div class="formbuttons">
			<roundcube:button command="plugin.managesieve-save" class="btn btn-primary submit" label="save" />
		</div>
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKwc�\�짨��0managesieve/skins/elastic/templates/forward.htmlnu�[���<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" />

<h1 class="voice"><roundcube:label name="managesieve.forward" /></h1>

<div id="layout-content" class="selected" role="main">
	<div class="header">
		<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
		<span class="header-title"></span>
	</div>
	<div class="formcontainer scroller" aria-labelledby="aria-label-forwardform">
		<div class="formcontent">
			<h2 class="voice" id="aria-label-forwardform"><roundcube:label name="managesieve.forward" /></h2>
			<roundcube:object name="forwardform" id="forwardform" class="propform" />
		</div>
		<div class="formbuttons">
			<roundcube:button command="plugin.managesieve-save" class="btn btn-primary submit" label="save" />
		</div>
	</div>
</div>

<roundcube:include file="includes/footer.html" />
PKwc�\����managesieve/composer.jsonnu�[���{
    "name": "roundcube/managesieve",
    "type": "roundcube-plugin",
    "description": "Adds a possibility to manage Sieve scripts (incoming mail filters). It's clickable interface which operates on text scripts and communicates with server using managesieve protocol. Adds Filters tab in Settings.",
    "license": "GPL-3.0-or-later",
    "version": "9.4",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3",
        "pear/net_sieve": "~1.4.4"
    }
}
PKwc�\�9F�FdFdmanagesieve/managesieve.min.jsnu�[���/**
 * (Manage)Sieve Filters plugin
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function rule_header_select(e){var t,i=document.getElementById("header"+e),a=document.getElementById("rule_size"+e),s=document.getElementById("rule_spamtest"+e),n=document.getElementById("rule_message"+e),r=document.getElementById("rule_op"+e),l=document.getElementById("custom_header"+e+"_list"),o=document.getElementById("custom_var"+e+"_list"),c=document.getElementById("rule_mod"+e),m=document.getElementById("rule_trans"+e),d=document.getElementById("rule_comp"+e),_=document.getElementById("rule_mime"+e),u=document.getElementById("rule_mime_part"+e),g=document.getElementById("rule_date_part"+e),v=document.getElementById("rule_date_header_div"+e),p=$("#rule_op"+e),h=i.value,f=[r,l,o,c,m,d,a,_,u];"size"==h?(n&&f.push(n),$.each(f,function(){this!=window&&(this.style.display="none")}),s&&(s.style.display="none"),a.style.display=""):"spamtest"==h?(n&&f.push(n),$.each(f,function(){this!=window&&(this.style.display="none")}),s&&(s.style.display=""),a.style.display="none"):"message"==h&&n?($.each(f,function(){this!=window&&(this.style.display="none")}),n.style.display=""):(t="body"!=h&&"currentdate"!=h&&"date"!=h&&"string"!=h,l.style.display="..."!=h?"none":"",o.style.display="string"!=h?"none":"",a.style.display="none",r.style.display="",d.style.display="",c.style.display=t?"":"none",m.style.display="body"==h?"":"none",s&&(s.style.display="none"),_&&(_.style.display=t?"":"none"),u&&(u.style.display=t?"":"none"),n&&(n.style.display="message"==h?"":"none")),g&&(g.style.display="currentdate"==h||"date"==h?"inline":"none"),v&&(v.style.display="date"==h?"":"none"),$('[value="exists"],[value="notexists"]',p).prop("disabled","string"==h),p.val()||p.val("contains"),rule_op_select(r,e,h),rule_mod_select(e,h,!t),rule_mime_select(e),s&&rule_spamtest_select(e),i.style.width="..."==h?"40px":""}function rule_op_select(e,t,i){var a=document.getElementById("rule_target"+t+"_list");i=i||document.getElementById("header"+t).value,a.style.display=e.value.match(/^(exists|notexists)$/)||i.match(/^(size|spamtest|message)$/)?"none":""}function rule_trans_select(e){var t=document.getElementById("rule_trans_op"+e);document.getElementById("rule_trans_type"+e).style.display="content"!=t.value?"none":"inline"}function rule_mod_select(e,t,i){var a=document.getElementById("rule_mod_op"+e),s=document.getElementById("rule_mod_type"+e),n=document.getElementById("rule_duplicate_div"+e),r=document.getElementById("rule_index_div"+e);i&&(a.value=""),t=t||document.getElementById("header"+e).value,s.style.display="address"!=a.value&&"envelope"!=a.value?"none":"",r&&(r.style.display=t.match(/^(body|currentdate|size|spamtest|message|string)$/)||"envelope"==a.value?"none":""),n&&(n.style.display="message"==t?"":"none")}function rule_spamtest_select(e){var t=document.getElementById("rule_spamtest_op"+e);document.getElementById("rule_spamtest_target"+e).style.display=t.value?"":"none",$(t)[t.value?"removeClass":"addClass"]("rounded-right")}function rule_join_radio(e){$("#rules").css("display","any"==e?"none":"block")}function rule_adv_switch(e,t){var i=(t=$(t)).hasClass("hide"),e=$("#rule_advanced"+e);i?(e.get(0).style.display="none",t.removeClass("hide").addClass("show")):(e.get(0).style.display="",t.removeClass("show").addClass("hide"))}function rule_mime_select(e){var t=$("#rule_mime_type"+e),e=$("#rule_mime_param"+e+"_list");e.length&&(e[0].style.display="param"==t.val()?"":"none")}function action_type_select(e){var t,i=document.getElementById("action_type"+e).value,a={},s={mailbox:document.getElementById("action_mailbox"+e),target:document.getElementById("redirect_target"+e),target_area:document.getElementById("action_target_area"+e),flags:document.getElementById("action_flags"+e),vacation:document.getElementById("action_vacation"+e),forward:document.getElementById("action_forward"+e),set:document.getElementById("action_set"+e),notify:document.getElementById("action_notify"+e),addheader:document.getElementById("action_addheader"+e),deleteheader:document.getElementById("action_deleteheader"+e)};for(t in"fileinto"==i||"fileinto_copy"==i?a.mailbox=1:"redirect"==i||"redirect_copy"==i?a.target=1:i.match(/^reject|ereject$/)?a.target_area=1:i.match(/^(add|set|remove)flag$/)?a.flags=1:i.match(/^(vacation|forward|set|notify|addheader|deleteheader)$/)&&(a[i]=1),s)s[t]&&(s[t].style.display=a[t]?"":"none")}function vacation_action_select(){var e=$("#vacation_action").val();$("#action_target_span")["discard"==e||"keep"==e?"hide":"show"]()}function smart_field_init(i){if(window.UI&&UI.smart_field_init)return UI.smart_field_init(i);var e=i.id+"_list",a=$('<span class="listarea"></span>'),t=i.value?i.value.split("\n"):[""];$("#"+e).length||($.each(t,function(e,t){a.append(smart_field_row(t,e,i))}),a.attr("id",e),(i=$(i)).attr("disabled")?a.hide():i.prop("disabled",!0),i.data("hidden")&&a.hide(),i.after(a),i.hasClass("error")&&(a.addClass("error"),rcmail.managesieve_tip_register([[e,i.data("tip-class"),i.data("tip-msg")]])))}function smart_field_row(e,t,a){var i=$('<span class="listelement"><span class="reset"></span><input type="text"></span>'),e={value:e,name:a.name+"[]",size:$(a).data("size"),title:a.title,placeholder:$(a).attr("placeholder")};i.find("input").attr(e).keydown(function(e){var t=$(this);if(13==e.which){var i=smart_field_row("",(new Date).getTime(),a);t.parent().after(i),$("input",i).focus()}else if((8==e.which||46==e.which)&&""==t.val()){i=t.parent();if(1<i.parent().children().length)return(i.prev().length?i.prev():i.next()).children("input").focus(),i.remove(),!1}});return $('span[class="reset"]',i).click(function(){var e=$(this.parentNode);1<e.parent().children().length?e.remove():$("input",e).val("").focus()}),i}function smart_field_reset(i,e){if(window.UI&&UI.smart_field_reset)return UI.smart_field_reset(i,e);var t=i.id+"_list",e=e.length?e:[""];(area=$("#"+t)).empty(),$.each(e,function(e,t){area.append(smart_field_row(t,e,i))})}function sieve_formattime(e,t){for(var i,a="",s=rcmail.env.time_format||"H:i",n=0;n<s.length;n++)switch(i=s.charAt(n)){case"a":a+=12<=e?"pm":"am";break;case"A":a+=12<=e?"PM":"AM";break;case"g":case"h":a+=("h"==i&&e<10?"0":"")+e;break;case"G":a+=e;break;case"H":a+=(e<10?"0":"")+e;break;case"i":a+=(t<10?"0":"")+t;break;case"s":a+="00";default:a+=i}return a}function sieve_form_init(){var e=rcmail.gui_objects.sieveform;"plugin.managesieve"==rcmail.env.action&&"mail"==rcmail.env.task&&parent.rcmail.managesieve_dialog_resize(e),$('input[type="text"]',e).first().focus(),$('textarea[data-type="list"]',e).each(function(){smart_field_init(this)}),$('[name^="_header"]',e).each(function(){/([0-9]+)$/.test(this.id)&&rule_header_select(RegExp.$1)}),$.datepicker&&rcmail.env.date_format&&($.datepicker.setDefaults({dateFormat:rcmail.env.date_format,changeMonth:!0,showOtherMonths:!0,selectOtherMonths:!0,onSelect:function(e){$(this).focus().val(e)}}),$("input.datepicker").datepicker()),$("#vacation_timefrom, #vacation_timeto").attr("autocomplete","off").autocomplete({delay:100,minLength:1,source:function(e,t){for(var i=[],a=0;a<24;a++)i.push(sieve_formattime(a,0));return i.push(sieve_formattime(23,59)),t(i)},open:function(e,t){var i=$(this),a=i.val(),s=i.autocomplete("widget").css("width","10em"),n=i.data("ui-autocomplete").menu;a&&a.length&&s.children().each(function(){var e=$(this);0==e.text().indexOf(a)&&n._scrollIntoView(e)})},select:function(e,t){return $(this).val(t.item.value),!1}}).click(function(){$(this).autocomplete("search",$(this).val()||" ")}),$("input.error").each(function(){String(this.id).match(/([0-9]+)$/)&&$("#ruleadv"+RegExp.$1+".show").click()})}var cmeditor;function cmCreateErrorElem(e){var t=document.createElement("div");return t.style.color="#822",t.innerHTML="●",t.title=e,t}function cmScrollToError(){var e=$(".CodeMirror-lines .line-error"),t=$(".CodeMirror-scroll");e.parent();t.scrollTop(e.offset().top-t.offset().top-Math.round(t.height()/2))}function sieve_raw_editor_init(){var e=document.getElementById("rawfiltersettxt");e&&!cmeditor&&(cmeditor=CodeMirror.fromTextArea(e,{mode:"sieve",lineNumbers:!0,gutters:["CodeMirror-linenumbers","errorGutter"],styleActiveLine:!0}),$.each(rcmail.env.sieve_errors||[],function(e,t){var i=Number(t.line)-1;cmeditor.addLineClass(i,"background","line-error"),cmeditor.setGutterMarker(i,"errorGutter",cmCreateErrorElem(t.msg)),e||cmScrollToError()}))}window.rcmail&&rcmail.addEventListener("init",function(e){var t;"mail"==rcmail.env.task&&("show"!=rcmail.env.action?rcmail.env.message_commands.push("managesieve-create"):rcmail.enable_command("managesieve-create",!0)),"mail"!=rcmail.env.task&&!rcmail.env.action.startsWith("plugin.managesieve")||rcmail.env.framed||(rcmail.env.ms_tip_layer=$('<div id="managesieve-tip" class="popupmenu"></div>'),rcmail.env.ms_tip_layer.appendTo(document.body)),rcmail.register_command("plugin.managesieve-save",function(){rcmail.managesieve_save()}),rcmail.register_command("plugin.managesieve-act",function(){rcmail.managesieve_act()}),rcmail.register_command("plugin.managesieve-add",function(){rcmail.managesieve_add()}),rcmail.register_command("plugin.managesieve-del",function(){rcmail.managesieve_del()}),rcmail.register_command("plugin.managesieve-move",function(){rcmail.managesieve_move()}),rcmail.register_command("plugin.managesieve-setadd",function(){rcmail.managesieve_setadd()}),rcmail.register_command("plugin.managesieve-setdel",function(){rcmail.managesieve_setdel()}),rcmail.register_command("plugin.managesieve-setact",function(){rcmail.managesieve_setact()}),rcmail.register_command("plugin.managesieve-setget",function(){rcmail.managesieve_setget()}),rcmail.register_command("plugin.managesieve-seteditraw",function(){rcmail.managesieve_seteditraw()}),rcmail.env.action.startsWith("plugin.managesieve")&&(rcmail.gui_objects.sieveform?(rcmail.enable_command("plugin.managesieve-save",!0),sieve_form_init()):rcmail.gui_objects.sievesetrawform?(rcmail.enable_command("plugin.managesieve-save",!0),sieve_raw_editor_init()):(rcmail.enable_command("plugin.managesieve-add",!rcmail.env.sieveconnerror&&-1==$.inArray("new_filter",rcmail.env.managesieve_disabled_actions)),rcmail.enable_command("plugin.managesieve-setadd",!rcmail.env.sieveconnerror&&-1==$.inArray("new_set",rcmail.env.managesieve_disabled_actions))),t=rcmail.env.currentset,rcmail.gui_objects.filterslist&&(rcmail.filters_list=new rcube_list_widget(rcmail.gui_objects.filterslist,{multiselect:!1,draggable:!0,keyboard:!0}),rcmail.filters_list.addEventListener("select",function(e){rcmail.managesieve_select(e)}).addEventListener("keypress",function(e){rcmail.list_keypress(e,{del:"plugin.managesieve-del"})}).addEventListener("dragstart",function(e){rcmail.managesieve_dragstart(e)}).addEventListener("dragend",function(e){rcmail.managesieve_dragend(e)}).addEventListener("initrow",function(e){e.obj.onmouseover=function(){rcmail.managesieve_focus_filter(e)},e.obj.onmouseout=function(){rcmail.managesieve_unfocus_filter(e)}}).init()),rcmail.gui_objects.filtersetslist)&&(rcmail.filtersets_list=new rcube_list_widget(rcmail.gui_objects.filtersetslist,{multiselect:!1,draggable:!1,keyboard:!0}),rcmail.filtersets_list.init().focus(),null!=t&&($("#filterset-name").text(t),t=rcmail.managesieve_setid(t),rcmail.filtersets_list.select(t)),rcmail.filtersets_list.addEventListener("select",function(e){rcmail.managesieve_setselect(e)}),t=rcmail.filtersets_list.rowcount,rcmail.enable_command("plugin.managesieve-set",!0),rcmail.enable_command("plugin.managesieve-setact",0<t&&-1==$.inArray("enable_disable_set",rcmail.env.managesieve_disabled_actions)),rcmail.enable_command("plugin.managesieve-setget",0<t&&-1==$.inArray("download_set",rcmail.env.managesieve_disabled_actions)),rcmail.enable_command("plugin.managesieve-setdel",1<t&&-1==$.inArray("delete_set",rcmail.env.managesieve_disabled_actions)),rcmail.enable_command("plugin.managesieve-seteditraw",0<t&&rcmail.env.raw_sieve_editor),$("tr",rcmail.gui_objects.filtersetslist).each(function(e,t){rcmail.managesieve_fixdragend(t)}))}),rcube_webmail.prototype.managesieve_add=function(){this.load_managesieveframe("_nav=hide",!0)},rcube_webmail.prototype.managesieve_del=function(){var s=this.filters_list.get_single_selection();this.confirm_dialog(this.get_label("managesieve.filterdeleteconfirm"),"delete",function(e,t){var i="_act=delete&_fid="+t.filters_list.rows[s].uid,a=t.set_busy(!0,"loading");t.http_post("plugin.managesieve-action",i,a)})},rcube_webmail.prototype.managesieve_act=function(){var e=this.filters_list.get_single_selection(),t=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action","_act=act&_fid="+this.filters_list.rows[e].uid,t)},rcube_webmail.prototype.managesieve_select=function(e){var t=e.get_single_selection(),e=(null!=t&&(t=e.rows[t].uid,this.load_managesieveframe("_fid="+t)),void 0!==t&&null!=t);this.enable_command("plugin.managesieve-act",e),this.enable_command("plugin.managesieve-del",e&&-1==$.inArray("delete_filter",rcmail.env.managesieve_disabled_actions))},rcube_webmail.prototype.managesieve_setselect=function(e){this.enable_command("plugin.managesieve-setdel",1<e.rowcount&&-1==$.inArray("delete_set",rcmail.env.managesieve_disabled_actions)),this.enable_command("plugin.managesieve-setact",0<e.rowcount&&-1==$.inArray("enable_disable_set",rcmail.env.managesieve_disabled_actions)),this.enable_command("plugin.managesieve-setget",0<e.rowcount&&-1==$.inArray("delete_set",rcmail.env.managesieve_disabled_actions)),this.enable_command("plugin.managesieve-seteditraw",0<e.rowcount&&this.env.raw_sieve_editor),rcmail.env.contextmenu_opening||(this.show_contentframe(!1),this.filters_list.clear(!0),null!=(e=e.get_single_selection())&&(this.managesieve_list(this.env.filtersets[e]),$("#filterset-name").text(this.env.filtersets[e])))},rcube_webmail.prototype.managesieve_rowid=function(e){var t,i=this.filters_list.rows;for(t in i)if(null!=i[t]&&i[t].uid==e)return t},rcube_webmail.prototype.managesieve_setid=function(e){for(var t in this.env.filtersets)if(this.env.filtersets[t]==e)return t},rcube_webmail.prototype.managesieve_list=function(e){var t=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action","_act=list&_set="+urlencode(e),t)},rcube_webmail.prototype.managesieve_setget=function(){var e=this.filtersets_list.get_single_selection(),e=this.env.filtersets[e];this.goto_url("plugin.managesieve-action",{_act:"setget",_set:e},!1,!0)},rcube_webmail.prototype.managesieve_setact=function(){var e=this.filtersets_list.get_single_selection(),t=this.set_busy(!0,"loading"),i=this.env.filtersets[e],e=$("#rcmrow"+e).hasClass("disabled")?"setact":"deact";this.http_post("plugin.managesieve-action","_act="+e+"&_set="+urlencode(i),t)},rcube_webmail.prototype.managesieve_setdel=function(){var s=this.filtersets_list.get_single_selection();this.confirm_dialog(this.get_label("managesieve.setdeleteconfirm"),"delete",function(e,t){var i=t.env.filtersets[s],a=t.set_busy(!0,"loading");t.http_post("plugin.managesieve-action","_act=setdel&_set="+urlencode(i),a)})},rcube_webmail.prototype.managesieve_seteditraw=function(){var e=this.filtersets_list.get_single_selection(),e=this.env.filtersets[e];this.load_managesieveframe("_nav=hide&_seteditraw=1&_set="+urlencode(e),!0)},rcube_webmail.prototype.managesieve_setadd=function(){this.load_managesieveframe("_nav=hide&_newset=1",!0)},rcube_webmail.prototype.managesieve_updatelist=function(e,t){switch(this.set_busy(!0),e){case"del":var i=t.id;(s=this.filters_list).remove_row(this.managesieve_rowid(t.id)),this.show_contentframe(!1),this.reset_filters_list(),$("tr",this.filters_list.list).each(function(){var e;"none"==this.style.display?$(this).detach():(e=this.id.substr(6),$(this).off(),i<e&&(this.uid=String(e-1),$(this).attr("id","rcmrow"+this.uid)))}),s.init();break;case"update":var a=$("#rcmrow"+this.managesieve_rowid(t.id));t.name&&$("td",a).text(t.name),t.disabled?a.addClass("disabled"):a.removeClass("disabled"),$("#fenabled",$("iframe").contents()).prop("checked",!t.disabled);break;case"add":var s=this.filters_list,a=$('<tr><td class="name"></td></tr>');$("td",a).text(t.name),a.attr("id","rcmrow"+t.id),t.disabled&&a.addClass("disabled"),s.insert_row(a.get(0)),s.highlight_row(t.id),this.enable_command("plugin.managesieve-del",-1==$.inArray("delete_rule",rcmail.env.managesieve_disabled_actions)),this.enable_command("plugin.managesieve-act",!0);break;case"list":var n,r,l,o,s=this.filters_list;for(n in t.clear&&s.clear(),t.list)o=t.list[n],r=document.createElement("TR"),l=document.createElement("TD"),$(l).text(o.name),l.className="name",r.id="rcmrow"+o.id,o.class&&(r.className=o.class),r.appendChild(l),s.insert_row(r);t.set?s.highlight_row(t.set):this.enable_command("plugin.managesieve-del","plugin.managesieve-act",!1);break;case"setact":i=this.managesieve_setid(t.name),a=$("#rcmrow"+i);t.active?(t.all&&$("tr",this.gui_objects.filtersetslist).addClass("disabled"),a.removeClass("disabled")):a.addClass("disabled");break;case"setdel":i=this.managesieve_setid(t.name);this.filters_list.clear(),this.show_contentframe(!1),this.enable_command("plugin.managesieve-setdel","plugin.managesieve-setact","plugin.managesieve-setget","plugin.managesieve-seteditraw",!1),this.filtersets_list.remove_row(i,!0),delete this.env.filtersets[i];break;case"setadd":var c,i="S"+(new Date).getTime(),s=this.filtersets_list,a=$('<tr class="disabled"><td class="name"></td></tr>');$("td",a).text(t.name),a.attr("id","rcmrow"+i),this.env.filtersets[i]=t.name,s.insert_row(a.get(0)),t.index!=s.rowcount-1&&(a.detach(),c=$("tr:visible",s.list).get(t.index),a.insertBefore(c)),s.select(i),this.managesieve_fixdragend(a);break;case"refresh":this.reset_filters_list(!0)}this.set_busy(!1)},rcube_webmail.prototype.reset_filters_list=function(e){this.filters_list.clear_selection(),this.enable_command("plugin.managesieve-act","plugin.managesieve-del",!1),e&&(e=this.filtersets_list.get_single_selection(),this.filters_list.clear(!0),this.managesieve_list(this.env.filtersets[e]))},rcube_webmail.prototype.load_managesieveframe=function(e,t){t&&this.reset_filters_list();t=this.get_frame_window(this.env.contentframe),e=this.url("plugin.managesieve-action","_framed=1"+(e?"&"+e:""));t&&this.location_href(e,t,!0)},rcube_webmail.prototype.managesieve_dragstart=function(e){var t=this.filters_list.get_single_selection();this.drag_active=!0,this.drag_filter=t},rcube_webmail.prototype.managesieve_dragend=function(e){var t;this.drag_active&&(this.drag_filter_target&&(t=this.set_busy(!0,"loading"),this.show_contentframe(!1),this.http_post("plugin.managesieve-action","_act=move&_fid="+this.drag_filter+"&_to="+this.drag_filter_target,t)),this.drag_active=!1)},rcube_webmail.prototype.managesieve_fixdragend=function(e){var t=this;$(e).on("mouseup"+(bw.iphone||bw.ipad?" touchend":""),function(e){t.drag_active&&t.filters_list.drag_mouse_up(e)})},rcube_webmail.prototype.managesieve_focus_filter=function(e){var t=e.id.replace(/^rcmrow/,"");this.drag_active&&t!=this.drag_filter&&(this.drag_filter_target=t,$(e.obj).addClass(t<this.drag_filter?"filtermoveup":"filtermovedown"))},rcube_webmail.prototype.managesieve_unfocus_filter=function(e){this.drag_active&&($(e.obj).removeClass("filtermoveup filtermovedown"),this.drag_filter_target=null)},rcube_webmail.prototype.managesieve_save=function(){var e;"plugin.managesieve-vacation"==this.env.action?(e=$(this.gui_objects.sieveform).serialize(),this.http_post("plugin.managesieve-vacation",e,this.display_message(this.get_label("managesieve.vacation.saving"),"loading"))):"plugin.managesieve-forward"==this.env.action?(e=$(this.gui_objects.sieveform).serialize(),this.http_post("plugin.managesieve-forward",e,this.display_message(this.get_label("managesieve.forward.saving"),"loading"))):this.gui_objects.sieveform?(parent.rcmail&&parent.rcmail.filters_list&&"filtersetform"!=this.gui_objects.sieveform.name&&null!=(e=parent.rcmail.filters_list.get_single_selection())&&(this.gui_objects.sieveform.elements._fid.value=parent.rcmail.filters_list.rows[e].uid),this.gui_objects.sieveform.submit()):this.gui_objects.sievesetrawform&&this.gui_objects.sievesetrawform.submit()},rcube_webmail.prototype.managesieve_ruleadd=function(e){this.http_post("plugin.managesieve-action","_act=ruleadd&_rid="+e)},rcube_webmail.prototype.managesieve_rulefill=function(e,t,i){var a;""!=e&&(a=$("#rules")[0],t=$("<div>").attr({class:"rulerow",id:"rulerow"+t}).html(e),this.managesieve_insertrow(a,t,i),$('textarea[data-type="list"]',t).each(function(){smart_field_init(this)}),this.managesieve_formbuttons(a))},rcube_webmail.prototype.managesieve_ruledel=function(a){$("#ruledel"+a).hasClass("disabled")||this.confirm_dialog(this.get_label("managesieve.ruledeleteconfirm"),"delete",function(e,t){var i=document.getElementById("rulerow"+a);i.parentNode.removeChild(i),t.managesieve_formbuttons(document.getElementById("rules"))})},rcube_webmail.prototype.managesieve_actionadd=function(e){this.http_post("plugin.managesieve-action","_act=actionadd&_aid="+e)},rcube_webmail.prototype.managesieve_actionfill=function(e,t,i){var a;""!=e&&(a=$("#actions")[0],t=$("<div>").attr({class:"actionrow",id:"actionrow"+t}).html(e),this.managesieve_insertrow(a,t,i),$('textarea[data-type="list"]',t).each(function(){smart_field_init(this)}),this.managesieve_formbuttons(a))},rcube_webmail.prototype.managesieve_actiondel=function(a){$("#actiondel"+a).hasClass("disabled")||this.confirm_dialog(this.get_label("managesieve.actiondeleteconfirm"),"delete",function(e,t){var i=document.getElementById("actionrow"+a);i.parentNode.removeChild(i),t.managesieve_formbuttons(document.getElementById("actions"))})},rcube_webmail.prototype.managesieve_insertrow=function(e,t,i){i=$("#"+("rules"==$(e).attr("id")?"rulerow":"actionrow")+i)[0];i?$(t).insertAfter(i):$(e).append(t),this.triggerEvent("managesieve.insertrow",{obj:t})},rcube_webmail.prototype.managesieve_formbuttons=function(e){e=$("a.delete",e);e.removeClass("disabled"),1==e.length&&e.addClass("disabled")},rcube_webmail.prototype.managesieve_vacation_addresses=function(e){var t=this.set_busy(!0,"loading");this.http_post("plugin.managesieve-action",{_act:"addresses",_aid:e},t)},rcube_webmail.prototype.managesieve_vacation_addresses_update=function(e,t){smart_field_reset($("#vacation_addresses,#action_addresses"+(e||"")).get(0),t)},rcube_webmail.prototype.managesieve_tip_register=function(e){if(window.UI&&UI.form_errors)return UI.form_errors(e);var t,r=parent.rcmail,l=(r?parent.rcmail:rcmail).env.ms_tip_layer;for(t in e)$("#"+e[t][0]).data("tip-class",e[t][1]).data("tip-msg",e[t][2]).mouseleave(function(e){l.hide()}).mouseenter(function(e){var t=$(this),i=t.offset(),a=i.left,s=i.top-12,n=t.width(),t=$("<span>").addClass(t.data("tip-class")).text(t.data("tip-msg"));r&&(s+=(i=$("mail"==rcmail.env.task?"#sievefilterform > iframe":"#filter-box",parent.document).offset()).top,a+=i.left),l.html("").append(t),s-=l.height(),l.css({left:a,top:s,minWidth:n-2+"px"}).show()})},rcube_webmail.prototype.managesieve_create=function(e){var t,a,s,n;e||"show"==this.env.action?this.env.sieve_headers&&this.env.sieve_headers.length&&(e={},a=this.get_label("managesieve.newfilter"),s=$('<div id="sievefilterform" class="propform"></div>'),n={minWidth:600,minHeight:250,height:300},s.append($("<fieldset>").append($("<legend>").text(this.get_label("managesieve.usedata"))).append($('<ul class="proplist">'))),$.each(this.env.sieve_headers,function(e,t){var i={type:"checkbox",name:"headers[]",id:"sievehdr"+e,value:e,checked:!0},a=rcmail.env.sieve_headers[e][0]+": "+rcmail.env.sieve_headers[e][1];$("ul",s).append($("<li>").append($("<input>").attr(i)).append($("<label>").attr("for","sievehdr"+e).text(a)))}),e[this.get_label("managesieve.nextstep")]=function(){var t,e,i=$('input[name="headers[]"]:checked',s);i.length?(t=rcmail.get_task_url("mail"),t=rcmail.add_url(t,"_action","plugin.managesieve"),t=rcmail.add_url(t,"_framed",1),i.map(function(){var e=rcmail.env.sieve_headers[this.value];t=rcmail.add_url(t,"r["+this.value+"]",e[0]+":"+e[1])}),i={},e=$("<iframe>").attr({src:t,frameborder:0}),i[rcmail.get_label("save")]=function(){$("iframe",s).get(0).contentWindow.rcmail.managesieve_save()},i[rcmail.get_label("cancel")]=function(){$(this).dialog("destroy")},s.dialog("destroy"),rcmail.env.managesieve_dialog=s=rcmail.show_popup_dialog(e,a,i,$.extend(n,{button_classes:["mainaction save","cancel"]}))):rcmail.alert_dialog(rcmail.get_label("managesieve.nodata"))},e[this.get_label("cancel")]=function(){$(this).dialog("destroy")},this.env.managesieve_dialog=s=this.show_popup_dialog(s,a,e,$.extend(n,{button_classes:["mainaction next","cancel"]}))):(e=this.message_list.get_single_selection(),t=this.set_busy(!0,"loading"),this.http_post("plugin.managesieve-action",{_uid:e},t))},rcube_webmail.prototype.managesieve_dialog_close=function(){this.env.managesieve_dialog.dialog("destroy")},rcube_webmail.prototype.managesieve_dialog_resize=function(e){var t=this.env.managesieve_dialog,i=$(window),a=$(e);width=$("fieldset",e).first().width(),height=a.height(),w=i.width(),h=i.height(),height<100||t.dialog("option",{height:Math.min(h-20,height+120),width:Math.min(w-20,width+65)})};
PKwc�\�wF��*�*"managesieve/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = '过滤器';
$labels['managefilters'] = '管理邮件过滤规则';
$labels['filtername'] = '过滤规则名称';
$labels['newfilter'] = '新建过滤规则';
$labels['filteradd'] = '添加过滤规则';
$labels['filterdel'] = '删除过滤规则';
$labels['rules'] = '规则';
$labels['actions'] = '动作';
$labels['scope'] = '范围';
$labels['moveup'] = '上移';
$labels['movedown'] = '下移';
$labels['filterallof'] = '匹配所有规则';
$labels['filteranyof'] = '匹配任意一条规则';
$labels['filterany'] = '所有邮件';
$labels['filtercontains'] = '包含';
$labels['filternotcontains'] = '不包含';
$labels['filteris'] = '等于';
$labels['filterisnot'] = '不等于';
$labels['filterexists'] = '存在';
$labels['filternotexists'] = '不存在';
$labels['filtermatches'] = '匹配表达式';
$labels['filternotmatches'] = '不匹配表达式';
$labels['filterregex'] = '匹配正则表达式';
$labels['filternotregex'] = '不匹配正则表达式';
$labels['filterunder'] = '小于';
$labels['filterover'] = '大于';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME 部分:';
$labels['mime-message'] = '消息';
$labels['mime-anychild'] = '任意';
$labels['mime-type'] = '类型';
$labels['mime-subtype'] = '子类型';
$labels['mime-contenttype'] = '内容类型';
$labels['mime-param'] = '参数';
$labels['addrule'] = '新建规则';
$labels['delrule'] = '删除规则';
$labels['messagemoveto'] = '将邮件移至';
$labels['messageredirect'] = '将邮件转发至';
$labels['messagecopyto'] = '复制邮件至';
$labels['messagesendcopy'] = '发送复制邮件至';
$labels['messagereply'] = '回复以下内容';
$labels['messagedelete'] = '删除邮件';
$labels['messagediscard'] = '舍弃邮件并回复以下内容';
$labels['messagekeep'] = '保留邮件在收件箱';
$labels['messagesrules'] = '对新收取的邮件应用规则:';
$labels['messagesactions'] = '执行以下操作:';
$labels['add'] = '添加';
$labels['del'] = '删除';
$labels['sender'] = '发件人';
$labels['recipient'] = '收件人';
$labels['vacationaddr'] = '我的电子邮件地址:';
$labels['vacationdays'] = '发送邮件频率(单位:天):';
$labels['vacationinterval'] = '发送邮件频率:';
$labels['vacationreason'] = '邮件正文(假期原因)';
$labels['vacationfrom'] = '回复发件人地址:';
$labels['vacationsubject'] = '邮件主题';
$labels['days'] = '天';
$labels['seconds'] = '秒';
$labels['rulestop'] = '停止评价规则';
$labels['enable'] = '启用/禁用';
$labels['filtersets'] = '过滤器设置集';
$labels['filterseteditraw'] = '编辑过滤器设置集';
$labels['filterdef'] = '过滤器定义';
$labels['active'] = '启用';
$labels['none'] = '无';
$labels['fromset'] = '从设置集';
$labels['fromfile'] = '从文件';
$labels['filterdisabled'] = '过滤器已禁用';
$labels['countisgreaterthan'] = '计数大于';
$labels['countisgreaterthanequal'] = '计数大于或等于';
$labels['countislessthan'] = '计数小于';
$labels['countislessthanequal'] = '计数小于或等于';
$labels['countequals'] = '计数等于';
$labels['countnotequals'] = '计数器不等于';
$labels['valueisgreaterthan'] = '值大于';
$labels['valueisgreaterthanequal'] = '值大于或等于';
$labels['valueislessthan'] = '值小于';
$labels['valueislessthanequal'] = '值小于或等于';
$labels['valueequals'] = '值等于';
$labels['valuenotequals'] = '值不等于';
$labels['setflags'] = '设定邮件的标识';
$labels['addflags'] = '增加邮件的标识';
$labels['removeflags'] = '删除邮件的标识';
$labels['flagread'] = '读取';
$labels['flagdeleted'] = '删除';
$labels['flaganswered'] = '已答复';
$labels['flagflagged'] = '已标记';
$labels['flagdraft'] = '草稿';
$labels['setvariable'] = '设置变量';
$labels['setvarname'] = '变量名:';
$labels['setvarvalue'] = '值:';
$labels['setvarmodifiers'] = '修改:';
$labels['varlower'] = '小写';
$labels['varupper'] = '大写';
$labels['varlowerfirst'] = '首字母小写';
$labels['varupperfirst'] = '首字母大写';
$labels['varquotewildcard'] = '引用特殊字符';
$labels['varlength'] = '长度';
$labels['notify'] = '发送通知';
$labels['notifytarget'] = '通知目标:';
$labels['notifymessage'] = '通知消息(可选):';
$labels['notifyoptions'] = '通知选项(可选):';
$labels['notifyfrom'] = '通知发件人(可选):';
$labels['notifyimportance'] = '优先级:';
$labels['notifyimportancelow'] = '低';
$labels['notifyimportancenormal'] = '中';
$labels['notifyimportancehigh'] = '高';
$labels['notifymethodmailto'] = '电子邮件';
$labels['notifymethodtel'] = '手机';
$labels['notifymethodsms'] = '短信';
$labels['filtercreate'] = '创建过滤规则';
$labels['usedata'] = '在过滤器中使用下列数据';
$labels['nextstep'] = '下一步';
$labels['...'] = '...';
$labels['string'] = '字符串';
$labels['currdate'] = '当前日期';
$labels['datetest'] = '日期';
$labels['dateheader'] = '头:';
$labels['year'] = '年';
$labels['month'] = '月';
$labels['day'] = '天';
$labels['date'] = '日期 (年-月-日)';
$labels['julian'] = '日期 (儒略日)';
$labels['hour'] = '小时';
$labels['minute'] = '分钟';
$labels['second'] = '秒';
$labels['time'] = '时间 (hh:mm:ss)';
$labels['iso8601'] = '日期 (ISO8601)';
$labels['std11'] = '日期 (RFC2822)';
$labels['zone'] = '时区';
$labels['weekday'] = '非周末 (0-6)';
$labels['advancedopts'] = '高级选项';
$labels['body'] = '正文';
$labels['address'] = '地址';
$labels['envelope'] = '信封';
$labels['modifier'] = '修饰符:';
$labels['text'] = '文本';
$labels['undecoded'] = '未解码(RAW)';
$labels['contenttype'] = '内容类型';
$labels['modtype'] = '类型:';
$labels['allparts'] = '全部';
$labels['domain'] = '域';
$labels['localpart'] = '本地部份';
$labels['user'] = '用户';
$labels['detail'] = '细节';
$labels['comparator'] = '比较:';
$labels['default'] = '默认';
$labels['octet'] = '严格模式(字节)';
$labels['asciicasemap'] = '不区分大小写(ascii 字符)';
$labels['asciinumeric'] = '数字类型(ascii 数字)';
$labels['index'] = '索引:';
$labels['indexlast'] = '向后';
$labels['spamtestequals'] = '等于';
$labels['spamtestnotequals'] = '不等于';
$labels['vacation.reply'] = '回复消息';
$labels['vacation.advanced'] = '高级设置';
$labels['vacation.from'] = '回复发件人地址';
$labels['vacation.subject'] = '主题';
$labels['vacation.body'] = '正文';
$labels['vacation.status'] = '状态';
$labels['vacation.on'] = '开';
$labels['vacation.off'] = '关';
$labels['vacation.addresses'] = '我的电子邮件地址';
$labels['vacation.interval'] = '回复间隔';
$labels['vacation.saving'] = '正在保存数据...';
$labels['vacation.action'] = '传入邮件操作';
$labels['vacation.keep'] = '保留';
$labels['vacation.discard'] = '丢弃';
$labels['vacation.redirect'] = '重定向到';
$labels['vacation.copy'] = '发送副本到';
$labels['forward'] = '转发';
$labels['forward.redirect'] = '重定向到';
$labels['forward.copy'] = '发送副本到';
$labels['forward.on'] = '开';
$labels['forward.off'] = '关';
$labels['forward.status'] = '状态:';
$labels['forward.action'] = '对于来信执行如下动作:';
$labels['forward.saving'] = '正在保存数据...';
$labels['filladdresses'] = '填入我的所有地址';
$labels['arialabelfiltersetactions'] = '过滤器集操作';
$labels['arialabelfilteractions'] = '过滤器操作';
$labels['arialabelfilterform'] = '过滤器属性';
$labels['ariasummaryfilterslist'] = '过滤器列表';
$labels['ariasummaryfiltersetslist'] = '过滤器集列表';
$labels['filterstitle'] = '编辑传入邮件过滤器';
$labels['vacationtitle'] = '编辑非办公室规则';
$labels['forwardtitle'] = '编辑邮件转发规则';
$labels['message'] = '消息';
$labels['duplicate'] = '是重复';
$labels['notduplicate'] = '是非重复';
$labels['duplicate.handle'] = '头:';
$labels['duplicate.header'] = '头:';
$labels['duplicate.uniqueid'] = '标识符:';
$labels['duplicate.seconds'] = '超时(秒):';
$labels['duplicate.last'] = '相对于最后一次执行';
$messages['filterunknownerror'] = '未知的服务器错误';
$messages['filterconnerror'] = '无法连接至服务器';
$messages['filterdeleteerror'] = '无法删除过滤器。发生服务器错误。';
$messages['filterdeleted'] = '过滤器已成功删除';
$messages['filtersaved'] = '过滤器已成功保存。';
$messages['filtersaveerror'] = '无法保存过滤器。发生服务器错误。';
$messages['filterformerror'] = '过滤器表单包含错误。';
$messages['filterdeleteconfirm'] = '您确定要删除所选择的过滤器吗?';
$messages['ruledeleteconfirm'] = '您确定要删除所选择的规则吗?';
$messages['actiondeleteconfirm'] = '您确定要删除所选择的操作吗?';
$messages['forbiddenchars'] = '内容包含禁用字符';
$messages['cannotbeempty'] = '内容不能为空';
$messages['ruleexist'] = '指定过滤器名称已存在。';
$messages['activateerror'] = '无法启用选定过滤器。发生服务器错误。';
$messages['deactivateerror'] = '无法禁用选定过滤器。发生服务器错误。';
$messages['deactivated'] = '启用过滤器成功。';
$messages['activated'] = '禁用过滤器成功。';
$messages['moved'] = '移动过滤器成功。';
$messages['moveerror'] = '无法移动选定过滤器。发生服务器错误。';
$messages['nametoolong'] = '无法创建过滤器集,名称太长。';
$messages['namereserved'] = '保留名称。';
$messages['setexist'] = '设置已存在。';
$messages['nodata'] = '至少选择一个位置!';
$messages['invaliddateformat'] = '无效的日期或日期格式';
$messages['saveerror'] = '无法保存数据。发生服务器错误。';
$messages['forwardsaved'] = '转发数据保存成功';
$messages['emptyvacationbody'] = '假期消息必须有正文!';
$messages['duplicate.conflict.err'] = '不允许头和唯一标识符。';
$messages['disabledaction'] = '不能执行此操作。';
PKxc�\$c���*�*"managesieve/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Фільтры';
$labels['managefilters'] = 'Парадкаваць фільтры атрыманай пошты';
$labels['filtername'] = 'Назва фільтра';
$labels['newfilter'] = 'Новы фільтр';
$labels['filteradd'] = 'Дадаць фільтр';
$labels['filterdel'] = 'Выдаліць фільтр';
$labels['actions'] = 'Дзеянні';
$labels['scope'] = 'Абсяг';
$labels['moveup'] = 'Пасунуць уверх';
$labels['movedown'] = 'Пасунуць уніз';
$labels['filterallof'] = 'выконваюцца ўсе наступныя правілы';
$labels['filteranyof'] = 'выконваецца любое з наступных правіл';
$labels['filterany'] = 'усе паведамленні';
$labels['filtercontains'] = 'змяшчае';
$labels['filternotcontains'] = 'не змяшчае';
$labels['filteris'] = 'роўна';
$labels['filterisnot'] = 'не роўна';
$labels['filterexists'] = 'існуе';
$labels['filternotexists'] = 'не існуе';
$labels['filtermatches'] = 'задавальняе выразу';
$labels['filternotmatches'] = 'не задавальняе выразу';
$labels['filterregex'] = 'задавальняе рэгулярнаму выразу';
$labels['filternotregex'] = 'не задавальняе рэгулярнаму выразу';
$labels['filterunder'] = 'менш';
$labels['filterover'] = 'больш';
$labels['addrule'] = 'Дадаць правіла';
$labels['delrule'] = 'Выдаліць правіла';
$labels['messagemoveto'] = 'Перамясціць паведамленне ў';
$labels['messageredirect'] = 'Перанакіраваць паведамленне на';
$labels['messagecopyto'] = 'Скапіяваць паведамленне ў';
$labels['messagesendcopy'] = 'Даслаць копію на';
$labels['messagereply'] = 'Адказаць наступнае';
$labels['messagedelete'] = 'Выдаліць паведамленне';
$labels['messagediscard'] = 'Скасаваць з паведамленнем';
$labels['messagekeep'] = 'Пакінуць паведамленне ў Атрыманых';
$labels['messagesrules'] = 'Для атрыманай пошты:';
$labels['messagesactions'] = '...выконваць наступныя дзеянні:';
$labels['add'] = 'Дадаць';
$labels['del'] = 'Выдаліць';
$labels['sender'] = 'Ад каго';
$labels['recipient'] = 'Каму';
$labels['vacationdays'] = 'Як часта дасылаць паведамленні (у днях):';
$labels['vacationinterval'] = 'Як часта дасылаць паведамленні:';
$labels['vacationreason'] = 'Цела паведамлення (прычына вакацый):';
$labels['vacationsubject'] = 'Тэма паведамлення:';
$labels['days'] = 'дзён';
$labels['seconds'] = 'секунд';
$labels['rulestop'] = 'Перастаць выконваць праверку правілаў';
$labels['enable'] = 'Уключыць/Выключыць';
$labels['filtersets'] = 'Наборы фільтраў';
$labels['filterdef'] = 'Вызначэнне фільтра';
$labels['active'] = 'актыўны';
$labels['none'] = 'няма';
$labels['fromset'] = 'з набору';
$labels['fromfile'] = 'з файла';
$labels['filterdisabled'] = 'Фільтр адключаны';
$labels['countisgreaterthan'] = 'лік большы за';
$labels['countisgreaterthanequal'] = 'лік большы за альбо роўны';
$labels['countislessthan'] = 'лік меншы за';
$labels['countislessthanequal'] = 'лік меншы за альбо роўны';
$labels['countequals'] = 'лік роўны';
$labels['countnotequals'] = 'лік не роўны';
$labels['valueisgreaterthan'] = 'значэнне большае за';
$labels['valueisgreaterthanequal'] = 'значэнне большае за альбо роўнае';
$labels['valueislessthan'] = 'значэнне меншае за';
$labels['valueislessthanequal'] = 'значэнне меншае за альбо роўнае';
$labels['valueequals'] = 'значэнне роўнае';
$labels['valuenotequals'] = 'значэнне не роўнае';
$labels['setflags'] = 'Устанавіць флагі на паведамленне';
$labels['addflags'] = 'Дадаць флагі да паведамлення';
$labels['removeflags'] = 'Выдаліць флагі з паведамлення';
$labels['flagread'] = 'Прачытана';
$labels['flagdeleted'] = 'Выдалена';
$labels['flaganswered'] = 'З адказам';
$labels['flagflagged'] = 'Пазначана';
$labels['flagdraft'] = 'Чарнавік';
$labels['setvariable'] = 'Устанавіць зменную';
$labels['setvarname'] = 'Імя зменнай:';
$labels['setvarvalue'] = 'Значэнне зменнай:';
$labels['setvarmodifiers'] = 'Мадыфікатары:';
$labels['varlower'] = 'ніжні рэгістр';
$labels['varupper'] = 'верхні рэгістр';
$labels['varlowerfirst'] = 'першы знак у ніжнім рэгістры';
$labels['varupperfirst'] = 'першы знак у верхнім рэгістры';
$labels['varquotewildcard'] = 'службовыя знакі забіраць у апострафы';
$labels['varlength'] = 'даўжыня';
$labels['notify'] = 'Паслаць апавяшчэнне';
$labels['notifyimportance'] = 'Важнасць:';
$labels['notifyimportancelow'] = 'нізкая';
$labels['notifyimportancenormal'] = 'звычайная';
$labels['notifyimportancehigh'] = 'высокая';
$labels['notifymethodmailto'] = 'Эл. пошта';
$labels['notifymethodtel'] = 'Тэлефон';
$labels['filtercreate'] = 'Стварыць фільтр';
$labels['usedata'] = 'Ужываць наступныя дадзеныя ў фільтры:';
$labels['nextstep'] = 'Наступны крок';
$labels['...'] = '...';
$labels['currdate'] = 'Бягучая дата';
$labels['datetest'] = 'Дата';
$labels['dateheader'] = 'загаловак:';
$labels['year'] = 'год';
$labels['month'] = 'месяц';
$labels['day'] = 'дзень';
$labels['date'] = 'дата (гггг-мм-дд)';
$labels['julian'] = 'дата (юліянская)';
$labels['hour'] = 'гадзіна';
$labels['minute'] = 'мінута';
$labels['second'] = 'секунда';
$labels['time'] = 'час (гг:мм:сс)';
$labels['iso8601'] = 'дата (ISO8601)';
$labels['std11'] = 'дата (RFC2822)';
$labels['zone'] = 'часавая зона';
$labels['weekday'] = 'дзень тыдня (0-6)';
$labels['advancedopts'] = 'Дадатковыя параметры';
$labels['body'] = 'Цела';
$labels['address'] = 'адрас';
$labels['envelope'] = 'канверт';
$labels['modifier'] = 'мадыфікатар:';
$labels['text'] = 'тэкст';
$labels['undecoded'] = 'неапрацаваны (сыры)';
$labels['contenttype'] = 'тып змесціва';
$labels['modtype'] = 'пошук у адрасах:';
$labels['allparts'] = 'усюль';
$labels['domain'] = 'у імені дамена';
$labels['localpart'] = 'толькі ў імені карыстальніка, без дамена';
$labels['user'] = 'у поўным імені карыстальніка';
$labels['detail'] = 'у дадатковых звестках';
$labels['comparator'] = 'спосаб параўнання:';
$labels['default'] = 'стандартны';
$labels['octet'] = 'строгі (octet)';
$labels['asciicasemap'] = 'без уліку рэгістру (ascii-casemap)';
$labels['asciinumeric'] = 'лікавы (ascii-numeric)';
$labels['index'] = 'індэкс:';
$labels['indexlast'] = 'назад';
$labels['spamtestequals'] = 'роўна';
$labels['spamtestnotequals'] = 'не роўна';
$labels['vacation.subject'] = 'Тэма';
$labels['vacation.body'] = 'Цела';
$labels['vacation.keep'] = 'Пакінуць';
$labels['vacation.discard'] = 'Адкінуць';
$labels['duplicate.header'] = 'загаловак:';
$messages['filterunknownerror'] = 'Невядомая памылка сервера.';
$messages['filterconnerror'] = 'Не ўдалося злучыцца з серверам.';
$messages['filterdeleteerror'] = 'Не ўдалося выдаліць фільтр. Памылка на серверы.';
$messages['filterdeleted'] = 'Фільтр выдалены.';
$messages['filtersaved'] = 'Фільтр захаваны.';
$messages['filtersaveerror'] = 'Не ўдалося захаваць фільтр. Памылка на серверы.';
$messages['filterdeleteconfirm'] = 'Напраўду выдаліць абраны фільтр?';
$messages['ruledeleteconfirm'] = 'Напраўду выдаліць абранае правіла?';
$messages['actiondeleteconfirm'] = 'Напраўду выдаліць абранае дзеянне?';
$messages['forbiddenchars'] = 'Забароненыя знакі ў полі.';
$messages['cannotbeempty'] = 'Поле не можа быць пустым.';
$messages['ruleexist'] = 'Фільтр з гэтай назвай ужо існуе.';
$messages['activateerror'] = 'Не ўдалося ўключыць абраны(я) фільтры. Памылка на серверы.';
$messages['deactivateerror'] = 'Не ўдалося адключыць абраны(я) фільтры. Памылка на серверы.';
$messages['deactivated'] = 'Фільтр(ы) адключаны.';
$messages['activated'] = 'Фільтр(ы) уключаны.';
$messages['moved'] = 'Фільтр перамешчаны.';
$messages['moveerror'] = 'Не ўдалося перамясціць абраны фільтр. Памылка на серверы.';
$messages['nametoolong'] = 'Задаўгая назва.';
$messages['namereserved'] = 'Зарэзерваваная назва.';
$messages['setexist'] = 'Набор ужо існуе.';
$messages['nodata'] = 'Мінімум адна пазіцыя павінна быць вылучана!';
$messages['invaliddateformat'] = 'Няслушная дата альбо фармат даты';
PKxc�\�Lw� J J"managesieve/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Филтри';
$labels['managefilters'] = 'Управление на филтри за входяща поща';
$labels['filtername'] = 'Име на филтър';
$labels['newfilter'] = 'Нов филтър';
$labels['filteradd'] = 'Добавяне на филтър';
$labels['filterdel'] = 'Изтриване на филтър';
$labels['rules'] = 'Условия';
$labels['actions'] = 'Действия';
$labels['scope'] = 'Обхват';
$labels['moveup'] = 'Преместване нагоре';
$labels['movedown'] = 'Преместване надолу';
$labels['filterallof'] = 'при изпълнение на всички условия';
$labels['filteranyof'] = 'при изпълнение на някое от условията';
$labels['filterany'] = 'за всички писма';
$labels['filtercontains'] = 'съдържа';
$labels['filternotcontains'] = 'не съдържа';
$labels['filteris'] = 'е равно на';
$labels['filterisnot'] = 'не е равно на';
$labels['filterexists'] = 'съществува';
$labels['filternotexists'] = 'не съществува';
$labels['filtermatches'] = 'съвпада с израз';
$labels['filternotmatches'] = 'не съвпада с израз';
$labels['filterregex'] = 'отговаря на регулярен израз';
$labels['filternotregex'] = 'не отговаря на регулярен израз';
$labels['filterunder'] = 'под';
$labels['filterover'] = 'над';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME част:';
$labels['mime-message'] = 'писмо';
$labels['mime-anychild'] = 'която и да е';
$labels['mime-type'] = 'тип';
$labels['mime-subtype'] = 'подтип';
$labels['mime-contenttype'] = 'тип на съдържанието';
$labels['mime-param'] = 'параметър';
$labels['addrule'] = 'Ново условие';
$labels['delrule'] = 'Изтриване на условие';
$labels['messagemoveto'] = 'Премести писмото във';
$labels['messageredirect'] = 'Пренасочи писмото до';
$labels['messagecopyto'] = 'Копирай писмото във';
$labels['messagesendcopy'] = 'Изпрати копие на писмото до';
$labels['messagereply'] = 'Отговори с писмо';
$labels['messagedelete'] = 'Изтрий писмото';
$labels['messagediscard'] = 'Отхвърли с писмо';
$labels['messagekeep'] = 'Остави писмото във Входящи';
$labels['messagesrules'] = 'При получаване на поща:';
$labels['messagesactions'] = '...изпълни следните действия:';
$labels['add'] = 'Добави';
$labels['del'] = 'Изтрий';
$labels['sender'] = 'Подател';
$labels['recipient'] = 'Получател';
$labels['vacationaddr'] = 'Мои адреси на ел. поща:';
$labels['vacationdays'] = 'Колко често да праща писма (в дни):';
$labels['vacationinterval'] = 'Колко често да праща писма:';
$labels['vacationreason'] = 'Текст на писмото (причина за отпуск):';
$labels['vacationfrom'] = 'Адрес за отговор на подателя:';
$labels['vacationsubject'] = 'Заглавие на писмото:';
$labels['days'] = 'дни';
$labels['seconds'] = 'секунди';
$labels['rulestop'] = 'Спри проверка на други условия';
$labels['enable'] = 'Включи/Изключи';
$labels['filterset'] = 'Набор филтри';
$labels['filtersets'] = 'Набори филтри';
$labels['filtersetadd'] = 'Добавяне на набор филтри';
$labels['filtersetdel'] = 'Изтриване на набор филтри';
$labels['filtersetact'] = 'Активиране на текущ набор филтри';
$labels['filtersetdeact'] = 'Деактивиране на текущ набор филтри';
$labels['filterseteditraw'] = 'Редакция на набор филтри';
$labels['filtersetswitch'] = 'Включи/Изключи набор филтри';
$labels['filterdef'] = 'Дефиниране на филтър';
$labels['filtersetname'] = 'Име на набор филтри';
$labels['newfilterset'] = 'Нов набор филтри';
$labels['active'] = 'активен';
$labels['none'] = 'няма';
$labels['fromset'] = 'от набор';
$labels['fromfile'] = 'от файл';
$labels['filterdisabled'] = 'Изключен филтър';
$labels['filterenabled'] = 'Включен филтър';
$labels['countisgreaterthan'] = 'брой е по-голям от';
$labels['countisgreaterthanequal'] = 'брой е по-голям или равен на';
$labels['countislessthan'] = 'брой е по-малък от';
$labels['countislessthanequal'] = 'брой е по-малък или равен на';
$labels['countequals'] = 'брой е равен на';
$labels['countnotequals'] = 'брой не е равен на';
$labels['valueisgreaterthan'] = 'стойност е по-голяма от';
$labels['valueisgreaterthanequal'] = 'стойност е по-голяма или равна на';
$labels['valueislessthan'] = 'стойност е по-малка от';
$labels['valueislessthanequal'] = 'стойност е по-малка или равна на';
$labels['valueequals'] = 'стойност е равна на';
$labels['valuenotequals'] = 'стойност не е равна на';
$labels['setflags'] = 'Установи флагове на писмото';
$labels['addflags'] = 'Добави флагове към писмо';
$labels['removeflags'] = 'Премахни флагове от писмо';
$labels['flagread'] = 'Прочетено';
$labels['flagdeleted'] = 'Изтрито';
$labels['flaganswered'] = 'Отговорено';
$labels['flagflagged'] = 'Отбелязано';
$labels['flagdraft'] = 'Чернова';
$labels['addheader'] = 'Добави заглавен блок към писмо';
$labels['deleteheader'] = 'Премахни заглавен блок от писмо';
$labels['headername'] = 'Име на заглавен блок';
$labels['headervalue'] = 'Стойност на заглавен блок';
$labels['headerpos'] = 'Позиция на заглавен блок';
$labels['headeratstart'] = 'в началото';
$labels['headeratend'] = 'в края';
$labels['headeroccurrence'] = 'Поява/позиция на заглавен блок';
$labels['headerfromstart'] = 'от началото';
$labels['headerfromend'] = 'от края';
$labels['headerpatterns'] = 'Модели на стойността на заглавен блок';
$labels['headermatchtype'] = 'тип съвпадение:';
$labels['setvariable'] = 'Установи променлива';
$labels['setvarname'] = 'Име на променлива:';
$labels['setvarvalue'] = 'Стойност на променлива:';
$labels['setvarmodifiers'] = 'Модификатори:';
$labels['varlower'] = 'малки букви';
$labels['varupper'] = 'главни букви';
$labels['varlowerfirst'] = 'първи знак с малка буква';
$labels['varupperfirst'] = 'първи знак с главна буква';
$labels['varquotewildcard'] = 'цитиране на специални знаци';
$labels['varlength'] = 'дължина';
$labels['notify'] = 'Изпрати известие';
$labels['notifytarget'] = 'Известие към:';
$labels['notifymessage'] = 'Съдържание на известие (опционално):';
$labels['notifyoptions'] = 'Опции на известие (опционално):';
$labels['notifyfrom'] = 'Подател на известието (опционално):';
$labels['notifyimportance'] = 'Приоритет:';
$labels['notifyimportancelow'] = 'нисък';
$labels['notifyimportancenormal'] = 'нормален';
$labels['notifyimportancehigh'] = 'висок';
$labels['notifymethodmailto'] = 'Ел. поща';
$labels['notifymethodtel'] = 'Телефон';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Използвай за нов филтър';
$labels['usedata'] = 'Използвай следните данни във филтъра:';
$labels['nextstep'] = 'Следваща стъпка';
$labels['...'] = '...';
$labels['string'] = 'Низ';
$labels['currdate'] = 'Текуща дата';
$labels['datetest'] = 'Дата';
$labels['dateheader'] = 'заглавен блок:';
$labels['year'] = 'година';
$labels['month'] = 'месец';
$labels['day'] = 'ден';
$labels['date'] = 'дата (гггг-мм-дд)';
$labels['julian'] = 'дата (юлианска)';
$labels['hour'] = 'час';
$labels['minute'] = 'минута';
$labels['second'] = 'секунда';
$labels['time'] = 'време (чч:мм:сс)';
$labels['iso8601'] = 'дата (ISO8601)';
$labels['std11'] = 'дата (RFC2822)';
$labels['zone'] = 'часова зона';
$labels['weekday'] = 'ден от седмицата (0-6)';
$labels['advancedopts'] = 'Разширени настройки';
$labels['body'] = 'Основен текст';
$labels['address'] = 'адрес';
$labels['envelope'] = 'плик';
$labels['modifier'] = 'модификатор:';
$labels['text'] = 'текст';
$labels['undecoded'] = 'недекодиран (суров)';
$labels['contenttype'] = 'тип на съдържанието';
$labels['modtype'] = 'тип:';
$labels['allparts'] = 'всичко';
$labels['domain'] = 'домейн';
$labels['localpart'] = 'локална част';
$labels['user'] = 'потребител';
$labels['detail'] = 'детайли';
$labels['comparator'] = 'сравнител:';
$labels['default'] = 'по подразбиране';
$labels['octet'] = 'стриктно (октет)';
$labels['asciicasemap'] = 'без значение малки/големи букви';
$labels['asciinumeric'] = 'цифрово';
$labels['index'] = 'индекс:';
$labels['indexlast'] = 'наобратно';
$labels['spamtest'] = 'Ниво на Спам';
$labels['spamtestisgreaterthan'] = 'е по-голямо от';
$labels['spamtestisgreaterthanequal'] = 'е по-голямо или равно на';
$labels['spamtestislessthan'] = 'е по-малко от';
$labels['spamtestislessthanequal'] = 'е по-малко или равно на';
$labels['spamtestequals'] = 'е равно на';
$labels['spamtestnotequals'] = 'не е равно на';
$labels['spamtestisunknown'] = 'е неизвестно';
$labels['vacation'] = 'Отпуск';
$labels['vacation.reply'] = 'Писмо отговор';
$labels['vacation.advanced'] = 'Разширени настройки';
$labels['vacation.from'] = 'Адрес за отговор на подателя:';
$labels['vacation.subject'] = 'Относно';
$labels['vacation.body'] = 'Съдържание';
$labels['vacation.start'] = 'Начало';
$labels['vacation.end'] = 'Край';
$labels['vacation.status'] = 'Статус';
$labels['vacation.on'] = 'Вкл.';
$labels['vacation.off'] = 'Изкл.';
$labels['vacation.addresses'] = 'Мои адреси на ел. поща';
$labels['vacation.interval'] = 'Интервал на отговор';
$labels['vacation.after'] = 'Постави правилото за отпуск след';
$labels['vacation.saving'] = 'Запис на данни...';
$labels['vacation.action'] = 'Действие при получаване на писмо';
$labels['vacation.keep'] = 'Запази';
$labels['vacation.discard'] = 'Изхвърли';
$labels['vacation.redirect'] = 'Препрати на';
$labels['vacation.copy'] = 'Прати копие на';
$labels['forward'] = 'Препращане';
$labels['forward.redirect'] = 'Препрати на';
$labels['forward.copy'] = 'Прати копие на';
$labels['forward.on'] = 'Вкл.';
$labels['forward.off'] = 'Изкл.';
$labels['forward.status'] = 'Статус:';
$labels['forward.action'] = 'При получаване на поща изпълни следното действие:';
$labels['forward.saving'] = 'Запис на данни...';
$labels['filladdresses'] = 'Попълни с всички мои адреси';
$labels['arialabelfiltersetactions'] = 'Действия за набор от филтри';
$labels['arialabelfilteractions'] = 'Действия на филтър';
$labels['arialabelfilterform'] = 'Свойства на филтър';
$labels['ariasummaryfilterslist'] = 'Списък филтри';
$labels['ariasummaryfiltersetslist'] = 'Списък набори от филтри';
$labels['filterstitle'] = 'Редакция на филтри за входяща поща';
$labels['vacationtitle'] = 'Редакция на правило за отпуск (извън офиса)';
$labels['forwardtitle'] = 'Редактиране на правилото за препращане на поща';
$labels['message'] = 'Писмо';
$labels['duplicate'] = 'е дубликат';
$labels['notduplicate'] = 'не е дубликат';
$labels['duplicate.handle'] = 'манипулатор:';
$labels['duplicate.header'] = 'заглавен блок:';
$labels['duplicate.uniqueid'] = 'идентификатор:';
$labels['duplicate.seconds'] = 'време за отказ (секунди)';
$labels['duplicate.last'] = 'спрямо последното изпълнение';
$messages['filterunknownerror'] = 'Неизвестна сървърна грешка.';
$messages['filterconnerror'] = 'Неуспешно свързване с managesieve сървъра.';
$messages['filterdeleteerror'] = 'Невъзможно изтриване на филтъра. Възникна сървърна грешка.';
$messages['filterdeleted'] = 'Филтърът е изтрит успешно.';
$messages['filtersaved'] = 'Филтърът е записан успешно.';
$messages['filtersaveerror'] = 'Невъзможно записване на филтъра. Възникна сървърна грешка.';
$messages['filterformerror'] = 'Филтър формата съдържа грешки.';
$messages['filterdeleteconfirm'] = 'Наистина ли желаете да изтриете избрания филтър?';
$messages['ruledeleteconfirm'] = 'Сигурни ли сте, че желаете да изтриете избраното условие?';
$messages['actiondeleteconfirm'] = 'Сигурни ли сте, че желаете да изтриете избраното действие?';
$messages['forbiddenchars'] = 'Забранени символи в полето.';
$messages['cannotbeempty'] = 'Полето не може да бъде празно.';
$messages['ruleexist'] = 'Вече има филтър с указаното име.';
$messages['setactivateerror'] = 'Невъзможно активиране на избрания набор от филтри. Възникна сървърна грешка.';
$messages['setdeactivateerror'] = 'Невъзможно деактивиране на избрания набор от филтри. Възникна сървърна грешка.';
$messages['setdeleteerror'] = 'Невъзможно изтриване на избрания набор от филтри. Възникна сървърна грешка.';
$messages['setactivated'] = 'Наборът от филтри е активиран успешно.';
$messages['setdeactivated'] = 'Наборът от филтри е деактивиран успешно.';
$messages['setdeleted'] = 'Наборът от филтри е изтрит успешно.';
$messages['setupdated'] = 'Наборът от филтри е променен успешно.';
$messages['setdeleteconfirm'] = 'Сигурни ли сте, че желаете да изтриете избрания набор от филтри?';
$messages['setcreateerror'] = 'Невъзможно създаване на набор от филтри. Възникна сървърна грешка.';
$messages['setcreated'] = 'Наборът от филтри е създаден успешно.';
$messages['activateerror'] = 'Невъзможно включване на филтъра. Възникна сървърна грешка.';
$messages['deactivateerror'] = 'Невъзможно изключване на филтъра. Възникна сървърна грешка.';
$messages['deactivated'] = 'Филтърът е изключен успешно.';
$messages['activated'] = 'Филтърът е включен успешно.';
$messages['moved'] = 'Филтърът е преместен успешно.';
$messages['moveerror'] = 'Невъзможно преместване на филтъра. Възникна сървърна грешка.';
$messages['nametoolong'] = 'Името е прекалено дълго.';
$messages['namereserved'] = 'Резервирано име.';
$messages['setexist'] = 'Вече има такъв набор филтри.';
$messages['nodata'] = 'Поне една позиция трябва да е избрана!';
$messages['invaliddateformat'] = 'невалидна дата или формат на част от дата';
$messages['saveerror'] = 'Невъзможен запис на данни. Грешка при достъп до сървър.';
$messages['vacationsaved'] = 'Данните за отпуск са записани успешно.';
$messages['forwardsaved'] = 'Данните за препращане са записани успешно.';
$messages['emptyvacationbody'] = 'Липсва текст на писмо при отпуск!';
$messages['duplicate.conflict.err'] = 'Не е позволено едновременното използване на заглавен блок и уникален идентификатор.';
$messages['disabledaction'] = 'Непозволенo действие.';
$messages['lastindexempty'] = 'Необходим е индекс, когато се брои от края';
$messages['noflagset'] = 'Поне един флаг трябва да е избран.';
PKxc�\�"�{77"managesieve/localization/ne_NP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'रद्दी टोकरीमा हाल्नुहोस';
$labels['del'] = 'मेटाउनुहोस';
$labels['notifymethodmailto'] = 'ई-मेल';
$labels['datetest'] = 'तारिख';
$labels['vacation.subject'] = 'विषय';
PKxc�\c��Mi5i5"managesieve/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filters';
$labels['managefilters'] = 'Manage incoming mail filters';
$labels['filtername'] = 'Filter name';
$labels['newfilter'] = 'New filter';
$labels['filteradd'] = 'Add filter';
$labels['filterdel'] = 'Delete filter';
$labels['rules'] = 'Rules';
$labels['actions'] = 'Actions';
$labels['scope'] = 'Scope';
$labels['moveup'] = 'Move up';
$labels['movedown'] = 'Move down';
$labels['filterallof'] = 'matching all of the following rules';
$labels['filteranyof'] = 'matching any of the following rules';
$labels['filterany'] = 'all messages';
$labels['filtercontains'] = 'contains';
$labels['filternotcontains'] = 'not contains';
$labels['filteris'] = 'is equal to';
$labels['filterisnot'] = 'is not equal to';
$labels['filterexists'] = 'exists';
$labels['filternotexists'] = 'not exists';
$labels['filtermatches'] = 'matches expression';
$labels['filternotmatches'] = 'not matches expression';
$labels['filterregex'] = 'matches regular expression';
$labels['filternotregex'] = 'not matches regular expression';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME part:';
$labels['mime-message'] = 'message';
$labels['mime-anychild'] = 'any';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'subtype';
$labels['mime-contenttype'] = 'content-type';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Add rule';
$labels['delrule'] = 'Delete rule';
$labels['messagemoveto'] = 'Move message to';
$labels['messageredirect'] = 'Redirect message to';
$labels['messagecopyto'] = 'Copy message to';
$labels['messagesendcopy'] = 'Send message copy to';
$labels['messagereply'] = 'Reply with message';
$labels['messagedelete'] = 'Delete message';
$labels['messagediscard'] = 'Discard with message';
$labels['messagekeep'] = 'Keep message in Inbox';
$labels['messagesrules'] = 'For incoming mail:';
$labels['messagesactions'] = '...execute the following actions:';
$labels['add'] = 'Add';
$labels['del'] = 'Delete';
$labels['sender'] = 'Sender';
$labels['recipient'] = 'Recipient';
$labels['vacationaddr'] = 'My e-mail addresses:';
$labels['vacationdays'] = 'How often send messages (in days):';
$labels['vacationinterval'] = 'How often send messages:';
$labels['vacationreason'] = 'Message body (vacation reason):';
$labels['vacationfrom'] = 'Reply sender address:';
$labels['vacationsubject'] = 'Message subject:';
$labels['days'] = 'days';
$labels['seconds'] = 'seconds';
$labels['rulestop'] = 'Stop evaluating rules';
$labels['enable'] = 'Enable/Disable';
$labels['filterset'] = 'Filter set';
$labels['filtersets'] = 'Filter sets';
$labels['filtersetadd'] = 'Add filter set';
$labels['filtersetdel'] = 'Delete filter set';
$labels['filtersetact'] = 'Activate current filter set';
$labels['filtersetdeact'] = 'Deactivate current filter set';
$labels['filterseteditraw'] = 'Edit filter set';
$labels['filtersetswitch'] = 'Enable/disable filter set';
$labels['filterdef'] = 'Filter definition';
$labels['filtersetname'] = 'Filter set name';
$labels['newfilterset'] = 'New filter set';
$labels['active'] = 'active';
$labels['none'] = 'none';
$labels['fromset'] = 'from set';
$labels['fromfile'] = 'from file';
$labels['filterdisabled'] = 'Filter disabled';
$labels['filterenabled'] = 'Filter enabled';
$labels['countisgreaterthan'] = 'count is greater than';
$labels['countisgreaterthanequal'] = 'count is greater than or equal to';
$labels['countislessthan'] = 'count is less than';
$labels['countislessthanequal'] = 'count is less than or equal to';
$labels['countequals'] = 'count is equal to';
$labels['countnotequals'] = 'count is not equal to';
$labels['valueisgreaterthan'] = 'value is greater than';
$labels['valueisgreaterthanequal'] = 'value is greater than or equal to';
$labels['valueislessthan'] = 'value is less than';
$labels['valueislessthanequal'] = 'value is less than or equal to';
$labels['valueequals'] = 'value is equal to';
$labels['valuenotequals'] = 'value is not equal to';
$labels['setflags'] = 'Set flags to the message';
$labels['addflags'] = 'Add flags to the message';
$labels['removeflags'] = 'Remove flags from the message';
$labels['flagread'] = 'Read';
$labels['flagdeleted'] = 'Deleted';
$labels['flaganswered'] = 'Answered';
$labels['flagflagged'] = 'Flagged';
$labels['flagdraft'] = 'Draft';
$labels['addheader'] = 'Add header to the message';
$labels['deleteheader'] = 'Remove header from the message';
$labels['headername'] = 'Header name';
$labels['headervalue'] = 'Header value';
$labels['headerpos'] = 'Header position';
$labels['headeratstart'] = 'at the beginning';
$labels['headeratend'] = 'at the end';
$labels['headeroccurrence'] = 'Header occurrence/position';
$labels['headerfromstart'] = 'from start';
$labels['headerfromend'] = 'from end';
$labels['headerpatterns'] = 'Header value patterns';
$labels['headermatchtype'] = 'match type:';
$labels['setvariable'] = 'Set variable';
$labels['setvarname'] = 'Variable name:';
$labels['setvarvalue'] = 'Variable value:';
$labels['setvarmodifiers'] = 'Modifiers:';
$labels['varlower'] = 'lower-case';
$labels['varupper'] = 'upper-case';
$labels['varlowerfirst'] = 'first character lower-case';
$labels['varupperfirst'] = 'first character upper-case';
$labels['varquotewildcard'] = 'quote special characters';
$labels['varlength'] = 'length';
$labels['notify'] = 'Send notification';
$labels['notifytarget'] = 'Notification target:';
$labels['notifymessage'] = 'Notification message (optional):';
$labels['notifyoptions'] = 'Notification options (optional):';
$labels['notifyfrom'] = 'Notification sender (optional):';
$labels['notifyimportance'] = 'Importance:';
$labels['notifyimportancelow'] = 'low';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'high';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Phone';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Create filter';
$labels['usedata'] = 'Use following data in the filter:';
$labels['nextstep'] = 'Next Step';
$labels['...'] = '...';
$labels['string'] = 'String';
$labels['currdate'] = 'Current date';
$labels['datetest'] = 'Date';
$labels['dateheader'] = 'header:';
$labels['year'] = 'year';
$labels['month'] = 'month';
$labels['day'] = 'day';
$labels['date'] = 'date (yyyy-mm-dd)';
$labels['julian'] = 'date (julian)';
$labels['hour'] = 'hour';
$labels['minute'] = 'minute';
$labels['second'] = 'second';
$labels['time'] = 'time (hh:mm:ss)';
$labels['iso8601'] = 'date (ISO8601)';
$labels['std11'] = 'date (RFC2822)';
$labels['zone'] = 'time-zone';
$labels['weekday'] = 'weekday (0-6)';
$labels['advancedopts'] = 'Advanced options';
$labels['body'] = 'Body';
$labels['address'] = 'address';
$labels['envelope'] = 'envelope';
$labels['modifier'] = 'modifier:';
$labels['text'] = 'text';
$labels['undecoded'] = 'undecoded (raw)';
$labels['contenttype'] = 'content type';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'all';
$labels['domain'] = 'domain';
$labels['localpart'] = 'local part';
$labels['user'] = 'user';
$labels['detail'] = 'detail';
$labels['comparator'] = 'comparator:';
$labels['default'] = 'default';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'backwards';
$labels['spamtest'] = 'Spam level';
$labels['spamtestisgreaterthan'] = 'is greater than';
$labels['spamtestisgreaterthanequal'] = 'is greater than or equal to';
$labels['spamtestislessthan'] = 'is less than';
$labels['spamtestislessthanequal'] = 'is less than or equal to';
$labels['spamtestequals'] = 'is equal to';
$labels['spamtestnotequals'] = 'is not equal to';
$labels['spamtestisunknown'] = 'is unknown';
$labels['vacation'] = 'Out of Office';
$labels['vacation.reply'] = 'Reply message';
$labels['vacation.advanced'] = 'Advanced settings';
$labels['vacation.from'] = 'Reply sender address';
$labels['vacation.subject'] = 'Subject';
$labels['vacation.body'] = 'Body';
$labels['vacation.start'] = 'Start time';
$labels['vacation.end'] = 'End time';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'On';
$labels['vacation.off'] = 'Off';
$labels['vacation.addresses'] = 'My e-mail addresses';
$labels['vacation.interval'] = 'Reply interval';
$labels['vacation.after'] = 'Put the out-of-office rule after';
$labels['vacation.saving'] = 'Saving data...';
$labels['vacation.action'] = 'Incoming message action';
$labels['vacation.keep'] = 'Keep';
$labels['vacation.discard'] = 'Discard';
$labels['vacation.redirect'] = 'Redirect to';
$labels['vacation.copy'] = 'Send copy to';
$labels['forward'] = 'Forwarding';
$labels['forward.redirect'] = 'Redirect to';
$labels['forward.copy'] = 'Send copy to';
$labels['forward.on'] = 'On';
$labels['forward.off'] = 'Off';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'For incoming mails execute the following action:';
$labels['forward.saving'] = 'Saving data...';
$labels['filladdresses'] = 'Fill with all my addresses';
$labels['arialabelfiltersetactions'] = 'Filter set actions';
$labels['arialabelfilteractions'] = 'Filter actions';
$labels['arialabelfilterform'] = 'Filter properties';
$labels['ariasummaryfilterslist'] = 'List of filters';
$labels['ariasummaryfiltersetslist'] = 'List of filter sets';
$labels['filterstitle'] = 'Edit incoming mail filters';
$labels['vacationtitle'] = 'Edit out-of-office rule';
$labels['forwardtitle'] = 'Edit mail forwarding rule';
$labels['message'] = 'Message';
$labels['duplicate'] = 'is duplicate';
$labels['notduplicate'] = 'is not duplicate';
$labels['duplicate.handle'] = 'handle:';
$labels['duplicate.header'] = 'header:';
$labels['duplicate.uniqueid'] = 'identifier:';
$labels['duplicate.seconds'] = 'timeout (seconds):';
$labels['duplicate.last'] = 'relative to the last execution';

$messages = [];
$messages['filterunknownerror'] = 'Unknown server error.';
$messages['filterconnerror'] = 'Unable to connect to server.';
$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occurred.';
$messages['filterdeleted'] = 'Filter deleted successfully.';
$messages['filtersaved'] = 'Filter saved successfully.';
$messages['filtersaveerror'] = 'Unable to save filter. Server error occurred.';
$messages['filterformerror'] = 'Filter form contains errors.';
$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?';
$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?';
$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?';
$messages['forbiddenchars'] = 'Forbidden characters in field.';
$messages['cannotbeempty'] = 'Field cannot be empty.';
$messages['ruleexist'] = 'Filter with specified name already exists.';
$messages['setactivateerror'] = 'Unable to activate selected filter set. Server error occurred.';
$messages['setdeactivateerror'] = 'Unable to deactivate selected filter set. Server error occurred.';
$messages['setdeleteerror'] = 'Unable to delete selected filter set. Server error occurred.';
$messages['setactivated'] = 'Filter set activated successfully.';
$messages['setdeactivated'] = 'Filter set deactivated successfully.';
$messages['setdeleted'] = 'Filter set deleted successfully.';
$messages['setupdated'] = 'Filter set updated successfully.';
$messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filter set?';
$messages['setcreateerror'] = 'Unable to create filter set. Server error occurred.';
$messages['setcreated'] = 'Filter set created successfully.';
$messages['activateerror'] = 'Unable to enable selected filter(s). Server error occurred.';
$messages['deactivateerror'] = 'Unable to disable selected filter(s). Server error occurred.';
$messages['deactivated'] = 'Filter(s) disabled successfully.';
$messages['activated'] = 'Filter(s) enabled successfully.';
$messages['moved'] = 'Filter moved successfully.';
$messages['moveerror'] = 'Unable to move selected filter. Server error occurred.';
$messages['nametoolong'] = 'Name too long.';
$messages['namereserved'] = 'Reserved name.';
$messages['setexist'] = 'Set already exists.';
$messages['nodata'] = 'At least one position must be selected!';
$messages['invaliddateformat'] = 'Invalid date or date part format';
$messages['saveerror'] = 'Unable to save data. Server error occurred.';
$messages['vacationsaved'] = 'Out-of-office data saved successfully.';
$messages['forwardsaved'] = 'Forward data saved successfully.';
$messages['emptyvacationbody'] = 'Body of vacation message is required!';
$messages['duplicate.conflict.err'] = 'Both header and unique identifier are not allowed.';
$messages['disabledaction'] = 'Action not permitted.';
$messages['lastindexempty'] = 'Index is required when counting from end';
$messages['noflagset'] = 'At least one flag must be selected.';
PKxc�\.��9�9"managesieve/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Suodattimet';
$labels['managefilters'] = 'Hallitse saapuvan sähköpostin suodattimia';
$labels['filtername'] = 'Suodattimen nimi';
$labels['newfilter'] = 'Uusi suodatin';
$labels['filteradd'] = 'Lisää suodatin';
$labels['filterdel'] = 'Poista suodatin';
$labels['rules'] = 'Säännöt';
$labels['actions'] = 'Toiminnot';
$labels['scope'] = 'Rajaus';
$labels['moveup'] = 'Siirrä ylös';
$labels['movedown'] = 'Siirrä alas';
$labels['filterallof'] = 'Täsmää kaikkiin seuraaviin sääntöihin';
$labels['filteranyof'] = 'Täsmää mihin tahansa seuraavista säännöistä';
$labels['filterany'] = 'Kaikki viestit';
$labels['filtercontains'] = 'Sisältää';
$labels['filternotcontains'] = 'Ei sisällä';
$labels['filteris'] = 'on samanlainen kuin';
$labels['filterisnot'] = 'ei ole samanlainen kuin';
$labels['filterexists'] = 'on olemassa';
$labels['filternotexists'] = 'ei ole olemassa';
$labels['filtermatches'] = 'vastaa lauseketta';
$labels['filternotmatches'] = 'ei vastaa lauseketta';
$labels['filterregex'] = 'vastaa säännöllistä lauseketta';
$labels['filternotregex'] = 'ei vastaa säännöllistä lauseketta';
$labels['filterunder'] = 'alle';
$labels['filterover'] = 'yli';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME-osio:';
$labels['mime-message'] = 'viesti';
$labels['mime-anychild'] = 'mikä tahansa';
$labels['mime-type'] = 'tyyppi';
$labels['mime-subtype'] = 'alatyyppi';
$labels['mime-contenttype'] = 'sisällön tyyppi';
$labels['mime-param'] = 'parametri';
$labels['addrule'] = 'Lisää sääntö';
$labels['delrule'] = 'Poista sääntö';
$labels['messagemoveto'] = 'Siirrä viesti';
$labels['messageredirect'] = 'Lähetä viesti edelleen';
$labels['messagecopyto'] = 'Kopioi viesti';
$labels['messagesendcopy'] = 'Lähetä kopio viestistä';
$labels['messagereply'] = 'Vastaa viestillä';
$labels['messagedelete'] = 'Poista viesti';
$labels['messagediscard'] = 'Hylkää viestillä';
$labels['messagekeep'] = 'Säilytä viesti saapuneissa';
$labels['messagesrules'] = 'Saapuville viesteille:';
$labels['messagesactions'] = '...suorita seuraavat toiminnot:';
$labels['add'] = 'Lisää';
$labels['del'] = 'Poista';
$labels['sender'] = 'Lähettäjä';
$labels['recipient'] = 'Vastaanottaja';
$labels['vacationaddr'] = 'Sähköpostiosoitteeni:';
$labels['vacationdays'] = 'Viestien lähetysväli (päivissä):';
$labels['vacationinterval'] = 'Viestien lähetysväli:';
$labels['vacationreason'] = 'Viestin runko (loman syy):';
$labels['vacationfrom'] = 'Vastauksen lähetysosoite:';
$labels['vacationsubject'] = 'Viestin aihe:';
$labels['days'] = 'päivää';
$labels['seconds'] = 'sekuntia';
$labels['rulestop'] = 'Lopeta sääntöjen arviointi';
$labels['enable'] = 'Ota käyttöön/poista käytöstä';
$labels['filterset'] = 'Suodatinasetus';
$labels['filtersets'] = 'Suodattimen asetus';
$labels['filtersetadd'] = 'Lisää suodatinasetus';
$labels['filtersetdel'] = 'Poista suodatinasetus';
$labels['filtersetact'] = 'Ota käyttöön nykyinen suodatinasetus';
$labels['filtersetdeact'] = 'Poista nykyinen suodatinasetus käytöstä';
$labels['filterseteditraw'] = 'Muokkaa suodatinasetusta';
$labels['filtersetswitch'] = 'Ota käyttöön/poista käytöstä suodatinasetukset';
$labels['filterdef'] = 'Suodattimen määrittely';
$labels['filtersetname'] = 'Suodatinasetuksen nimi';
$labels['newfilterset'] = 'Uusi suodatinasetus';
$labels['active'] = 'aktiivinen';
$labels['none'] = 'Ei mikään';
$labels['fromset'] = 'sarjasta';
$labels['fromfile'] = 'tiedostosta';
$labels['filterdisabled'] = 'Suodatin poistettu käytöstä';
$labels['filterenabled'] = 'Suodatin käytössä';
$labels['countisgreaterthan'] = 'määrä on suurempi kuin';
$labels['countisgreaterthanequal'] = 'määrä on suurempi tai yhtä suuri kuin';
$labels['countislessthan'] = 'määrä on vähemmän kuin';
$labels['countislessthanequal'] = 'määrä on vähemmän tai yhtä suuri kuin';
$labels['countequals'] = 'määrä on yhtä suuri kuin';
$labels['countnotequals'] = 'määrä ei ole yhtä suuri kuin';
$labels['valueisgreaterthan'] = 'arvo on suurempi kuin';
$labels['valueisgreaterthanequal'] = 'arvo on suurempi kuin tai yhtä suuri kuin';
$labels['valueislessthan'] = 'arvo on vähemmän kuin';
$labels['valueislessthanequal'] = 'määrä on vähemmän tai yhtä suuri kuin';
$labels['valueequals'] = 'arvo on yhtä suuri kuin';
$labels['valuenotequals'] = 'arvo ei ole yhtä suuri kuin';
$labels['setflags'] = 'Aseta liput viestiin';
$labels['addflags'] = 'Lisää liput viestiin';
$labels['removeflags'] = 'Poista liput viestistä';
$labels['flagread'] = 'Lue';
$labels['flagdeleted'] = 'Poistettu';
$labels['flaganswered'] = 'Vastattu';
$labels['flagflagged'] = 'Liputettu';
$labels['flagdraft'] = 'Luonnos';
$labels['addheader'] = 'Lisää otsake viestiin';
$labels['deleteheader'] = 'Poista otsake viestistä';
$labels['headername'] = 'Otsakkeen nimi';
$labels['headervalue'] = 'Otsakkeen arvo';
$labels['headerpos'] = 'Otsakkeen sijainti';
$labels['headeratstart'] = 'alussa';
$labels['headeratend'] = 'lopussa';
$labels['headeroccurrence'] = 'Otsakkeen esiintyminen/sijainti';
$labels['headerfromstart'] = 'alusta';
$labels['headerfromend'] = 'lopusta';
$labels['headerpatterns'] = 'Otsakearvon kaava';
$labels['headermatchtype'] = 'täsmää tyyppiin:';
$labels['setvariable'] = 'Aseta muuttuja';
$labels['setvarname'] = 'Muuttujan nimi:';
$labels['setvarvalue'] = 'Muuttujan arvo:';
$labels['setvarmodifiers'] = 'Muuntimet:';
$labels['varlower'] = 'pienellä kirjoitettu';
$labels['varupper'] = 'isolla kirjoitettu';
$labels['varlowerfirst'] = 'ensimmäinen merkki pienellä kirjoitettuna';
$labels['varupperfirst'] = 'ensimmäinen merkki isolla kirjoitettuna';
$labels['varquotewildcard'] = 'lainaa erikoismerkit';
$labels['varlength'] = 'pituus';
$labels['notify'] = 'Lähetä ilmoitus';
$labels['notifytarget'] = 'Ilmoituksen kohde:';
$labels['notifymessage'] = 'Ilmoituksen viesti (valinnainen):';
$labels['notifyoptions'] = 'Ilmoituksen valinnat (valinnainen)';
$labels['notifyfrom'] = 'Ilmoituksen lähettäjä (valinnainen):';
$labels['notifyimportance'] = 'Tärkeysaste:';
$labels['notifyimportancelow'] = 'matala';
$labels['notifyimportancenormal'] = 'normaali';
$labels['notifyimportancehigh'] = 'korkea';
$labels['notifymethodmailto'] = 'Sähköposti';
$labels['notifymethodtel'] = 'Puhelin';
$labels['notifymethodsms'] = 'Tekstiviesti';
$labels['filtercreate'] = 'Luo suodatin';
$labels['usedata'] = 'Käytä seuraavaa dataa suodattimessa:';
$labels['nextstep'] = 'Seuraava vaihe';
$labels['...'] = '...';
$labels['string'] = 'Merkkijono';
$labels['currdate'] = 'Nykyinen päivämäärä';
$labels['datetest'] = 'Päivämäärä';
$labels['dateheader'] = 'otsikko:';
$labels['year'] = 'vuosi';
$labels['month'] = 'kuukausi';
$labels['day'] = 'päivä';
$labels['date'] = 'päivämäärä (vvvv-kk-pp)';
$labels['julian'] = 'päivämäärä (juliaaninen)';
$labels['hour'] = 'tunti';
$labels['minute'] = 'minuutti';
$labels['second'] = 'sekunti';
$labels['time'] = 'aika (hh:mm:ss)';
$labels['iso8601'] = 'päivämäärä (ISO8601)';
$labels['std11'] = 'päivämäärä (RFC2882)';
$labels['zone'] = 'aikavyöhyke';
$labels['weekday'] = 'viikonpäivä (0-6)';
$labels['advancedopts'] = 'Lisävalinnat';
$labels['body'] = 'Runko';
$labels['address'] = 'osoite';
$labels['envelope'] = 'kirjekuori';
$labels['modifier'] = 'muuntaja:';
$labels['text'] = 'teksti';
$labels['undecoded'] = 'dekoodaamaton (raaka)';
$labels['contenttype'] = 'sisällön tyyppi';
$labels['modtype'] = 'tyyppi:';
$labels['allparts'] = 'kaikki';
$labels['domain'] = 'domain';
$labels['localpart'] = 'paikallinen osa';
$labels['user'] = 'käyttäjä';
$labels['detail'] = 'yksityiskohta';
$labels['comparator'] = 'vertailija:';
$labels['default'] = 'oletus';
$labels['octet'] = 'tarkka (tavuina)';
$labels['asciicasemap'] = 'kirjainkoosta riippumaton (ascii-merkistö)';
$labels['asciinumeric'] = 'numeerinen (ascii-numerot)';
$labels['index'] = 'indeksi:';
$labels['indexlast'] = 'taaksepäin';
$labels['spamtest'] = 'Roskapostitaso';
$labels['spamtestisgreaterthan'] = 'on suurempi kuin';
$labels['spamtestisgreaterthanequal'] = 'on suurempi tai yhtä suuri kuin';
$labels['spamtestislessthan'] = 'on vähemmän kuin';
$labels['spamtestislessthanequal'] = 'on vähemmän tai yhtä suuri kuin';
$labels['spamtestequals'] = 'on samanlainen kuin';
$labels['spamtestnotequals'] = 'ei ole samanlainen kuin';
$labels['spamtestisunknown'] = 'on tuntematon';
$labels['vacation'] = 'Lomavastaaja';
$labels['vacation.reply'] = 'Vastausviesti';
$labels['vacation.advanced'] = 'Lisäasetukset';
$labels['vacation.from'] = 'Vastauksen lähetysosoite';
$labels['vacation.subject'] = 'Aihe';
$labels['vacation.body'] = 'Sisältö';
$labels['vacation.start'] = 'Aloitusaika';
$labels['vacation.end'] = 'Päättymisaika';
$labels['vacation.status'] = 'Tila';
$labels['vacation.on'] = 'Päällä';
$labels['vacation.off'] = 'Pois';
$labels['vacation.addresses'] = 'Omat osoitteeni';
$labels['vacation.interval'] = 'Vastausväli';
$labels['vacation.after'] = 'Lisää lomavastaaja tämän säännön jälkeen';
$labels['vacation.saving'] = 'Tallennetaan tietoja...';
$labels['vacation.action'] = 'Toiminto saapuvalle viestille';
$labels['vacation.keep'] = 'Säilytä';
$labels['vacation.discard'] = 'Hylkää';
$labels['vacation.redirect'] = 'Ohjaa uudelleen osoitteeseen';
$labels['vacation.copy'] = 'Lähetä kopio osoitteeseen';
$labels['forward'] = 'Uudelleenohjaus';
$labels['forward.redirect'] = 'Ohjaa uudelleen osoitteeseen';
$labels['forward.copy'] = 'Lähetä kopio osoitteeseen';
$labels['forward.on'] = 'Päällä';
$labels['forward.off'] = 'Pois';
$labels['forward.status'] = 'Tila:';
$labels['forward.action'] = 'Suorita seuraava sääntö saapuville viesteille:';
$labels['forward.saving'] = 'Tallennetaan tietoja...';
$labels['filladdresses'] = 'Lisää kaikki osoitteeni';
$labels['arialabelfiltersetactions'] = 'Suodatinasetuksen toiminnot';
$labels['arialabelfilteractions'] = 'Suodattimen toiminnot';
$labels['arialabelfilterform'] = 'Suodattimen asetukset';
$labels['ariasummaryfilterslist'] = 'Suodatinlista';
$labels['ariasummaryfiltersetslist'] = 'Suodatinasetuslista';
$labels['filterstitle'] = 'Muokkaa saapuvan postin suodattimia';
$labels['vacationtitle'] = 'Muokkaa poissaolosääntöä';
$labels['forwardtitle'] = 'Muokkaa viestien vältyssääntöä';
$labels['message'] = 'Viesti';
$labels['duplicate'] = 'on kopio';
$labels['notduplicate'] = 'ei ole kopio';
$labels['duplicate.handle'] = 'käsittele:';
$labels['duplicate.header'] = 'otsikko:';
$labels['duplicate.uniqueid'] = 'tunniste:';
$labels['duplicate.seconds'] = 'aikakatkaisu (sekuntia):';
$labels['duplicate.last'] = 'suhteellinen viimeiseen suoritukseen';
$messages['filterunknownerror'] = 'Tuntematon palvelinvirhe.';
$messages['filterconnerror'] = 'Yhteys palvelimeen epäonnistui.';
$messages['filterdeleteerror'] = 'Suodattimen poistaminen epäonnistui. Tapahtui palvelinvirhe.';
$messages['filterdeleted'] = 'Suodatin poistettu onnistuneesti.';
$messages['filtersaved'] = 'Suodatin tallennettu onnistuneesti.';
$messages['filtersaveerror'] = 'Suodattimen tallennus epäonnistui palvelinvirheen vuoksi.';
$messages['filterformerror'] = 'Suodatinlomake sisältää virheitä.';
$messages['filterdeleteconfirm'] = 'Haluatko varmasti poistaa valitun suodattimen?';
$messages['ruledeleteconfirm'] = 'Haluatko varmasti poistaa valitun säännön?';
$messages['actiondeleteconfirm'] = 'Haluatko varmasti poistaa valitun toimenpiteen?';
$messages['forbiddenchars'] = 'Virheellisiä merkkejä kentässä.';
$messages['cannotbeempty'] = 'Kenttä ei voi olla tyhjä.';
$messages['ruleexist'] = 'Suodatin samalla nimellä on jo olemassa.';
$messages['setactivateerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu ottaa käyttöön.';
$messages['setdeactivateerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu kytkeä pois päältä.';
$messages['setdeleteerror'] = 'Palvelinvirheestä johtuen suodatinasetuksia ei voitu poistaa.';
$messages['setactivated'] = 'Suodatinasetukset kytketty päälle.';
$messages['setdeactivated'] = 'Suodatinasetukset kytketty pois päältä.';
$messages['setdeleted'] = 'Suodatinasetus poistettu.';
$messages['setupdated'] = 'Suodatinasetus päivitetty.';
$messages['setdeleteconfirm'] = 'Oletko varma että haluat poistaa valitun suodatinasetuksen?';
$messages['setcreateerror'] = 'Palvelinvirheestä johtuen suodatinasetusta ei voitu luoda.';
$messages['setcreated'] = 'Suodatinasetus luotiin onnistuneesti.';
$messages['activateerror'] = 'Palvelinvirheestä johtuen valittuja suodattimia ei voitu ottaa käyttöön.';
$messages['deactivateerror'] = 'Palvelinvirheestä johtuen valittuja suodattimia ei voitu kytkeä pois käytöstä.';
$messages['deactivated'] = 'Suodattimet kytketty pois käytöstä.';
$messages['activated'] = 'Suodattimet otettu käyttöön.';
$messages['moved'] = 'Suodatin siirretty onnistuneesti.';
$messages['moveerror'] = 'Palvelinvirheestä johtuen suodatinta ei voitu siirtää.';
$messages['nametoolong'] = 'Nimi on liian pitkä.';
$messages['namereserved'] = 'Varattu nimi.';
$messages['setexist'] = 'Suodatinasetus on jo olemassa.';
$messages['nodata'] = 'Vähintään yksi sijainti täytyy valita!';
$messages['invaliddateformat'] = 'Virheellinen päivämäärämuoto.';
$messages['saveerror'] = 'Tietojen tallennus epäonnistui palvelinvirheen vuoksi.';
$messages['vacationsaved'] = 'Lomavastaaja aktivoitu.';
$messages['forwardsaved'] = 'Uudelleenohjaukset tallennettu.';
$messages['emptyvacationbody'] = 'Lomaviestin sisältö vaaditaan!';
$messages['duplicate.conflict.err'] = 'Otsaketta ja uniikkia tunnistetta ei sallita samanaikaisesti.';
$messages['disabledaction'] = 'Toiminto ei ole sallittu.';
$messages['lastindexempty'] = 'Indeksi vaaditaan lopusta laskiessa.';
$messages['noflagset'] = 'Vähintään yksi lippu täytyy valita.';
PKxc�\?����5�5"managesieve/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtre';
$labels['managefilters'] = 'Rediger filter for innkommende e-post';
$labels['filtername'] = 'Filternavn';
$labels['newfilter'] = 'Nytt filter';
$labels['filteradd'] = 'Legg til filter';
$labels['filterdel'] = 'Slett filter';
$labels['rules'] = 'Regler';
$labels['actions'] = 'Handlinger';
$labels['scope'] = 'Omfanget';
$labels['moveup'] = 'Flytt opp';
$labels['movedown'] = 'Flytt ned';
$labels['filterallof'] = 'som treffer alle følgende regler';
$labels['filteranyof'] = 'som treffer en av følgende regler';
$labels['filterany'] = 'alle meldinger';
$labels['filtercontains'] = 'inneholder';
$labels['filternotcontains'] = 'ikke inneholder';
$labels['filteris'] = 'er lik';
$labels['filterisnot'] = 'er ulik';
$labels['filterexists'] = 'eksisterer';
$labels['filternotexists'] = 'ikke eksisterer';
$labels['filtermatches'] = 'treffer uttrykk';
$labels['filternotmatches'] = 'ikke treffer uttrykk';
$labels['filterregex'] = 'treffer regulært uttrykk';
$labels['filternotregex'] = 'ikke treffer regulært uttrykk';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME del:';
$labels['mime-message'] = 'melding';
$labels['mime-anychild'] = 'alle';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'undertype';
$labels['mime-contenttype'] = 'innholdstype';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Legg til regel';
$labels['delrule'] = 'Slett regel';
$labels['messagemoveto'] = 'Flytt meldingen til';
$labels['messageredirect'] = 'Videresend meldingen til';
$labels['messagecopyto'] = 'Kopier meldingen til';
$labels['messagesendcopy'] = 'Send en kopi av meldingen til';
$labels['messagereply'] = 'Svar med melding';
$labels['messagedelete'] = 'Slett melding';
$labels['messagediscard'] = 'Avvis med melding';
$labels['messagekeep'] = 'Behold melding i innboks';
$labels['messagesrules'] = 'For innkommende e-post';
$labels['messagesactions'] = '... gjør følgende:';
$labels['add'] = 'Legg til';
$labels['del'] = 'Slett';
$labels['sender'] = 'Avsender';
$labels['recipient'] = 'Mottaker';
$labels['vacationaddr'] = 'Mine e-postadresser:';
$labels['vacationdays'] = 'Periode mellom meldinger (i dager):';
$labels['vacationinterval'] = 'Periode mellom meldinger:';
$labels['vacationreason'] = 'Innhold (begrunnelse for fravær)';
$labels['vacationfrom'] = 'Avsender:';
$labels['vacationsubject'] = 'Meldingsemne:';
$labels['days'] = 'dager';
$labels['seconds'] = 'sekunder';
$labels['rulestop'] = 'Stopp evaluering av regler';
$labels['enable'] = 'Aktiver/Deaktiver';
$labels['filterset'] = 'Filtersett';
$labels['filtersets'] = 'Filtersett';
$labels['filtersetadd'] = 'Legg til filtersett';
$labels['filtersetdel'] = 'Slett filtersett';
$labels['filtersetact'] = 'Aktiver gjeldende filtersett';
$labels['filtersetdeact'] = 'Deaktiver gjeldende filtersett';
$labels['filterseteditraw'] = 'Rediger filtersett';
$labels['filtersetswitch'] = 'Aktiver/deaktiver filtersett';
$labels['filterdef'] = 'Filterdefinisjon';
$labels['filtersetname'] = 'Navn på filtersett';
$labels['newfilterset'] = 'Nytt filtersett';
$labels['active'] = 'aktiv';
$labels['none'] = 'ingen';
$labels['fromset'] = 'fra sett';
$labels['fromfile'] = 'fra fil';
$labels['filterdisabled'] = 'Filter deaktivert';
$labels['filterenabled'] = 'Filter aktivert';
$labels['countisgreaterthan'] = 'antall er flere enn';
$labels['countisgreaterthanequal'] = 'antall er flere enn eller lik';
$labels['countislessthan'] = 'antall er færre enn';
$labels['countislessthanequal'] = 'antall er færre enn eller lik';
$labels['countequals'] = 'antall er lik';
$labels['countnotequals'] = 'tallet er ikke det samme som';
$labels['valueisgreaterthan'] = 'verdien er høyrere enn';
$labels['valueisgreaterthanequal'] = 'verdien er høyere eller lik';
$labels['valueislessthan'] = 'verdien er lavere enn';
$labels['valueislessthanequal'] = 'verdien er lavere eller lik';
$labels['valueequals'] = 'verdien er lik';
$labels['valuenotequals'] = 'verdien er ikke den samme som';
$labels['setflags'] = 'Sett meldingsflagg';
$labels['addflags'] = 'Legg til flagg på meldingen';
$labels['removeflags'] = 'Fjern flagg fra meldingen';
$labels['flagread'] = 'Lese';
$labels['flagdeleted'] = 'Slettet';
$labels['flaganswered'] = 'Besvart';
$labels['flagflagged'] = 'Flagget';
$labels['flagdraft'] = 'Utkast';
$labels['addheader'] = 'Legg til meldingshode til melding';
$labels['deleteheader'] = 'Fjern meldingshode fra melding';
$labels['headername'] = 'Navn til meldingshode';
$labels['headervalue'] = 'Verdi til meldingshode';
$labels['headerpos'] = 'Posisjon for meldingshode';
$labels['headeratstart'] = 'på begynnelsen';
$labels['headeratend'] = 'på slutten';
$labels['headeroccurrence'] = 'Hodeplassering';
$labels['headerfromstart'] = 'fra start';
$labels['headerfromend'] = 'fra slutt';
$labels['headerpatterns'] = 'Mønster for hodeinnhold';
$labels['headermatchtype'] = 'type lik:';
$labels['setvariable'] = 'Set variabel';
$labels['setvarname'] = 'Variabelnavn:';
$labels['setvarvalue'] = 'Variabel verdi:';
$labels['setvarmodifiers'] = 'Modifikator:';
$labels['varlower'] = 'med små bokstaver';
$labels['varupper'] = 'med store bokstaver';
$labels['varlowerfirst'] = 'første tegn liten bokstav';
$labels['varupperfirst'] = 'første tegn stor bokstav';
$labels['varquotewildcard'] = 'sitér spesialtegn';
$labels['varlength'] = 'lengde';
$labels['notify'] = 'Send varsel';
$labels['notifytarget'] = 'Varlselsmottaker:';
$labels['notifymessage'] = 'Varselsmelding (valgfritt):';
$labels['notifyoptions'] = 'Varselsalternativer (valgfritt):';
$labels['notifyfrom'] = 'Varlselsavsender (valgfritt):';
$labels['notifyimportance'] = 'Viktighet:';
$labels['notifyimportancelow'] = 'lav';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'høy';
$labels['notifymethodmailto'] = 'E-post';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Opprett filter';
$labels['usedata'] = 'Bruk følgende data i filteret:';
$labels['nextstep'] = 'Neste steg';
$labels['...'] = '...';
$labels['string'] = 'Tekststreng';
$labels['currdate'] = 'Nåværende dato';
$labels['datetest'] = 'Dato';
$labels['dateheader'] = 'header:';
$labels['year'] = 'år';
$labels['month'] = 'måned';
$labels['day'] = 'dag';
$labels['date'] = 'dato (yyyy-mm-dd)';
$labels['julian'] = 'dato (juliansk)';
$labels['hour'] = 'time';
$labels['minute'] = 'minutt';
$labels['second'] = 'sekund';
$labels['time'] = 'tid (hh:mm:ss)';
$labels['iso8601'] = 'dato (ISO8601)';
$labels['std11'] = 'dato (RFC2822)';
$labels['zone'] = 'tidssone';
$labels['weekday'] = 'ukedag (0-6)';
$labels['advancedopts'] = 'Avanserte alternativer';
$labels['body'] = 'Meldingstekst';
$labels['address'] = 'adresse';
$labels['envelope'] = 'konvolutt';
$labels['modifier'] = 'modifikator:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'ikke dekodet (rå)';
$labels['contenttype'] = 'innholdstype';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'alle';
$labels['domain'] = 'domene';
$labels['localpart'] = 'lokal del (local part)';
$labels['user'] = 'bruker';
$labels['detail'] = 'detalj';
$labels['comparator'] = 'sammenligning:';
$labels['default'] = 'standard';
$labels['octet'] = 'streng (oktett)';
$labels['asciicasemap'] = 'ikke skill store og små bokstaver (ascii-casemap)';
$labels['asciinumeric'] = 'numerisk (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'baklengs';
$labels['spamtest'] = 'Spamnivå';
$labels['spamtestisgreaterthan'] = 'er større enn';
$labels['spamtestisgreaterthanequal'] = 'er større enn eller lik';
$labels['spamtestislessthan'] = 'er mindre enn';
$labels['spamtestislessthanequal'] = 'er mindre enn eller lik';
$labels['spamtestequals'] = 'er lik';
$labels['spamtestnotequals'] = 'er ulik';
$labels['spamtestisunknown'] = 'er ukjent';
$labels['vacation'] = 'Fravær';
$labels['vacation.reply'] = 'Svar melding';
$labels['vacation.advanced'] = 'Avanserte innstillinger';
$labels['vacation.from'] = 'Fra adresse';
$labels['vacation.subject'] = 'Emne';
$labels['vacation.body'] = 'Meldingstekst';
$labels['vacation.start'] = 'Start tid';
$labels['vacation.end'] = 'Slutt tid';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'På';
$labels['vacation.off'] = 'Av';
$labels['vacation.addresses'] = 'Min e-postadresse';
$labels['vacation.interval'] = 'Svarintervall';
$labels['vacation.after'] = 'Plasser fraværsregel etter';
$labels['vacation.saving'] = 'Lagrer data...';
$labels['vacation.action'] = 'Handling for innkommende meldinger';
$labels['vacation.keep'] = 'Behold';
$labels['vacation.discard'] = 'Forkast';
$labels['vacation.redirect'] = 'Videresend til';
$labels['vacation.copy'] = 'Send kopi til';
$labels['forward'] = 'Videresending';
$labels['forward.redirect'] = 'Videresend til';
$labels['forward.copy'] = 'Send kopi til';
$labels['forward.on'] = 'På';
$labels['forward.off'] = 'Av';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Handling for innkommende meldinger:';
$labels['forward.saving'] = 'Lagrer data...';
$labels['filladdresses'] = 'Fyll ut med alle mine adresser';
$labels['arialabelfiltersetactions'] = 'Filtersetthandlinger';
$labels['arialabelfilteractions'] = 'Filterhandling';
$labels['arialabelfilterform'] = 'Filteregenskaper';
$labels['ariasummaryfilterslist'] = 'Liste over filtre';
$labels['ariasummaryfiltersetslist'] = 'Liste over filtersett';
$labels['filterstitle'] = 'Rediger innkommende mailfiltre';
$labels['vacationtitle'] = 'Rediger fraværsregel';
$labels['forwardtitle'] = 'Rediger videresendingsregel';
$labels['message'] = 'Melding';
$labels['duplicate'] = 'er duplikat';
$labels['notduplicate'] = 'er ikke duplikat';
$labels['duplicate.handle'] = 'handle:';
$labels['duplicate.header'] = 'header:';
$labels['duplicate.uniqueid'] = 'identifikator:';
$labels['duplicate.seconds'] = 'tidsavbrudd (sekunder):';
$labels['duplicate.last'] = 'relativ til siste utførelse';
$messages['filterunknownerror'] = 'Ukjent problem med tjener.';
$messages['filterconnerror'] = 'Kunne ikke koble til tjeneren.';
$messages['filterdeleteerror'] = 'Kunne ikke slette filter. Fikk feilmelding fra server.';
$messages['filterdeleted'] = 'Filteret er blitt slettet.';
$messages['filtersaved'] = 'Filteret er blitt lagret.';
$messages['filtersaveerror'] = 'Kunne ikke lagre filter. Fikk feilmelding fra server.';
$messages['filterformerror'] = 'Filterskjemaet inneholder feil.';
$messages['filterdeleteconfirm'] = 'Vil du virkelig slette det valgte filteret?';
$messages['ruledeleteconfirm'] = 'Er du sikker på at du vil slette valgte regel?';
$messages['actiondeleteconfirm'] = 'Er du sikker på at du vil slette valgte hendelse?';
$messages['forbiddenchars'] = 'Ugyldige tegn i felt.';
$messages['cannotbeempty'] = 'Feltet kan ikke stå tomt.';
$messages['ruleexist'] = 'Det finnes allerede et filter med dette navnet.';
$messages['setactivateerror'] = 'Kunne ikke aktivere valgte filtersett. Fikk feilmelding fra server.';
$messages['setdeactivateerror'] = 'Kunne ikke deaktivere valgte filtersett. Fikk feilmelding fra server.';
$messages['setdeleteerror'] = 'Kunne ikke slette valgte filtersett. Fikk feilmelding fra server.';
$messages['setactivated'] = 'Filtersett aktivert.';
$messages['setdeactivated'] = 'Filtersett deaktivert.';
$messages['setdeleted'] = 'Filtersett slettet.';
$messages['setupdated'] = 'Filtersett oppdatert.';
$messages['setdeleteconfirm'] = 'Er du sikker på at du vil slette de valgte filtersettene?';
$messages['setcreateerror'] = 'Kunne ikke opprette filtersett. Fikk feilmelding fra server.';
$messages['setcreated'] = 'Filtersett opprettet.';
$messages['activateerror'] = 'Kunne ikke aktivere valgte filter(e). Fikk feilmelding fra server.';
$messages['deactivateerror'] = 'Kunne ikke deaktivere valgte filter(e). Fikk feilmelding fra server.';
$messages['deactivated'] = 'Filter deaktivert.';
$messages['activated'] = 'Filter aktivert.';
$messages['moved'] = 'Filter flyttet.';
$messages['moveerror'] = 'Kunne ikke flytte valgte filter. Fikk feilmelding fra server.';
$messages['nametoolong'] = 'Navnet er for langt.';
$messages['namereserved'] = 'Navnet er reservert.';
$messages['setexist'] = 'Settet eksisterer allerede.';
$messages['nodata'] = 'Du må velge minst én posisjon!';
$messages['invaliddateformat'] = 'Ugyldig dato eller datoformat';
$messages['saveerror'] = 'Kunne ikke lagre data. Fikk feilmelding fra server.';
$messages['vacationsaved'] = 'Lagring av fraværsregel vellykket.';
$messages['forwardsaved'] = 'Lagring av videresendingsregel vellykket.';
$messages['emptyvacationbody'] = 'Innhold for fraværsmelding påkrevd!';
$messages['duplicate.conflict.err'] = 'Både hode og unik ID er ikke tillatt.';
$messages['disabledaction'] = 'Handling ikke tillatt.';
$messages['lastindexempty'] = 'Ved telling fra bunnen, er indeks påkrevd';
$messages['noflagset'] = 'Minst ett flagg må være valgt.';
PKxc�\I�"��9�9"managesieve/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtra';
$labels['managefilters'] = 'Administroni filtra për postë ardhëse';
$labels['filtername'] = 'Emër filtri';
$labels['newfilter'] = 'Filtër i ri';
$labels['filteradd'] = 'Shtoni filtër';
$labels['filterdel'] = 'Fshije filtrin';
$labels['rules'] = 'Rregulla';
$labels['actions'] = 'Veprime';
$labels['scope'] = 'Shtrirje';
$labels['moveup'] = 'Lëvize sipër';
$labels['movedown'] = 'Lëvize poshtë';
$labels['filterallof'] = 'që ka përputhje me krejt rregullat vijues';
$labels['filteranyof'] = 'që ka përputhje me cilindo nga rregullat vijues';
$labels['filterany'] = 'krejt mesazhet';
$labels['filtercontains'] = 'përmban';
$labels['filternotcontains'] = 'nuk përmban';
$labels['filteris'] = 'është baras me';
$labels['filterisnot'] = 's’është baras me';
$labels['filterexists'] = 'ekziston';
$labels['filternotexists'] = 's’ekziston';
$labels['filtermatches'] = 'ka përputhje me shprehjen';
$labels['filternotmatches'] = 's’ka përputhje me shprehjen';
$labels['filterregex'] = 'ka përputhje me shprehjen rregullt';
$labels['filternotregex'] = 's’ka përputhje me shprehjen e rregullt';
$labels['filterunder'] = 'nën';
$labels['filterover'] = 'mbi';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Pjesë MIME:';
$labels['mime-message'] = 'mesazh';
$labels['mime-anychild'] = 'çfarëdo';
$labels['mime-type'] = 'lloj';
$labels['mime-subtype'] = 'nënlloj';
$labels['mime-param'] = 'parametër';
$labels['addrule'] = 'Shtoni rregull';
$labels['delrule'] = 'Fshije rregullin';
$labels['messagemoveto'] = 'Kaloje mesazhin te';
$labels['messageredirect'] = 'Ridrejtoje mesazhin te';
$labels['messagecopyto'] = 'Kopjoje mesazhin te';
$labels['messagesendcopy'] = 'Dërgo kopje mesazhi te';
$labels['messagereply'] = 'Përgjigju me mesazh';
$labels['messagedelete'] = 'Fshije mesazhin';
$labels['messagediscard'] = 'Hidhe tej mesazhin';
$labels['messagekeep'] = 'Mbaje mesazhin te Të marrët';
$labels['messagesrules'] = 'Për postë ardhëse:';
$labels['messagesactions'] = '…përmbush veprimet vijuese:';
$labels['add'] = 'Shtoje';
$labels['del'] = 'Fshije';
$labels['sender'] = 'Dërgues';
$labels['recipient'] = 'Marrës';
$labels['vacationaddr'] = 'Adresat e mia email:';
$labels['vacationdays'] = 'Sa shpesh dërgon mesazhe (në ditë):';
$labels['vacationinterval'] = 'Sa shpesh të dërgohen mesazhet:';
$labels['vacationreason'] = 'Lëndë mesazhi (arsye për pushime):';
$labels['vacationfrom'] = 'Adresë dërguesi për përgjigje:';
$labels['vacationsubject'] = 'Subjekt mesazhi:';
$labels['days'] = 'ditë';
$labels['seconds'] = 'sekonda';
$labels['rulestop'] = 'Ndale mbikëqyrjen e rregullave';
$labels['enable'] = 'Aktivizoje/Çaktivizoje';
$labels['filterset'] = 'Grup filtrash';
$labels['filtersets'] = 'Grupe filtrash';
$labels['filtersetadd'] = 'Shtoni grup filtrash';
$labels['filtersetdel'] = 'Fshije grupin e filtrave';
$labels['filtersetact'] = 'Aktivizo grupin e tanishëm të filtrave';
$labels['filtersetdeact'] = 'Çaktivizo grupin e tanishëm të filtrave';
$labels['filterseteditraw'] = 'Përpunoni grup filtrash';
$labels['filtersetswitch'] = 'Aktivizoni/çaktivizoni grup filtrash';
$labels['filterdef'] = 'Përkufizim filtri';
$labels['filtersetname'] = 'Emër grupi filtrash';
$labels['newfilterset'] = 'Grup i ri filtrash';
$labels['active'] = 'aktiv';
$labels['none'] = 'asnjë';
$labels['fromset'] = 'prej grupi';
$labels['fromfile'] = 'prej kartele';
$labels['filterdisabled'] = 'Filtër i çaktivizuar';
$labels['filterenabled'] = 'Filtri u aktivizua';
$labels['countisgreaterthan'] = 'numri është më i madh se';
$labels['countisgreaterthanequal'] = 'numri është më i madh ose baras me';
$labels['countislessthan'] = 'numri është më i vogël se';
$labels['countislessthanequal'] = 'numri është më i vogël ose baras me';
$labels['countequals'] = 'numri është baras me';
$labels['countnotequals'] = 'numri s’është baras me';
$labels['valueisgreaterthan'] = 'vlera është më e madhe se';
$labels['valueisgreaterthanequal'] = 'vlera është më e madh ose baras me';
$labels['valueislessthan'] = 'vlera është më e vogël se';
$labels['valueislessthanequal'] = 'vlera është më e vogël ose baras me';
$labels['valueequals'] = 'vlera është baras me';
$labels['valuenotequals'] = 'vlera s’është baras me';
$labels['setflags'] = 'Caktoni shenja për mesazhin';
$labels['addflags'] = 'Shtoni shenja te mesazhi';
$labels['removeflags'] = 'Hiqni shenja prej mesazhit';
$labels['flagread'] = 'I lexuar';
$labels['flagdeleted'] = 'I fshirë';
$labels['flaganswered'] = 'Me përgjigje';
$labels['flagflagged'] = 'Me shenjë';
$labels['flagdraft'] = 'Skicë';
$labels['addheader'] = 'Shto krye te mesazhi';
$labels['deleteheader'] = 'Hiq kryet nga mesazhi';
$labels['headername'] = 'Emër kryesh';
$labels['headervalue'] = 'Vlerë kryesh';
$labels['headerpos'] = 'Pozicion kryesh';
$labels['headeratstart'] = 'në fillim';
$labels['headeratend'] = 'në fund';
$labels['headeroccurrence'] = 'Hasje/pozicion kryeje';
$labels['headerfromstart'] = 'nga fillimi';
$labels['headerfromend'] = 'nga fundi';
$labels['headerpatterns'] = 'Rregullsi vlere kryesh';
$labels['headermatchtype'] = 'lloj përputhjeje:';
$labels['setvariable'] = 'Caktoni ndryshore';
$labels['setvarname'] = 'Emër ndryshoreje:';
$labels['setvarvalue'] = 'Vlerë ndryshoreje:';
$labels['setvarmodifiers'] = 'Modifikues:';
$labels['varlower'] = 'me të vogla';
$labels['varupper'] = 'me të mëdha';
$labels['varlowerfirst'] = 'Shenja e parë me të vogla';
$labels['varupperfirst'] = 'shenja e parë me të mëdha';
$labels['varquotewildcard'] = 'shenja speciale citimi';
$labels['varlength'] = 'gjatësi';
$labels['notify'] = 'Dërgo njoftim';
$labels['notifytarget'] = 'Objektiv njoftimi:';
$labels['notifymessage'] = 'Mesazh njoftimi (opsionale):';
$labels['notifyoptions'] = 'Opsione njoftimi (opsionale):';
$labels['notifyfrom'] = 'Dërgues njoftimi (opsionale):';
$labels['notifyimportance'] = 'Rëndësi:';
$labels['notifyimportancelow'] = 'e ulët';
$labels['notifyimportancenormal'] = 'normale';
$labels['notifyimportancehigh'] = 'e lartë';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Krijoje filtrin';
$labels['usedata'] = 'Përdor të dhënat vijuese te filtri:';
$labels['nextstep'] = 'Hapi Pasues';
$labels['...'] = '…';
$labels['string'] = 'Varg';
$labels['currdate'] = 'Datë e tanishme';
$labels['datetest'] = 'Datë';
$labels['dateheader'] = 'krye:';
$labels['year'] = 'vit';
$labels['month'] = 'muaj';
$labels['day'] = 'ditë';
$labels['date'] = 'datë (yyyy-mm-dd)';
$labels['julian'] = 'datë (sipas kalendarit julian)';
$labels['hour'] = 'orë';
$labels['minute'] = 'minutë';
$labels['second'] = 'sekondë';
$labels['time'] = 'kohë (hh:mm:ss)';
$labels['iso8601'] = 'datë (ISO8601)';
$labels['std11'] = 'datë (RFC2822)';
$labels['zone'] = 'brez orar';
$labels['weekday'] = 'ditë e javës (0-6)';
$labels['advancedopts'] = 'Mundësi të mëtejshme';
$labels['body'] = 'Lëndë';
$labels['address'] = 'adresë';
$labels['envelope'] = 'zarf';
$labels['modifier'] = 'modifikues:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'i pakoduar (i papërpunuar)';
$labels['contenttype'] = 'lloj lënde';
$labels['modtype'] = 'lloj:';
$labels['allparts'] = 'krejt';
$labels['domain'] = 'përkatësi';
$labels['localpart'] = 'pjesë lokale';
$labels['user'] = 'përdorues';
$labels['detail'] = 'hollësi';
$labels['comparator'] = 'krahasues:';
$labels['default'] = 'parazgjedhje';
$labels['octet'] = 'strikt (tetëshe)';
$labels['asciicasemap'] = 'i pavarur nga shkrimi me të mëdha apo të vogla (ascii-casemap)';
$labels['asciinumeric'] = 'numerike (ascii-numeric)';
$labels['index'] = 'tregues:';
$labels['indexlast'] = 'mbrapsht';
$labels['spamtest'] = 'Shkallë spam-i';
$labels['spamtestisgreaterthan'] = 'është më i madh se';
$labels['spamtestisgreaterthanequal'] = 'është më i madh ose baras me';
$labels['spamtestislessthan'] = 'është më i vogël';
$labels['spamtestislessthanequal'] = 'është më i vogël ose baras me';
$labels['spamtestequals'] = 'është baras me';
$labels['spamtestnotequals'] = 's’është baras me';
$labels['spamtestisunknown'] = 'është i panjohur';
$labels['vacation'] = 'Jashtë zyre';
$labels['vacation.reply'] = 'Mesazh përgjigjeje';
$labels['vacation.advanced'] = 'Rregullime të mëtejshme';
$labels['vacation.from'] = 'Adresë dërguesi për përgjigje';
$labels['vacation.subject'] = 'Subjekt';
$labels['vacation.body'] = 'Lëndë';
$labels['vacation.start'] = 'Kohë fillimi';
$labels['vacation.end'] = 'Kohë përfundimi';
$labels['vacation.status'] = 'Gjendje';
$labels['vacation.on'] = 'On';
$labels['vacation.off'] = 'Off';
$labels['vacation.addresses'] = 'Adresat e mia email';
$labels['vacation.interval'] = 'Interval përgjigjeje';
$labels['vacation.after'] = 'Vendose rregullin "jashtë zyre" pas';
$labels['vacation.saving'] = 'Po ruhen të dhënat…';
$labels['vacation.action'] = 'Veprim për mesazh ardhës';
$labels['vacation.keep'] = 'Mbaje';
$labels['vacation.discard'] = 'Hidhe tej';
$labels['vacation.redirect'] = 'Ridrejtoje te';
$labels['vacation.copy'] = 'Dërgo kopje te';
$labels['forward'] = 'Përcjellje';
$labels['forward.redirect'] = 'Ridrejtoje te';
$labels['forward.copy'] = 'Dërgo kopje te';
$labels['forward.on'] = 'On';
$labels['forward.off'] = 'Off';
$labels['forward.status'] = 'Gjendje:';
$labels['forward.action'] = 'Për postë mesazhe ardhës kryej veprimin vijues:';
$labels['forward.saving'] = 'Po ruhen të dhënat…';
$labels['filladdresses'] = 'Plotësoje me krejt adresat e mia';
$labels['arialabelfiltersetactions'] = 'Veprime grupi filtrash';
$labels['arialabelfilteractions'] = 'Veprime filtri';
$labels['arialabelfilterform'] = 'Veti filtri';
$labels['ariasummaryfilterslist'] = 'Listë filtrash';
$labels['ariasummaryfiltersetslist'] = 'Listë grupe filtrash';
$labels['filterstitle'] = 'Përpunoni filtra për postë ardhëse';
$labels['vacationtitle'] = 'Përpunoni rregullin jashtë-zyre';
$labels['forwardtitle'] = 'Përpunoni rregull përcjellje mesazhesh';
$labels['message'] = 'Mesazh';
$labels['duplicate'] = 'është përsëdytje';
$labels['notduplicate'] = 's’është përsëdytje';
$labels['duplicate.header'] = 'krye:';
$labels['duplicate.uniqueid'] = 'identifikues:';
$labels['duplicate.seconds'] = 'mbarim kohe (sekonda):';
$labels['duplicate.last'] = 'relative ndaj përmbushjes së fundit';
$messages['filterunknownerror'] = 'Gabim i panjohur shërbyesi.';
$messages['filterconnerror'] = 'S’arrihet të lidhet me shërbyesin.';
$messages['filterdeleteerror'] = 'S’arrihet të fshihet filtri. Ndodhi gabim shërbyesi.';
$messages['filterdeleted'] = 'Grupi u fshi me sukses.';
$messages['filtersaved'] = 'Filtri u ruajt me sukses.';
$messages['filtersaveerror'] = 'S’arrihet të ruhet filtri. Ndodhi një gabim shërbyesi.';
$messages['filterformerror'] = 'Formulari i filtrit përmban gabime.';
$messages['filterdeleteconfirm'] = 'Doni vërtet të fshihet filtri i përzgjedhur?';
$messages['ruledeleteconfirm'] = 'Jeni i sigurt se doni të fshihet rregulli i përzgjedhur?';
$messages['actiondeleteconfirm'] = 'Jeni i sigurt se doni të fshihet veprimi i përzgjedhur?';
$messages['forbiddenchars'] = 'Shenja të ndaluara te fusha.';
$messages['cannotbeempty'] = 'Fusha s’mund të jetë e zbrazët.';
$messages['ruleexist'] = 'Ka tashmë një filtër me emrin e treguar.';
$messages['setactivateerror'] = 'S’arrihet të aktivizohet grupi i përzgjedhur i filtrave. Ndodhi një gabim shërbyesi.';
$messages['setdeactivateerror'] = 'S’arrihet të çaktivizohet grupi i përzgjedhur i filtrave. Ndodhi një gabim shërbyesi.';
$messages['setdeleteerror'] = 'S’arrihet të fshihet grupi i përzgjedhur i filtrave. Ndodhi një gabim shërbyesi.';
$messages['setactivated'] = 'Grupi i filtrave u aktivizua me sukses.';
$messages['setdeactivated'] = 'Grupi i filtrave u çaktivizua me sukses.';
$messages['setdeleted'] = 'Grupi i filtrave u fshi me sukses.';
$messages['setupdated'] = 'Grupi i filtrave u përditësua me sukses.';
$messages['setdeleteconfirm'] = 'Jeni i sigurt se doni të fshihet grupi i përzgjedhur i filtrave?';
$messages['setcreateerror'] = 'S’arrihet të krijohet grup filtrash. Ndodhi gabim shërbyesi.';
$messages['setcreated'] = 'Grupi i filtrave u krijua me sukses.';
$messages['activateerror'] = 'S’arrihet të aktivizohet filtri(at) e përzgjedhur. Ndodhi një gabim shërbyesi.';
$messages['deactivateerror'] = 'S’arrihet të çaktivizohet filtri(at) e përzgjedhur. Ndodhi një gabim shërbyesi.';
$messages['deactivated'] = 'Filtri(at) u çaktivizua me sukses.';
$messages['activated'] = 'Filtri(at) u aktivizua me sukses.';
$messages['moved'] = 'Filtri u lëviz me sukses.';
$messages['moveerror'] = 'S’arrihet të lëvizet filtri i përzgjedhur. Ndodhi një gabim shërbyesi.';
$messages['nametoolong'] = 'Emër shumë i gjatë.';
$messages['namereserved'] = 'Emër i rezervuar.';
$messages['setexist'] = 'Ka tashmë një grup të tillë.';
$messages['nodata'] = 'Duhet përzgjedhur të paktën një pozicion!';
$messages['invaliddateformat'] = 'Format i pavlefshëm date ose pjese date';
$messages['saveerror'] = 'S’arrihet të ruhen të dhëna. Ndodhi një gabim shërbyesi.';
$messages['vacationsaved'] = 'Të dhënat "jashtë zyre" u ruajtën me sukses.';
$messages['forwardsaved'] = 'Të dhënat e përcjelljes u ruajtën me sukses.';
$messages['emptyvacationbody'] = 'Lënda e mesazhit të pushimeve është e domosdoshme!';
$messages['duplicate.conflict.err'] = 'S’lejohet përdorimi i njëkohshëm i kryes dhe identifikuesit unik.';
$messages['disabledaction'] = 'Veprim jo i lejuar.';
$messages['lastindexempty'] = 'Treguesi është i domosdoshëm kur numërohet nga fundi';
$messages['noflagset'] = 'Duhet përzgjedhur të paktën një shenjë';
PKxc�\~%��5�5"managesieve/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtrid';
$labels['managefilters'] = 'Halda sisenevate kirjade filtreid';
$labels['filtername'] = 'Filtri nimi';
$labels['newfilter'] = 'Uus filter';
$labels['filteradd'] = 'Lisa filter';
$labels['filterdel'] = 'Kustuta filter';
$labels['rules'] = 'Reeglid';
$labels['actions'] = 'Tegevused';
$labels['scope'] = 'Skoop';
$labels['moveup'] = 'Liiguta üles';
$labels['movedown'] = 'Liiguta alla';
$labels['filterallof'] = 'vastab kõikidele järgnevatele reeglitele';
$labels['filteranyof'] = 'vastab mõnele järgnevatest reeglitest';
$labels['filterany'] = 'kõik kirjad';
$labels['filtercontains'] = 'sisaldab';
$labels['filternotcontains'] = 'ei sisalda';
$labels['filteris'] = 'on võrdne kui';
$labels['filterisnot'] = 'ei ole võrdne kui';
$labels['filterexists'] = 'on olemas';
$labels['filternotexists'] = 'pole olemas';
$labels['filtermatches'] = 'vastab avaldisele';
$labels['filternotmatches'] = 'ei vasta avaldisele';
$labels['filterregex'] = 'vastab regulaaravaldisele';
$labels['filternotregex'] = 'ei vasta regulaaravaldisele';
$labels['filterunder'] = 'alt';
$labels['filterover'] = 'üle';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME osa:';
$labels['mime-message'] = 'sõnum';
$labels['mime-anychild'] = 'mistahes';
$labels['mime-type'] = 'tüüp';
$labels['mime-subtype'] = 'alamtüüp';
$labels['mime-contenttype'] = 'sisu tüüp';
$labels['mime-param'] = 'parameeter';
$labels['addrule'] = 'Lisa reegel';
$labels['delrule'] = 'Kustuta reegel';
$labels['messagemoveto'] = 'Liiguta kiri';
$labels['messageredirect'] = 'Suuna kiri ümber';
$labels['messagecopyto'] = 'Kopeeri kiri';
$labels['messagesendcopy'] = 'Saada kirja koopia';
$labels['messagereply'] = 'Vasta kirjaga';
$labels['messagedelete'] = 'Kustuta kiri';
$labels['messagediscard'] = 'Viska ära teatega';
$labels['messagekeep'] = 'Hoia kirjad sisendkaustas';
$labels['messagesrules'] = 'Siseneva kirja puhul, mis:';
$labels['messagesactions'] = '...käivita järgnevad tegevused:';
$labels['add'] = 'Lisa';
$labels['del'] = 'Kustuta';
$labels['sender'] = 'Saatja';
$labels['recipient'] = 'Saaja';
$labels['vacationaddr'] = 'Minu e-posti aadressid:';
$labels['vacationdays'] = 'Kui tihti kirju saata (päevades):';
$labels['vacationinterval'] = 'Kui tihti kirju saata:';
$labels['vacationreason'] = 'Kirja sisu (puhkuse põhjus):';
$labels['vacationfrom'] = 'Vastuse saatja aadress:';
$labels['vacationsubject'] = 'Kirja teema:';
$labels['days'] = 'päeva';
$labels['seconds'] = 'sekundit';
$labels['rulestop'] = 'Peata reeglite otsimine';
$labels['enable'] = 'Luba/keela';
$labels['filterset'] = 'Filtri kogum';
$labels['filtersets'] = 'Filtri kogum';
$labels['filtersetadd'] = 'Lisa filtrite kogum';
$labels['filtersetdel'] = 'Kustuta filtrite kogum';
$labels['filtersetact'] = 'Aktiveeri see filtrite kogum';
$labels['filtersetdeact'] = 'Deaktiveeri see filtrite kogum';
$labels['filterseteditraw'] = 'Muuda filtrite kogumit';
$labels['filtersetswitch'] = 'Luba/keela filtrite kogum';
$labels['filterdef'] = 'Filtri definitsioon';
$labels['filtersetname'] = 'Filtrite kogumi nimi';
$labels['newfilterset'] = 'Uus filtrite kogum';
$labels['active'] = 'aktiivne';
$labels['none'] = 'puudub';
$labels['fromset'] = 'kogumist';
$labels['fromfile'] = 'failist';
$labels['filterdisabled'] = 'Filter keelatud';
$labels['filterenabled'] = 'Filter lubatud';
$labels['countisgreaterthan'] = 'koguarv on suurem kui';
$labels['countisgreaterthanequal'] = 'koguarv on suurem kui või võrdne';
$labels['countislessthan'] = 'koguarv on väiksem';
$labels['countislessthanequal'] = 'koguarv on väiksem kui või võrdne';
$labels['countequals'] = 'koguarv on võrdne';
$labels['countnotequals'] = 'summa ei ole võrdne';
$labels['valueisgreaterthan'] = 'väärtus on suurem kui';
$labels['valueisgreaterthanequal'] = 'väärtus on suurem kui või võrdne';
$labels['valueislessthan'] = 'väärtus on väiksem kui';
$labels['valueislessthanequal'] = 'väärtus on väiksem kui või võrdne';
$labels['valueequals'] = 'väärtus on võrdne';
$labels['valuenotequals'] = 'väärtus ei ole võrdne';
$labels['setflags'] = 'Sea kirjale lipik';
$labels['addflags'] = 'Lisa kirjale lipikuid';
$labels['removeflags'] = 'Eemalda kirjalt lipikud';
$labels['flagread'] = 'Loetud';
$labels['flagdeleted'] = 'Kustutatud';
$labels['flaganswered'] = 'Vastatud';
$labels['flagflagged'] = 'Märgistatud';
$labels['flagdraft'] = 'Mustand';
$labels['addheader'] = 'Lisa kirjale päis';
$labels['deleteheader'] = 'Eemalda kirjast päis';
$labels['headername'] = 'Päise nimi';
$labels['headervalue'] = 'Päise väärtus';
$labels['headerpos'] = 'Päise positsioon';
$labels['headeratstart'] = 'alguses';
$labels['headeratend'] = 'lõpus';
$labels['headeroccurrence'] = 'Päise positsioon';
$labels['headerfromstart'] = 'algusest';
$labels['headerfromend'] = 'lõpust';
$labels['headerpatterns'] = 'Päise väärtuse mustrid';
$labels['headermatchtype'] = 'vastavuse tüüp:';
$labels['setvariable'] = 'Määra muutuja';
$labels['setvarname'] = 'Muutuja nimi:';
$labels['setvarvalue'] = 'Muutuja väärtus:';
$labels['setvarmodifiers'] = 'Muutjad:';
$labels['varlower'] = 'väiketähed';
$labels['varupper'] = 'suurtähed';
$labels['varlowerfirst'] = 'esimene märk on väiketäht';
$labels['varupperfirst'] = 'esimene märk on suurtäht';
$labels['varquotewildcard'] = 'tsiteeri erimärke';
$labels['varlength'] = 'pikkus';
$labels['notify'] = 'Saada teavitus';
$labels['notifytarget'] = 'Teavituse sihtmärk:';
$labels['notifymessage'] = 'Teavituse sõnum (valikuline):';
$labels['notifyoptions'] = 'Teavituse valikud (valikuline):';
$labels['notifyfrom'] = 'Teavituse saatja (valikuline):';
$labels['notifyimportance'] = 'Tähtsus:';
$labels['notifyimportancelow'] = 'madal';
$labels['notifyimportancenormal'] = 'tavaline';
$labels['notifyimportancehigh'] = 'kõrge';
$labels['notifymethodmailto'] = 'E-post';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Loo filter';
$labels['usedata'] = 'Kasuta filtris järgmisi andmeid:';
$labels['nextstep'] = 'Järgmine samm';
$labels['...'] = '…';
$labels['string'] = 'Tekst';
$labels['currdate'] = 'Praegune kuupäev';
$labels['datetest'] = 'Kuupäev';
$labels['dateheader'] = 'päis:';
$labels['year'] = 'aasta';
$labels['month'] = 'kuu';
$labels['day'] = 'päev';
$labels['date'] = 'kuupäev (aaaa-kk-pp)';
$labels['julian'] = 'kuupäev (Juliuse)';
$labels['hour'] = 'tund';
$labels['minute'] = 'minut';
$labels['second'] = 'sekund';
$labels['time'] = 'aeg (tt:mm:ss)';
$labels['iso8601'] = 'kuupäev (ISO8601)';
$labels['std11'] = 'kuupäev (RCF2822)';
$labels['zone'] = 'ajatsoon';
$labels['weekday'] = 'nädalapäev (0-6)';
$labels['advancedopts'] = 'Lisaseadistused';
$labels['body'] = 'Põhitekst';
$labels['address'] = 'aadress';
$labels['envelope'] = 'ümbrik';
$labels['modifier'] = 'muutja:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'kodeerimata (toor)';
$labels['contenttype'] = 'sisu tüüp';
$labels['modtype'] = 'tüüp:';
$labels['allparts'] = 'kõik';
$labels['domain'] = 'domeen';
$labels['localpart'] = 'kohalik osa';
$labels['user'] = 'kasutaja';
$labels['detail'] = 'detail';
$labels['comparator'] = 'võrdleja:';
$labels['default'] = 'vaikimisi';
$labels['octet'] = 'range (octet)';
$labels['asciicasemap'] = 'tõstutundetu (ascii-casemap)';
$labels['asciinumeric'] = 'numbriline (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'tagasisuunas';
$labels['spamtest'] = 'Spämmi tase';
$labels['spamtestisgreaterthan'] = 'on suurem kui';
$labels['spamtestisgreaterthanequal'] = 'on võrdne või suurem kui';
$labels['spamtestislessthan'] = 'on väiksem kui';
$labels['spamtestislessthanequal'] = 'on võrdne või väiksem kui';
$labels['spamtestequals'] = 'on võrdne kui';
$labels['spamtestnotequals'] = 'ei ole võrdne kui';
$labels['spamtestisunknown'] = 'on tundmatu';
$labels['vacation'] = 'Kontorist väljas';
$labels['vacation.reply'] = 'Vasta sõnumiga';
$labels['vacation.advanced'] = 'Lisaseaded';
$labels['vacation.from'] = 'Vastuse saatja aadress';
$labels['vacation.subject'] = 'Pealkiri';
$labels['vacation.body'] = 'Keha';
$labels['vacation.start'] = 'Alguse aeg';
$labels['vacation.end'] = 'Lõpu aeg';
$labels['vacation.status'] = 'Staatus';
$labels['vacation.on'] = 'Sees';
$labels['vacation.off'] = 'Väljas';
$labels['vacation.addresses'] = 'Minu e-maili aadress';
$labels['vacation.interval'] = 'Vastuse sagedus';
$labels['vacation.after'] = 'Pane kontorist väljas reeglel peale';
$labels['vacation.saving'] = 'Salvestan andmeid...';
$labels['vacation.action'] = 'Saabuva kirja tegevus';
$labels['vacation.keep'] = 'Säilita';
$labels['vacation.discard'] = 'Loobu';
$labels['vacation.redirect'] = 'Suuna';
$labels['vacation.copy'] = 'Saada koopia';
$labels['forward'] = 'Edastamine';
$labels['forward.redirect'] = 'Suuna';
$labels['forward.copy'] = 'Saada koopia';
$labels['forward.on'] = 'Sees';
$labels['forward.off'] = 'Väljas';
$labels['forward.status'] = 'Staatus:';
$labels['forward.action'] = 'Sisenevatele kirjadele käivita järgmine tegevus:';
$labels['forward.saving'] = 'Salvestan andmeid...';
$labels['filladdresses'] = 'Täida minu aadressidega';
$labels['arialabelfiltersetactions'] = 'Filtrikogumi tegevused';
$labels['arialabelfilteractions'] = 'Filtri tegevused';
$labels['arialabelfilterform'] = 'Filtri omadused';
$labels['ariasummaryfilterslist'] = 'Filtrite nimekiri';
$labels['ariasummaryfiltersetslist'] = 'Filtrikogumite nimekiri';
$labels['filterstitle'] = 'Muuda sisenevate kirjade filtreid';
$labels['vacationtitle'] = 'Muuda kontorist väljas reeglit';
$labels['forwardtitle'] = 'Muuda kirja edastamise reeglit';
$labels['message'] = 'Kiri';
$labels['duplicate'] = 'on duplikaat';
$labels['notduplicate'] = 'ei ole duplikaat';
$labels['duplicate.handle'] = 'käsitlus:';
$labels['duplicate.header'] = 'päis:';
$labels['duplicate.uniqueid'] = 'tuvastaja:';
$labels['duplicate.seconds'] = 'aegumine (sekundit):';
$labels['duplicate.last'] = 'suhteline viimasest käivitusest';
$messages['filterunknownerror'] = 'Tundmatu serveri tõrge';
$messages['filterconnerror'] = 'Managesieve serveriga ühendumine nurjus';
$messages['filterdeleteerror'] = 'Ei saa filtrit kustutada. Ilmnes serveri viga.';
$messages['filterdeleted'] = 'Filter edukalt kustutatud';
$messages['filtersaved'] = 'Filter edukalt salvestatud';
$messages['filtersaveerror'] = 'Ei saa filtrit salvestada. Ilmnes serveri viga.';
$messages['filterformerror'] = 'Filtri vormis on vead.';
$messages['filterdeleteconfirm'] = 'Soovid valitud filtri kustutada?';
$messages['ruledeleteconfirm'] = 'Soovid valitud reegli kustutada?';
$messages['actiondeleteconfirm'] = 'Soovid valitud tegevuse kustutada?';
$messages['forbiddenchars'] = 'Väljal on lubamatu märk';
$messages['cannotbeempty'] = 'Väli ei või tühi olla';
$messages['ruleexist'] = 'Määratud nimega filter on juba olemas';
$messages['setactivateerror'] = 'Ei saa valitud filtrite kogumit aktiveerida. Ilmnes serveri viga.';
$messages['setdeactivateerror'] = 'Ei saa valitud filtrite kogumit deaktiveerida. Ilmnes serveri viga.';
$messages['setdeleteerror'] = 'Ei saa valitud filtrite kogumit kustutada. Ilmnes serveri viga.';
$messages['setactivated'] = 'Filtrite kogum aktiveeritud.';
$messages['setdeactivated'] = 'Filtrite kogum deaktiveeritud.';
$messages['setdeleted'] = 'Filtrite kogum kustutatud.';
$messages['setupdated'] = 'Filtrite kogum uuendatud.';
$messages['setdeleteconfirm'] = 'Oled kindel, et tahd valitud filtrite kogumit kustutada?';
$messages['setcreateerror'] = 'Ei saa filtrite kogumit luua. Ilmnes serveri viga.';
$messages['setcreated'] = 'Filtrite kogum loodud.';
$messages['activateerror'] = 'Ei saa valitud filtrit/(eid) aktiveerida. Ilmnes serveri viga.';
$messages['deactivateerror'] = 'Ei saa valitud filtrit/(eid) keelata. Ilmnes serveri viga.';
$messages['deactivated'] = 'Filter edukalt lubatud.';
$messages['activated'] = 'Filter edukalt keelatud.';
$messages['moved'] = 'Filter edukalt liigutatud.';
$messages['moveerror'] = 'Ei saa valitud filtrit liigutada. Ilmnes serveri viga.';
$messages['nametoolong'] = 'Nimi on liiga pikk.';
$messages['namereserved'] = 'Nimi on reserveeritud.';
$messages['setexist'] = 'Kogum on juba olemas.';
$messages['nodata'] = 'Valitud peab olema vähemalt üks asukoht!';
$messages['invaliddateformat'] = 'Vigane kuupäev või kuupäeva formaat';
$messages['saveerror'] = 'Ei saa andmeid salvestada. Imnes serveri viga.';
$messages['vacationsaved'] = 'Kontorist väljas teade edukalt salvestatud.';
$messages['forwardsaved'] = 'Edastuse info edukalt salvestatud.';
$messages['emptyvacationbody'] = 'Puhkuse sõnumi sinu on nõutud!';
$messages['duplicate.conflict.err'] = 'Päis ja unikaalne identifikaator ei ole korraga lubatud.';
$messages['disabledaction'] = 'Tegevus ei ole lubatud.';
$messages['lastindexempty'] = 'Indeks on vajalik kui loendada lõpust';
$messages['noflagset'] = 'Vähemalt üks lipp peab olema valitud.';
PKyc�\�9bQOO"managesieve/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['actions'] = 'کردارەکان';
$labels['messagedelete'] = 'سڕینەوەی پەیام';
$labels['del'] = 'سڕینەوە';
$labels['sender'] = 'نێردەر';
$labels['notifymethodtel'] = 'تەلەفۆن';
$labels['datetest'] = 'بەروار';
$labels['vacation.subject'] = 'ناونیشان';
PKyc�\�U��9�9"managesieve/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Iragazkiak';
$labels['managefilters'] = 'Kudeatu sarrerako posta-iragazkiak';
$labels['filtername'] = 'Iragazkiaren izena';
$labels['newfilter'] = 'Iragazki berria';
$labels['filteradd'] = 'Gehitu iragazkia';
$labels['filterdel'] = 'Ezabatu iragazkia';
$labels['rules'] = 'Araudia';
$labels['actions'] = 'Ekintzak';
$labels['scope'] = 'Esparrua';
$labels['moveup'] = 'Mugitu gora';
$labels['movedown'] = 'Mugitu behera';
$labels['filterallof'] = 'datozen arau guztiak parekatzen';
$labels['filteranyof'] = 'datozen arauetako batzuk parekatzen';
$labels['filterany'] = 'mezu guztiak';
$labels['filtercontains'] = 'badu';
$labels['filternotcontains'] = 'ez du';
$labels['filteris'] = 'honen berdina da';
$labels['filterisnot'] = 'ez da honen berdina';
$labels['filterexists'] = 'badago';
$labels['filternotexists'] = 'ez dago';
$labels['filtermatches'] = 'bat datorren espresioa';
$labels['filternotmatches'] = 'bat ez datorren espresioa';
$labels['filterregex'] = 'bat datozen adierazpen erregularra';
$labels['filternotregex'] = 'bat ez datorren espresio erregularra';
$labels['filterunder'] = 'azpian';
$labels['filterover'] = 'gainean';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME zatia:';
$labels['mime-message'] = 'mezua';
$labels['mime-anychild'] = 'baten bat';
$labels['mime-type'] = 'mota';
$labels['mime-subtype'] = 'azpi-mota';
$labels['mime-contenttype'] = 'eduki mota';
$labels['mime-param'] = 'parametroa';
$labels['addrule'] = 'Gehitu araua';
$labels['delrule'] = 'Ezabatu araua';
$labels['messagemoveto'] = 'Mugitu mezua hona';
$labels['messageredirect'] = 'Birbideratu mezua hona ';
$labels['messagecopyto'] = 'Kopiatu mezua hona';
$labels['messagesendcopy'] = 'Bidali mezuaren kopia hona';
$labels['messagereply'] = 'Erantzun mezuarekin';
$labels['messagedelete'] = 'Ezabatu mezua';
$labels['messagediscard'] = 'Baztertu mezuarekin';
$labels['messagekeep'] = 'Mantendu mezua Sarrera-ontzian';
$labels['messagesrules'] = 'Sarrerako postarako:';
$labels['messagesactions'] = '...exekutatu datozen ekintzak:';
$labels['add'] = 'Gehitu';
$labels['del'] = 'Ezabatu';
$labels['sender'] = 'Bidaltzailea';
$labels['recipient'] = 'Hartzailea';
$labels['vacationaddr'] = 'Nire e-posta helbideak:';
$labels['vacationdays'] = 'Zenbatero bidali mezuak (egunak)';
$labels['vacationinterval'] = 'Zenbatero bidali mezuak:';
$labels['vacationreason'] = 'Mezuaren gorputza (oporrak direla medio):';
$labels['vacationfrom'] = 'Erantzun bidaltzailearen helbidera:';
$labels['vacationsubject'] = 'Mezuaren gaia:';
$labels['days'] = 'egun';
$labels['seconds'] = 'segundo';
$labels['rulestop'] = 'Gelditu arauak ebaluatzen';
$labels['enable'] = 'Gaitu/Ezgaitu';
$labels['filterset'] = 'Iragazki-paketea';
$labels['filtersets'] = 'Iragazki-paketeak';
$labels['filtersetadd'] = 'Gehitu iragazki-paketea';
$labels['filtersetdel'] = 'Ezabatu iragazki-paketea';
$labels['filtersetact'] = 'Aktibatu uneko iragazki-paketea';
$labels['filtersetdeact'] = 'Desaktibatu uneko iragazki-paketea';
$labels['filterseteditraw'] = 'Editatu iragazki multzoa';
$labels['filtersetswitch'] = 'Gaitu/Desgaitu iragazki-paketea';
$labels['filterdef'] = 'Iragazkiaren definizioa';
$labels['filtersetname'] = 'Iragazki-paketearen izena';
$labels['newfilterset'] = 'Iragazki-pakete berria';
$labels['active'] = 'aktiboa';
$labels['none'] = 'Bat ere ez';
$labels['fromset'] = 'paketetik';
$labels['fromfile'] = 'fitxategitik';
$labels['filterdisabled'] = 'Iragazki ezgaitua';
$labels['filterenabled'] = 'Iragazkia gaituta';
$labels['countisgreaterthan'] = 'kopurua handiagoa da hau baino';
$labels['countisgreaterthanequal'] = 'kopurua hau baino handiagoa edo berdina da';
$labels['countislessthan'] = 'kopurua hau baino txikiagoa da';
$labels['countislessthanequal'] = 'kopurua hau baino txikiagoa edo berdina da';
$labels['countequals'] = 'kopurua honen berdina da';
$labels['countnotequals'] = 'kopurua ez da honen berdina';
$labels['valueisgreaterthan'] = 'balioa hau baino handiagoa da';
$labels['valueisgreaterthanequal'] = 'balioa hau baino handiagoa edo berdina da';
$labels['valueislessthan'] = 'balioa hau baino txikiagoa da';
$labels['valueislessthanequal'] = 'balioa hau baino txikiagoa edo berdina da';
$labels['valueequals'] = 'balioa honen berdina da';
$labels['valuenotequals'] = 'balioa ez da honen berdina';
$labels['setflags'] = 'Jarri banderak mezuarik';
$labels['addflags'] = 'Gehitu banderak mezuari';
$labels['removeflags'] = 'Ezabatu banderak mezutik';
$labels['flagread'] = 'Irakurri';
$labels['flagdeleted'] = 'Ezabatuta';
$labels['flaganswered'] = 'Erantzunda';
$labels['flagflagged'] = 'Bandera jarrita';
$labels['flagdraft'] = 'Ziriborroa';
$labels['addheader'] = 'Gehitu goiburua mezuari';
$labels['deleteheader'] = 'Kendu goiburua mezuari';
$labels['headername'] = 'Goiburuaren izena';
$labels['headervalue'] = 'Goiburuaren balioa';
$labels['headerpos'] = 'Goiburuaren kokapena';
$labels['headeratstart'] = 'hisieran';
$labels['headeratend'] = 'bukaeran';
$labels['headeroccurrence'] = 'Goiburuko agerraldia/kokapnena';
$labels['headerfromstart'] = 'hasieratik';
$labels['headerfromend'] = 'bukaeratik';
$labels['headerpatterns'] = 'Goiburuaren balio ereduak';
$labels['headermatchtype'] = 'konparatu mota:';
$labels['setvariable'] = 'Ezarri aldagaia';
$labels['setvarname'] = 'Aldagaiaren izena:';
$labels['setvarvalue'] = 'Aldagaiaren balioa:';
$labels['setvarmodifiers'] = 'Modifikatzaileak:';
$labels['varlower'] = 'minuskulan';
$labels['varupper'] = 'maiuskulan';
$labels['varlowerfirst'] = 'lehenengo karakterea minuskulan';
$labels['varupperfirst'] = 'lehenengo karakterea maiuskulan';
$labels['varquotewildcard'] = 'aipatu karaktere bereziak';
$labels['varlength'] = 'luzera';
$labels['notify'] = 'Bidali jakinarazpena';
$labels['notifytarget'] = 'Jakinarazpenaren xedea:';
$labels['notifymessage'] = 'Jakinarazpenaren mezua (aukerakoa):';
$labels['notifyoptions'] = 'Jakinarazpenaren aukerak (aukerakoa):';
$labels['notifyfrom'] = 'Jakinarazpenaren bidaltzailea (aukerakoa):';
$labels['notifyimportance'] = 'Garrantzia:';
$labels['notifyimportancelow'] = 'baxua';
$labels['notifyimportancenormal'] = 'normala';
$labels['notifyimportancehigh'] = 'altua';
$labels['notifymethodmailto'] = 'Helbide elektronikoa';
$labels['notifymethodtel'] = 'Telefonoa';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Sortu iragazkia';
$labels['usedata'] = 'Erabili datorren data iragazkian:';
$labels['nextstep'] = 'Hurrengo urratsa';
$labels['...'] = '...';
$labels['string'] = 'Katea';
$labels['currdate'] = 'Uneko data';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'goiburua:';
$labels['year'] = 'urte';
$labels['month'] = 'hilabete';
$labels['day'] = 'egun';
$labels['date'] = 'data (yyyy-mm-dd)';
$labels['julian'] = 'data (juliarra)';
$labels['hour'] = 'ordu';
$labels['minute'] = 'minutu';
$labels['second'] = 'segundo';
$labels['time'] = 'ordua  (hh:mm:ss)';
$labels['iso8601'] = 'data  (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'ordu-zona';
$labels['weekday'] = 'asteguna (0-6)';
$labels['advancedopts'] = 'Aukera aurreratuak';
$labels['body'] = 'Gorputza';
$labels['address'] = 'helbidea';
$labels['envelope'] = 'gutun-azala';
$labels['modifier'] = 'modifikatzailea:';
$labels['text'] = 'testua';
$labels['undecoded'] = 'kodetu gabe (gordina)';
$labels['contenttype'] = 'eduki mota';
$labels['modtype'] = 'mota:';
$labels['allparts'] = 'denak';
$labels['domain'] = 'domeinua';
$labels['localpart'] = 'zati lokala';
$labels['user'] = 'erabiltzailea';
$labels['detail'] = 'xehetasuna';
$labels['comparator'] = 'alderatzailea:';
$labels['default'] = 'lehenetsia';
$labels['octet'] = 'zorrotza (zortzikotea)';
$labels['asciicasemap'] = 'minuskulak eta maiuskulak (ascii-casemap)';
$labels['asciinumeric'] = 'numerikoa  (ascii-numeric)';
$labels['index'] = 'indexatu:';
$labels['indexlast'] = 'atzeraka';
$labels['spamtest'] = 'Zabor-maila';
$labels['spamtestisgreaterthan'] = 'hau baino handiagoa da';
$labels['spamtestisgreaterthanequal'] = 'hau baino handiagoa edo berdina da';
$labels['spamtestislessthan'] = 'hau baino txikiagoa da';
$labels['spamtestislessthanequal'] = 'hau baino txikiagoa edo berdina da';
$labels['spamtestequals'] = 'honen berdina da';
$labels['spamtestnotequals'] = 'ez da honen berdina';
$labels['spamtestisunknown'] = 'ezezaguna da';
$labels['vacation'] = 'Bulegotik kanpo';
$labels['vacation.reply'] = 'Erantzun mezua';
$labels['vacation.advanced'] = 'Ezarpen aurreratuak';
$labels['vacation.from'] = 'Erantzun bidaltzailearen helbidera';
$labels['vacation.subject'] = 'Gaia';
$labels['vacation.body'] = 'Gorputza';
$labels['vacation.start'] = 'Hasiera-unea';
$labels['vacation.end'] = 'Bukaera-unea';
$labels['vacation.status'] = 'Egoera';
$labels['vacation.on'] = 'Piztuta';
$labels['vacation.off'] = 'Itzalita';
$labels['vacation.addresses'] = 'Nire e-posta helbideak';
$labels['vacation.interval'] = 'Erantzun tartea';
$labels['vacation.after'] = 'Jarri bulegotik kanpoko araua ondoren';
$labels['vacation.saving'] = 'Datuak gordetzen...';
$labels['vacation.action'] = 'Sarrerako mezuaren ekintza';
$labels['vacation.keep'] = 'Mantendu';
$labels['vacation.discard'] = 'Baztertu';
$labels['vacation.redirect'] = 'Birbideratu hona';
$labels['vacation.copy'] = 'Bidali kopia hona';
$labels['forward'] = 'Birbidaltzen';
$labels['forward.redirect'] = 'Birbideratu hona';
$labels['forward.copy'] = 'Bidali kopia hona';
$labels['forward.on'] = 'Piztuta';
$labels['forward.off'] = 'Itzalita';
$labels['forward.status'] = 'Egoera:';
$labels['forward.action'] = 'Sartzen diren posta-mezuei hurrengo ekintza exekutatu:';
$labels['forward.saving'] = 'Datuak gordetzen...';
$labels['filladdresses'] = 'Bete nire helbide guztiekin';
$labels['arialabelfiltersetactions'] = 'Iragazki-paketearen ekintzak';
$labels['arialabelfilteractions'] = 'Iragazki-ekintzak';
$labels['arialabelfilterform'] = 'Iragazkiaren ezaugarriak';
$labels['ariasummaryfilterslist'] = 'Iragazkien zerrenda';
$labels['ariasummaryfiltersetslist'] = 'Iragazki-paketeen zerrenda';
$labels['filterstitle'] = 'Editatu postaren sarrera-iragazkiak';
$labels['vacationtitle'] = 'Bulegotik-kanpo -erantzun automatiko- araua';
$labels['forwardtitle'] = 'Editatu posta birbidaltzeko araua';
$labels['message'] = 'Mezua';
$labels['duplicate'] = 'bikoiztuta dago';
$labels['notduplicate'] = 'ez dago bikoiztuta';
$labels['duplicate.handle'] = 'heldulekua:';
$labels['duplicate.header'] = 'goiburua:';
$labels['duplicate.uniqueid'] = 'Identifikatzailea:';
$labels['duplicate.seconds'] = 'Denbora-muga (segundo)';
$labels['duplicate.last'] = 'azken exekuzioari dagokiona';
$messages['filterunknownerror'] = 'Zerbitzari ezezaguna errorea';
$messages['filterconnerror'] = 'Ezin da konektatu zerbitzariarekin.';
$messages['filterdeleteerror'] = 'Ezin da ezabatu iragazkia. Errore bat gertatu da zerbitzarian.';
$messages['filterdeleted'] = 'Iragazkia ongi ezabatu da.';
$messages['filtersaved'] = 'Iragazkia ongi ezabatu da.';
$messages['filtersaveerror'] = 'Ezin da gorde iragazkia. Zerbitzarian errore bat gertatu da.';
$messages['filterformerror'] = 'Iragazkien formularioa erroreak ditu.';
$messages['filterdeleteconfirm'] = 'Seguru zaude hautatutako iragazkiak ezabatu nahi dituzula?';
$messages['ruledeleteconfirm'] = 'Seguru zaude hautatutako arauak ezabatu nahi dituzula?';
$messages['actiondeleteconfirm'] = 'Seguru zaude hautatutako ekintzak ezabatu nahi dituzula?';
$messages['forbiddenchars'] = 'Debekatutako karaktereak eremuan.';
$messages['cannotbeempty'] = 'Eremua ezin da hutsik egon.';
$messages['ruleexist'] = 'Lehendik badago izen hori duen iragazki bat.';
$messages['setactivateerror'] = 'Ezin izan da aktibatu hautatutako iragazki-paketea. Zerbitzarian errorea gertatu da.';
$messages['setdeactivateerror'] = 'Ezin izan da desaktibatu hautatutako iragazki-paketea. Zerbitzarian errorea gertatu da.';
$messages['setdeleteerror'] = 'Ezin izan da ezabatu hautatutako iragazki-paketea. Zerbitzarian errorea gertatu da.';
$messages['setactivated'] = 'iragazki-paketea behar bezala aktibatu da.';
$messages['setdeactivated'] = 'iragazki-paketea behar bezala desaktibatu da.';
$messages['setdeleted'] = 'iragazki-paketea behar bezala ezabatu da.';
$messages['setupdated'] = 'iragazki-paketea behar bezala egineratu da.';
$messages['setdeleteconfirm'] = 'Ziur zaude hautatutako iragazki-paketea ezabatu nahi duzula?';
$messages['setcreateerror'] = 'Ezin izan da sortu iragazki-paketea. Zerbitzarian errorea gertatu da.';
$messages['setcreated'] = 'Iragazki-paketea behar bezala sortu da.';
$messages['activateerror'] = 'Ezin da gaitu hautatutako iragazkia(k). Zerbitzarian errore bat gertatu da.';
$messages['deactivateerror'] = 'Ezin da ezgaitu hautatutako iragazkia(k). Zerbitzarian errore bat gertatu da.';
$messages['deactivated'] = 'Iragazkia(k) ongi ezgaitu da.';
$messages['activated'] = 'Iragazkia(k) ongi gaitu da.';
$messages['moved'] = 'Iragazkia ongi mugitu da.';
$messages['moveerror'] = 'Ezin da mugitu hautatutako iragazkia. Zerbitzarian errore bat gertatu da.';
$messages['nametoolong'] = 'Izen luzeegia.';
$messages['namereserved'] = 'Izen erreserbatua.';
$messages['setexist'] = 'Lehendik badago pakete hori.';
$messages['nodata'] = 'Gutxienez posizio bat hautatu behar da!';
$messages['invaliddateformat'] = 'Dataren edo dataren zati baten formatua ez da baliozkoa ';
$messages['saveerror'] = 'Ezin dira datuak gorde. Errorea gertatu da zerbitzarian.';
$messages['vacationsaved'] = 'Bulegotik kanpoko datuak behar bezala gorde dira.';
$messages['forwardsaved'] = 'Birbidaltzeko datuak behar bezala gorde dira.';
$messages['emptyvacationbody'] = 'Beharrezkoa da oporraldiko mezua jartzea!';
$messages['duplicate.conflict.err'] = 'Goiburua eta identifikatzaile bakarra ez dira onartzen.';
$messages['disabledaction'] = 'Ekintza ez da onartzen.';
$messages['lastindexempty'] = 'Indizea beharrezkoa da amaieratik zenbatzen denean';
$messages['noflagset'] = 'Gutxienez bandera bat hautatu behar da.';
PKyc�\���D9D9"managesieve/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Süzgeçler';
$labels['managefilters'] = 'Gelen e-posta süzgeçleri yönetimi';
$labels['filtername'] = 'Süzgeç adı';
$labels['newfilter'] = 'Yeni süzgeç';
$labels['filteradd'] = 'Süzgeç ekle';
$labels['filterdel'] = 'Süzgeci Sil';
$labels['rules'] = 'Kurallar';
$labels['actions'] = 'İşlemler';
$labels['scope'] = 'Kapsam';
$labels['moveup'] = 'Yukarı taşı';
$labels['movedown'] = 'Aşağı taşı';
$labels['filterallof'] = 'Aşağıdaki kuralların hepsine uyan';
$labels['filteranyof'] = 'Aşağıdaki kuralların herhangi birine uyan';
$labels['filterany'] = 'Tüm iletiler';
$labels['filtercontains'] = 'şunu içeren';
$labels['filternotcontains'] = 'şunu içermeyen';
$labels['filteris'] = 'şuna eşit olan';
$labels['filterisnot'] = 'şuna eşit olmayan';
$labels['filterexists'] = 'şu var olan';
$labels['filternotexists'] = 'şu var olmayan';
$labels['filtermatches'] = 'şu ifadeye uyan';
$labels['filternotmatches'] = 'şu ifadeye uymayan';
$labels['filterregex'] = 'şu kurallı ifadeye uyan';
$labels['filternotregex'] = 'şu kurallı ifadeye uymayan';
$labels['filterunder'] = 'şunun altında';
$labels['filterover'] = 'şunun üzerinde';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME parçası:';
$labels['mime-message'] = 'ileti';
$labels['mime-anychild'] = 'tümü';
$labels['mime-type'] = 'tür';
$labels['mime-subtype'] = 'alt tür';
$labels['mime-contenttype'] = 'içerik türü';
$labels['mime-param'] = 'parametre';
$labels['addrule'] = 'Kural ekle';
$labels['delrule'] = 'Kuralı sil';
$labels['messagemoveto'] = 'İletiyi şuraya taşı';
$labels['messageredirect'] = 'İletiyi şuraya yönlendir';
$labels['messagecopyto'] = 'İletiyi şuraya kopyala';
$labels['messagesendcopy'] = 'İletinin kopyasını şuraya gönder';
$labels['messagereply'] = 'İletiyle birlikte yanıtla';
$labels['messagedelete'] = 'İletiyi sil';
$labels['messagediscard'] = 'İletiyi yok say';
$labels['messagekeep'] = 'İleti Gelen kutusunda tutulsun';
$labels['messagesrules'] = 'Gelen iletiler için:';
$labels['messagesactions'] = '...aşağıdaki işlemleri yürüt:';
$labels['add'] = 'Ekle';
$labels['del'] = 'Sil';
$labels['sender'] = 'Gönderici';
$labels['recipient'] = 'Alıcı';
$labels['vacationaddr'] = 'E-posta adreslerim:';
$labels['vacationdays'] = 'İleti gönderme sıklığı (gün):';
$labels['vacationinterval'] = 'İleti gönderme sıklığı:';
$labels['vacationreason'] = 'İleti gövdesi (tatil nedeni):';
$labels['vacationfrom'] = 'Gönderici adresine yanıtla:';
$labels['vacationsubject'] = 'İleti konusu:';
$labels['days'] = 'gün';
$labels['seconds'] = 'saniye';
$labels['rulestop'] = 'Kuralları değerlendirmeyi bitir';
$labels['enable'] = 'Etkinleştir/Devre dışı bırak';
$labels['filterset'] = 'Süzgeç kümesi';
$labels['filtersets'] = 'Süzgeç kümeleri';
$labels['filtersetadd'] = 'Süzgeç kümesi ekle';
$labels['filtersetdel'] = 'Süzgeç kümesini sil';
$labels['filtersetact'] = 'Geçerli süzgeç kümesini etkinleştir';
$labels['filtersetdeact'] = 'Geçerli süzgeç kümesini devre dışı bırak';
$labels['filterseteditraw'] = 'Süzgeç kümesini düzenle';
$labels['filtersetswitch'] = 'Süzgeç kümesini aç/kapat';
$labels['filterdef'] = 'Süzgeç tanımı';
$labels['filtersetname'] = 'Süzgeç kümesi adı';
$labels['newfilterset'] = 'Yeni süzgeç kümesi ';
$labels['active'] = 'etkin';
$labels['none'] = 'hiçbiri';
$labels['fromset'] = 'şu kümeden';
$labels['fromfile'] = 'şu dosyadan';
$labels['filterdisabled'] = 'Süzgeç devre dışı';
$labels['filterenabled'] = 'Süzgeç etkin';
$labels['countisgreaterthan'] = 'sayısı şundan büyük olan';
$labels['countisgreaterthanequal'] = 'sayısı şundan büyük ya da eşit olan';
$labels['countislessthan'] = 'sayısı şundan küçük olan';
$labels['countislessthanequal'] = 'sayısı şundan küçük ya da eşit olan';
$labels['countequals'] = 'sayısı şuna eşit olan';
$labels['countnotequals'] = 'sayısı şuna eşit olmayan';
$labels['valueisgreaterthan'] = 'değeri şundan büyük olan';
$labels['valueisgreaterthanequal'] = 'değeri şundan büyük ya da eşit olan';
$labels['valueislessthan'] = 'değeri şundan küçük olan';
$labels['valueislessthanequal'] = 'değer şundan küçük ya da  eşit olan';
$labels['valueequals'] = 'değeri şuna eşit olan';
$labels['valuenotequals'] = 'değeri şuna eşit olmayan';
$labels['setflags'] = 'İletiyi işaretlerini ayarla';
$labels['addflags'] = 'İletiye işaret ekle';
$labels['removeflags'] = 'İleti işaretlerini kaldır';
$labels['flagread'] = 'Okunmuş';
$labels['flagdeleted'] = 'Silinmiş';
$labels['flaganswered'] = 'Yanıtlanmış';
$labels['flagflagged'] = 'İşaretlenmiş';
$labels['flagdraft'] = 'Taslak';
$labels['addheader'] = 'İletiye üst bilgi ekle';
$labels['deleteheader'] = 'İletideki üst bilgiyi kaldır';
$labels['headername'] = 'Üst bilgi adı';
$labels['headervalue'] = 'Üst bilgi değeri';
$labels['headerpos'] = 'Üst bilgi konumu';
$labels['headeratstart'] = 'üstte';
$labels['headeratend'] = 'altta';
$labels['headeroccurrence'] = 'Üst bilgi görüntülenmesi/konumu';
$labels['headerfromstart'] = 'üstten';
$labels['headerfromend'] = 'alttan';
$labels['headerpatterns'] = 'Üst bilgi değeri düzenleri';
$labels['headermatchtype'] = 'eşleşme türü:';
$labels['setvariable'] = 'Değişken tanımla';
$labels['setvarname'] = 'Değişken adı:';
$labels['setvarvalue'] = 'Değişken değeri:';
$labels['setvarmodifiers'] = 'Alanlar:';
$labels['varlower'] = 'küçük harf';
$labels['varupper'] = 'büyük harf';
$labels['varlowerfirst'] = 'İlk karakter küçük harf';
$labels['varupperfirst'] = 'İlk karakter büyük harf';
$labels['varquotewildcard'] = 'özel karakterleri tırnak içine al';
$labels['varlength'] = 'uzunluk';
$labels['varencodeurl'] = 'yüzde kodlama (adresler için)';
$labels['notify'] = 'Bildirim gönder';
$labels['notifytarget'] = 'Bildirim hedefi:';
$labels['notifymessage'] = 'Bildirim iletisi (isteğe bağlı):';
$labels['notifyoptions'] = 'Bildirim ayarları (isteğe bağlı):';
$labels['notifyfrom'] = 'Bildirim göndericisi (isteğe bağlı):';
$labels['notifyimportance'] = 'Önem derecesi:';
$labels['notifyimportancelow'] = 'düşük';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'yüksek';
$labels['notifymethodmailto'] = 'E-posta';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Süzgeç ekle';
$labels['usedata'] = 'Süzgeçte şu veriler kullanılsın:';
$labels['nextstep'] = 'Sonraki adım';
$labels['...'] = '...';
$labels['string'] = 'Dizge';
$labels['currdate'] = 'Geçerli tarih';
$labels['datetest'] = 'Tarih';
$labels['dateheader'] = 'üst bilgi:';
$labels['year'] = 'yıl';
$labels['month'] = 'ay';
$labels['day'] = 'gün';
$labels['date'] = 'tarih (yyyy-aa-gg)';
$labels['julian'] = 'tarih (julian)';
$labels['hour'] = 'saat';
$labels['minute'] = 'dakika';
$labels['second'] = 'saniye';
$labels['time'] = 'saat (ss:dd:ss)';
$labels['iso8601'] = 'tarih (ISO8601)';
$labels['std11'] = 'tarih (RFC2822)';
$labels['zone'] = 'saat-dilimi';
$labels['weekday'] = 'haftanın günleri (0-6)';
$labels['advancedopts'] = 'Gelişmiş ayarlar';
$labels['body'] = 'Metin';
$labels['address'] = 'adres';
$labels['envelope'] = 'zarf';
$labels['modifier'] = 'alan:';
$labels['text'] = 'metin';
$labels['undecoded'] = 'kodu çözülmemiş (ham)';
$labels['contenttype'] = 'içerik türü';
$labels['modtype'] = 'tür:';
$labels['allparts'] = 'tümü';
$labels['domain'] = 'etki alanı';
$labels['localpart'] = 'yerel parça';
$labels['user'] = 'kullanıcı';
$labels['detail'] = 'ayrıntı';
$labels['comparator'] = 'karşılaştırıcı:';
$labels['default'] = 'varsayılan';
$labels['octet'] = 'sıkı (sekizli)';
$labels['asciicasemap'] = 'büyük küçük harfe duyarsız (ascii-casemap)';
$labels['asciinumeric'] = 'sayı (ascii-numeric)';
$labels['index'] = 'Dizin:';
$labels['indexlast'] = 'geriye yönelik';
$labels['spamtest'] = 'İstenmeyen e-posta düzeyi';
$labels['spamtestisgreaterthan'] = 'şundan büyük olan';
$labels['spamtestisgreaterthanequal'] = 'şundan büyük ve eşit olan';
$labels['spamtestislessthan'] = 'şundan küçük olan';
$labels['spamtestislessthanequal'] = 'şundan küçük ve eşit olan';
$labels['spamtestequals'] = 'şuna eşit olan';
$labels['spamtestnotequals'] = 'şuna eşit olmayan';
$labels['spamtestisunknown'] = 'bilinmeyen';
$labels['vacation'] = 'Ofis dışında';
$labels['vacation.reply'] = 'İletiyi yanıtla';
$labels['vacation.advanced'] = 'Gelişmiş ayarlar';
$labels['vacation.from'] = 'Gönderici adresine yanıtla';
$labels['vacation.subject'] = 'Konu';
$labels['vacation.body'] = 'Metin';
$labels['vacation.start'] = 'Başlangıç saati';
$labels['vacation.end'] = 'Bitiş saati';
$labels['vacation.status'] = 'Durum';
$labels['vacation.on'] = 'Etkin';
$labels['vacation.off'] = 'Devre dışı';
$labels['vacation.addresses'] = 'E-posta adreslerim';
$labels['vacation.interval'] = 'Yanıt aralığı';
$labels['vacation.after'] = 'Ofis dışında kuralını şunun arkasına koy';
$labels['vacation.saving'] = 'Veriler kaydediliyor...';
$labels['vacation.action'] = 'Gelen ileti işlemi';
$labels['vacation.keep'] = 'Koru';
$labels['vacation.discard'] = 'Yok say';
$labels['vacation.redirect'] = 'Şuraya yönlendir';
$labels['vacation.copy'] = 'Şuraya kopya gönder';
$labels['forward'] = 'İletiliyor';
$labels['forward.redirect'] = 'Şuraya yönlendir';
$labels['forward.copy'] = 'Şuraya kopya gönder';
$labels['forward.on'] = 'Etkin';
$labels['forward.off'] = 'Devre dışı';
$labels['forward.status'] = 'Durum:';
$labels['forward.action'] = 'Gelen e-postalar için şu işlem yürütülsün:';
$labels['forward.saving'] = 'Veriler kaydediliyor...';
$labels['filladdresses'] = 'Benim adreslerimle doldur';
$labels['arialabelfiltersetactions'] = 'Süzgeç kümesi işlemleri';
$labels['arialabelfilteractions'] = 'Süzgeç işlemleri';
$labels['arialabelfilterform'] = 'Süzgeç özellikleri';
$labels['ariasummaryfilterslist'] = 'Süzgeç listesi';
$labels['ariasummaryfiltersetslist'] = 'Süzgeç kümesi listesi';
$labels['filterstitle'] = 'Gelen e-posta süzgeçlerini düzenle';
$labels['vacationtitle'] = 'Ofis dışında kuralını düzenle';
$labels['forwardtitle'] = 'Posta iletme kuralını düzenle';
$labels['message'] = 'İleti';
$labels['duplicate'] = 'yinelenen';
$labels['notduplicate'] = 'yinelenmeyen';
$labels['duplicate.handle'] = 'işle:';
$labels['duplicate.header'] = 'üst bilgi:';
$labels['duplicate.uniqueid'] = 'belirteç:';
$labels['duplicate.seconds'] = 'Zaman aşımı (saniye):';
$labels['duplicate.last'] = 'son yapılanlara göre';
$messages['filterunknownerror'] = 'Bilinmeyen sunucu sorunu.';
$messages['filterconnerror'] = 'Sunucu ile bağlantı kurulamadı.';
$messages['filterdeleteerror'] = 'Süzgeç silinemedi. Sunucuda bir sorun çıktı.';
$messages['filterdeleted'] = 'Süzgeç silindi.';
$messages['filtersaved'] = 'Süzgeç kaydedildi.';
$messages['filtersaveerror'] = 'Süzgeç kaydedilemedi. Sunucuda bir sorun çıktı.';
$messages['filterformerror'] = 'Süzgeç formunda sorunlar var.';
$messages['filterdeleteconfirm'] = 'Seçilmiş süzgeçleri silmek istediğinize emin misiniz?';
$messages['ruledeleteconfirm'] = 'Seçilmiş kuralları silmek istediğinize emin misiniz?';
$messages['actiondeleteconfirm'] = 'Seçilmiş işlemleri silmek istediğinize emin misiniz?';
$messages['forbiddenchars'] = 'Alanda izin verilmeyen karakterler var.';
$messages['cannotbeempty'] = 'Alan boş olamaz';
$messages['ruleexist'] = 'Aynı adlı bir süzgeç zaten var.';
$messages['setactivateerror'] = 'Seçilmiş süzgeç kümesi etkinleştirilemedi. Sunucuda bir sorun çıktı.';
$messages['setdeactivateerror'] = 'Seçilmiş süzgeç kümesi devre dışı bırakılamadı. Sunucuda bir sorun çıktı.';
$messages['setdeleteerror'] = 'Seçilmiş süzgeç kümesi silinemedi. Sunucuda bir sorun çıktı.';
$messages['setactivated'] = 'Süzgeç kümesi etkinleştirildi.';
$messages['setdeactivated'] = 'Süzgeç kümesi devre dışı bırakıldı.';
$messages['setdeleted'] = 'Süzgeç kümesi silindi.';
$messages['setupdated'] = 'Süzgeç kümesi güncellendi.';
$messages['setdeleteconfirm'] = 'Seçilmiş süzgeç kümesini silmek istediğinize emin misiniz?';
$messages['setcreateerror'] = 'Süzgeç kümesi eklenemedi. Sunucuda bir sorun çıktı.';
$messages['setcreated'] = 'Süzgeç kümesi eklendi.';
$messages['activateerror'] = 'Seçilmiş süzgeç(ler) etkinleştirilemedi. Sunucuda bir sorun çıktı.';
$messages['deactivateerror'] = 'Seçilmiş süzgeç(ler) devre dışı bırakılamadı. Sunucuda bir sorun çıktı.';
$messages['deactivated'] = 'Süzgeç(ler) devre dışı bırakıldı.';
$messages['activated'] = 'Süzgeç(ler) etkinleştirildi.';
$messages['moved'] = 'Süzgeç taşındı.';
$messages['moveerror'] = 'Seçilmiş süzgeç taşınamadı. Sunucuda bir sorun çıktı.';
$messages['nametoolong'] = 'Ad çok uzun.';
$messages['namereserved'] = 'Bu ad ayırtılmış.';
$messages['setexist'] = 'Küme zaten var.';
$messages['nodata'] = 'En az bir konum seçilmelidir!';
$messages['invaliddateformat'] = 'Tarih ya da tarih biçimi geçersiz';
$messages['saveerror'] = 'Veri kaydedilemedi. Sunucuda bir sorun çıktı.';
$messages['vacationsaved'] = 'Ofis dışında verileri kaydedildi.';
$messages['forwardsaved'] = 'İletim verileri kaydedildi.';
$messages['emptyvacationbody'] = 'Tatil iletisi metnini yazmalısınız!';
$messages['duplicate.conflict.err'] = 'Üst bilgi ve tekil belirteç aynı anda kullanılamaz.';
$messages['disabledaction'] = 'İşleme izin verilmiyor!';
$messages['lastindexempty'] = 'Sondan sayılırken dizin gereklidir';
$messages['noflagset'] = 'En az bir işaret seçilmelidir.';
PKyc�\7�+�:�:"managesieve/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Administrar filtros de correo entrante';
$labels['filtername'] = 'Nombre del filtro';
$labels['newfilter'] = 'Nuevo filtro';
$labels['filteradd'] = 'Agregar filtro';
$labels['filterdel'] = 'Eliminar filtro';
$labels['rules'] = 'Reglas';
$labels['actions'] = 'Acciones';
$labels['scope'] = 'Alcance';
$labels['moveup'] = 'Mover arriba';
$labels['movedown'] = 'Mover abajo';
$labels['filterallof'] = 'coincidir con todas las reglas siguientes';
$labels['filteranyof'] = 'coincidir con alguna de las reglas siguientes';
$labels['filterany'] = 'todos los mensajes';
$labels['filtercontains'] = 'contiene';
$labels['filternotcontains'] = 'no contiene';
$labels['filteris'] = 'es igual a';
$labels['filterisnot'] = 'no es igual a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'no existe';
$labels['filtermatches'] = 'coincide con la expresión';
$labels['filternotmatches'] = 'no coincide con la expresión';
$labels['filterregex'] = 'coincide con la expresión regular';
$labels['filternotregex'] = 'no coincide con la expresión regular';
$labels['filterunder'] = 'bajo';
$labels['filterover'] = 'sobre';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Parte MIME:';
$labels['mime-message'] = 'mensaje';
$labels['mime-anychild'] = 'cualquiera';
$labels['mime-type'] = 'tipo';
$labels['mime-subtype'] = 'subtipo';
$labels['mime-contenttype'] = 'tipo de contenido';
$labels['mime-param'] = 'parámetro';
$labels['addrule'] = 'Agregar regla';
$labels['delrule'] = 'Eliminar regla';
$labels['messagemoveto'] = 'Mover mensaje a';
$labels['messageredirect'] = 'Redirigir mensaje a';
$labels['messagecopyto'] = 'Copiar mensaje a';
$labels['messagesendcopy'] = 'Enviar copia del mensaje a';
$labels['messagereply'] = 'Responder con un mensaje';
$labels['messagedelete'] = 'Eliminar mensaje';
$labels['messagediscard'] = 'Descartar con un mensaje';
$labels['messagekeep'] = 'Mantener mensajes en bandeja de entrada';
$labels['messagesrules'] = 'Para el correo entrante:';
$labels['messagesactions'] = '... ejecutar las siguientes acciones:';
$labels['add'] = 'Agregar';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remitente';
$labels['recipient'] = 'Destinatario';
$labels['vacationaddr'] = 'Mi dirección de correo electrónico:';
$labels['vacationdays'] = 'Cada cuanto enviar mensajes (en días):';
$labels['vacationinterval'] = 'Enviar mensajes cada:';
$labels['vacationreason'] = 'Cuerpo del mensaje (razón de vacaciones):';
$labels['vacationfrom'] = 'Responder a la dirección remitente:';
$labels['vacationsubject'] = 'Asunto del mensaje:';
$labels['days'] = 'dias';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de evaluar reglas';
$labels['enable'] = 'Habilitar/Deshabilitar';
$labels['filterset'] = 'Conjunto de filtros';
$labels['filtersets'] = 'Conjuntos de filtros';
$labels['filtersetadd'] = 'Agregar conjunto de filtros';
$labels['filtersetdel'] = 'Eliminar conjunto de filtros';
$labels['filtersetact'] = 'Activar este conjunto de filtros';
$labels['filtersetdeact'] = 'Desactivar este conjunto de filtros';
$labels['filterseteditraw'] = 'Editar conjunto de filtros';
$labels['filtersetswitch'] = 'Habilitar/deshabilitar conjunto de filtros';
$labels['filterdef'] = 'Creación de filtros';
$labels['filtersetname'] = 'Nombre del conjunto de filtros';
$labels['newfilterset'] = 'Nuevo conjunto de filtros';
$labels['active'] = 'Activar';
$labels['none'] = 'ninguno';
$labels['fromset'] = 'desde conjunto';
$labels['fromfile'] = 'desde archivo';
$labels['filterdisabled'] = 'Filtro deshabilitado';
$labels['filterenabled'] = 'Filtro activado';
$labels['countisgreaterthan'] = 'la longitud es mayor a';
$labels['countisgreaterthanequal'] = 'la longitud es mayor o igual a';
$labels['countislessthan'] = 'la longitud es menor a';
$labels['countislessthanequal'] = 'la longitud es menor o igual a';
$labels['countequals'] = 'la longitud es igual a';
$labels['countnotequals'] = 'la longitud no es igual a';
$labels['valueisgreaterthan'] = 'el valor es mayor a';
$labels['valueisgreaterthanequal'] = 'el valor es mayor o igual a';
$labels['valueislessthan'] = 'el valor es menor a';
$labels['valueislessthanequal'] = 'el valor es menor o igual a';
$labels['valueequals'] = 'el valor es igual a';
$labels['valuenotequals'] = 'el valor no es igual a';
$labels['setflags'] = 'Configurar marcas del mensaje';
$labels['addflags'] = 'Agregar marcas al mensaje';
$labels['removeflags'] = 'Eliminar marcas del mensaje';
$labels['flagread'] = 'Leer';
$labels['flagdeleted'] = 'Eliminado';
$labels['flaganswered'] = 'Respondido';
$labels['flagflagged'] = 'Marcado';
$labels['flagdraft'] = 'Borrador';
$labels['addheader'] = 'Agregar encabezado al mensaje';
$labels['deleteheader'] = 'Eliminar encabezado del mensaje';
$labels['headername'] = 'Nombre del encabezado';
$labels['headervalue'] = 'Valor del encabezado';
$labels['headerpos'] = 'Posición del encabezado';
$labels['headeratstart'] = 'al principio';
$labels['headeratend'] = 'al final';
$labels['headeroccurrence'] = 'Posición/aparición del encabezado';
$labels['headerfromstart'] = 'desde el principio';
$labels['headerfromend'] = 'desde el final';
$labels['headerpatterns'] = 'Patrones del valor del encabezado';
$labels['headermatchtype'] = 'tipo de coincidencia:';
$labels['setvariable'] = 'Setear variable';
$labels['setvarname'] = 'Nombre de variable:';
$labels['setvarvalue'] = 'Valor de variable:';
$labels['setvarmodifiers'] = 'Modificadores:';
$labels['varlower'] = 'minúscula';
$labels['varupper'] = 'mayúscula';
$labels['varlowerfirst'] = 'primer caracter en minúscula';
$labels['varupperfirst'] = 'primer caracter en mayúscula';
$labels['varquotewildcard'] = 'citar caracteres especiales';
$labels['varlength'] = 'longitud';
$labels['notify'] = 'Enviar notificación';
$labels['notifytarget'] = 'Objetivo de la notificación:';
$labels['notifymessage'] = 'Mensaje de notificación (opcional):';
$labels['notifyoptions'] = 'Opciones de notificación (opcional):';
$labels['notifyfrom'] = 'Remitente de la notificación (opcional):';
$labels['notifyimportance'] = 'Importancia:';
$labels['notifyimportancelow'] = 'baja';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Teléfono';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar la siguiente información en el filtro:';
$labels['nextstep'] = 'Siguiente paso';
$labels['...'] = '...';
$labels['string'] = 'Cadena';
$labels['currdate'] = 'Fecha actual';
$labels['datetest'] = 'Fecha';
$labels['dateheader'] = 'encabezado:';
$labels['year'] = 'año';
$labels['month'] = 'mes';
$labels['day'] = 'dia';
$labels['date'] = 'fecha (yyyy-mm-dd)';
$labels['julian'] = 'fecha (juliano)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'fecha (ISO8601)';
$labels['std11'] = 'fecha (RFC2822)';
$labels['zone'] = 'zona horaria';
$labels['weekday'] = 'día de la semana (0-6)';
$labels['advancedopts'] = 'Opciones avanzadas';
$labels['body'] = 'Cuerpo';
$labels['address'] = 'dirección';
$labels['envelope'] = 'envoltura';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'sin decodificar (crudo)';
$labels['contenttype'] = 'tipo de contenido';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todo';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'usuario';
$labels['detail'] = 'detalle';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'por defecto';
$labels['octet'] = 'estricto (octeto)';
$labels['asciicasemap'] = 'no sensible a minúsculas o mayúsculas (ascii-casemap)';
$labels['asciinumeric'] = 'numérico (ascii-numeric)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'hacia atrás';
$labels['spamtest'] = 'Nivel de spam';
$labels['spamtestisgreaterthan'] = 'es mayor a';
$labels['spamtestisgreaterthanequal'] = 'es mayor o igual a';
$labels['spamtestislessthan'] = 'es menor a';
$labels['spamtestislessthanequal'] = 'es menor o igual a';
$labels['spamtestequals'] = 'es igual a';
$labels['spamtestnotequals'] = 'no es igual a';
$labels['spamtestisunknown'] = 'es desconocido';
$labels['vacation'] = 'Aviso de ausencia';
$labels['vacation.reply'] = 'Responder mensaje';
$labels['vacation.advanced'] = 'Opciones avanzadas';
$labels['vacation.from'] = 'Dirección del remitente de la respuesta';
$labels['vacation.subject'] = 'Asunto';
$labels['vacation.body'] = 'Cuerpo';
$labels['vacation.start'] = 'Fecha y hora de comienzo';
$labels['vacation.end'] = 'Fecha y hora de finalización';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Habilitado';
$labels['vacation.off'] = 'Deshabilitado';
$labels['vacation.addresses'] = 'Mis direcciones de correo electrónico';
$labels['vacation.interval'] = 'Intervalo de respuesta';
$labels['vacation.after'] = 'Poner la regla de ausencia después';
$labels['vacation.saving'] = 'Guardando información...';
$labels['vacation.action'] = 'Acción para mensaje entrante';
$labels['vacation.keep'] = 'Mantener';
$labels['vacation.discard'] = 'Descartar';
$labels['vacation.redirect'] = 'Reenviar a';
$labels['vacation.copy'] = 'Enviar copia a';
$labels['forward'] = 'Reenvío';
$labels['forward.redirect'] = 'Reenviar a';
$labels['forward.copy'] = 'Enviar copia a';
$labels['forward.on'] = 'Sí';
$labels['forward.off'] = 'No';
$labels['forward.status'] = 'Estado:';
$labels['forward.action'] = 'Para mensajes entrantes ejecutar la siguiente acción:';
$labels['forward.saving'] = 'Guardando información...';
$labels['filladdresses'] = 'Rellenar con todas mis direcciones';
$labels['arialabelfiltersetactions'] = 'Acciones de conjunto de filtros';
$labels['arialabelfilteractions'] = 'Filtrar acciones';
$labels['arialabelfilterform'] = 'Filtrar propiedades';
$labels['ariasummaryfilterslist'] = 'Listado de filtros';
$labels['ariasummaryfiltersetslist'] = 'Listado de conjunto de filtros';
$labels['filterstitle'] = 'Editar filtros para mensajes entrantes';
$labels['vacationtitle'] = 'Editar reglas de ausencia';
$labels['forwardtitle'] = 'Editar regla de reenvío de correo';
$labels['message'] = 'Mensaje';
$labels['duplicate'] = 'está duplicado';
$labels['notduplicate'] = 'no está duplicado';
$labels['duplicate.handle'] = 'handle:';
$labels['duplicate.header'] = 'encabezado:';
$labels['duplicate.uniqueid'] = 'identificador:';
$labels['duplicate.seconds'] = 'límite de tiempo (en segundos):';
$labels['duplicate.last'] = 'relativo a la última ejecución';
$messages['filterunknownerror'] = 'Error desconocido del servidor.';
$messages['filterconnerror'] = 'Imposible conectar con el servidor.';
$messages['filterdeleteerror'] = 'Imposible borrar el filtro. Ha ocurrido un error en el servidor.';
$messages['filterdeleted'] = 'Filtro borrado satisfactoriamente';
$messages['filtersaved'] = 'Filtro guardado satisfactoriamente';
$messages['filtersaveerror'] = 'Imposible guardar el filtro. Ha ocurrido un error en el servidor.';
$messages['filterformerror'] = 'La forma del filtro contiene errores.';
$messages['filterdeleteconfirm'] = '¿Realmente deseás borrar el filtro seleccionado?';
$messages['ruledeleteconfirm'] = '¿Estás seguro de que deseás borrar la regla seleccionada?';
$messages['actiondeleteconfirm'] = '¿Está seguro de que deseás borrar la acción seleccionada?';
$messages['forbiddenchars'] = 'Caracteres prohibidos en el campo.';
$messages['cannotbeempty'] = 'El campo no puede estar vacío.';
$messages['ruleexist'] = 'Ya existe un filtro con el nombre especificado.';
$messages['setactivateerror'] = 'Imposible activar el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setdeactivateerror'] = 'Imposible desactivar el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setdeleteerror'] = 'Imposible borrar el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setactivated'] = 'Conjunto de filtros activados satisfactoriamente.';
$messages['setdeactivated'] = 'Conjunto de filtros desactivados satisfactoriamente.';
$messages['setdeleted'] = 'Conjunto de filtros eliminados satisfactoriamente.';
$messages['setupdated'] = 'Conjunto de filtros actualizados satisfactoriamente.';
$messages['setdeleteconfirm'] = '¿Estás seguro de que deseás eliminar el conjunto de filtros seleccionado?';
$messages['setcreateerror'] = 'Imposible crear el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setcreated'] = 'Conjunto de filtros creado satisfactoriamente.';
$messages['activateerror'] = 'Imposible activar el conjunto de filtros. Error en el servidor.';
$messages['deactivateerror'] = 'Imposible desactivar el conjunto de filtros. Error en el servidor.';
$messages['deactivated'] = 'Filtro deshabilitado satisfactoriamente';
$messages['activated'] = 'Filtro habilitado satisfactoriamente';
$messages['moved'] = 'Filtro movido satisfactoriamente';
$messages['moveerror'] = 'Imposible mover el filtro seleccionado. Ha ocurrido un error en el servidor.';
$messages['nametoolong'] = 'El nombre es demasiado largo.';
$messages['namereserved'] = 'Nombre reservado.';
$messages['setexist'] = 'Conjunto ya existe.';
$messages['nodata'] = 'Al menos una posición debe ser seleccionada!';
$messages['invaliddateformat'] = 'Fecha o formato de fecha inválido';
$messages['saveerror'] = 'Imposible guardar la información. Ha ocurrido un error con el servidor.';
$messages['vacationsaved'] = 'Datos de ausencia guardados satisfactoriamente.';
$messages['forwardsaved'] = 'Datos de reenvío guardados satisfactoriamente.';
$messages['emptyvacationbody'] = '¡Se requiere un cuerpo para el mensaje por vacaciones!';
$messages['duplicate.conflict.err'] = 'Ni el encabezado ni el identificador único están permitidos.';
$messages['disabledaction'] = 'Acción no permitida.';
$messages['lastindexempty'] = 'Se necesita un índice cuando se cuenta desde el final';
$messages['noflagset'] = 'Al menos una etiqueta debe estar seleccionada';
PKyc�\�Q"��"managesieve/localization/ur_PK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['sender'] = 'بھیجنے والا';
$labels['flagdeleted'] = 'ختم ہو گیا';
$labels['datetest'] = 'تاریخ';
$labels['vacation.subject'] = 'مضمون';
PKyc�\��8�managesieve/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filterany'] = 'hemû peyam';
$labels['filtercontains'] = 'dihewîne';
$labels['filternotcontains'] = 'nahebîne';
$labels['filteris'] = 'weke';
$labels['filterisnot'] = 'ne weke';
$labels['filterexists'] = 'heye';
$labels['filternotexists'] = 'tune ye';
$labels['filterunder'] = 'bin';
$labels['filterover'] = 'ser';
$labels['messagemoveto'] = 'Peyamê bibe ';
$labels['messageredirect'] = 'Peyamê vegerîne';
$labels['messagereply'] = 'Bi peyamekê bibersivîne';
$labels['messagedelete'] = 'Peyamê jê bibe';
$labels['add'] = 'Tev bike';
$labels['del'] = 'Jê bibe';
$labels['sender'] = 'Şandyar';
$labels['vacationsubject'] = 'Mijara peyamê:';
$labels['days'] = 'roj';
$labels['seconds'] = 'saniye';
$labels['enable'] = 'Veke/Bigire';
$labels['active'] = 'çalak';
$labels['none'] = 'qet';
$labels['fromfile'] = 'ji dosyeyê';
$labels['filterdisabled'] = 'Parzing girtî ye';
$labels['countisgreaterthan'] = 'hejmar mezintir e ji';
$labels['countisgreaterthanequal'] = 'hejmar weke an jî mezintir e ji';
$labels['countislessthan'] = 'hejmar kêmtir e ji';
$labels['countequals'] = 'hejmar weke ';
$labels['countnotequals'] = 'hejmar ne weke';
$labels['flagread'] = 'Xwendî';
$labels['flagdeleted'] = 'Jêbirî';
$labels['flaganswered'] = 'Nebersivandî';
$labels['flagflagged'] = 'Bialakirî';
$labels['varlength'] = 'Dirêjahî';
$labels['notify'] = 'Agahiyê bişîne';
$labels['notifyimportance'] = 'Girîng:';
$labels['notifyimportancelow'] = 'nizm';
$labels['notifyimportancehigh'] = 'bilind';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Parzingek çêke';
$labels['nextstep'] = 'Gava pêşde';
$labels['...'] = '...';
$labels['currdate'] = 'Dîroka niha';
$labels['datetest'] = 'Dîrok';
$labels['year'] = 'sal';
$labels['month'] = 'meh';
$labels['day'] = 'roj';
$labels['date'] = 'dîrok (ssss-mm--rr)';
$labels['julian'] = 'dîrok (julian)';
$labels['hour'] = 'saet';
$labels['minute'] = 'deqîqe';
$labels['second'] = 'saniye';
$labels['time'] = 'dem (ss:dd:ss)';
$labels['iso8601'] = 'dem (ISO8601)';
$labels['zone'] = 'qada demê';
$labels['weekday'] = 'rojên hefteyê (0-6)';
$labels['address'] = 'navnîşan';
$labels['text'] = 'nivîs';
$labels['contenttype'] = 'cûreya naverokê';
$labels['modtype'] = 'cûre';
$labels['allparts'] = 'hemû';
$labels['user'] = 'bikarhêner';
$labels['detail'] = 'detay';
$labels['spamtestequals'] = 'weke';
$labels['spamtestnotequals'] = 'ne weke';
$labels['vacation.reply'] = 'Peyamê bibersivîne';
$labels['vacation.advanced'] = 'Mihengên pêşketî';
$labels['vacation.subject'] = 'Mijar';
$labels['vacation.status'] = 'Rewş';
$labels['vacation.on'] = 'Vekirî';
$labels['vacation.keep'] = 'Bihêle';
$labels['forward.on'] = 'Vekirî';
PKyc�\pͰ�^9^9"managesieve/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Gerenciar filtros de entrada de e-mail';
$labels['filtername'] = 'Nome do filtro';
$labels['newfilter'] = 'Novo filtro';
$labels['filteradd'] = 'Adicionar filtro';
$labels['filterdel'] = 'Excluir filtro';
$labels['rules'] = 'Regras';
$labels['actions'] = 'Ações';
$labels['scope'] = 'Escopo';
$labels['moveup'] = 'Mover para cima';
$labels['movedown'] = 'Mover para baixo';
$labels['filterallof'] = 'casando todas as seguintes regras';
$labels['filteranyof'] = 'casando qualquer das seguintes regras';
$labels['filterany'] = 'todas as mensagens';
$labels['filtercontains'] = 'contem';
$labels['filternotcontains'] = 'não contem';
$labels['filteris'] = 'é igual a';
$labels['filterisnot'] = 'não é igual a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'não existe';
$labels['filtermatches'] = 'expressão combina';
$labels['filternotmatches'] = 'expressão não combina';
$labels['filterregex'] = 'combina com expressão regular';
$labels['filternotregex'] = 'não combina com a expressão regular';
$labels['filterunder'] = 'inferior a';
$labels['filterover'] = 'superior a';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Parte MIME:';
$labels['mime-message'] = 'mensagem';
$labels['mime-anychild'] = 'qualquer';
$labels['mime-type'] = 'tipo';
$labels['mime-subtype'] = 'subtipo';
$labels['mime-contenttype'] = 'tipo-de-conteúdo';
$labels['mime-param'] = 'parâmetro';
$labels['addrule'] = 'Adicionar regra';
$labels['delrule'] = 'Excluir regra';
$labels['messagemoveto'] = 'Mover mensagem para';
$labels['messageredirect'] = 'Redirecionar mensagem para';
$labels['messagecopyto'] = 'Copiar mensagem para';
$labels['messagesendcopy'] = 'Enviar cópia da mensagem para';
$labels['messagereply'] = 'Responder com mensagem';
$labels['messagedelete'] = 'Excluir mensagem';
$labels['messagediscard'] = 'Descartar com mensagem';
$labels['messagekeep'] = 'Manter mensagens na caixa';
$labels['messagesrules'] = 'Para e-mails recebidos:';
$labels['messagesactions'] = '...execute as seguintes ações:';
$labels['add'] = 'Adicionar';
$labels['del'] = 'Excluir';
$labels['sender'] = 'Remetente';
$labels['recipient'] = 'Destinatário';
$labels['vacationaddr'] = 'Meus endereços de e-mail:';
$labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):';
$labels['vacationinterval'] = 'Como geralmente enviam mensagens:';
$labels['vacationreason'] = 'Corpo da mensagem (motivo de férias):';
$labels['vacationfrom'] = 'Responder endereço do remetente:';
$labels['vacationsubject'] = 'Título da mensagem:';
$labels['days'] = 'dias';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de avaliar regras';
$labels['enable'] = 'Habilitar/Desabilitar';
$labels['filterset'] = 'Conjunto de filtro';
$labels['filtersets'] = 'Conjuntos de filtro';
$labels['filtersetadd'] = 'Adicionar conjunto de filtro';
$labels['filtersetdel'] = 'Remover conjunto de filtro';
$labels['filtersetact'] = 'Ativar conjunto de filtro atual';
$labels['filtersetdeact'] = 'Desativar conjunto de filtro atual';
$labels['filterseteditraw'] = 'Editar conjunto de filtros';
$labels['filtersetswitch'] = 'Habilitar/desabilitar conjunto de filtro';
$labels['filterdef'] = 'Definição de filtro';
$labels['filtersetname'] = 'Nome do conjunto de filtro';
$labels['newfilterset'] = 'Novo conjunto de filtro';
$labels['active'] = 'ativo';
$labels['none'] = 'nenhum';
$labels['fromset'] = 'Do conjunto';
$labels['fromfile'] = 'Do arquivo';
$labels['filterdisabled'] = 'Filtro desativado';
$labels['filterenabled'] = 'Filtro ativado';
$labels['countisgreaterthan'] = 'contagem é maior que';
$labels['countisgreaterthanequal'] = 'contagem é maior ou igual a';
$labels['countislessthan'] = 'contagem é menor que';
$labels['countislessthanequal'] = 'contagem é menor ou igual a';
$labels['countequals'] = 'contagem é igual a';
$labels['countnotequals'] = 'contagem não é igual a';
$labels['valueisgreaterthan'] = 'valor é maior que';
$labels['valueisgreaterthanequal'] = 'valor é maior ou igual a';
$labels['valueislessthan'] = 'valor é menor que';
$labels['valueislessthanequal'] = 'valor é menor ou igual a';
$labels['valueequals'] = 'valor é igual a';
$labels['valuenotequals'] = 'valor não é igual a';
$labels['setflags'] = 'Definir marcadores à mensagem';
$labels['addflags'] = 'Adicionar marcadores à mensagem';
$labels['removeflags'] = 'Remover marcadores da mensagem';
$labels['flagread'] = 'Lida';
$labels['flagdeleted'] = 'Excluída';
$labels['flaganswered'] = 'Respondida';
$labels['flagflagged'] = 'Marcada';
$labels['flagdraft'] = 'Rascunho';
$labels['addheader'] = 'Adicionar cabeçalho à mensagem';
$labels['deleteheader'] = 'Remover cabeçalho da mensagem';
$labels['headername'] = 'Nome do cabeçalho';
$labels['headervalue'] = 'Valor do cabeçalho';
$labels['headerpos'] = 'Posição do cabeçalho';
$labels['headeratstart'] = 'no início';
$labels['headeratend'] = 'no final';
$labels['headeroccurrence'] = 'Posição/ocorrência do cabeçalho';
$labels['headerfromstart'] = 'do início';
$labels['headerfromend'] = 'do final';
$labels['headerpatterns'] = 'Padrôes de valor do cabeçalho';
$labels['headermatchtype'] = 'tipo de combinação:';
$labels['setvariable'] = 'Definir variável';
$labels['setvarname'] = 'Nome da variável:';
$labels['setvarvalue'] = 'Valor da variável:';
$labels['setvarmodifiers'] = 'Modificadores:';
$labels['varlower'] = 'minúsculas';
$labels['varupper'] = 'maiúsculas';
$labels['varlowerfirst'] = 'primeiro caractere minúsculo';
$labels['varupperfirst'] = 'primeiro caractere maiúsculo';
$labels['varquotewildcard'] = 'caracteres especiais de citação';
$labels['varlength'] = 'tamanho';
$labels['notify'] = 'Enviar notificação';
$labels['notifytarget'] = 'Destino da notificação:';
$labels['notifymessage'] = 'Mensagem de notificação (opcional):';
$labels['notifyoptions'] = 'Opções de notificação (opcional):';
$labels['notifyfrom'] = 'Remetente da notificação (opcional):';
$labels['notifyimportance'] = 'Importância';
$labels['notifyimportancelow'] = 'baixa';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefone';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Criar filtro';
$labels['usedata'] = 'Usar os seguintes dados no filtro:';
$labels['nextstep'] = 'Próximo Passo';
$labels['...'] = '...';
$labels['string'] = 'Texto';
$labels['currdate'] = 'Data atual';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'cabeçalho:';
$labels['year'] = 'ano';
$labels['month'] = 'mês';
$labels['day'] = 'dia';
$labels['date'] = 'data (aaaa-mm-dd)';
$labels['julian'] = 'data (calendário juliano)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fuso horário';
$labels['weekday'] = 'dia da semana (0-6)';
$labels['advancedopts'] = 'Opções avançadas';
$labels['body'] = 'Corpo';
$labels['address'] = 'endereço';
$labels['envelope'] = 'envelope';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'decodificado (bruto)';
$labels['contenttype'] = 'tipo de conteúdo';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todas';
$labels['domain'] = 'domínio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'usuário';
$labels['detail'] = 'detalhes';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'padrão';
$labels['octet'] = 'estrito (octeto)';
$labels['asciicasemap'] = 'caso insensível (mapa de caracteres ascii)';
$labels['asciinumeric'] = 'numérico (ascii-numeric)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'retroceder';
$labels['spamtest'] = 'Nível de spam';
$labels['spamtestisgreaterthan'] = 'é maior que';
$labels['spamtestisgreaterthanequal'] = 'é maior ou igual a';
$labels['spamtestislessthan'] = 'é menor que';
$labels['spamtestislessthanequal'] = 'é menor ou igual a';
$labels['spamtestequals'] = 'é igual a';
$labels['spamtestnotequals'] = 'não é igual a';
$labels['spamtestisunknown'] = 'é desconhecido';
$labels['vacation'] = 'Fora do Escritório';
$labels['vacation.reply'] = 'Responder mensagem';
$labels['vacation.advanced'] = 'Opções avançadas';
$labels['vacation.from'] = 'Responder endereço do remetente';
$labels['vacation.subject'] = 'Assunto';
$labels['vacation.body'] = 'Conteúdo';
$labels['vacation.start'] = 'Tempo de início';
$labels['vacation.end'] = 'Tempo final';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Ligado';
$labels['vacation.off'] = 'Desligado';
$labels['vacation.addresses'] = 'Meus endereços de e-mail';
$labels['vacation.interval'] = 'Intervalo de resposta';
$labels['vacation.after'] = 'Colocar a regra fora-de-escritório após';
$labels['vacation.saving'] = 'Salvando dados...';
$labels['vacation.action'] = 'Ações para mensagens recebidas';
$labels['vacation.keep'] = 'Manter';
$labels['vacation.discard'] = 'Descartar';
$labels['vacation.redirect'] = 'Redirecionar para';
$labels['vacation.copy'] = 'Enviar cópia para';
$labels['forward'] = 'Encaminhar';
$labels['forward.redirect'] = 'Redirecionar para';
$labels['forward.copy'] = 'Enviar cópia para';
$labels['forward.on'] = 'Ligado';
$labels['forward.off'] = 'Desligado';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Para e-mails entrantes execute as seguintes ações:';
$labels['forward.saving'] = 'Salvando dados...';
$labels['filladdresses'] = 'Preencher com todos os meus endereços';
$labels['arialabelfiltersetactions'] = 'Ações do grupo de filtros';
$labels['arialabelfilteractions'] = 'Ações do filtro';
$labels['arialabelfilterform'] = 'Propriedades do filtro';
$labels['ariasummaryfilterslist'] = 'Lista dos filtros';
$labels['ariasummaryfiltersetslist'] = 'Lista de grupo de filtros';
$labels['filterstitle'] = 'Editar filtro dos e-mails recebidos';
$labels['vacationtitle'] = 'Editar regra de ausência';
$labels['forwardtitle'] = 'Editar regras de encaminhamento';
$labels['message'] = 'Mensagem';
$labels['duplicate'] = 'está duplicada';
$labels['notduplicate'] = 'não está duplicada';
$labels['duplicate.handle'] = 'tratar:';
$labels['duplicate.header'] = 'cabeçalho:';
$labels['duplicate.uniqueid'] = 'identificador:';
$labels['duplicate.seconds'] = 'tempo limite (segundos):';
$labels['duplicate.last'] = 'relativo à última execução';
$messages['filterunknownerror'] = 'Erro desconhecido de servidor';
$messages['filterconnerror'] = 'Não foi possível conectar ao servidor managesieve';
$messages['filterdeleteerror'] = 'Impossível excluir o filtro. Ocorreu um erro no servidor.';
$messages['filterdeleted'] = 'Filtro excluído com sucesso';
$messages['filtersaved'] = 'Filtro gravado com sucesso';
$messages['filtersaveerror'] = 'Impossível salvar o filtro. Ocorreu um erro no servidor.';
$messages['filterformerror'] = 'Formulário de filtro contém erros.';
$messages['filterdeleteconfirm'] = 'Deseja realmente excluir o filtro selecionado?';
$messages['ruledeleteconfirm'] = 'Deseja realmente excluir a regra selecionada?';
$messages['actiondeleteconfirm'] = 'Deseja realmente excluir a ação selecionada?';
$messages['forbiddenchars'] = 'Caracteres não permitidos no campo';
$messages['cannotbeempty'] = 'Campo não pode ficar em branco';
$messages['ruleexist'] = 'O filtro com o nome especificado já existe.';
$messages['setactivateerror'] = 'Incapaz de ativar o conjunto de filtro selecionado. Erro de servidor ocorrido.';
$messages['setdeactivateerror'] = 'Incapaz de desativar o conjunto de filtro selecionado. Erro de servidor ocorrido.';
$messages['setdeleteerror'] = 'Incapaz de remover o conjunto de filtro selecionado. Erro de servidor ocorrido.';
$messages['setactivated'] = 'Conjunto de filtro ativo com sucesso.';
$messages['setdeactivated'] = 'Conjunto de filtro desativo com sucesso.';
$messages['setdeleted'] = 'Conjunto de filtro removido com sucesso.';
$messages['setupdated'] = 'Conjunto de filtro atualizado com sucesso.';
$messages['setdeleteconfirm'] = 'Você tem certeza que você quer remover o conjunto de filtro selecionado?';
$messages['setcreateerror'] = 'Incapaz de criar o conjunto de filtro. Erro de servidor ocorrido.';
$messages['setcreated'] = 'Conjunto de filtro criado com sucesso.';
$messages['activateerror'] = 'Impossível habilitar o(s) filtro(s) selecionado(s). Ocorreu um erro no servidor.';
$messages['deactivateerror'] = 'Impossível desabilitar o(s) filtro(s) selecionado(s). Ocorreu um erro no servidor.';
$messages['deactivated'] = 'Filtro(s) habilitado(s) com sucesso.';
$messages['activated'] = 'Filtro(s) desabilitado(s) com sucesso.';
$messages['moved'] = 'Filtro movido com sucesso.';
$messages['moveerror'] = 'Impossível mover o filtro selecionado. Ocorreu um erro no servidor.';
$messages['nametoolong'] = 'Nome muito longo.';
$messages['namereserved'] = 'Nome reservado.';
$messages['setexist'] = 'Conjunto já existe.';
$messages['nodata'] = 'Pelo menos uma posição precisa ser selecionada!';
$messages['invaliddateformat'] = 'Data inválida';
$messages['saveerror'] = 'Impossível salvar dados. Ocorreu um erro no servidor.';
$messages['vacationsaved'] = 'Configurações "fora do escritório" salvas com sucesso.';
$messages['forwardsaved'] = 'Dados de encaminhamento salvo com sucesso.';
$messages['emptyvacationbody'] = 'Conteúdo da mensagem de férias necessário!';
$messages['duplicate.conflict.err'] = 'Ambos cabeçalho e identificador único não são permitidos.';
$messages['disabledaction'] = 'Ação não permitida.';
$messages['lastindexempty'] = 'Índice é requerido quando contagem do final';
$messages['noflagset'] = 'Ao menos uma flag deve ser selecionada.';
PKyc�\�&��/�/"managesieve/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Vēstuļu filtri';
$labels['managefilters'] = 'Pārvaldīt ienākošo vēstuļu filtrus';
$labels['filtername'] = 'Filtra nosaukums';
$labels['newfilter'] = 'Jauns filtrs';
$labels['filteradd'] = 'Pievienot filtru';
$labels['filterdel'] = 'Dzēst filtru';
$labels['rules'] = 'Noteikumi';
$labels['actions'] = 'Darbību saraksts';
$labels['scope'] = 'Kur meklēt';
$labels['moveup'] = 'Pārvietot augšup';
$labels['movedown'] = 'Pārvietot lejup';
$labels['filterallof'] = 'jāatbilst visiem sekojošajiem nosacījumiem';
$labels['filteranyof'] = 'jāatbilst jebkuram no sekojošajiem nosacījumiem';
$labels['filterany'] = 'visām vēstulēm';
$labels['filtercontains'] = 'satur';
$labels['filternotcontains'] = 'nesatur';
$labels['filteris'] = 'ir vienāds ar';
$labels['filterisnot'] = 'nav vienāds ar';
$labels['filterexists'] = 'eksistē';
$labels['filternotexists'] = 'neeksistē';
$labels['filtermatches'] = 'jāatbilst izteiksmei';
$labels['filternotmatches'] = 'neatbilst izteiksmei';
$labels['filterregex'] = 'jāatbilst regulārai izteiksmei';
$labels['filternotregex'] = 'neatbilst regulārai izteiksmei';
$labels['filterunder'] = 'zem';
$labels['filterover'] = 'virs';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME daļa:';
$labels['mime-message'] = 'vēstule';
$labels['mime-anychild'] = 'jebkurš';
$labels['mime-type'] = 'tips';
$labels['mime-subtype'] = 'apakštips';
$labels['mime-contenttype'] = 'satura-tips';
$labels['mime-param'] = 'parametrs';
$labels['addrule'] = 'Pievienot nosacījumu';
$labels['delrule'] = 'Dzēst nosacījumu';
$labels['messagemoveto'] = 'Pārvietot vēstuli uz';
$labels['messageredirect'] = 'Pāradresēt vēstuli uz';
$labels['messagecopyto'] = 'Kopēt vēstuli uz';
$labels['messagesendcopy'] = 'Pārsūtīt vēstules kopiju uz';
$labels['messagereply'] = 'Atbildēt ar vēstuli';
$labels['messagedelete'] = 'Dzēst vēstuli';
$labels['messagediscard'] = 'Dzēst vēstuli un atbildēt';
$labels['messagekeep'] = 'Paturēt ziņu Iesūtnē';
$labels['messagesrules'] = 'Ienākošajām vēstulēm:';
$labels['messagesactions'] = '...izpildīt sekojošās darbības:';
$labels['add'] = 'Pievienot';
$labels['del'] = 'Dzēst';
$labels['sender'] = 'Sūtītājs';
$labels['recipient'] = 'Saņēmējs';
$labels['vacationaddr'] = 'Manas e-pasta adreses:';
$labels['vacationdays'] = 'Cik bieži sūtī ziņojumus (dienās):';
$labels['vacationinterval'] = 'Cik bieži sūtīt vēstules:';
$labels['vacationreason'] = 'Atvaļinājuma paziņojuma teksts:';
$labels['vacationfrom'] = 'Atbildētāja e-pasta adrese:';
$labels['vacationsubject'] = 'Vēstules tēma:';
$labels['days'] = 'dienas';
$labels['seconds'] = 'sekundes';
$labels['rulestop'] = 'Apturēt nosacījumu pārbaudi';
$labels['enable'] = 'Ieslēgt/Izslēgt';
$labels['filtersets'] = 'Filtru kopas';
$labels['filterseteditraw'] = 'Rediģēt filtru kopu';
$labels['filterdef'] = 'Filtra apraksts';
$labels['active'] = 'aktīvs';
$labels['none'] = 'nav';
$labels['fromset'] = 'no kopas';
$labels['fromfile'] = 'no faila';
$labels['filterdisabled'] = 'Filtrs atslēgts';
$labels['countisgreaterthan'] = 'skaits ir lielāks kā';
$labels['countisgreaterthanequal'] = 'skaits ir vienāds vai lielāks kā';
$labels['countislessthan'] = 'skaits ir mazāks kā';
$labels['countislessthanequal'] = 'skaits ir vienāds vai mazāks kā';
$labels['countequals'] = 'skaits ir vienāds ar';
$labels['countnotequals'] = 'skaits nav vienāds ar';
$labels['valueisgreaterthan'] = 'vērtība ir lielāka kā';
$labels['valueisgreaterthanequal'] = 'vērtība ir vienāda vai lielāka kā';
$labels['valueislessthan'] = 'vērtība ir mazāka kā';
$labels['valueislessthanequal'] = 'vērtība ir vienāda vai mazāka kā';
$labels['valueequals'] = 'vērtība ir vienāda ar';
$labels['valuenotequals'] = 'vērtība nav vienāda ar';
$labels['setflags'] = 'Marķēt vēstuli';
$labels['addflags'] = 'Pievienot vēstulei marķierus';
$labels['removeflags'] = 'Noņemt vēstulei marķierus';
$labels['flagread'] = 'Lasītas';
$labels['flagdeleted'] = 'Dzēstas';
$labels['flaganswered'] = 'Atbildētas';
$labels['flagflagged'] = 'Marķētas';
$labels['flagdraft'] = 'Melnraksts';
$labels['setvariable'] = 'Iestatīt mainīgo';
$labels['setvarname'] = 'Mainīgā nosaukums:';
$labels['setvarvalue'] = 'Mainīgā vērtība:';
$labels['setvarmodifiers'] = 'Modifikatori:';
$labels['varlower'] = 'mazie burti';
$labels['varupper'] = 'lielie burti';
$labels['varlowerfirst'] = 'pirmais burts kā mazais burts';
$labels['varupperfirst'] = 'pirmais burts kā lielais burts';
$labels['varquotewildcard'] = '"citēt" speciālās rakstzīmes';
$labels['varlength'] = 'garums';
$labels['notify'] = 'Sūtīt paziņojumus';
$labels['notifytarget'] = 'Paziņojuma mērķis:';
$labels['notifymessage'] = 'Paziņojuma teksts (neobligāts):';
$labels['notifyoptions'] = 'Paziņojuma opcijas (neobligāts):';
$labels['notifyfrom'] = 'Paziņojuma sūtītājs (neobligāts):';
$labels['notifyimportance'] = 'Svarīgums:';
$labels['notifyimportancelow'] = 'zems';
$labels['notifyimportancenormal'] = 'parasts';
$labels['notifyimportancehigh'] = 'augsts';
$labels['notifymethodmailto'] = 'E-pasts';
$labels['notifymethodtel'] = 'Telefons';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Izveidot filtru';
$labels['usedata'] = 'Filtrā izmantot sekojošus datus';
$labels['nextstep'] = 'Nākamais solis';
$labels['...'] = '...';
$labels['string'] = 'Teksts';
$labels['currdate'] = 'Pašreizējais datums';
$labels['datetest'] = 'Datums';
$labels['dateheader'] = 'galvene:';
$labels['year'] = 'gads';
$labels['month'] = 'mēnesis';
$labels['day'] = 'diena';
$labels['date'] = 'datums (gggg-mm-dd)';
$labels['julian'] = 'datums (Jūlija kalendārs)';
$labels['hour'] = 'stunda';
$labels['minute'] = 'minūte';
$labels['second'] = 'sekunde';
$labels['time'] = 'laiks (hh:mm:ss)';
$labels['iso8601'] = 'datums (ISO8601)';
$labels['std11'] = 'datums (RFC2822)';
$labels['zone'] = 'laikajosla';
$labels['weekday'] = 'nedēļas diena (0-6)';
$labels['advancedopts'] = 'Paplašinātie iestatījumi';
$labels['body'] = 'Pamatteksts';
$labels['address'] = 'adresāts';
$labels['envelope'] = 'aploksne';
$labels['modifier'] = 'modifikators:';
$labels['text'] = 'teksts';
$labels['undecoded'] = 'neatkodēts (neapstrādāti dati)';
$labels['contenttype'] = 'satura tips';
$labels['modtype'] = 'tips:';
$labels['allparts'] = 'viss';
$labels['domain'] = 'domēns';
$labels['localpart'] = 'lokālā daļa';
$labels['user'] = 'lietotājs';
$labels['detail'] = 'detaļas';
$labels['comparator'] = 'salīdzinātājs';
$labels['default'] = 'noklusētā vērtība';
$labels['octet'] = 'precīzs (oktets)';
$labels['asciicasemap'] = 'reģistrnejutīgs (ascii tabula)';
$labels['asciinumeric'] = 'skaitļu (ascii skaitļu)';
$labels['index'] = 'indekss:';
$labels['indexlast'] = 'atpakaļ';
$labels['spamtestequals'] = 'ir vienāds ar';
$labels['spamtestnotequals'] = 'nav vienāds ar';
$labels['vacation.reply'] = 'Atbildes e-pasts';
$labels['vacation.advanced'] = 'Paplašinātie iestatījumi';
$labels['vacation.from'] = 'Atbildes sūtītāja e-pasta adrese';
$labels['vacation.subject'] = 'Tēma';
$labels['vacation.body'] = 'Saturs';
$labels['vacation.status'] = 'Statuss';
$labels['vacation.on'] = 'Ieslēgts';
$labels['vacation.off'] = 'Izslēgts';
$labels['vacation.addresses'] = 'Manas e-pasta adreses';
$labels['vacation.interval'] = 'Atbildēšanas intervāls';
$labels['vacation.saving'] = 'Dati tiek saglabāti...';
$labels['vacation.action'] = 'Darbības, kuras jāveic, kad tiek atsūtīta jauna vēstule';
$labels['vacation.keep'] = 'Saglabāt';
$labels['vacation.discard'] = 'Nesaglabāt';
$labels['vacation.redirect'] = 'Pārsūtīt uz';
$labels['vacation.copy'] = 'Sūtīt kopiju uz';
$labels['forward'] = 'Pārsūtīšana';
$labels['forward.redirect'] = 'Pārsūtīt uz';
$labels['forward.copy'] = 'Sūtīt kopiju uz';
$labels['forward.on'] = 'Ieslēgts';
$labels['forward.off'] = 'Izslēgts';
$labels['forward.status'] = 'Statuss:';
$labels['forward.action'] = 'Ienākot e-pastam, izpildīt sekojošo darbību:';
$labels['forward.saving'] = 'Dati tiek saglabāti...';
$labels['filladdresses'] = 'Aizpildīt ar visām manām e-pasta adresēm';
$labels['arialabelfiltersetactions'] = 'Filtra kopas darbības';
$labels['arialabelfilteractions'] = 'Filtra darbības';
$labels['arialabelfilterform'] = 'Filtra iestatījumi';
$labels['ariasummaryfilterslist'] = 'Filtru saraksts';
$labels['ariasummaryfiltersetslist'] = 'Filtru kopu saraksts';
$labels['filterstitle'] = 'Rediģēt ienākošo e-pastu filtrus';
$labels['vacationtitle'] = 'Rediģēt "neesmu ofisā" nosacījumu';
$labels['forwardtitle'] = 'Rediģēt e-pastu pārsūtīšanas noteikumus';
$labels['message'] = 'Vēstule';
$labels['duplicate'] = 'ir dublikāts';
$labels['notduplicate'] = 'nav dublikāts';
$labels['duplicate.handle'] = 'atslēga:';
$labels['duplicate.header'] = 'galvene:';
$labels['duplicate.uniqueid'] = 'identifikators:';
$labels['duplicate.seconds'] = 'pārtraukums (sekundes):';
$labels['duplicate.last'] = 'relatīvs pēdējai izpildei';
$messages['filterunknownerror'] = 'Nezināma servera kļūda.';
$messages['filterconnerror'] = 'Neizdevās pieslēgties ManageSieve serverim.';
$messages['filterdeleteerror'] = 'Neizdevās izdzēst filtru - atgadījās servera iekšējā kļūda.';
$messages['filterdeleted'] = 'Filtrs veiksmīgi izdzēsts.';
$messages['filtersaved'] = 'Filtrs veiksmīgi saglabāts.';
$messages['filtersaveerror'] = 'Neizdevās saglabāt filtru - atgadījās servera iekšējā kļūda.';
$messages['filterformerror'] = 'Filtra forma ir kļūdaina.';
$messages['filterdeleteconfirm'] = 'Vai Jūs tiešām vēlaties dzēst atzīmēto filtru?';
$messages['ruledeleteconfirm'] = 'Vai Jūs tiešām vēlaties dzēst atzīmēto nosacījumu?';
$messages['actiondeleteconfirm'] = 'Vai Jūs tiešām vēlaties dzēst atzīmēto darbību?';
$messages['forbiddenchars'] = 'Lauks satur aizliegtus simbolus.';
$messages['cannotbeempty'] = 'Lauks nedrīkst būt tukšs.';
$messages['ruleexist'] = 'Filtrs ar tādu nosaukumu jau pastāv.';
$messages['activateerror'] = 'Nav iespējams ieslēgt izvēlēto(s) filtru(s) - atgadījās servera iekšējā kļūda.';
$messages['deactivateerror'] = 'Nav iespējams atslēgt izvēlēto(s) filtru(s) - atgadījās servera iekšējā kļūda.';
$messages['deactivated'] = 'Filtrs(i) veiksmīgi atslēgts(i).';
$messages['activated'] = 'Filtrs(i) veiksmīgi ieslēgts(i).';
$messages['moved'] = 'Filtrs veiksmīgi pārvietots.';
$messages['moveerror'] = 'Nav iespējams pārvietot izvēlēto filtru - atgadījās servera iekšējā kļūda.';
$messages['nametoolong'] = 'Neizdevās izveidot filtru kopu. Pārāk garš kopas nosaukums.';
$messages['namereserved'] = 'Rezervētais nosaukums.';
$messages['setexist'] = 'Kopa jau eksistē.';
$messages['nodata'] = 'Ir jābūt atzīmētai vismaz vienai pozīcijai!';
$messages['invaliddateformat'] = 'Nederīgs datums vai datuma formāts';
$messages['saveerror'] = 'Nav iespējams saglabāt datus. Servera kļūda.';
$messages['forwardsaved'] = 'Pārsūtīšanas dati veiksmīgi saglabāti.';
$messages['emptyvacationbody'] = 'Brīvdienu e-pastam obligāti jānorāda vēstules teksts!';
$messages['duplicate.conflict.err'] = 'Gan galvenes, gan unikālais identifikators nav atļauts.';
$messages['disabledaction'] = 'Darbība nav atļauta!';
PKyc�\�r���9�9"managesieve/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtre';
$labels['managefilters'] = 'Správa filtrov prichádzajúcej pošty';
$labels['filtername'] = 'Názov filtra';
$labels['newfilter'] = 'Nový filter';
$labels['filteradd'] = 'Pridať filter';
$labels['filterdel'] = 'Vymazať filter';
$labels['rules'] = 'Pravidlá';
$labels['actions'] = 'Akcie';
$labels['scope'] = 'Rozsah';
$labels['moveup'] = 'Presunúť nahor';
$labels['movedown'] = 'Presunúť nadol';
$labels['filterallof'] = 'vyhovujúca všetkým z nasledujúcich pravidiel';
$labels['filteranyof'] = 'vyhovujúca ľubovoľnému z nasledujúcich pravidiel';
$labels['filterany'] = 'všetky správy';
$labels['filtercontains'] = 'obsahuje';
$labels['filternotcontains'] = 'neobsahuje';
$labels['filteris'] = 'sa rovná';
$labels['filterisnot'] = 'sa nerovná';
$labels['filterexists'] = 'existuje';
$labels['filternotexists'] = 'neexistuje';
$labels['filtermatches'] = 'vyhovuje výrazu';
$labels['filternotmatches'] = 'nevyhovuje výrazu';
$labels['filterregex'] = 'vyhovuje regulárnemu výrazu';
$labels['filternotregex'] = 'nevyhovuje regulárnemu výrazu';
$labels['filterunder'] = 'pod';
$labels['filterover'] = 'nad';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Časť MIME:';
$labels['mime-message'] = 'správa';
$labels['mime-anychild'] = 'akékoľvek';
$labels['mime-type'] = 'typ';
$labels['mime-subtype'] = 'pod-typ';
$labels['mime-contenttype'] = 'typ obsahu';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Pridať pravidlo';
$labels['delrule'] = 'Vymazať pravidlo';
$labels['messagemoveto'] = 'Presunúť správu do';
$labels['messageredirect'] = 'Presmerovať správu na';
$labels['messagecopyto'] = 'Kopírovať správu do';
$labels['messagesendcopy'] = 'Poslať kópiu správy na adresu';
$labels['messagereply'] = 'Odpovedať správou';
$labels['messagedelete'] = 'Vymazať správu';
$labels['messagediscard'] = 'Vymazať a poslať správu na';
$labels['messagekeep'] = 'Ponechať správu v Doručenej pošte';
$labels['messagesrules'] = 'Pre prichádzajúcu poštu:';
$labels['messagesactions'] = '...vykonať tieto akcie:';
$labels['add'] = 'Pridať';
$labels['del'] = 'Vymazať';
$labels['sender'] = 'Odosielateľ';
$labels['recipient'] = 'Príjemca';
$labels['vacationaddr'] = 'Moje e-mailové adresy:';
$labels['vacationdays'] = 'Ako často odosielať správy (v dňoch):';
$labels['vacationinterval'] = 'Ako často odosielať správy:';
$labels['vacationreason'] = 'Telo správy (dôvod neprítomnosti):';
$labels['vacationfrom'] = 'Adresa odosielateľa pre odpoveď:';
$labels['vacationsubject'] = 'Predmet správy:';
$labels['days'] = 'dní';
$labels['seconds'] = 'sekúnd';
$labels['rulestop'] = 'Koniec pravidiel';
$labels['enable'] = 'Zapnúť/vypnúť';
$labels['filterset'] = 'Súprava filtrov';
$labels['filtersets'] = 'Súpravy filtrov';
$labels['filtersetadd'] = 'Pridať súpravu filtrov';
$labels['filtersetdel'] = 'Vymazať súpravu filtrov';
$labels['filtersetact'] = 'Aktivovať aktuálnu súpravu filtrov';
$labels['filtersetdeact'] = 'Deaktivovať aktuálnu súpravu filtrov';
$labels['filterseteditraw'] = 'Upraviť súpravu filtrov';
$labels['filtersetswitch'] = 'Zapnúť/vypnúť súpravu filtrov';
$labels['filterdef'] = 'Definícia filtra';
$labels['filtersetname'] = 'Názov súpravy filtrov';
$labels['newfilterset'] = 'Nová súprava filtrov';
$labels['active'] = 'aktívna';
$labels['none'] = 'žiadne';
$labels['fromset'] = 'zo súpravy';
$labels['fromfile'] = 'zo súboru';
$labels['filterdisabled'] = 'Filter vypnutý';
$labels['filterenabled'] = 'Filter zapnutý';
$labels['countisgreaterthan'] = 'počet je väčší ako';
$labels['countisgreaterthanequal'] = 'počet je väčší alebo rovný ako';
$labels['countislessthan'] = 'počet je menší ako';
$labels['countislessthanequal'] = 'počet je menší alebo rovný ako';
$labels['countequals'] = 'počet je rovný';
$labels['countnotequals'] = 'počet sa nerovná';
$labels['valueisgreaterthan'] = 'hodnota je väčšia ako';
$labels['valueisgreaterthanequal'] = 'hodnota je väčšia alebo rovná ako';
$labels['valueislessthan'] = 'hodnota je menšia ako';
$labels['valueislessthanequal'] = 'hodnota je menšia alebo rovná ako';
$labels['valueequals'] = 'hodnota je rovná ako';
$labels['valuenotequals'] = 'hodnota sa nerovná';
$labels['setflags'] = 'Nastaviť príznaky správy';
$labels['addflags'] = 'Pridať príznaky správy';
$labels['removeflags'] = 'Odstrániť príznaky zo správy';
$labels['flagread'] = 'Prečítané';
$labels['flagdeleted'] = 'Vymazané';
$labels['flaganswered'] = 'Odpovedané';
$labels['flagflagged'] = 'Označené príznakom';
$labels['flagdraft'] = 'Koncept';
$labels['addheader'] = 'Pridať hlavičku do správy';
$labels['deleteheader'] = 'Odstrániť hlavičku zo správy';
$labels['headername'] = 'Názov hlavičky';
$labels['headervalue'] = 'Hodnota hlavičky';
$labels['headerpos'] = 'Pozícia hlavičky';
$labels['headeratstart'] = 'na začiatku';
$labels['headeratend'] = 'na konci';
$labels['headeroccurrence'] = 'Výskyt/pozícia hlavičky';
$labels['headerfromstart'] = 'od začiatku';
$labels['headerfromend'] = 'od konca';
$labels['headerpatterns'] = 'Vzory pre hodnotu hlavičky';
$labels['headermatchtype'] = 'typ zhody:';
$labels['setvariable'] = 'Nastaviť premennú';
$labels['setvarname'] = 'Názov premennej:';
$labels['setvarvalue'] = 'Hodnota premennej:';
$labels['setvarmodifiers'] = 'Modifikátory:';
$labels['varlower'] = 'malé písmená';
$labels['varupper'] = 'VEĽKÉ PÍSMENÁ';
$labels['varlowerfirst'] = 'prvé písmeno malé';
$labels['varupperfirst'] = 'prvé písmeno veľké';
$labels['varquotewildcard'] = 'k špeciálnym znakom pridať úvodzovky';
$labels['varlength'] = 'dĺžka';
$labels['varencodeurl'] = 'percentá - kódovane (pre adresy URL)';
$labels['notify'] = 'Odoslať oznámenie';
$labels['notifytarget'] = 'Cieľ notifikácie:';
$labels['notifymessage'] = 'Notifikačná správa (voliteľne):';
$labels['notifyoptions'] = 'Nastavenia notifikácie (voliteľné):';
$labels['notifyfrom'] = 'Odosielateľ notifikácie (voliteľne):';
$labels['notifyimportance'] = 'Priorita:';
$labels['notifyimportancelow'] = 'nízka';
$labels['notifyimportancenormal'] = 'normálna';
$labels['notifyimportancehigh'] = 'vysoká';
$labels['notifymethodmailto'] = 'E-mail';
$labels['notifymethodtel'] = 'Telefón';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Vytvoriť filter';
$labels['usedata'] = 'Použiť tieto údaje vo filtri:';
$labels['nextstep'] = 'Ďalší krok';
$labels['...'] = '...';
$labels['string'] = 'Reťazec';
$labels['currdate'] = 'Aktuálny dátum';
$labels['datetest'] = 'Dátum';
$labels['dateheader'] = 'záhlavie:';
$labels['year'] = 'rok';
$labels['month'] = 'mesiac';
$labels['day'] = 'deň';
$labels['date'] = 'dátum (rrrr-mm-dd)';
$labels['julian'] = 'dátum (podľa Juliánskeho kalendára)';
$labels['hour'] = 'hod.';
$labels['minute'] = 'min.';
$labels['second'] = 'sek.';
$labels['time'] = 'čas (hh:mm:ss)';
$labels['iso8601'] = 'dátum (ISO8601)';
$labels['std11'] = 'dátum (RFC2822)';
$labels['zone'] = 'časové pásmo';
$labels['weekday'] = 'deň v týždni (0-6)';
$labels['advancedopts'] = 'Rozšírené nastavenia';
$labels['body'] = 'Telo';
$labels['address'] = 'adresa';
$labels['envelope'] = 'obálka';
$labels['modifier'] = 'modifikátor:';
$labels['text'] = 'text';
$labels['undecoded'] = 'nedekódované (raw)';
$labels['contenttype'] = 'typ obsahu';
$labels['modtype'] = 'typ:';
$labels['allparts'] = 'všetko';
$labels['domain'] = 'doména';
$labels['localpart'] = 'lokálna časť';
$labels['user'] = 'používateľ';
$labels['detail'] = 'detail';
$labels['comparator'] = 'porovnávač:';
$labels['default'] = 'predvolené';
$labels['octet'] = 'striktný (osmičkový)';
$labels['asciicasemap'] = 'nerozlišuje veľké a malé písmená (ascii tabuľka znakov)';
$labels['asciinumeric'] = 'numerické (ascii čísla)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'dozadu';
$labels['spamtest'] = 'Úroveň pre nevyžiadanú poštu';
$labels['spamtestisgreaterthan'] = 'je viac ako';
$labels['spamtestisgreaterthanequal'] = 'je viac alebo sa rovná ako';
$labels['spamtestislessthan'] = 'je menej ako';
$labels['spamtestislessthanequal'] = 'je menej alebo sa rovná ako';
$labels['spamtestequals'] = 'sa rovná';
$labels['spamtestnotequals'] = 'sa nerovná';
$labels['spamtestisunknown'] = 'nie je známa';
$labels['vacation'] = 'Mimo kancelárie';
$labels['vacation.reply'] = 'Odpoveď na správu';
$labels['vacation.advanced'] = 'Pokročilé nastavenia';
$labels['vacation.from'] = 'Adresa odosielateľa pre odpoveď';
$labels['vacation.subject'] = 'Predmet';
$labels['vacation.body'] = 'Telo';
$labels['vacation.start'] = 'Čas začiatku';
$labels['vacation.end'] = 'Čas ukončenia';
$labels['vacation.status'] = 'Stav';
$labels['vacation.on'] = 'Zap.';
$labels['vacation.off'] = 'Vyp.';
$labels['vacation.addresses'] = 'Moje e-mailové adresy';
$labels['vacation.interval'] = 'Interval odpovedania';
$labels['vacation.after'] = 'Aplikovať pravidlo "mimo kancelárie" po';
$labels['vacation.saving'] = 'Ukladanie údajov...';
$labels['vacation.action'] = 'Akcia pre prichádzajúcu správu';
$labels['vacation.keep'] = 'Zachovať';
$labels['vacation.discard'] = 'Vyhodiť do koša';
$labels['vacation.redirect'] = 'Presmerovať na';
$labels['vacation.copy'] = 'Poslať kópiu na';
$labels['forward'] = 'Preposlanie';
$labels['forward.redirect'] = 'Presmerovať na';
$labels['forward.copy'] = 'Poslať kópiu na';
$labels['forward.on'] = 'Zap.';
$labels['forward.off'] = 'Vyp.';
$labels['forward.status'] = 'Stav:';
$labels['forward.action'] = 'Pre prichádzajúce e-maily vykonať nasledujúcu akciu:';
$labels['forward.saving'] = 'Ukladanie údajov...';
$labels['filladdresses'] = 'Vyplniť všetko mojimi adresami';
$labels['arialabelfiltersetactions'] = 'Akcie zo súpravy filtrov';
$labels['arialabelfilteractions'] = 'Akcie filtra';
$labels['arialabelfilterform'] = 'Nastavenia filtra';
$labels['ariasummaryfilterslist'] = 'Zoznam filtrov';
$labels['ariasummaryfiltersetslist'] = 'Zoznam súprav s filtrami';
$labels['filterstitle'] = 'Upraviť filtre prichádzajúcich e-mailov';
$labels['vacationtitle'] = 'Upraviť pravidlo pre čas mimo kancelárie';
$labels['forwardtitle'] = 'Upraviť pravidlo preposielania správy';
$labels['message'] = 'Správa';
$labels['duplicate'] = 'je duplikátom';
$labels['notduplicate'] = 'nie je duplikátom';
$labels['duplicate.handle'] = 'postup:';
$labels['duplicate.header'] = 'záhlavie:';
$labels['duplicate.uniqueid'] = 'identifikátor:';
$labels['duplicate.seconds'] = 'časový limit (sek.):';
$labels['duplicate.last'] = 'relatívne voči poslednému spusteniu';
$messages['filterunknownerror'] = 'Neznáma chyba servera.';
$messages['filterconnerror'] = 'Nepodarilo sa pripojiť k serveru.';
$messages['filterdeleteerror'] = 'Nemožno vymazať filter. Nastala chyba servera.';
$messages['filterdeleted'] = 'Filter bol úspešne vymazaný.';
$messages['filtersaved'] = 'Filter bol úspešne uložený.';
$messages['filtersaveerror'] = 'Nemožno uložiť filter. Nastala chyba servera.';
$messages['filterformerror'] = 'Formulár pre filtrovanie obsahuje chyby.';
$messages['filterdeleteconfirm'] = 'Naozaj chcete vymazať vybraný filter?';
$messages['ruledeleteconfirm'] = 'Naozaj chcete vymazať vybrané pravidlo?';
$messages['actiondeleteconfirm'] = 'Naozaj chcete vymazať vybranú akciu?';
$messages['forbiddenchars'] = 'Pole obsahuje nepovolené znaky.';
$messages['cannotbeempty'] = 'Pole nemôže byť prázdne.';
$messages['ruleexist'] = 'Filter so zadaným názvom už existuje.';
$messages['setactivateerror'] = 'Nemožno aktivovať vybranú súpravu filtrov. Nastala chyba servera.';
$messages['setdeactivateerror'] = 'Nemožno deaktivovať vybranú súpravu filtrov. Nastala chyba servera.';
$messages['setdeleteerror'] = 'Nemožno vymazať vybranú súpravu filtrov. Nastala chyba servera.';
$messages['setactivated'] = 'Súprava filtrov bola úspešne aktivovaná.';
$messages['setdeactivated'] = 'Súprava filtrov bola úspešne deaktivovaná.';
$messages['setdeleted'] = 'Súprava filtrov bola úspešne vymazaná.';
$messages['setupdated'] = 'Súprava filtrov bola úspešne aktualizovaná.';
$messages['setdeleteconfirm'] = 'Naozaj chcete vymazať vybranú súpravu filtrov?';
$messages['setcreateerror'] = 'Nemožno vytvoriť súpravu filtrov. Nastala chyba servera.';
$messages['setcreated'] = 'Súprava filtrov bola úspešne vytvorená.';
$messages['activateerror'] = 'Nemožno aktivovať vybraný filter (vybrané filtre). Nastala chyba servera.';
$messages['deactivateerror'] = 'Nemožno vypnúť vybraný filter (vybrané filtre). Nastala chyba servera.';
$messages['deactivated'] = 'Filtre boli úspešne vypnuté.';
$messages['activated'] = 'Filtre boli úspešne zapnuté.';
$messages['moved'] = 'Filter bol úspešne presunutý.';
$messages['moveerror'] = 'Nemožno presunúť vybraný filter. Nastala chyba servera.';
$messages['nametoolong'] = 'Názov je príliš dlhý.';
$messages['namereserved'] = 'Rezervovaný názov.';
$messages['setexist'] = 'Súprava už existuje.';
$messages['nodata'] = 'Aspoň jedna pozícia musí byť zvolená!';
$messages['invaliddateformat'] = 'Neplatný formát dátumu alebo časti dátumu';
$messages['saveerror'] = 'Údaje nemožno uložiť. Nastala chyba servera.';
$messages['vacationsaved'] = 'Údaje pre čas mimo kancelárie boli úspešne uložené.';
$messages['forwardsaved'] = 'Údaje o preposlaní boli úspešne uložené.';
$messages['emptyvacationbody'] = 'Musíte zadať telo správy, zobrazovanej v čase neprítomnosti!';
$messages['duplicate.conflict.err'] = 'Hlavička a aj unikátny identifikátor nie sú povolené.';
$messages['disabledaction'] = 'Akcia nie je povolená.';
$messages['lastindexempty'] = 'Index sa vyžaduje pri počítaní od konca';
$messages['noflagset'] = 'Musí byť vybraný aspoň jeden príznak.';
PKyc�\r��Q7Q7"managesieve/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtry';
$labels['managefilters'] = 'Nastavení filtrů';
$labels['filtername'] = 'Název filtru';
$labels['newfilter'] = 'Nový filtr';
$labels['filteradd'] = 'Přidej filtr';
$labels['filterdel'] = 'Smaž filtr';
$labels['rules'] = 'Pravidla';
$labels['actions'] = 'Akce';
$labels['scope'] = 'Rozsah';
$labels['moveup'] = 'Posunout nahoru';
$labels['movedown'] = 'Posunout dolů';
$labels['filterallof'] = 'Odpovídají všechna pravidla';
$labels['filteranyof'] = 'Odpovídá kterékoliv pravidlo';
$labels['filterany'] = 'Všechny zprávy';
$labels['filtercontains'] = 'obsahuje';
$labels['filternotcontains'] = 'neobsahuje';
$labels['filteris'] = 'odpovídá';
$labels['filterisnot'] = 'neodpovídá';
$labels['filterexists'] = 'existuje';
$labels['filternotexists'] = 'neexistuje';
$labels['filtermatches'] = 'odpovídá výrazu';
$labels['filternotmatches'] = 'neodpovídá výrazu';
$labels['filterregex'] = 'odpovídá regulárnímu výrazu';
$labels['filternotregex'] = 'neodpovídá regulárnímu výrazu';
$labels['filterunder'] = 'pod';
$labels['filterover'] = 'nad';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Část MIME:';
$labels['mime-message'] = 'zpráva';
$labels['mime-anychild'] = 'jakákoli';
$labels['mime-type'] = 'typ';
$labels['mime-subtype'] = 'podtyp';
$labels['mime-contenttype'] = 'typ obsahu';
$labels['mime-param'] = 'parametr';
$labels['addrule'] = 'Přidej pravidlo';
$labels['delrule'] = 'Smaž pravidlo';
$labels['messagemoveto'] = 'Přesuň zprávu do';
$labels['messageredirect'] = 'Přeposlat zprávu na';
$labels['messagecopyto'] = 'Zkopírovat zprávu do';
$labels['messagesendcopy'] = 'Odeslat kopii zprávy na';
$labels['messagereply'] = 'Odpovědět se zprávou';
$labels['messagedelete'] = 'Smazat zprávu';
$labels['messagediscard'] = 'Zahodit a informovat odesilatele';
$labels['messagekeep'] = 'Ponechat zprávu v doručené poště';
$labels['messagesrules'] = 'Pravidla pro příchozí zprávu:';
$labels['messagesactions'] = '...vykonej následující akce:';
$labels['add'] = 'Přidej';
$labels['del'] = 'Smaž';
$labels['sender'] = 'Odesílatel';
$labels['recipient'] = 'Příjemce';
$labels['vacationaddr'] = 'Mé e-mailové adresy:';
$labels['vacationdays'] = 'Počet dnů mezi automatickými odpověďmi:';
$labels['vacationinterval'] = 'Prodleva mezi automatickými odpověďmi:';
$labels['vacationreason'] = 'Zpráva (Důvod nepřítomnosti):';
$labels['vacationfrom'] = 'Adresa odesilatele odpovědi:';
$labels['vacationsubject'] = 'Předmět zprávy:';
$labels['days'] = 'dnů';
$labels['seconds'] = 'sekund';
$labels['rulestop'] = 'Zastavit pravidla';
$labels['enable'] = 'Zapnout/Vypnout';
$labels['filterset'] = 'Sada filtrů';
$labels['filtersets'] = 'Sady filtrů';
$labels['filtersetadd'] = 'Přidat sadu filtrů';
$labels['filtersetdel'] = 'Smazat sadu filtrů';
$labels['filtersetact'] = 'Aktivovat tuto sadu filtrů';
$labels['filtersetdeact'] = 'Vypnout tuto sadu filtrů';
$labels['filterseteditraw'] = 'Upravit sadu pravidel';
$labels['filtersetswitch'] = 'Zapnout/Vypnout sadu filtrů';
$labels['filterdef'] = 'Definice filtru';
$labels['filtersetname'] = 'Název sady filtrů';
$labels['newfilterset'] = 'Nová sada filtrů';
$labels['active'] = 'aktivní';
$labels['none'] = 'nic';
$labels['fromset'] = 'ze sady';
$labels['fromfile'] = 'ze souboru';
$labels['filterdisabled'] = 'Filtr neaktivní';
$labels['filterenabled'] = 'Filtr aktivní';
$labels['countisgreaterthan'] = 'počet je větší než';
$labels['countisgreaterthanequal'] = 'počet je větší nebo roven';
$labels['countislessthan'] = 'počet je nižší než';
$labels['countislessthanequal'] = 'počet je nižší nebo roven';
$labels['countequals'] = 'počet je roven';
$labels['countnotequals'] = 'počet není roven';
$labels['valueisgreaterthan'] = 'hodnota je větší než';
$labels['valueisgreaterthanequal'] = 'hodnota je větší nebo stejná jako';
$labels['valueislessthan'] = 'hodnota je nižší než';
$labels['valueislessthanequal'] = 'hodnota je nižší nebo stejná jako';
$labels['valueequals'] = 'hodnota odpovídá';
$labels['valuenotequals'] = 'hodnota neodpovídá';
$labels['setflags'] = 'Nastavit příznaky u zprávy';
$labels['addflags'] = 'Přidat příznaky ke zprávě';
$labels['removeflags'] = 'Odstranit příznaky ze zprávy';
$labels['flagread'] = 'Přečteno';
$labels['flagdeleted'] = 'Smazáno';
$labels['flaganswered'] = 'Odpovězené';
$labels['flagflagged'] = 'Označeno';
$labels['flagdraft'] = 'Koncept';
$labels['addheader'] = 'Přidat hlavičku do zprávy';
$labels['deleteheader'] = 'Odebrat hlavičku ze zprávy';
$labels['headername'] = 'Název hlavičky';
$labels['headervalue'] = 'Hodnota hlavičky';
$labels['headerpos'] = 'Umístění hlavičky';
$labels['headeratstart'] = 'na začátku';
$labels['headeratend'] = 'na konci';
$labels['headeroccurrence'] = 'Výskyt/Umístění hlavičky';
$labels['headerfromstart'] = 'od začátku';
$labels['headerfromend'] = 'od konce';
$labels['headerpatterns'] = 'Vzory hodnot hlavičky';
$labels['headermatchtype'] = 'odpovídající typ:';
$labels['setvariable'] = 'Nastavit proměnnou';
$labels['setvarname'] = 'Název proměnné:';
$labels['setvarvalue'] = 'Hodnota proměnné:';
$labels['setvarmodifiers'] = 'Modifikátory:';
$labels['varlower'] = 'malá písmena';
$labels['varupper'] = 'velká písmena';
$labels['varlowerfirst'] = 'první písmeno malé';
$labels['varupperfirst'] = 'první písmeno velké';
$labels['varquotewildcard'] = 'uvodit speciální znaky uvozovkama';
$labels['varlength'] = 'délka';
$labels['notify'] = 'Odeslat oznámení';
$labels['notifytarget'] = 'Cíl oznámení:';
$labels['notifymessage'] = 'Zpráva oznámení (nepovinné):';
$labels['notifyoptions'] = 'Možnosti oznámení (nepovinné):';
$labels['notifyfrom'] = 'Odesílatel oznámení (nepovinné):';
$labels['notifyimportance'] = 'Důležitost:';
$labels['notifyimportancelow'] = 'nízká';
$labels['notifyimportancenormal'] = 'normální';
$labels['notifyimportancehigh'] = 'vysoká';
$labels['notifymethodmailto'] = 'E-mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Vytvořit filtr';
$labels['usedata'] = 'Použít následující údaje ve filtru:';
$labels['nextstep'] = 'Další krok';
$labels['...'] = '...';
$labels['string'] = 'Řetězec';
$labels['currdate'] = 'Aktuální datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'hlavička:';
$labels['year'] = 'rok';
$labels['month'] = 'měsíc';
$labels['day'] = 'den';
$labels['date'] = 'datum (rrrr-mm-dd)';
$labels['julian'] = 'datum (juliánské)';
$labels['hour'] = 'hodina';
$labels['minute'] = 'minuta';
$labels['second'] = 'sekunda';
$labels['time'] = 'čas (hh:mm:ss)';
$labels['iso8601'] = 'datum (ISO8601)';
$labels['std11'] = 'datum (RFC2822)';
$labels['zone'] = 'časová zóna';
$labels['weekday'] = 'všední den (0-6)';
$labels['advancedopts'] = 'Pokročilá nastavení';
$labels['body'] = 'Tělo';
$labels['address'] = 'adresa';
$labels['envelope'] = 'obálka';
$labels['modifier'] = 'měnič:';
$labels['text'] = 'text';
$labels['undecoded'] = 'nedekódované (surové)';
$labels['contenttype'] = 'typ obsahu';
$labels['modtype'] = 'typ:';
$labels['allparts'] = 'vše';
$labels['domain'] = 'doména';
$labels['localpart'] = 'místní část';
$labels['user'] = 'uživatel';
$labels['detail'] = 'detail';
$labels['comparator'] = 'porovnávač:';
$labels['default'] = 'výchozí';
$labels['octet'] = 'striktní (oktet)';
$labels['asciicasemap'] = 'nerozlišuje velikost písmen (ascii-casemap)';
$labels['asciinumeric'] = 'číslené (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'pozpátku';
$labels['spamtest'] = 'Úroveň nevyžádané pošty';
$labels['spamtestisgreaterthan'] = 'je větší než';
$labels['spamtestisgreaterthanequal'] = 'je větší nebo rovno';
$labels['spamtestislessthan'] = 'je menší než';
$labels['spamtestislessthanequal'] = 'je menší nebo rovno';
$labels['spamtestequals'] = 'odpovídá';
$labels['spamtestnotequals'] = 'neodpovídá';
$labels['spamtestisunknown'] = 'je neznámý';
$labels['vacation'] = 'Mimo-kancelář';
$labels['vacation.reply'] = 'Odpověd';
$labels['vacation.advanced'] = 'Pokročilá nastavení';
$labels['vacation.from'] = 'Adresa odesílatele odpovědi';
$labels['vacation.subject'] = 'Předmět';
$labels['vacation.body'] = 'Tělo';
$labels['vacation.start'] = 'Začátek';
$labels['vacation.end'] = 'Konec';
$labels['vacation.status'] = 'Stav';
$labels['vacation.on'] = 'Zapnuto';
$labels['vacation.off'] = 'Vypnuto';
$labels['vacation.addresses'] = 'Mé e-mailové adresy';
$labels['vacation.interval'] = 'Doba mezi odpověďmi';
$labels['vacation.after'] = 'Přidat pravidlo mimo-kancelář za';
$labels['vacation.saving'] = 'Ukládám data...';
$labels['vacation.action'] = 'Akce pro příchozí zprávu';
$labels['vacation.keep'] = 'Zachovat';
$labels['vacation.discard'] = 'Zahodit';
$labels['vacation.redirect'] = 'Přesměrovat na';
$labels['vacation.copy'] = 'Odeslat kopii zprávy na';
$labels['forward'] = 'Přeposílání';
$labels['forward.redirect'] = 'Přesměrovat na';
$labels['forward.copy'] = 'Odeslat kopii zprávy na';
$labels['forward.on'] = 'Zapnuto';
$labels['forward.off'] = 'Vypnuto';
$labels['forward.status'] = 'Stav:';
$labels['forward.action'] = 'Vykonej následující akci pro příchozí e-maily:';
$labels['forward.saving'] = 'Ukládám data...';
$labels['filladdresses'] = 'Vyplnit všemi mými adresami';
$labels['arialabelfiltersetactions'] = 'Nastavit akce filtru';
$labels['arialabelfilteractions'] = 'Akce filtru';
$labels['arialabelfilterform'] = 'Vlastnosti filtru';
$labels['ariasummaryfilterslist'] = 'Seznam filtrů';
$labels['ariasummaryfiltersetslist'] = 'Seznam sad filtrů';
$labels['filterstitle'] = 'Upravit filtry příchozích emailů';
$labels['vacationtitle'] = 'Upravit pravidlo mimo-kancelář';
$labels['forwardtitle'] = 'Upravit pravidlo pro přeposílání emailů';
$labels['message'] = 'Zpráva';
$labels['duplicate'] = 'je duplicitní';
$labels['notduplicate'] = 'není duplicitní';
$labels['duplicate.handle'] = 'popisovač:';
$labels['duplicate.header'] = 'hlavička:';
$labels['duplicate.uniqueid'] = 'Identifikátor:';
$labels['duplicate.seconds'] = 'prodleva (sekundy):';
$labels['duplicate.last'] = 'relativní k poslednímu vykonání';
$messages['filterunknownerror'] = 'Neznámá chyba serveru.';
$messages['filterconnerror'] = 'Nebylo možné se připojit k sieve serveru';
$messages['filterdeleteerror'] = 'Nebylo možné smazat filtr. Došlo k chybě serveru.';
$messages['filterdeleted'] = 'Filtr byl smazán.';
$messages['filtersaved'] = 'Filtr byl uložen.';
$messages['filtersaveerror'] = 'Nebylo možné uložit filtr. Došlo k chybě serveru.';
$messages['filterformerror'] = 'Formulář filtru obsahuje chyby.';
$messages['filterdeleteconfirm'] = 'Opravdu chcete smazat vybraný filtr?';
$messages['ruledeleteconfirm'] = 'Jste si jisti, že chcete smazat vybrané pravidlo?';
$messages['actiondeleteconfirm'] = 'Jste si jisti, že chcete smazat vybranou akci?';
$messages['forbiddenchars'] = 'Zakázané znaky v poli.';
$messages['cannotbeempty'] = 'Pole nemůže být prázdné.';
$messages['ruleexist'] = 'Filtr s uvedeným názvem již existuje.';
$messages['setactivateerror'] = 'Nelze zapnout vybranou sadu filtrů. Došlo k chybě serveru.';
$messages['setdeactivateerror'] = 'Nelze vypnout vybranou sadu filtrů. Došlo k chybě serveru.';
$messages['setdeleteerror'] = 'Nelze odstranit vybranou sadu filtrů. Došlo k chybě serveru.';
$messages['setactivated'] = 'Sada filtrů byla zapnuta.';
$messages['setdeactivated'] = 'Sada filtrů byla vypnuta.';
$messages['setdeleted'] = 'Sada filtrů byla odstraněna.';
$messages['setupdated'] = 'Sada filtrů byla upravena.';
$messages['setdeleteconfirm'] = 'Opravdu si přejete odebrat vybranou sadu filtrů?';
$messages['setcreateerror'] = 'Nelze vytvořit sadu filtrů. Došlo k chybě serveru.';
$messages['setcreated'] = 'Sada filtrů byla vytvořena.';
$messages['activateerror'] = 'Nelze zapnout vybrané filtry. Došlo k chybě serveru.';
$messages['deactivateerror'] = 'Nelze vypnout vybrané filtry. Došlo k chybě serveru.';
$messages['deactivated'] = 'Filtry vypnuty.';
$messages['activated'] = 'Filtry zapnuty.';
$messages['moved'] = 'Filtr byl přesunut.';
$messages['moveerror'] = 'Nelze přesunout vybraný filtr. Došlo k chybě serveru.';
$messages['nametoolong'] = 'Příliš dlouhý název.';
$messages['namereserved'] = 'Vyhrazený název.';
$messages['setexist'] = 'Sada již existuje.';
$messages['nodata'] = 'Musí být vybrána minimálně jedna pozice!';
$messages['invaliddateformat'] = 'Neplatné datum nebo část data';
$messages['saveerror'] = 'Nebylo možné uložit data. Došlo k chybě serveru.';
$messages['vacationsaved'] = 'Data mimo-kancelář byla uložena.';
$messages['forwardsaved'] = 'Data pro přeposlání byla uložena.';
$messages['emptyvacationbody'] = 'Tělo zprávy';
$messages['duplicate.conflict.err'] = 'Hlavička a jedinečný identifikátor zároveň nejsou povoleny.';
$messages['disabledaction'] = 'Akce není povolena';
$messages['lastindexempty'] = 'Při počítání od zadu je vyžadován index.';
$messages['noflagset'] = 'Alespoň jeden příznak musí být vybrán.';
PKyc�\T)��managesieve/localization/ti.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['del'] = 'ይጥፋእ';
$labels['sender'] = 'ልኣኺ(ት)';
$labels['flagread'] = 'ከንብብ';
$labels['datetest'] = 'ዕለት';
$labels['vacation.subject'] = 'ዋኒን';
$labels['vacation.keep'] = 'ይፅናሕ';
PKyc�\��;"managesieve/localization/ta_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'செய்தியை நீக்கு';
$labels['del'] = 'நீக்கு';
$labels['flagdeleted'] = 'நீக்கியது';
$labels['flagflagged'] = 'நட்சத்திரமிட்டது';
$labels['notifymethodmailto'] = 'மின்னஞ்சல்';
$labels['datetest'] = 'தேதி';
$labels['advancedopts'] = 'மேம்பட்ட விருப்பங்கள்';
$labels['vacation.subject'] = 'தலைப்பு';
PKyc�\43$ݎ�"managesieve/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filters';
$labels['managefilters'] = 'Beheer van inkomende e-mail filters';
$labels['filtername'] = 'Filter naam';
$labels['newfilter'] = 'Nieuw filter';
$labels['filteradd'] = 'Filter toevoegen';
$labels['filterdel'] = 'Filter verwijderen';
$labels['rules'] = 'Regels';
$labels['actions'] = 'Acties';
$labels['scope'] = 'Bereik';
$labels['moveup'] = 'Omhoog';
$labels['movedown'] = 'Omlaag';
$labels['filterallof'] = 'dat voldoet aan alle volgende regels';
$labels['filteranyof'] = 'voldoet aan eender welke van de volgende regels';
$labels['filterany'] = 'alle berichten';
$labels['filtercontains'] = 'bevat';
$labels['filternotcontains'] = 'bevat geen';
$labels['filteris'] = 'is gelijk aan';
$labels['filterisnot'] = 'is niet gelijk aan';
$labels['filterexists'] = 'bestaat';
$labels['filternotexists'] = 'bestaat niet';
$labels['filtermatches'] = 'komt overeen met de uitdrukking';
$labels['filternotmatches'] = 'komt niet overeen met de uitdrukking';
$labels['filterregex'] = 'komt overeen met de reguliere uitdrukking';
$labels['filternotregex'] = 'komt niet overeen met de reguliere uitdrukking';
$labels['filterunder'] = 'onder';
$labels['filterover'] = 'over';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME deel:';
$labels['mime-message'] = 'bericht';
$labels['mime-anychild'] = 'elke';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'subtype';
$labels['mime-contenttype'] = 'inhoud-type';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Voeg regel toe';
$labels['delrule'] = 'Regel verwijderen';
$labels['messagemoveto'] = 'Bericht verplaatsen naar';
$labels['messageredirect'] = 'Bericht omleiden naar';
$labels['messagecopyto'] = 'Kopieer bericht naar';
$labels['messagesendcopy'] = 'Stuur een kopie van het bericht naar';
$labels['messagereply'] = 'Antwoord met bericht';
$labels['messagedelete'] = 'Dit bericht verwijderen';
$labels['messagediscard'] = 'Gooi weg met bericht';
$labels['messagekeep'] = 'Bericht in Postvak In bewaren';
$labels['messagesrules'] = 'Voor inkomende mail:';
$labels['messagesactions'] = '...voer de volgende acties uit:';
$labels['add'] = 'Toevoegen';
$labels['del'] = 'Verwijderen';
$labels['sender'] = 'Afzender';
$labels['recipient'] = 'Ontvanger';
$labels['vacationaddr'] = 'Mijn e-mail adressen:';
$labels['vacationdays'] = 'Hoe vaak berichten versturen (in dagen):';
$labels['vacationinterval'] = 'Hoe vaak berichten versturen:';
$labels['vacationreason'] = 'Inhoud van het bericht (reden voor vakantie):';
$labels['vacationfrom'] = 'Antwoord afzender adres:';
$labels['vacationsubject'] = 'Onderwerp van het bericht:';
$labels['days'] = 'dagen';
$labels['seconds'] = 'seconden';
$labels['rulestop'] = 'Stop met het evalueren van regels';
$labels['enable'] = 'Inschakelen/uitschakelen';
$labels['filterset'] = 'Filterset';
$labels['filtersets'] = 'Filtersets';
$labels['filtersetadd'] = 'Filterset toevoegen';
$labels['filtersetdel'] = 'Filterset verwijderen';
$labels['filtersetact'] = 'Huidige filterset activeren';
$labels['filtersetdeact'] = 'Huidige filterset uitschakelen';
$labels['filterseteditraw'] = 'Filterset bewerken';
$labels['filtersetswitch'] = 'Inschakelen/uitschakelen filterset';
$labels['filterdef'] = 'Filter definitie';
$labels['flagread'] = 'Lees';
$labels['flagdeleted'] = 'Verwijderd';
$labels['flagflagged'] = 'Geselecteerd';
$labels['notifymethodmailto'] = 'E-mailadres';
$labels['notifymethodtel'] = 'Telefoonnummer';
$labels['datetest'] = 'Datum';
$labels['advancedopts'] = 'Geavanceerde opties';
$labels['spamtestequals'] = 'is gelijk aan';
$labels['spamtestnotequals'] = '<div></div>';
$labels['vacation.subject'] = 'Onderwerp';
$labels['vacation.keep'] = 'Bewaar';
PKyc�\�����"managesieve/localization/hi_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'रद्द करें';
$labels['del'] = 'मिटा';
$labels['notifymethodmailto'] = 'मेल';
$labels['datetest'] = 'तारीख';
$labels['vacation.subject'] = 'विशय';
PKzc�\�xZ�1717"managesieve/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Фільтри';
$labels['managefilters'] = 'Керування фільтрами вхідної пошти';
$labels['filtername'] = 'Назва фільтру';
$labels['newfilter'] = 'Новий фільтр';
$labels['filteradd'] = 'Додати фільтр';
$labels['filterdel'] = 'Вилучити фільтр';
$labels['scope'] = 'Масштаб';
$labels['moveup'] = 'Пересунути вгору';
$labels['movedown'] = 'Пересунути вниз';
$labels['filterallof'] = 'задовольняє усі наступні умови';
$labels['filteranyof'] = 'задовольняє будь-яку з умов';
$labels['filterany'] = 'всі повідомлення';
$labels['filtercontains'] = 'містить';
$labels['filternotcontains'] = 'не містить';
$labels['filteris'] = 'ідентичний до';
$labels['filterisnot'] = 'не ідентичний до';
$labels['filterexists'] = 'існує';
$labels['filternotexists'] = 'не існує';
$labels['filtermatches'] = 'відповідає виразу';
$labels['filternotmatches'] = 'не відповідає виразу';
$labels['filterregex'] = 'відповідає регулярному виразу';
$labels['filternotregex'] = 'не відповідає регулярному виразу';
$labels['filterunder'] = 'менше, ніж';
$labels['filterover'] = 'більше, ніж';
$labels['addrule'] = 'Додати правило';
$labels['delrule'] = 'Видалити правило';
$labels['messagemoveto'] = 'Пересунути повідомлення до';
$labels['messageredirect'] = 'Перенаправити повідомлення до';
$labels['messagecopyto'] = 'Копіювати листа до';
$labels['messagesendcopy'] = 'Надсилати копію листа на';
$labels['messagereply'] = 'Автовідповідач';
$labels['messagedelete'] = 'Видалити повідомлення';
$labels['messagediscard'] = 'Відхилити з повідомленням';
$labels['messagekeep'] = 'Залишити лист у Вхідних';
$labels['messagesrules'] = 'Для вхідної пошти: ';
$labels['messagesactions'] = '... виконати такі дії: ';
$labels['add'] = 'Додати';
$labels['del'] = 'Видалити';
$labels['sender'] = 'Відправник';
$labels['recipient'] = 'Отримувач';
$labels['vacationaddr'] = 'Мої електронні адреси:';
$labels['vacationdays'] = 'Як часто повторювати (у днях):';
$labels['vacationinterval'] = 'Як часто надсилати повідомлення: ';
$labels['vacationreason'] = 'Текст повідомлення:';
$labels['vacationfrom'] = 'Адреса відправника відповіді:';
$labels['vacationsubject'] = 'Тема листа:';
$labels['days'] = 'дні(в)';
$labels['seconds'] = 'секунд';
$labels['rulestop'] = 'Зупинити перевірку правил';
$labels['enable'] = 'Увімкнути/Вимкнути';
$labels['filtersets'] = 'Набори фільтрів';
$labels['filterdef'] = 'Параметри фільтру';
$labels['active'] = 'активний';
$labels['none'] = 'нічого';
$labels['fromset'] = 'з набору';
$labels['fromfile'] = 'з файлу';
$labels['filterdisabled'] = 'Фільтр вимкнено';
$labels['countisgreaterthan'] = 'лічильник більший за';
$labels['countisgreaterthanequal'] = 'лічильник більший або рівний ';
$labels['countislessthan'] = 'лічильник менший';
$labels['countislessthanequal'] = 'льчильник менший або рівний';
$labels['countequals'] = 'лічильник рівний';
$labels['countnotequals'] = 'лічильник рівний';
$labels['valueisgreaterthan'] = 'значення більше за';
$labels['valueisgreaterthanequal'] = 'значення більше або рівне';
$labels['valueislessthan'] = 'значення менше за';
$labels['valueislessthanequal'] = 'значення менше або рівне';
$labels['valueequals'] = 'значення рівне';
$labels['valuenotequals'] = 'значення не рівне';
$labels['setflags'] = 'Позначити повідомлення прапорцями';
$labels['addflags'] = 'Додати прапорці до повідомлення ';
$labels['removeflags'] = 'Вилучити прапорці з повідомлення ';
$labels['flagread'] = 'Прочитано';
$labels['flagdeleted'] = 'Вилучено';
$labels['flaganswered'] = 'З відповіддю';
$labels['flagflagged'] = 'Позначено';
$labels['flagdraft'] = 'Чернетка';
$labels['setvariable'] = 'Встановити змінну';
$labels['setvarname'] = 'Назва змінної:';
$labels['setvarvalue'] = 'Значення змінної:';
$labels['setvarmodifiers'] = 'Модифікатори:';
$labels['varlower'] = 'нижній регістр';
$labels['varupper'] = 'верхній регістр';
$labels['varlowerfirst'] = 'перший символ у нижньому регістрі';
$labels['varupperfirst'] = 'перший символ у верхньому регістрі';
$labels['varquotewildcard'] = 'цитувати спеціальні символи';
$labels['varlength'] = 'довжина';
$labels['notify'] = 'Надсилати сповіщення';
$labels['notifytarget'] = 'Ціль сповіщення: ';
$labels['notifymessage'] = 'Повідомлення сповіщення (необов\'язково): ';
$labels['notifyoptions'] = 'Опції сповіщення (необов\'язково): ';
$labels['notifyfrom'] = 'Відправник сповіщення (необов\'язково): ';
$labels['notifyimportance'] = 'Важливість: ';
$labels['notifyimportancelow'] = 'низька';
$labels['notifyimportancenormal'] = 'звичайна';
$labels['notifyimportancehigh'] = 'висока';
$labels['notifymethodmailto'] = 'Електронна адреса';
$labels['notifymethodtel'] = 'Телефон';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Створити фільтр';
$labels['usedata'] = 'Використати у фільтрі такі дані: ';
$labels['nextstep'] = 'Наступний крок';
$labels['...'] = '...';
$labels['string'] = 'Рядок';
$labels['currdate'] = 'Поточна дата';
$labels['datetest'] = 'Дата';
$labels['dateheader'] = 'шапка:';
$labels['year'] = 'рік';
$labels['month'] = 'місяць';
$labels['day'] = 'день';
$labels['date'] = 'дата (рррр-мм-дд)';
$labels['julian'] = 'дата (юліанський календар)';
$labels['hour'] = 'година';
$labels['minute'] = 'хвилина';
$labels['second'] = 'секунда';
$labels['time'] = 'час (гг:хх:сс)';
$labels['iso8601'] = 'дата (ISO8601)';
$labels['std11'] = 'дата (RFC2822)';
$labels['zone'] = 'часовий пояс';
$labels['weekday'] = 'робочий день (0-6)';
$labels['advancedopts'] = 'Розширені параметри';
$labels['body'] = 'Тіло';
$labels['address'] = 'адреса';
$labels['envelope'] = 'конверт';
$labels['modifier'] = 'модифікатор: ';
$labels['text'] = 'текст';
$labels['undecoded'] = 'недекодований (сирий)';
$labels['contenttype'] = 'тип вмісту';
$labels['modtype'] = 'тип:';
$labels['allparts'] = 'все';
$labels['domain'] = 'домен';
$labels['localpart'] = 'локальна частина';
$labels['user'] = 'користувач';
$labels['detail'] = 'деталь';
$labels['comparator'] = 'компаратор:';
$labels['default'] = 'типово';
$labels['octet'] = 'строгий (octet)';
$labels['asciicasemap'] = 'чутливий до регістру (ascii-casemap)';
$labels['asciinumeric'] = 'числовий (ascii-numeric)';
$labels['index'] = 'індекс:';
$labels['indexlast'] = 'назад';
$labels['spamtestequals'] = 'ідентичний до';
$labels['spamtestnotequals'] = 'не ідентичний до';
$labels['vacation.reply'] = 'Повідомлення-відповідь';
$labels['vacation.advanced'] = 'Розширені налаштування';
$labels['vacation.from'] = 'Адреса відправника відповіді';
$labels['vacation.subject'] = 'Тема';
$labels['vacation.body'] = 'Тіло ';
$labels['vacation.status'] = 'Статус';
$labels['vacation.on'] = 'Увімкнено';
$labels['vacation.off'] = 'Вимкнено';
$labels['vacation.addresses'] = 'Мої електронні адреси';
$labels['vacation.interval'] = 'Інтервал відповіді';
$labels['vacation.saving'] = 'Збереження даних…';
$labels['vacation.action'] = 'Дія щодо вхідного повідомлення';
$labels['vacation.keep'] = 'Залишити';
$labels['vacation.discard'] = 'Відкинути';
$labels['vacation.redirect'] = 'Перенаправити до ';
$labels['vacation.copy'] = 'Надсилати копію до ';
$labels['forward.redirect'] = 'Перенаправити до ';
$labels['forward.copy'] = 'Надсилати копію до ';
$labels['forward.on'] = 'Увімкнено';
$labels['forward.off'] = 'Вимкнено';
$labels['forward.saving'] = 'Збереження даних…';
$labels['filladdresses'] = 'Заповнити усіма моїми адресами ';
$labels['arialabelfiltersetactions'] = 'Дії набору фільтрів';
$labels['arialabelfilteractions'] = 'Дії фільтра';
$labels['arialabelfilterform'] = 'Властивості фільтра';
$labels['ariasummaryfilterslist'] = 'Список фільтрів';
$labels['ariasummaryfiltersetslist'] = 'Список наборів фільтрів';
$labels['filterstitle'] = 'Редагувати фільтри вхідної пошти';
$labels['vacationtitle'] = 'Редагувати правило поза-офісом';
$labels['message'] = 'Лист';
$labels['duplicate'] = 'є дублікатем';
$labels['notduplicate'] = 'не є дублікатем';
$labels['duplicate.handle'] = 'оброблювач:';
$labels['duplicate.header'] = 'заголовок:';
$labels['duplicate.uniqueid'] = 'ідентифікатор:';
$labels['duplicate.seconds'] = 'таймаут (секунд):';
$labels['duplicate.last'] = 'відносно остатнього виконання';
$messages['filterunknownerror'] = 'Невідома помилка сервера.';
$messages['filterconnerror'] = 'Неможливо з\'єднатися з сервером.';
$messages['filterdeleteerror'] = 'Неможливо вилучити фільтр. Сталася помилка сервера.';
$messages['filterdeleted'] = 'Фільтр успішно видалено.';
$messages['filtersaved'] = 'Фільтр успішно збережено.';
$messages['filtersaveerror'] = 'Неможливо зберегти фільтр. Сталася помилка сервера.';
$messages['filterformerror'] = 'Форма фільтрів містить помилки.';
$messages['filterdeleteconfirm'] = 'Ви дійсно хочете видалити обраний фільтр?';
$messages['ruledeleteconfirm'] = 'Ви дійсно хочете видалити обране правило?';
$messages['actiondeleteconfirm'] = 'Ви дійсно хочете видалити обрану дію?';
$messages['forbiddenchars'] = 'Введено заборонені символи.';
$messages['cannotbeempty'] = 'Поле не може бути пустим.';
$messages['ruleexist'] = 'Фільтр з такою назвою вже існує.';
$messages['activateerror'] = 'Неможливо увімкнути обраний фільтр (фільтри). Помилка сервера.';
$messages['deactivateerror'] = 'Неможливо вимкнути обраний фільтр (фільтр). Помилка сервера.';
$messages['deactivated'] = 'Фільтр(и) успішно вимкнено.';
$messages['activated'] = 'Фільтр(и) успішно увімкнено.';
$messages['moved'] = 'Фільтр успішно переміщено.';
$messages['moveerror'] = 'Неможливо перемістити обраний фільтр. Помилка сервера.';
$messages['nametoolong'] = 'Занадто довга назва.';
$messages['namereserved'] = 'Зарезервована назва.';
$messages['setexist'] = 'Набір уже існує.';
$messages['nodata'] = 'Має бути обрано хоча б один варіант!';
$messages['invaliddateformat'] = 'Недійсний формат дати або частини дати';
$messages['saveerror'] = 'Неможливо зберегти дані. Сталася помилка сервера.';
$messages['emptyvacationbody'] = 'Тіло повідомлення про відпустку обов\'язкове!';
$messages['duplicate.conflict.err'] = 'Заголовок та унікальний ідентифікатор не допускаються разом.';
PKzc�\�~�U��"managesieve/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['scope'] = 'Berik';
$labels['messagedelete'] = 'Berjocht fuortsmite';
$labels['add'] = 'Tafoegje';
$labels['del'] = 'Fuortsmite';
$labels['sender'] = 'Stjoerder';
$labels['none'] = 'gjin';
$labels['flagread'] = 'Lêze';
$labels['flagdeleted'] = 'Ferwidere';
$labels['flagflagged'] = 'Flagge';
$labels['notifyimportance'] = 'Prioriteit:';
$labels['notifymethodmailto'] = 'E-mail';
$labels['notifymethodtel'] = 'Telefoannûmer';
$labels['notifymethodsms'] = 'SMS';
$labels['...'] = '...';
$labels['datetest'] = 'Date';
$labels['year'] = 'jier';
$labels['month'] = 'moanne';
$labels['day'] = 'dei';
$labels['hour'] = 'oerre';
$labels['minute'] = 'minút';
$labels['second'] = 'sekonde';
$labels['time'] = 'tiid (oo:mm:ss)';
$labels['iso8601'] = 'datum (ISO8601)';
$labels['std11'] = 'datum (RFC2822)';
$labels['zone'] = 'tiidsône';
$labels['advancedopts'] = 'Avansearre opsjes';
$labels['body'] = 'Ynhâld';
$labels['text'] = 'tekst';
$labels['modtype'] = 'type:';
$labels['domain'] = 'domein';
$labels['user'] = 'brûker';
$labels['vacation.subject'] = 'Ûnderwerp';
$labels['vacation.body'] = 'Ynhâld';
$labels['vacation.status'] = 'Status';
$labels['vacation.keep'] = 'Hâlde';
PKzc�\$�w7w7"managesieve/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Verwalte eingehende Nachrichtenfilter';
$labels['filtername'] = 'Filtername';
$labels['newfilter'] = 'Neuer Filter';
$labels['filteradd'] = 'Filter hinzufügen';
$labels['filterdel'] = 'Filter löschen';
$labels['rules'] = 'Regeln';
$labels['actions'] = 'Aktionen';
$labels['scope'] = 'Suchbereich';
$labels['moveup'] = 'Nach oben';
$labels['movedown'] = 'Nach unten';
$labels['filterallof'] = 'UND (alle Regeln müssen zutreffen)';
$labels['filteranyof'] = 'ODER (eine der Regeln muss zutreffen';
$labels['filterany'] = 'Für alle Nachrichten';
$labels['filtercontains'] = 'enthält';
$labels['filternotcontains'] = 'enthält nicht';
$labels['filteris'] = 'ist gleich';
$labels['filterisnot'] = 'ist ungleich';
$labels['filterexists'] = 'ist vorhanden';
$labels['filternotexists'] = 'nicht vorhanden';
$labels['filtermatches'] = 'entspricht Ausdruck';
$labels['filternotmatches'] = 'entspricht nicht Ausdruck';
$labels['filterregex'] = 'trifft regulären Ausdruck';
$labels['filternotregex'] = 'entspricht regulärem Ausdruck';
$labels['filterunder'] = 'unter';
$labels['filterover'] = 'über';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME-Teil:';
$labels['mime-message'] = 'Nachricht';
$labels['mime-anychild'] = 'weiteres';
$labels['mime-type'] = 'Typ';
$labels['mime-subtype'] = 'Untertyp';
$labels['mime-contenttype'] = 'Inhaltstyp';
$labels['mime-param'] = 'Parameter';
$labels['addrule'] = 'Regel hinzufügen';
$labels['delrule'] = 'Regel löschen';
$labels['messagemoveto'] = 'Verschiebe Nachricht nach';
$labels['messageredirect'] = 'Leite Nachricht um nach';
$labels['messagecopyto'] = 'Kopiere Nachricht nach';
$labels['messagesendcopy'] = 'Sende Kopie an';
$labels['messagereply'] = 'Antworte mit Nachricht';
$labels['messagedelete'] = 'Nachricht löschen';
$labels['messagediscard'] = 'Discard with message';
$labels['messagekeep'] = 'Im Posteingang behalten';
$labels['messagesrules'] = 'Für eingehende Nachrichten:';
$labels['messagesactions'] = 'Führe folgende Aktionen aus:';
$labels['add'] = 'Hinzufügen';
$labels['del'] = 'Löschen';
$labels['sender'] = 'Absender';
$labels['recipient'] = 'Empfänger';
$labels['vacationaddr'] = 'Meine E-Mail-Adressen:';
$labels['vacationdays'] = 'Antwort wird erneut gesendet nach (in Tagen):';
$labels['vacationinterval'] = 'Wie oft senden:';
$labels['vacationreason'] = 'Inhalt der Nachricht (Abwesenheitsgrund):';
$labels['vacationfrom'] = 'Antwort E-Mail-Adresse:';
$labels['vacationsubject'] = 'Betreff';
$labels['days'] = 'Tage';
$labels['seconds'] = 'Sekunden';
$labels['rulestop'] = 'Regelauswertung anhalten';
$labels['enable'] = 'Aktivieren/Deaktivieren';
$labels['filterset'] = 'Filtersatz';
$labels['filtersets'] = 'Filtersätze';
$labels['filtersetadd'] = 'Filtersatz anlegen';
$labels['filtersetdel'] = 'Filtersatz löschen';
$labels['filtersetact'] = 'Aktuellen Filtersatz aktivieren';
$labels['filtersetdeact'] = 'Aktuellen Filtersatz deaktivieren';
$labels['filterseteditraw'] = 'Filtersatz bearbeiten';
$labels['filtersetswitch'] = 'Filtersatz aktivieren/deaktivieren';
$labels['filterdef'] = 'Filterdefinition';
$labels['filtersetname'] = 'Filtersatzname';
$labels['newfilterset'] = 'Neuer Filtersatz';
$labels['active'] = 'aktiv';
$labels['none'] = 'keine';
$labels['fromset'] = 'aus Filtersatz';
$labels['fromfile'] = 'aus Datei';
$labels['filterdisabled'] = 'Filter deaktiviert';
$labels['filterenabled'] = 'Filter aktiviert';
$labels['countisgreaterthan'] = 'Anzahl ist grösser als';
$labels['countisgreaterthanequal'] = 'Anzahl ist gleich oder grösser als';
$labels['countislessthan'] = 'Anzahl ist kleiner als';
$labels['countislessthanequal'] = 'Anzahl ist gleich oder kleiner als';
$labels['countequals'] = 'Anzahl ist gleich';
$labels['countnotequals'] = 'Anzahl ist ungleich';
$labels['valueisgreaterthan'] = 'Wert ist grösser als';
$labels['valueisgreaterthanequal'] = 'Wert ist gleich oder grösser als';
$labels['valueislessthan'] = 'Wert ist kleiner';
$labels['valueislessthanequal'] = 'Wert ist gleich oder kleiner als';
$labels['valueequals'] = 'Wert ist gleich';
$labels['valuenotequals'] = 'Wert ist ungleich';
$labels['setflags'] = 'Setze Markierungen';
$labels['addflags'] = 'Füge Markierung hinzu';
$labels['removeflags'] = 'Entferne Markierung';
$labels['flagread'] = 'gelesen';
$labels['flagdeleted'] = 'Gelöscht';
$labels['flaganswered'] = 'Beantwortet';
$labels['flagflagged'] = 'Markiert';
$labels['flagdraft'] = 'Entwurf';
$labels['addheader'] = 'Kopfzeile zur Nachricht hinzufügen';
$labels['deleteheader'] = 'Kopfzeile von Nachricht entfernen';
$labels['headername'] = 'Name der Kopfzeile';
$labels['headervalue'] = 'Wert der Kopfzeile';
$labels['headerpos'] = 'Position der Kopfzeile';
$labels['headeratstart'] = 'am Anfang';
$labels['headeratend'] = 'am Ende';
$labels['headeroccurrence'] = 'Auftreten / Position der Kopfzeile';
$labels['headerfromstart'] = 'vom Start';
$labels['headerfromend'] = 'vom Ende';
$labels['headerpatterns'] = 'Vorlage des Kopfzeilen-Werts';
$labels['headermatchtype'] = 'passender Typ:';
$labels['setvariable'] = 'Setze Variable';
$labels['setvarname'] = 'Variablenname:';
$labels['setvarvalue'] = 'Variablenwert:';
$labels['setvarmodifiers'] = 'Umwandler:';
$labels['varlower'] = 'Kleinschreibung';
$labels['varupper'] = 'Grossschreibung';
$labels['varlowerfirst'] = 'Erster Buchstabe klein';
$labels['varupperfirst'] = 'Erster Buchstabe gross';
$labels['varquotewildcard'] = 'Sonderzeichen auszeichnen';
$labels['varlength'] = 'Länge';
$labels['notify'] = 'Mitteilung senden';
$labels['notifytarget'] = 'Mitteilungsempfänger:';
$labels['notifymessage'] = 'Mitteilungstext (optional):';
$labels['notifyoptions'] = 'Mitteilungsoptionen (optional):';
$labels['notifyfrom'] = 'Absender (optional):';
$labels['notifyimportance'] = 'Wichtigkeit:';
$labels['notifyimportancelow'] = 'tief';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'hoch';
$labels['notifymethodmailto'] = 'E-Mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Filter erstellen';
$labels['usedata'] = 'Die folgenden Daten im Filter benutzen:';
$labels['nextstep'] = 'Nächster Schritt';
$labels['...'] = '...';
$labels['string'] = 'Zeichenkette';
$labels['currdate'] = 'Aktuelles Datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'Kopfzeile:';
$labels['year'] = 'Jahr';
$labels['month'] = 'Monat';
$labels['day'] = 'Tag';
$labels['date'] = 'Datum (JJJJ-MM-TT)';
$labels['julian'] = 'Datum (julianisch)';
$labels['hour'] = 'Stunde';
$labels['minute'] = 'Minute';
$labels['second'] = 'Sekunde';
$labels['time'] = 'Zeit (hh:mm:ss)';
$labels['iso8601'] = 'Datum (ISO-8601)';
$labels['std11'] = 'Datum (RFC 2822)';
$labels['zone'] = 'Zeitzone';
$labels['weekday'] = 'Wochentag (0-6)';
$labels['advancedopts'] = 'Erweiterte Optionen';
$labels['body'] = 'Inhalt';
$labels['address'] = 'Adresse';
$labels['envelope'] = 'Umschlag';
$labels['modifier'] = 'Wandler';
$labels['text'] = 'Text';
$labels['undecoded'] = 'kodiert (roh)';
$labels['contenttype'] = 'Inhaltstyp';
$labels['modtype'] = 'Typ:';
$labels['allparts'] = 'alle';
$labels['domain'] = 'Domain';
$labels['localpart'] = 'lokaler Teil';
$labels['user'] = 'Benutzer';
$labels['detail'] = 'Detail';
$labels['comparator'] = 'Komparator';
$labels['default'] = 'Vorgabewert';
$labels['octet'] = 'strikt (Oktet)';
$labels['asciicasemap'] = 'Gross-/Kleinschreibung ignorieren';
$labels['asciinumeric'] = 'numerisch (ascii-numeric)';
$labels['index'] = 'Index:';
$labels['indexlast'] = 'rückwärts';
$labels['spamtest'] = 'Spam-Niveau';
$labels['spamtestisgreaterthan'] = 'ist grösser als';
$labels['spamtestisgreaterthanequal'] = 'ist grösser oder gleich als';
$labels['spamtestislessthan'] = 'ist kleiner als';
$labels['spamtestislessthanequal'] = 'ist kleiner oder gleich als';
$labels['spamtestequals'] = 'ist gleich';
$labels['spamtestnotequals'] = 'ist ungleich';
$labels['spamtestisunknown'] = 'ist unbekannt';
$labels['vacation'] = 'Abwesenheit';
$labels['vacation.reply'] = 'Antworte mit Nachricht';
$labels['vacation.advanced'] = 'Erweiterte Einstellungen';
$labels['vacation.from'] = 'Antwort E-Mail-Adresse:';
$labels['vacation.subject'] = 'Betreff';
$labels['vacation.body'] = 'Inhalt';
$labels['vacation.start'] = 'Beginn der Abwesenheit';
$labels['vacation.end'] = 'Ende der Abwesenheit';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Ein';
$labels['vacation.off'] = 'Aus';
$labels['vacation.addresses'] = 'Meine E-Mail-Adressen';
$labels['vacation.interval'] = 'Antwort-Intervall';
$labels['vacation.after'] = 'Abwesenheitsregel einfügen nach';
$labels['vacation.saving'] = 'Speichere Daten...';
$labels['vacation.action'] = 'Aktion für eingehende Nachrichten';
$labels['vacation.keep'] = 'Behalten';
$labels['vacation.discard'] = 'Verwerfen';
$labels['vacation.redirect'] = 'Weiterleiten an';
$labels['vacation.copy'] = 'Kopie an';
$labels['forward'] = 'Weiterleitung';
$labels['forward.redirect'] = 'Weiterleiten an';
$labels['forward.copy'] = 'Kopie an';
$labels['forward.on'] = 'Ein';
$labels['forward.off'] = 'Aus';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Für eingehende Mails die folgende Aktion ausführen:';
$labels['forward.saving'] = 'Speichere Daten...';
$labels['filladdresses'] = 'Mit allen meiner Adressen ausfüllen';
$labels['arialabelfiltersetactions'] = 'Filtersatz-Aktionen';
$labels['arialabelfilteractions'] = 'Filteraktionen';
$labels['arialabelfilterform'] = 'Filtereigenschaften';
$labels['ariasummaryfilterslist'] = 'Filterliste';
$labels['ariasummaryfiltersetslist'] = 'Filtersatzliste';
$labels['filterstitle'] = 'Eingehende Nachrichtenfilter bearbeiten';
$labels['vacationtitle'] = 'Abwesenheitsregel bearbeiten';
$labels['forwardtitle'] = 'Mail-Weiterleitungsregel bearbeiten';
$labels['message'] = 'Nachricht';
$labels['duplicate'] = 'ist doppelt';
$labels['notduplicate'] = 'ist nicht doppelt';
$labels['duplicate.handle'] = 'verarbeiten:';
$labels['duplicate.header'] = 'Kopfzeile:';
$labels['duplicate.uniqueid'] = 'Bezeichner:';
$labels['duplicate.seconds'] = 'Zeitüberschreitung (Sekunden):';
$labels['duplicate.last'] = 'relativ zur letzten Ausführung';
$messages['filterunknownerror'] = 'Unbekannter Serverfehler';
$messages['filterconnerror'] = 'Kann nicht zum Sieve-Server verbinden';
$messages['filterdeleteerror'] = 'Serverfehler beim Löschen des Filters.';
$messages['filterdeleted'] = 'Filter erfolgreich gelöscht';
$messages['filtersaved'] = 'Filter gespeichert';
$messages['filtersaveerror'] = 'Serverfehler beim Speichern des Filters.';
$messages['filterformerror'] = 'Filter-Formular enthält Fehler.';
$messages['filterdeleteconfirm'] = 'Möchten Sie den Filter löschen ?';
$messages['ruledeleteconfirm'] = 'Sicher, dass Sie die Regel löschen wollen?';
$messages['actiondeleteconfirm'] = 'Sicher, dass Sie die ausgewaehlte Aktion löschen wollen?';
$messages['forbiddenchars'] = 'Unerlaubte Zeichen im Feld';
$messages['cannotbeempty'] = 'Feld darf nicht leer sein';
$messages['ruleexist'] = 'Ein Filter mit dem angegebenen Namen existiert bereits.';
$messages['setactivateerror'] = 'Kann ausgewählten Filtersatz nicht aktivieren. Serverfehler';
$messages['setdeactivateerror'] = 'Kann ausgewählten Filtersatz nicht deaktivieren. Serverfehler';
$messages['setdeleteerror'] = 'Kann ausgewählten Filtersatz nicht löschen. Serverfehler';
$messages['setactivated'] = 'Filtersatz erfolgreich aktiviert.';
$messages['setdeactivated'] = 'Filtersatz erfolgreich deaktiviert.';
$messages['setdeleted'] = 'Filtersatz erfolgreich gelöscht.';
$messages['setupdated'] = 'Filtersatz erfolgreich aktualisiert.';
$messages['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?';
$messages['setcreateerror'] = 'Der Filtersatz kann nicht erstellt werden. Serverfehler aufgetreten.';
$messages['setcreated'] = 'Filtersatz erfolgreich erstellt.';
$messages['activateerror'] = 'Serverfehler beim Aktivieren des/der gewählten Filter(s).';
$messages['deactivateerror'] = 'Serverfehler beim Deaktivieren des/der gewählten Filter(s).';
$messages['deactivated'] = 'Filter erfolgreich aktiviert.';
$messages['activated'] = 'Filter erfolgreich deaktiviert.';
$messages['moved'] = 'Filter erfolgreich verschoben.';
$messages['moveerror'] = 'Serverfehler beim Verschieben des gewählten Filters.';
$messages['nametoolong'] = 'Filtersatz kann nicht erstellt werden. Name zu lang.';
$messages['namereserved'] = 'Reservierter Name.';
$messages['setexist'] = 'Filtersatz existiert bereits.';
$messages['nodata'] = 'Mindestens eine Position muss ausgewählt werden!';
$messages['invaliddateformat'] = 'Ungültiges Datumsformat';
$messages['saveerror'] = 'Fehler beim Speichern (Serverfehler)';
$messages['vacationsaved'] = 'Abwesenheitsnotiz erfolgreich gespeichert.';
$messages['forwardsaved'] = 'Weiterleitungsdaten erfolgreich gespeichert.';
$messages['emptyvacationbody'] = 'Mitteilungstext ist erforderlich!';
$messages['duplicate.conflict.err'] = 'Kopfzeile und eindeutiger Bezeichner sind nicht zusammen erlaubt.';
$messages['disabledaction'] = 'Aktion nicht erlaubt.';
$messages['lastindexempty'] = 'Ein Index ist nötig, wenn vom Ende gezählt wird';
$messages['noflagset'] = 'Es muss mindestens ein Merker ausgewählt werden.';
PKzc�\w�I)I)#managesieve/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Administrar filtros de correos entrantes';
$labels['filtername'] = 'Nombre del filtro';
$labels['newfilter'] = 'Filtro nuevo';
$labels['filteradd'] = 'Agregar filtro';
$labels['filterdel'] = 'Eliminar filtro';
$labels['actions'] = 'Acciones';
$labels['scope'] = 'Alcance';
$labels['moveup'] = 'Mover hacia arriba';
$labels['movedown'] = 'Mover hacia abajo';
$labels['filterallof'] = 'coincide con todas las reglas siguientes';
$labels['filteranyof'] = 'coincide con cualquiera de las reglas siguientes';
$labels['filterany'] = 'todos los mensajes';
$labels['filtercontains'] = 'contiene';
$labels['filternotcontains'] = 'no contiene';
$labels['filteris'] = 'es igual a';
$labels['filterisnot'] = 'no es igual a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'no existe';
$labels['filtermatches'] = 'coincide con la expresión';
$labels['filternotmatches'] = 'no coincide con la expresión';
$labels['filterregex'] = 'coincide con la expresión regular';
$labels['filternotregex'] = 'no coincide con la expresión regular';
$labels['filterunder'] = 'bajo';
$labels['filterover'] = 'sobre';
$labels['addrule'] = 'Agregar regla';
$labels['delrule'] = 'Eliminar regla';
$labels['messagemoveto'] = 'Mover mensaje a';
$labels['messageredirect'] = 'Redireccionar mensaje a';
$labels['messagecopyto'] = 'Copiar mensaje a';
$labels['messagesendcopy'] = 'Enviar una copia del mensaje a ';
$labels['messagereply'] = 'Responder con el mensaje';
$labels['messagedelete'] = 'Eliminar mensaje';
$labels['messagediscard'] = 'Descartar el mensaje';
$labels['messagekeep'] = 'Mantener mensaje en la bandeja de entrada';
$labels['messagesrules'] = 'Para correo entrante:';
$labels['messagesactions'] = '... ejecutar las siguientes acciones:';
$labels['add'] = 'Agregar';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remitente';
$labels['recipient'] = 'Destinatario';
$labels['vacationdays'] = 'Cuan a menudo enviar mensajes (en días):';
$labels['vacationinterval'] = '¿Con qué frecuencia enviar mensajes?:';
$labels['vacationreason'] = 'Cuerpo del mensaje (motivo de las vacaciones):';
$labels['vacationsubject'] = 'Asunto del mensaje:';
$labels['days'] = 'días';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Detener la evaluación de reglas';
$labels['enable'] = 'Habilitar/Deshabilitar';
$labels['filtersets'] = 'Filtro acciona';
$labels['filterdef'] = 'Definición del filtro';
$labels['active'] = 'activo';
$labels['none'] = 'ninguno';
$labels['fromset'] = 'desde set';
$labels['fromfile'] = 'desde archivo';
$labels['filterdisabled'] = 'filtro deshabilitado';
$labels['countisgreaterthan'] = 'la cuenta es mayor a';
$labels['countisgreaterthanequal'] = 'la cuenta es mayor o igual a ';
$labels['countislessthan'] = 'la cuenta es menor que';
$labels['countislessthanequal'] = 'la cuenta es menor o igual que';
$labels['countequals'] = 'la cuenta es igual a ';
$labels['countnotequals'] = 'la cuenta no es menor a';
$labels['valueisgreaterthan'] = 'el valor es mayor que';
$labels['valueisgreaterthanequal'] = 'el balor es mayor o igual que ';
$labels['valueislessthan'] = 'el valor es menor que ';
$labels['valueislessthanequal'] = 'el valor es menor o igual que ';
$labels['valueequals'] = 'el valor es igual a ';
$labels['valuenotequals'] = 'el valor no es igual a';
$labels['setflags'] = 'Colocar etiquetas al mensaje';
$labels['addflags'] = 'Agrega etiquetas al mensaje';
$labels['removeflags'] = 'Eliminar etiquetas al mensaje';
$labels['flagread'] = 'Leido';
$labels['flagdeleted'] = 'Eliminado';
$labels['flaganswered'] = 'Respondido';
$labels['flagflagged'] = 'Etiquetado';
$labels['flagdraft'] = 'Borrador';
$labels['setvariable'] = 'Establecer variable';
$labels['setvarname'] = 'Nombre de la variable:';
$labels['setvarvalue'] = 'Valor de la variable:';
$labels['setvarmodifiers'] = 'Modificadores:';
$labels['varlower'] = 'minúscula';
$labels['varupper'] = 'mayúscula';
$labels['varlowerfirst'] = 'primer carácter en minúscula';
$labels['varupperfirst'] = 'primer carácter en mayúscula';
$labels['varquotewildcard'] = 'citar carácteres especiales';
$labels['varlength'] = 'largo';
$labels['notify'] = 'Enviar notificación';
$labels['notifytarget'] = 'Destinatario de la notificación:';
$labels['notifymessage'] = 'Mensaje de notificación (opcional):';
$labels['notifyoptions'] = 'Opciones de notificación (opcional):';
$labels['notifyfrom'] = 'Remitente de la notificación (opcional):';
$labels['notifyimportance'] = 'Importancia:';
$labels['notifyimportancelow'] = 'baja';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Correo electrónico';
$labels['notifymethodtel'] = 'Teléfono';
$labels['notifymethodsms'] = 'Mensaje de texto';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar los datos siguientes en el filtro:';
$labels['nextstep'] = 'Paso siguiente';
$labels['...'] = '...';
$labels['currdate'] = 'Fecha actual';
$labels['datetest'] = 'Fecha';
$labels['dateheader'] = 'encabezado:';
$labels['year'] = 'año';
$labels['month'] = 'mes';
$labels['day'] = 'día';
$labels['date'] = 'fecha(aaaa-mm-dd)';
$labels['julian'] = 'fecha (julian)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'fecha (ISO8601)';
$labels['std11'] = 'fecha (RFC2822)';
$labels['zone'] = 'zona horaria';
$labels['weekday'] = 'día de la semana (0-6)';
$labels['advancedopts'] = 'Opciones avanzadas';
$labels['body'] = 'Cuerpo';
$labels['address'] = 'dirección';
$labels['envelope'] = 'sobre';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'decodificado (crudo)';
$labels['contenttype'] = 'tipo de contenido';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todo';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'usuario';
$labels['detail'] = 'detalle';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'predeterminado';
$labels['octet'] = 'estricto (octeto)';
$labels['asciicasemap'] = 'no sensible a mayúsculas y minúsculas (mapero-ascii)';
$labels['asciinumeric'] = 'numérico (ascii-numérico)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'hacia atrás';
$labels['spamtestequals'] = 'es igual a';
$labels['spamtestnotequals'] = 'no es igual a';
$labels['vacation.reply'] = 'Responder mensaje';
$labels['vacation.advanced'] = 'Opciones avanzadas';
$labels['vacation.subject'] = 'Asunto';
$labels['vacation.body'] = 'Cuerpo';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Encendido';
$labels['vacation.off'] = 'Apagado';
$labels['vacation.interval'] = 'Intervalo de respuesta';
$labels['vacation.saving'] = 'Guardando información...';
$labels['vacation.action'] = 'Acción para mensaje entrante';
$labels['vacation.keep'] = 'Mantener';
$labels['vacation.discard'] = 'Descartar';
$labels['vacation.redirect'] = 'Redireccionar a';
$labels['vacation.copy'] = 'Enviar una copia a';
$labels['forward.redirect'] = 'Redireccionar a';
$labels['forward.copy'] = 'Enviar una copia a';
$labels['forward.on'] = 'Encendido';
$labels['forward.off'] = 'Apagado';
$labels['forward.saving'] = 'Guardando información...';
$labels['arialabelfiltersetactions'] = 'Acciones del set de filtros';
$labels['arialabelfilteractions'] = 'Acciones de filtros';
$labels['arialabelfilterform'] = 'Propiedades de filtros';
$labels['ariasummaryfilterslist'] = 'Lista de filtros';
$labels['ariasummaryfiltersetslist'] = 'Lista de set de filtros';
$labels['filterstitle'] = 'Administrar filtros de correos entrantes';
$labels['vacationtitle'] = 'Editar regla de fuera de oficina';
$labels['duplicate.header'] = 'encabezado:';
$messages['filterunknownerror'] = 'Error de servidor desconocido.';
$messages['filterconnerror'] = 'No se puede conectar al servidor.';
$messages['filterdeleteerror'] = 'No se puede eliminar el filtro. Ocurrió un error de servidor.';
$messages['filterdeleted'] = 'Filtro eliminado exitosamente.';
$messages['filtersaved'] = 'Filtro guardado exitosamente.';
$messages['filtersaveerror'] = 'No es posible guardar el filtro. Ha ocurrido un error de servidor.';
$messages['filterdeleteconfirm'] = '¿Estás seguro que quieres eliminar el filtro seleccionado?';
$messages['ruledeleteconfirm'] = '¿Estás seguro que quieres eliminar la regla seleccionada?';
$messages['actiondeleteconfirm'] = '¿Estás seguro que queires eliminar la acción seleccionada?';
$messages['forbiddenchars'] = 'Carácteres ilegales en el campo.';
$messages['cannotbeempty'] = 'El campo no puede estar vacio.';
$messages['ruleexist'] = 'Ya existe un filtro con el nombre especificado.';
$messages['activateerror'] = 'No es posible habilitar los filtros seleccionados. Ha ocurrido un error de servidor.';
$messages['deactivateerror'] = 'No es posible deshabilitar los filtros seleccionados. Ha ocurrido un error de servidor.';
$messages['deactivated'] = 'Filtro(s) deshabilitado(s) exitosamente.';
$messages['activated'] = 'Filtro(s) habilitado(s) exitosamente.';
$messages['moved'] = 'Filtro movido exitosamente.';
$messages['moveerror'] = 'No es posible mover los filtros seleccionados. Ha ocurrido un error de servidor.';
$messages['nametoolong'] = 'Nombre demasiado largo.';
$messages['namereserved'] = 'Nombre reservado.';
$messages['setexist'] = 'Set ya existe.';
$messages['nodata'] = 'Debes seleccionar al menos una posición.';
$messages['invaliddateformat'] = 'Fecha o parte del formato no válido';
$messages['saveerror'] = 'No es posible guardar la información. Ha ocurrido un error de servidor.';
$messages['emptyvacationbody'] = 'Cuerpo del mensaje de vacaciones es requerido!';
PKzc�\FR�CCmanagesieve/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['scope'] = 'Viloyat';
$labels['messagedelete'] = 'Savatga';
$labels['add'] = 'Qo`shish';
$labels['del'] = 'O`chirish';
$labels['sender'] = 'Jo`natuvchi';
$labels['flagread'] = 'O`qilgan';
$labels['flagdeleted'] = 'O`chirilgan';
$labels['flagflagged'] = 'Belgilangan';
$labels['notifymethodmailto'] = 'E-Mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['datetest'] = 'Sana';
$labels['advancedopts'] = 'Qo`shimcha xossalar';
$labels['body'] = 'Xat tarkibi';
$labels['vacation.subject'] = 'Mavzu';
$labels['vacation.body'] = 'Xat tarkibi';
PKzc�\ʎ�P P "managesieve/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Զտիչներ';
$labels['managefilters'] = 'Կառավարել ստացվող նամակների զտիչները';
$labels['filtername'] = 'Զտիչի անուն';
$labels['newfilter'] = 'Նոր զտիչ';
$labels['filteradd'] = 'Ավելացնել զտիչ';
$labels['filterdel'] = 'Ջնջել զտիչը';
$labels['moveup'] = 'Բարձրացնել';
$labels['movedown'] = 'Իջեցնել';
$labels['filterallof'] = 'հետևյալ բոլոր պահանջներին համապատասխանող';
$labels['filteranyof'] = 'հետևյալ պահանջներից ցանկացածին համապատասխանող';
$labels['filterany'] = 'բոլոր հաղորդագրությունները';
$labels['filtercontains'] = 'պարունակում է';
$labels['filternotcontains'] = 'չի պարունակում';
$labels['filteris'] = 'հավասար է';
$labels['filterisnot'] = 'հավասար չէ';
$labels['filterexists'] = 'գոյություն ունի';
$labels['filternotexists'] = 'գոյություն չունի';
$labels['filtermatches'] = 'բավարարում է արտահայտությանը';
$labels['filternotmatches'] = 'չի բավարարում արտահայտությանը';
$labels['filterregex'] = 'բավարարում է կանոնավոր արտահայտությանը';
$labels['filternotregex'] = 'չի բավարարում կանոնավոր արտահայտությանը';
$labels['filterunder'] = 'տակ';
$labels['filterover'] = 'վրա';
$labels['addrule'] = 'Ավելացնել պայմանը';
$labels['delrule'] = 'Ջնջել պայմանը';
$labels['messagemoveto'] = 'Տեղափոխել հաղորդագրությունը';
$labels['messageredirect'] = 'Վերահասցեվորել հաղորդագրությունը';
$labels['messagecopyto'] = 'Պատճենել հաղորդագրությունը';
$labels['messagesendcopy'] = 'Ուղարկել հաղորդագրության պատճեն';
$labels['messagereply'] = 'Պատասխանել հաղորդագրությամբ';
$labels['messagedelete'] = 'Ջնջել հաղորդագրությունը';
$labels['messagediscard'] = 'Հեռացնել, հաղորդագրությամբ';
$labels['messagesrules'] = 'Ստացվող հաղորդագրությունների համար';
$labels['messagesactions'] = '…կատարել հետևյալ գործողությունները.';
$labels['add'] = 'Ավելացնել';
$labels['del'] = 'Ջնջել';
$labels['sender'] = 'Ուղարկող';
$labels['recipient'] = 'Ստացող';
$labels['vacationdays'] = 'Ինչ հաճախությամբ ուղարկել հաղորդագրությունները (օրեր)`';
$labels['vacationreason'] = 'Հաղորդագրության բովանդակություն (արձակուրդի պատճառ)`';
$labels['vacationsubject'] = 'Հաղորդագրության վերնագիր`';
$labels['rulestop'] = 'Դադարել պայմանների ստուգումը';
$labels['enable'] = 'Միացնել/Անջատել';
$labels['filtersets'] = 'Զտիչների համալիրներ';
$labels['filterdef'] = 'Զտիչի սահմանում';
$labels['active'] = 'ակտիվ';
$labels['none'] = 'ոչ մեկը';
$labels['fromset'] = 'համալիրից';
$labels['fromfile'] = 'ֆայլից';
$labels['filterdisabled'] = 'Զտիչը անջատված է';
$labels['countisgreaterthan'] = 'քանակը գերազանցում է';
$labels['countisgreaterthanequal'] = 'քանակը գերազանցում է կամ հավասար է';
$labels['countislessthan'] = 'քանակը պակաս է';
$labels['countislessthanequal'] = 'քանակը պակաս է կամ հավասար է';
$labels['countequals'] = 'քանակը հավասար է';
$labels['valueisgreaterthan'] = 'արժեքը գերազանցում է';
$labels['valueisgreaterthanequal'] = 'արժեքը գերազանցում է կամ հավասար է';
$labels['valueislessthan'] = 'արժեքը պակաս է';
$labels['valueislessthanequal'] = 'արժեքը պակաս է կամ հավասար է';
$labels['valueequals'] = 'արժեքը հավասար է';
$labels['setflags'] = 'Հաղորդագրությունը նշել որպես';
$labels['addflags'] = 'Ավելացնել նշաններ հաղորդագրությանը';
$labels['removeflags'] = 'Հեռացնել նշաններ հաղորդագրությունից';
$labels['flagread'] = 'Ընթերցված';
$labels['flagdeleted'] = 'Ջնջված';
$labels['flaganswered'] = 'Պատասխանված';
$labels['flagflagged'] = 'Նշված';
$labels['flagdraft'] = 'Սևագիր';
$labels['notifymethodmailto'] = 'Էկ–փոստ';
$labels['notifymethodtel'] = 'Հեռախոս';
$labels['filtercreate'] = 'Ստեղծել զտիչ';
$labels['usedata'] = 'Զտիչում օգտագործել հետևյալ տեղեկությունը.';
$labels['nextstep'] = 'Հաջորդ քայլ';
$labels['...'] = '…';
$labels['datetest'] = 'Ամսաթիվ';
$labels['advancedopts'] = 'Հավելյալ ընտրանքներ';
$labels['body'] = 'Մարմին';
$labels['address'] = 'հասցե';
$labels['envelope'] = 'ծրար';
$labels['modifier'] = 'փոփոխիչ`';
$labels['text'] = 'տեքստ';
$labels['undecoded'] = 'մաքուր';
$labels['contenttype'] = 'բովանդակության տիպ';
$labels['modtype'] = 'տիպ`';
$labels['allparts'] = 'բոլորը';
$labels['domain'] = 'տիրույթ';
$labels['localpart'] = 'լոկալ մաս';
$labels['user'] = 'օգտվող';
$labels['detail'] = 'մաս';
$labels['comparator'] = 'համեմատիչ`';
$labels['default'] = 'լռակյաց';
$labels['octet'] = 'անփոփոխ (օկտետ)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['spamtestequals'] = 'հավասար է';
$labels['spamtestnotequals'] = 'հավասար չէ';
$labels['vacation.subject'] = 'Վերնագիր';
$labels['vacation.body'] = 'Մարմին';
$labels['vacation.keep'] = 'Պահել';
$messages['filterunknownerror'] = 'Սերվերի անհայտ սխալ';
$messages['filterconnerror'] = 'Սերվերի հետ կապի խնդիր։';
$messages['filterdeleted'] = 'Զտիչը ջնջվեց։';
$messages['filtersaved'] = 'Զտիչը պահպանվեց։';
$messages['filterdeleteconfirm'] = 'Դուք իսկապե՞ս ցանկանում եք ջնջել նշված զտիչը։';
$messages['ruledeleteconfirm'] = 'Դուք իսկապե՞ս ցանկանում եք ջնջել նշված պայմանը։';
$messages['actiondeleteconfirm'] = 'Դուք իսկապե՞ս ցանկանում եք ջնջել նշված գործողությունը։';
$messages['forbiddenchars'] = 'Դաշտում առկա են արգելված նիշեր։';
$messages['cannotbeempty'] = 'Դաշտը դատարկ չի կարող լինել։';
$messages['ruleexist'] = 'Տրված անունով զտիչ արդեն գոյություն ունի։';
$messages['deactivated'] = 'Զտիչի միացված է։';
$messages['activated'] = 'Զտիչի անջատված է։';
$messages['moved'] = 'Զտիչի տեղափոխված է։';
$messages['nametoolong'] = 'Անունը չափազանց երկար է։';
$messages['namereserved'] = 'Անթույլատրելի անուն։';
$messages['setexist'] = 'Համալիրը արդեն գոյություն ունի։';
$messages['nodata'] = 'Պահանջվում է նշել գոնե մեկ դիրք։';
PKzc�\?�6G�"�""managesieve/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filters';
$labels['managefilters'] = 'Manage incoming mail filters';
$labels['filtername'] = 'Filter name';
$labels['newfilter'] = 'New filter';
$labels['filteradd'] = 'Add filter';
$labels['filterdel'] = 'Delete filter';
$labels['scope'] = 'Scope';
$labels['moveup'] = 'Move up';
$labels['movedown'] = 'Move down';
$labels['filterallof'] = 'matching all of the following rules';
$labels['filteranyof'] = 'matching any of the following rules';
$labels['filterany'] = 'all messages';
$labels['filtercontains'] = 'contains';
$labels['filternotcontains'] = 'not contains';
$labels['filteris'] = 'is equal to';
$labels['filterisnot'] = 'is not equal to';
$labels['filterexists'] = 'exists';
$labels['filternotexists'] = 'not exists';
$labels['filtermatches'] = 'matches expression';
$labels['filternotmatches'] = 'not matches expression';
$labels['filterregex'] = 'matches regular expression';
$labels['filternotregex'] = 'not matches regular expression';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['addrule'] = 'Add rule';
$labels['delrule'] = 'Delete rule';
$labels['messagemoveto'] = 'Move message to';
$labels['messageredirect'] = 'Redirect message to';
$labels['messagecopyto'] = 'Copy message to';
$labels['messagesendcopy'] = 'Send message copy to';
$labels['messagereply'] = 'Reply with message';
$labels['messagedelete'] = 'Delete message';
$labels['messagediscard'] = 'Discard with message';
$labels['messagekeep'] = 'Keep message in Inbox';
$labels['messagesrules'] = 'For incoming mail:';
$labels['messagesactions'] = '...execute the following actions:';
$labels['add'] = 'Add';
$labels['del'] = 'Delete';
$labels['sender'] = 'Sender';
$labels['recipient'] = 'Recipient';
$labels['vacationdays'] = 'How often send messages (in days):';
$labels['vacationinterval'] = 'How often send messages:';
$labels['vacationreason'] = 'Message body (vacation reason):';
$labels['vacationsubject'] = 'Message subject:';
$labels['days'] = 'days';
$labels['seconds'] = 'seconds';
$labels['rulestop'] = 'Stop evaluating rules';
$labels['enable'] = 'Enable/Disable';
$labels['filtersets'] = 'Filter sets';
$labels['filterdef'] = 'Filter definition';
$labels['active'] = 'active';
$labels['none'] = 'none';
$labels['fromset'] = 'from set';
$labels['fromfile'] = 'from file';
$labels['filterdisabled'] = 'Filter disabled';
$labels['countisgreaterthan'] = 'count is greater than';
$labels['countisgreaterthanequal'] = 'count is greater than or equal to';
$labels['countislessthan'] = 'count is less than';
$labels['countislessthanequal'] = 'count is less than or equal to';
$labels['countequals'] = 'count is equal to';
$labels['countnotequals'] = 'count is not equal to';
$labels['valueisgreaterthan'] = 'value is greater than';
$labels['valueisgreaterthanequal'] = 'value is greater than or equal to';
$labels['valueislessthan'] = 'value is less than';
$labels['valueislessthanequal'] = 'value is less than or equal to';
$labels['valueequals'] = 'value is equal to';
$labels['valuenotequals'] = 'value is not equal to';
$labels['setflags'] = 'Set flags to the message';
$labels['addflags'] = 'Add flags to the message';
$labels['removeflags'] = 'Remove flags from the message';
$labels['flagread'] = 'Read';
$labels['flagdeleted'] = 'Deleted';
$labels['flaganswered'] = 'Answered';
$labels['flagflagged'] = 'Flagged';
$labels['flagdraft'] = 'Draft';
$labels['setvariable'] = 'Set variable';
$labels['setvarname'] = 'Variable name:';
$labels['setvarvalue'] = 'Variable value:';
$labels['setvarmodifiers'] = 'Modifiers:';
$labels['varlower'] = 'lower-case';
$labels['varupper'] = 'upper-case';
$labels['varlowerfirst'] = 'first character lower-case';
$labels['varupperfirst'] = 'first character upper-case';
$labels['varquotewildcard'] = 'quote special characters';
$labels['varlength'] = 'length';
$labels['notify'] = 'Send notification';
$labels['notifytarget'] = 'Notification target:';
$labels['notifymessage'] = 'Notification message (optional):';
$labels['notifyoptions'] = 'Notification options (optional):';
$labels['notifyfrom'] = 'Notification sender (optional):';
$labels['notifyimportance'] = 'Importance:';
$labels['notifyimportancelow'] = 'low';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'high';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Phone';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Create filter';
$labels['usedata'] = 'Use following data in the filter:';
$labels['nextstep'] = 'Next Step';
$labels['...'] = '...';
$labels['currdate'] = 'Current date';
$labels['datetest'] = 'Date';
$labels['dateheader'] = 'header:';
$labels['year'] = 'year';
$labels['month'] = 'month';
$labels['day'] = 'day';
$labels['date'] = 'date (yyyy-mm-dd)';
$labels['julian'] = 'date (julian)';
$labels['hour'] = 'hour';
$labels['minute'] = 'minute';
$labels['second'] = 'second';
$labels['time'] = 'time (hh:mm:ss)';
$labels['iso8601'] = 'date (ISO8601)';
$labels['std11'] = 'date (RFC2822)';
$labels['zone'] = 'time-zone';
$labels['weekday'] = 'weekday (0-6)';
$labels['advancedopts'] = 'Advanced options';
$labels['body'] = 'Body';
$labels['address'] = 'address';
$labels['envelope'] = 'envelope';
$labels['modifier'] = 'modifier:';
$labels['text'] = 'text';
$labels['undecoded'] = 'undecoded (raw)';
$labels['contenttype'] = 'content type';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'all';
$labels['domain'] = 'domain';
$labels['localpart'] = 'local part';
$labels['user'] = 'user';
$labels['detail'] = 'detail';
$labels['comparator'] = 'comparator:';
$labels['default'] = 'default';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'backwards';
$labels['spamtestequals'] = 'is equal to';
$labels['spamtestnotequals'] = 'is not equal to';
$labels['vacation.reply'] = 'Reply message';
$labels['vacation.advanced'] = 'Advanced settings';
$labels['vacation.subject'] = 'Subject';
$labels['vacation.body'] = 'Body';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'On';
$labels['vacation.off'] = 'Off';
$labels['vacation.interval'] = 'Reply interval';
$labels['vacation.saving'] = 'Saving data...';
$labels['vacation.keep'] = 'Keep';
$labels['forward.on'] = 'On';
$labels['forward.off'] = 'Off';
$labels['forward.saving'] = 'Saving data...';
$labels['duplicate.header'] = 'header:';
$messages['filterunknownerror'] = 'Unknown server error.';
$messages['filterconnerror'] = 'Unable to connect to server.';
$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occurred.';
$messages['filterdeleted'] = 'Filter deleted successfully.';
$messages['filtersaved'] = 'Filter saved successfully.';
$messages['filtersaveerror'] = 'Unable to save filter. Server error occurred.';
$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?';
$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?';
$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?';
$messages['forbiddenchars'] = 'Forbidden characters in field.';
$messages['cannotbeempty'] = 'Field cannot be empty.';
$messages['ruleexist'] = 'Filter with specified name already exists.';
$messages['activateerror'] = 'Unable to enable selected filter(s). Server error occurred.';
$messages['deactivateerror'] = 'Unable to disable selected filter(s). Server error occurred.';
$messages['deactivated'] = 'Filter(s) disabled successfully.';
$messages['activated'] = 'Filter(s) enabled successfully.';
$messages['moved'] = 'Filter moved successfully.';
$messages['moveerror'] = 'Unable to move selected filter. Server error occurred.';
$messages['nametoolong'] = 'Name too long.';
$messages['namereserved'] = 'Reserved name.';
$messages['setexist'] = 'Set already exists.';
$messages['nodata'] = 'At least one position must be selected!';
$messages['invaliddateformat'] = 'Invalid date or date part format';
$messages['saveerror'] = 'Unable to save data. Server error occurred.';
PKzc�\,K0S7373"managesieve/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = '篩選';
$labels['managefilters'] = '設定篩選';
$labels['filtername'] = '篩選名稱';
$labels['newfilter'] = '建立新篩選';
$labels['filteradd'] = '加入篩選';
$labels['filterdel'] = '刪除篩選';
$labels['rules'] = '規則';
$labels['actions'] = '動作';
$labels['scope'] = '範圍';
$labels['moveup'] = '上移';
$labels['movedown'] = '下移';
$labels['filterallof'] = '符合所有規則';
$labels['filteranyof'] = '符合任一條規則';
$labels['filterany'] = '所有郵件';
$labels['filtercontains'] = '包含';
$labels['filternotcontains'] = '不包含';
$labels['filteris'] = '等於';
$labels['filterisnot'] = '不等於';
$labels['filterexists'] = '存在';
$labels['filternotexists'] = '不存在';
$labels['filtermatches'] = '符合表達式';
$labels['filternotmatches'] = '不符合表達式';
$labels['filterregex'] = '符合正規表達式';
$labels['filternotregex'] = '不符合正規表達式';
$labels['filterunder'] = '小於';
$labels['filterover'] = '大於';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME 部分:';
$labels['mime-message'] = '郵件';
$labels['mime-anychild'] = '任何';
$labels['mime-type'] = '類型';
$labels['mime-subtype'] = '子類型';
$labels['mime-contenttype'] = '內容類型';
$labels['mime-param'] = '參數';
$labels['addrule'] = '加入規則';
$labels['delrule'] = '刪除規則';
$labels['messagemoveto'] = '將郵件移至';
$labels['messageredirect'] = '將郵件轉寄至';
$labels['messagecopyto'] = '將郵件複製至';
$labels['messagesendcopy'] = '寄送郵件複本至';
$labels['messagereply'] = '用以下內容回覆';
$labels['messagedelete'] = '刪除郵件';
$labels['messagediscard'] = '刪除郵件並用以下內容回覆';
$labels['messagekeep'] = '在收件匣保留郵件';
$labels['messagesrules'] = '對新收到的郵件:';
$labels['messagesactions'] = '執行以下動作:';
$labels['add'] = '加入';
$labels['del'] = '刪除';
$labels['sender'] = '寄件者';
$labels['recipient'] = '收件者';
$labels['vacationaddr'] = '我的電郵位址:';
$labels['vacationdays'] = '多久回覆一次(單位:天):';
$labels['vacationinterval'] = '多久回覆一次:';
$labels['vacationreason'] = '郵件內容 (休假原因):';
$labels['vacationfrom'] = '回覆寄件者位址:';
$labels['vacationsubject'] = '郵件主旨:';
$labels['days'] = '天';
$labels['seconds'] = '秒';
$labels['rulestop'] = '停止評估規則';
$labels['enable'] = '啟用/停用';
$labels['filterset'] = '篩選集';
$labels['filtersets'] = '篩選集合';
$labels['filtersetadd'] = '加入篩選集';
$labels['filtersetdel'] = '刪除篩選集';
$labels['filtersetact'] = '啟用現有篩選集';
$labels['filtersetdeact'] = '停用現有篩選集';
$labels['filterseteditraw'] = '編輯篩選集合';
$labels['filtersetswitch'] = '啟用/停用篩選集';
$labels['filterdef'] = '篩選定義';
$labels['filtersetname'] = '篩選集名稱';
$labels['newfilterset'] = '新篩選集';
$labels['active'] = '啟用';
$labels['none'] = '無';
$labels['fromset'] = '從集合';
$labels['fromfile'] = '從檔案';
$labels['filterdisabled'] = '篩選已停用';
$labels['filterenabled'] = '已啟用篩選';
$labels['countisgreaterthan'] = '數量大於';
$labels['countisgreaterthanequal'] = '數量大於或等於';
$labels['countislessthan'] = '數量小於';
$labels['countislessthanequal'] = '數量小於或等於';
$labels['countequals'] = '數量等於';
$labels['countnotequals'] = '數量不等於';
$labels['valueisgreaterthan'] = '值大於';
$labels['valueisgreaterthanequal'] = '值大於或等於';
$labels['valueislessthan'] = '值小於';
$labels['valueislessthanequal'] = '值小於或等於';
$labels['valueequals'] = '值等於';
$labels['valuenotequals'] = '值不等於';
$labels['setflags'] = '設定旗標';
$labels['addflags'] = '新增旗標到郵件';
$labels['removeflags'] = '移除郵件旗標';
$labels['flagread'] = '已讀';
$labels['flagdeleted'] = '已刪除';
$labels['flaganswered'] = '已經回覆';
$labels['flagflagged'] = '已加旗標';
$labels['flagdraft'] = '草稿';
$labels['addheader'] = '為郵件加入標頭';
$labels['deleteheader'] = '為郵件移除標頭';
$labels['headername'] = '標頭名稱';
$labels['headervalue'] = '標頭值';
$labels['headerpos'] = '標頭位置';
$labels['headeratstart'] = '開首';
$labels['headeratend'] = '結尾';
$labels['headeroccurrence'] = '標頭出現與否/位置';
$labels['headerfromstart'] = '由開首開始';
$labels['headerfromend'] = '由結尾開始';
$labels['headerpatterns'] = '標頭植樣式';
$labels['headermatchtype'] = '符合類型:';
$labels['setvariable'] = '設定變數';
$labels['setvarname'] = '變數名稱:';
$labels['setvarvalue'] = '變數值:';
$labels['setvarmodifiers'] = '修改:';
$labels['varlower'] = '小楷';
$labels['varupper'] = '大楷';
$labels['varlowerfirst'] = '第一個字母小楷';
$labels['varupperfirst'] = '第一個字母大楷';
$labels['varquotewildcard'] = '跳脫字元';
$labels['varlength'] = '長度';
$labels['notify'] = '寄送通知';
$labels['notifytarget'] = '通知收件人';
$labels['notifymessage'] = '通知內容訊息(選填):';
$labels['notifyoptions'] = '通知項目(選填):';
$labels['notifyfrom'] = '通知寄件人(選填):';
$labels['notifyimportance'] = '重要性:';
$labels['notifyimportancelow'] = '低';
$labels['notifyimportancenormal'] = '一般';
$labels['notifyimportancehigh'] = '高';
$labels['notifymethodmailto'] = '電郵';
$labels['notifymethodtel'] = '電話';
$labels['notifymethodsms'] = 'SMS短訊';
$labels['filtercreate'] = '建立篩選';
$labels['usedata'] = '於篩選使用以下資料:';
$labels['nextstep'] = '下一步';
$labels['...'] = '…';
$labels['string'] = '字串';
$labels['currdate'] = '現在日期';
$labels['datetest'] = '日期';
$labels['dateheader'] = '標頭:';
$labels['year'] = '年';
$labels['month'] = '月';
$labels['day'] = '日';
$labels['date'] = '日期 (yyyy-mm-dd)';
$labels['julian'] = '日期 (公曆)';
$labels['hour'] = '小時';
$labels['minute'] = '分鐘';
$labels['second'] = '秒';
$labels['time'] = '時間 (hh:mm:ss)';
$labels['iso8601'] = '日期 (ISO8601)';
$labels['std11'] = '日期 (RFC2822)';
$labels['zone'] = '時區';
$labels['weekday'] = '週幾 (0-6)';
$labels['advancedopts'] = '進階選項';
$labels['body'] = '內文';
$labels['address'] = '郵件位址';
$labels['envelope'] = '信封';
$labels['modifier'] = '修改:';
$labels['text'] = '文字';
$labels['undecoded'] = '未解碼 (原始)';
$labels['contenttype'] = '內容類型';
$labels['modtype'] = '類型:';
$labels['allparts'] = '全部';
$labels['domain'] = '網域';
$labels['localpart'] = '本機部分';
$labels['user'] = '使用者';
$labels['detail'] = '細節';
$labels['comparator'] = '比較:';
$labels['default'] = '預設';
$labels['octet'] = '嚴謹模式 (八位元組)';
$labels['asciicasemap'] = '不區分大小寫 (採用 ASCII-casemap)';
$labels['asciinumeric'] = '數字類型 (ASCII-numeric)';
$labels['index'] = '索引:';
$labels['indexlast'] = '向後';
$labels['spamtest'] = '垃圾郵件等級';
$labels['spamtestisgreaterthan'] = '大於';
$labels['spamtestisgreaterthanequal'] = '大於或等於';
$labels['spamtestislessthan'] = '小於';
$labels['spamtestislessthanequal'] = '小於或等於';
$labels['spamtestequals'] = '等於';
$labels['spamtestnotequals'] = '不等於';
$labels['spamtestisunknown'] = '未知';
$labels['vacation'] = '不在辦公室';
$labels['vacation.reply'] = '回覆郵件';
$labels['vacation.advanced'] = '進階設定';
$labels['vacation.from'] = '回覆寄件者位址';
$labels['vacation.subject'] = '主旨';
$labels['vacation.body'] = '內文';
$labels['vacation.start'] = '開始時間';
$labels['vacation.end'] = '結束時間';
$labels['vacation.status'] = '狀態';
$labels['vacation.on'] = '開';
$labels['vacation.off'] = '關';
$labels['vacation.addresses'] = '我的電子郵件位址';
$labels['vacation.interval'] = '回覆間隔';
$labels['vacation.after'] = '在此項目之後放置「不在辦公室」規則:';
$labels['vacation.saving'] = '正在儲存資料...';
$labels['vacation.action'] = '對收到的郵件的動作';
$labels['vacation.keep'] = '保留';
$labels['vacation.discard'] = '丟棄';
$labels['vacation.redirect'] = '重定向至';
$labels['vacation.copy'] = '傳送複本至';
$labels['forward'] = '轉寄';
$labels['forward.redirect'] = '重定向至';
$labels['forward.copy'] = '傳送複本至';
$labels['forward.on'] = '開';
$labels['forward.off'] = '關';
$labels['forward.status'] = '狀態:';
$labels['forward.action'] = '對於收到的郵件,執行以下動作:';
$labels['forward.saving'] = '正在儲存資料...';
$labels['filladdresses'] = '填入我所有的位址';
$labels['arialabelfiltersetactions'] = '篩選集合動作';
$labels['arialabelfilteractions'] = '篩選動作';
$labels['arialabelfilterform'] = '篩選內容';
$labels['ariasummaryfilterslist'] = '篩選清單';
$labels['ariasummaryfiltersetslist'] = '篩選集合清單';
$labels['filterstitle'] = '編輯「收到郵件的篩選」';
$labels['vacationtitle'] = '編輯「不在辦公室」規則';
$labels['forwardtitle'] = '編輯郵件轉寄規則';
$labels['message'] = '郵件';
$labels['duplicate'] = '重覆';
$labels['notduplicate'] = '不是重覆';
$labels['duplicate.handle'] = '處理常式:';
$labels['duplicate.header'] = '標頭:';
$labels['duplicate.uniqueid'] = '識別碼:';
$labels['duplicate.seconds'] = '逾時 (秒):';
$labels['duplicate.last'] = '相對於上次執行';
$messages['filterunknownerror'] = '未知的伺服器錯誤';
$messages['filterconnerror'] = '無法與伺服器連線';
$messages['filterdeleteerror'] = '無法刪除篩選。伺服器出錯';
$messages['filterdeleted'] = '成功刪除篩選器';
$messages['filtersaved'] = '成功儲存篩選器。';
$messages['filtersaveerror'] = '無法儲存篩選。伺服器出錯';
$messages['filterformerror'] = '篩選表單出錯';
$messages['filterdeleteconfirm'] = '確定要刪除所選的郵件規則嗎?';
$messages['ruledeleteconfirm'] = '確定要刪除所選的郵件規則嗎?';
$messages['actiondeleteconfirm'] = '確定要刪除所選的動作嗎?';
$messages['forbiddenchars'] = '內容包含禁用字元';
$messages['cannotbeempty'] = '內容不能為空白';
$messages['ruleexist'] = '規則名稱重複';
$messages['setactivateerror'] = '無法啟用所選的篩選集。伺服器出錯。';
$messages['setdeactivateerror'] = '無法停用所選的篩選集。伺服器出錯。';
$messages['setdeleteerror'] = '無法刪除所選的篩選集。伺服器出錯。';
$messages['setactivated'] = '已啟用篩選集。';
$messages['setdeactivated'] = '已停用篩選集。';
$messages['setdeleted'] = '已刪除篩選集。';
$messages['setupdated'] = '已更新篩選集。';
$messages['setdeleteconfirm'] = '確定要刪除所選的篩選集?';
$messages['setcreateerror'] = '無法建立篩選集。伺服器出錯。';
$messages['setcreated'] = '成功建立篩選集。';
$messages['activateerror'] = '無法啟用所選的篩選。伺服器出錯';
$messages['deactivateerror'] = '無法停用所選的篩選。伺服器出錯';
$messages['deactivated'] = '篩選器已停用';
$messages['activated'] = '篩選器已啟用';
$messages['moved'] = '篩選器已移動';
$messages['moveerror'] = '無法移動所選的篩選。伺服器出錯';
$messages['nametoolong'] = '名稱太長。';
$messages['namereserved'] = '保留名稱。';
$messages['setexist'] = '集合已存在';
$messages['nodata'] = '至少要選擇一個位置';
$messages['invaliddateformat'] = '日期或時間部分格式無效';
$messages['saveerror'] = '無法儲存資料。伺服器出錯';
$messages['vacationsaved'] = '成功儲存「不在辦公室」資料。';
$messages['forwardsaved'] = '成功儲存轉寄資料。';
$messages['emptyvacationbody'] = '休假郵件要有內容!';
$messages['duplicate.conflict.err'] = '不允許標頭和識別碼都是獨一無二的';
$messages['disabledaction'] = '不允許的動作。';
$messages['lastindexempty'] = '若要由結尾開始計算,要先有索引';
$messages['noflagset'] = '必須至少選取一個旗標。';
PK{c�\�ݏ+�;�;"managesieve/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtres';
$labels['managefilters'] = 'Gestiona els filtres dels missatges d\'entrada';
$labels['filtername'] = 'Nom del filtre';
$labels['newfilter'] = 'Filtre nou';
$labels['filteradd'] = 'Afegeix un filtre';
$labels['filterdel'] = 'Suprimeix el filtre';
$labels['rules'] = 'Regles';
$labels['actions'] = 'Accions';
$labels['scope'] = 'Abast';
$labels['moveup'] = 'Mou amunt';
$labels['movedown'] = 'Mou avall';
$labels['filterallof'] = 'que coincideixi amb totes les regles següents';
$labels['filteranyof'] = 'que coincideixi amb qualsevol de les regles següents';
$labels['filterany'] = 'tots els missatges';
$labels['filtercontains'] = 'conté';
$labels['filternotcontains'] = 'no conté';
$labels['filteris'] = 'és igual a';
$labels['filterisnot'] = 'és diferent de';
$labels['filterexists'] = 'existeix';
$labels['filternotexists'] = 'no existeix';
$labels['filtermatches'] = 'coincideix amb l\'expressió';
$labels['filternotmatches'] = 'no coincideix amb l\'expressió';
$labels['filterregex'] = 'coincideix amb l\'expressió regular';
$labels['filternotregex'] = 'no coincideix amb l\'expressió regular';
$labels['filterunder'] = 'sota';
$labels['filterover'] = 'sobre';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Part MIME:';
$labels['mime-message'] = 'missatge';
$labels['mime-anychild'] = 'qualsevol';
$labels['mime-type'] = 'tipus';
$labels['mime-subtype'] = 'subtipus';
$labels['mime-contenttype'] = 'tipus de contingut';
$labels['mime-param'] = 'paràmetre';
$labels['addrule'] = 'Afegeix una regla';
$labels['delrule'] = 'Suprimeix una regla';
$labels['messagemoveto'] = 'Mou el missatge a';
$labels['messageredirect'] = 'Redirigeix el missatge cap a';
$labels['messagecopyto'] = 'Copia el missatge a';
$labels['messagesendcopy'] = 'Envia una còpia del missatge a';
$labels['messagereply'] = 'Respon amb un missatge';
$labels['messagedelete'] = 'Suprimeix missatge';
$labels['messagediscard'] = 'Descarta amb un missatge';
$labels['messagekeep'] = 'Deixa el missatge a la bústia';
$labels['messagesrules'] = 'Pels missatges entrants:';
$labels['messagesactions'] = '..executa les següents accions:';
$labels['add'] = 'Afegeix';
$labels['del'] = 'Suprimeix';
$labels['sender'] = 'Remitent';
$labels['recipient'] = 'Destinatari';
$labels['vacationaddr'] = 'Les meves adreces de correu electrònic:';
$labels['vacationdays'] = 'Cada quan s\'ha d\'enviar un missatge (en dies):';
$labels['vacationinterval'] = 'Amb quina freqüència s\'han d\'enviar els missatges:';
$labels['vacationreason'] = 'Cos del missatge (raó de l\'absència):';
$labels['vacationfrom'] = 'Respon a l\'adreça del remitent:';
$labels['vacationsubject'] = 'Assumpte del missatge:';
$labels['days'] = 'dies';
$labels['seconds'] = 'segons';
$labels['rulestop'] = 'Deixa d\'avaluar regles';
$labels['enable'] = 'Habilita/Deshabilita';
$labels['filterset'] = 'Conjunt de filtres';
$labels['filtersets'] = 'Conjunts de filtres';
$labels['filtersetadd'] = 'Afegeix un conjunt de filtres';
$labels['filtersetdel'] = 'Suprimeix un conjunt de filtres';
$labels['filtersetact'] = 'Activa el conjunt de filtres actuals';
$labels['filtersetdeact'] = 'Desactiva el conjunt de filtres actuals';
$labels['filterseteditraw'] = 'Edita el conjunt de filtres';
$labels['filtersetswitch'] = 'Activa/desactiva el conjunt de filtres';
$labels['filterdef'] = 'Definició del filtre';
$labels['filtersetname'] = 'Nom del conjunt de filtres';
$labels['newfilterset'] = 'Nou conjunt de filtres';
$labels['active'] = 'actiu';
$labels['none'] = 'cap';
$labels['fromset'] = 'des del conjunt';
$labels['fromfile'] = 'des del fitxer';
$labels['filterdisabled'] = 'Filtre desactivat';
$labels['filterenabled'] = 'Filtre activat';
$labels['countisgreaterthan'] = 'el recompte és més gran de';
$labels['countisgreaterthanequal'] = 'el recompte és més gran o igual a';
$labels['countislessthan'] = 'el recompte és menor de';
$labels['countislessthanequal'] = 'el recompte és menor o igual a';
$labels['countequals'] = 'el recompte és igual que';
$labels['countnotequals'] = 'el recompte és diferent de';
$labels['valueisgreaterthan'] = 'el valor és més gran de';
$labels['valueisgreaterthanequal'] = 'el valor és major o igual que';
$labels['valueislessthan'] = 'el valor és menor que';
$labels['valueislessthanequal'] = 'el valor és menor o igual de';
$labels['valueequals'] = 'el valor és igual a';
$labels['valuenotequals'] = 'el valor és diferent de';
$labels['setflags'] = 'Posa indicadors al missatge';
$labels['addflags'] = 'Afegeix indicadors al missatge';
$labels['removeflags'] = 'Suprimeix indicadors del missatge';
$labels['flagread'] = 'Llegit';
$labels['flagdeleted'] = 'Suprimit';
$labels['flaganswered'] = 'Respost';
$labels['flagflagged'] = 'Marcat';
$labels['flagdraft'] = 'Esborrany';
$labels['addheader'] = 'Afegeix una capçalera al missatge';
$labels['deleteheader'] = 'Suprimeix una capçalera del missatge';
$labels['headername'] = 'Nom de la capçalera';
$labels['headervalue'] = 'Valor de la capçalera';
$labels['headerpos'] = 'Posició de la capçalera';
$labels['headeratstart'] = 'al començament';
$labels['headeratend'] = 'al final';
$labels['headeroccurrence'] = 'Ocurrència/posició de la capçalera';
$labels['headerfromstart'] = 'des de l\'inici';
$labels['headerfromend'] = 'des del final';
$labels['headerpatterns'] = 'Patrons de valor de capçalera';
$labels['headermatchtype'] = 'tipus de concordança';
$labels['setvariable'] = 'Ajusta la variable';
$labels['setvarname'] = 'Nom de la variable:';
$labels['setvarvalue'] = 'Valor de la variable:';
$labels['setvarmodifiers'] = 'Modificadors:';
$labels['varlower'] = 'minúscules';
$labels['varupper'] = 'majúscules';
$labels['varlowerfirst'] = 'el primer caràcter en minúscula';
$labels['varupperfirst'] = 'el primer caràcter en majúscula';
$labels['varquotewildcard'] = 'engloba els caràcters especials amb cometes';
$labels['varlength'] = 'llargada';
$labels['notify'] = 'Envia notificació';
$labels['notifytarget'] = 'Objectiu de la notificació:';
$labels['notifymessage'] = 'Missatge de notificació (opcional):';
$labels['notifyoptions'] = 'Opcions de notificació (opcional):';
$labels['notifyfrom'] = 'Remitent de la notificació (opcional):';
$labels['notifyimportance'] = 'Importància:';
$labels['notifyimportancelow'] = 'baixa';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Correu electrònic';
$labels['notifymethodtel'] = 'Telèfon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crea filtre';
$labels['usedata'] = 'Fes servir les següents dades al filtre:';
$labels['nextstep'] = 'Següent pas';
$labels['...'] = '...';
$labels['string'] = 'Cadena de text';
$labels['currdate'] = 'Data actual';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'capçalera:';
$labels['year'] = 'any';
$labels['month'] = 'mes';
$labels['day'] = 'dia';
$labels['date'] = 'data (aaaa-mm-dd)';
$labels['julian'] = 'data (calendari julià)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minut';
$labels['second'] = 'segon';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fus horari';
$labels['weekday'] = 'dia de la setmana (0-6)';
$labels['advancedopts'] = 'Opcions avançades';
$labels['body'] = 'Cos';
$labels['address'] = 'adreça';
$labels['envelope'] = 'sobre';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'text';
$labels['undecoded'] = 'descodificat (en brut)';
$labels['contenttype'] = 'tipus de contingut';
$labels['modtype'] = 'tipus:';
$labels['allparts'] = 'tots';
$labels['domain'] = 'domini';
$labels['localpart'] = 'part local';
$labels['user'] = 'usuari';
$labels['detail'] = 'detall';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'per defecte';
$labels['octet'] = 'estricte (octet)';
$labels['asciicasemap'] = 'No distingeix entre majúscules i minúscules  (ascii-casemap)';
$labels['asciinumeric'] = 'numèric (ascii-numèric)';
$labels['index'] = 'índex:';
$labels['indexlast'] = 'cap enrere';
$labels['spamtest'] = 'Nivell de correu brossa';
$labels['spamtestisgreaterthan'] = 'és més gran de';
$labels['spamtestisgreaterthanequal'] = 'és major o igual que';
$labels['spamtestislessthan'] = 'és menor que';
$labels['spamtestislessthanequal'] = 'és menor o igual a';
$labels['spamtestequals'] = 'és igual a';
$labels['spamtestnotequals'] = 'és diferent de';
$labels['spamtestisunknown'] = 'és desconegut';
$labels['vacation'] = 'Fora de l\'oficina';
$labels['vacation.reply'] = 'Missatge de resposta';
$labels['vacation.advanced'] = 'Paràmetres avançats';
$labels['vacation.from'] = 'Respon a l\'adreça del remitent';
$labels['vacation.subject'] = 'Assumpte';
$labels['vacation.body'] = 'Cos';
$labels['vacation.start'] = 'Hora d\'inici';
$labels['vacation.end'] = 'Hora final';
$labels['vacation.status'] = 'Estat';
$labels['vacation.on'] = 'Activat';
$labels['vacation.off'] = 'Desactivat';
$labels['vacation.addresses'] = 'Les meves adreces de correu electrònic';
$labels['vacation.interval'] = 'Interval de resposta';
$labels['vacation.after'] = 'Col·loca la regla de \'fora de l\'oficina\' darrera';
$labels['vacation.saving'] = 'S\'estan desant les dades...';
$labels['vacation.action'] = 'Acció pel missatge entrant';
$labels['vacation.keep'] = 'Conserva';
$labels['vacation.discard'] = 'Descarta';
$labels['vacation.redirect'] = 'Redirigeix cap a';
$labels['vacation.copy'] = 'Envia còpia a';
$labels['forward'] = 'Reenviament';
$labels['forward.redirect'] = 'Redirigeix cap a';
$labels['forward.copy'] = 'Envia còpia a';
$labels['forward.on'] = 'Activat';
$labels['forward.off'] = 'Desactivat';
$labels['forward.status'] = 'Estat:';
$labels['forward.action'] = 'Per als missatges d\'entrada executa la següent acció:';
$labels['forward.saving'] = 'S\'estan desant les dades...';
$labels['filladdresses'] = 'Emplena-ho amb totes les meves adreces de correu electrònic';
$labels['arialabelfiltersetactions'] = 'Accions pel conjunt de filtres';
$labels['arialabelfilteractions'] = 'Accions del filtre';
$labels['arialabelfilterform'] = 'Propietats del filtre';
$labels['ariasummaryfilterslist'] = 'Llistat de filtres';
$labels['ariasummaryfiltersetslist'] = 'Llistat de conjunts de filtres';
$labels['filterstitle'] = 'Edita els filtres pels missatges entrants';
$labels['vacationtitle'] = 'Edita la norma "fora de l\'oficina"';
$labels['forwardtitle'] = 'Edita la regla de reenviament de correu';
$labels['message'] = 'Missatge';
$labels['duplicate'] = 'està duplicat';
$labels['notduplicate'] = 'no està duplicat';
$labels['duplicate.handle'] = 'gestor:';
$labels['duplicate.header'] = 'capçalera:';
$labels['duplicate.uniqueid'] = 'Identificador:';
$labels['duplicate.seconds'] = 'temps d\'espera (en segons):';
$labels['duplicate.last'] = 'relatiu a la darrera execució';
$messages['filterunknownerror'] = 'Hi ha hagut un error desconegut al servidor.';
$messages['filterconnerror'] = 'No s\'ha pogut connectar al servidor.';
$messages['filterdeleteerror'] = 'No s\'ha pogut suprimir el filtre. Hi ha hagut un error al servidor.';
$messages['filterdeleted'] = 'El filtre s\'ha suprimit correctament.';
$messages['filtersaved'] = 'El filtre s\'ha desat correctament.';
$messages['filtersaveerror'] = 'No s\'ha pogut desar el filtre. Hi ha hagut un error al servidor.';
$messages['filterformerror'] = 'El formulari de filtres conté errors.';
$messages['filterdeleteconfirm'] = 'Esteu segur de voler suprimir el filtre seleccionat?';
$messages['ruledeleteconfirm'] = 'Esteu segur de voler suprimir la regla seleccionada?';
$messages['actiondeleteconfirm'] = 'Esteu segur de voler suprimir l\'acció seleccionada?';
$messages['forbiddenchars'] = 'El camp conté caràcters prohibits.';
$messages['cannotbeempty'] = 'El camp no pot estar buit.';
$messages['ruleexist'] = 'Ja existeix un filtre amb aquest nom.';
$messages['setactivateerror'] = 'No s\'ha pogut activar el conjunt de filtres seleccionat. Hi ha hagut un error al servidor.';
$messages['setdeactivateerror'] = 'No s\'ha pogut desactivar el conjunt de filtres seleccionat. Hi ha hagut un error al servidor.';
$messages['setdeleteerror'] = 'No s\'ha pogut suprimir el conjunt de filtres seleccionat. Hi ha hagut un error al servidor.';
$messages['setactivated'] = 'El conjunt de filtres s\'ha activat correctament.';
$messages['setdeactivated'] = 'El conjunt de filtres s\'ha desactivat correctament.';
$messages['setdeleted'] = 'El conjunt de filtres s\'ha suprimit correctament.';
$messages['setupdated'] = 'El conjunt de filtres s\'ha actualitzat correctament.';
$messages['setdeleteconfirm'] = 'Esteu segur de voler suprimir el conjunt de filtres seleccionat?';
$messages['setcreateerror'] = 'No s\'ha pogut crear el conjunt filtres. Hi ha hagut un error al servidor.';
$messages['setcreated'] = 'El conjunt de filtres s\'ha creat correctament.';
$messages['activateerror'] = 'No s\'ha pogut activar el(s) filtre(s) seleccionat(s). Hi ha hagut un error al servidor.';
$messages['deactivateerror'] = 'No s\'ha pogut desactivar el(s) filtre(s) seleccionat(s). Hi ha hagut un error al servidor.';
$messages['deactivated'] = 'Filtre(s) desactivat(s) correctament.';
$messages['activated'] = 'Filtre(s) activat(s) correctament.';
$messages['moved'] = 'S\'ha mogut correctament el filtre.';
$messages['moveerror'] = 'No s\'ha pogut moure el filtre seleccionat. Hi ha hagut un error al servidor.';
$messages['nametoolong'] = 'El nom és massa llarg.';
$messages['namereserved'] = 'Nom reservat.';
$messages['setexist'] = 'El conjunt ja existeix.';
$messages['nodata'] = 'S\'ha de seleccionar com a mínim una posició!';
$messages['invaliddateformat'] = 'data no vàlida o format no vàlid';
$messages['saveerror'] = 'No s\'han pogut desar les dades. Hi ha hagut un error al servidor.';
$messages['vacationsaved'] = 'Dades de \'fora de l\'oficina\' desades correctament.';
$messages['forwardsaved'] = 'Dades de reenviament desades correctament.';
$messages['emptyvacationbody'] = 'És obligatori definir el cos del missatge de vacances';
$messages['duplicate.conflict.err'] = 'L\'encapçalament i l\'identificador únic a la vegada no estan permesos.';
$messages['disabledaction'] = 'Acció no permesa.';
$messages['lastindexempty'] = 'És necessari l\'índex quan es compta des del final';
$messages['noflagset'] = 'Cal seleccionar almenys una marca.';
PK{c�\�,�,,managesieve/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Gerer filtros de e-mail entrante';
$labels['filtername'] = 'Nomine de filtro';
$labels['newfilter'] = 'Nove filtro';
$labels['filteradd'] = 'Adder filtro';
$labels['filterdel'] = 'Deler filtro';
$labels['scope'] = 'Ambito';
$labels['moveup'] = 'Displaciar in alto';
$labels['movedown'] = 'Displaciar a basso';
$labels['filterallof'] = 'que satisface tote le sequente regulas';
$labels['filteranyof'] = 'que satisface qualcunque del sequente regulas';
$labels['filterany'] = 'tote le messages';
$labels['filtercontains'] = 'contine';
$labels['filternotcontains'] = 'non contine';
$labels['filteris'] = 'es equal a';
$labels['filterisnot'] = 'non es equal a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'non existe';
$labels['filtermatches'] = 'corresponde al expression';
$labels['filternotmatches'] = 'non corresponde al expression';
$labels['filterregex'] = 'corresponde al expression regular';
$labels['filternotregex'] = 'non corresponde al expression regular';
$labels['filterunder'] = 'sub';
$labels['filterover'] = 'super';
$labels['mime-message'] = 'message';
$labels['addrule'] = 'Adder regula';
$labels['delrule'] = 'Deler regula';
$labels['messagemoveto'] = 'Displaciar message a';
$labels['messageredirect'] = 'Rediriger message a';
$labels['messagecopyto'] = 'Copiar message a';
$labels['messagesendcopy'] = 'Inviar copia del message a';
$labels['messagereply'] = 'Responder con message';
$labels['messagedelete'] = 'Deler message';
$labels['messagediscard'] = 'Abandonar con message';
$labels['messagekeep'] = 'Conservar message in cassa de entrata';
$labels['messagesrules'] = 'Pro messages entrante:';
$labels['messagesactions'] = '...exequer le sequente actiones:';
$labels['add'] = 'Adder';
$labels['del'] = 'Deler';
$labels['sender'] = 'Expeditor';
$labels['recipient'] = 'Destinatario';
$labels['vacationaddr'] = 'Mi adresses de e-mail:';
$labels['vacationdays'] = 'Frequentia de invio de messages (in dies):';
$labels['vacationinterval'] = 'Frequentia de invio de messages:';
$labels['vacationreason'] = 'Texto del message (motivo del absentia):';
$labels['vacationfrom'] = 'Adresse del expeditor pro responder:';
$labels['vacationsubject'] = 'Subjecto del message:';
$labels['days'] = 'dies';
$labels['seconds'] = 'secundas';
$labels['rulestop'] = 'Cessar de evalutar regulas';
$labels['enable'] = 'Activar/Disactivar';
$labels['filtersets'] = 'Gruppos de filtros';
$labels['filterseteditraw'] = 'Modificar gruppo de filtros';
$labels['filterdef'] = 'Definition del filtro';
$labels['active'] = 'active';
$labels['none'] = 'nulle';
$labels['fromset'] = 'ab gruppo';
$labels['fromfile'] = 'ab file';
$labels['filterdisabled'] = 'Filtro disactivate';
$labels['countisgreaterthan'] = 'numero es superior a';
$labels['countisgreaterthanequal'] = 'numero es superior o equal a';
$labels['countislessthan'] = 'numero es inferior a';
$labels['countislessthanequal'] = 'numero es inferior o equal a';
$labels['countequals'] = 'numero es equal a';
$labels['countnotequals'] = 'numero non es equal a';
$labels['valueisgreaterthan'] = 'valor es superior a';
$labels['valueisgreaterthanequal'] = 'valor es superior o equal a';
$labels['valueislessthan'] = 'valor es inferior a';
$labels['valueislessthanequal'] = 'valor es inferior o equal a';
$labels['valueequals'] = 'valor es equal a';
$labels['valuenotequals'] = 'valor non es equal a';
$labels['setflags'] = 'Mitter signales al message';
$labels['addflags'] = 'Adder signales al message';
$labels['removeflags'] = 'Remover signales del message';
$labels['flagread'] = 'Legite';
$labels['flagdeleted'] = 'Delite';
$labels['flaganswered'] = 'Respondite';
$labels['flagflagged'] = 'Signalate';
$labels['flagdraft'] = 'Version provisori';
$labels['setvariable'] = 'Definir variabile';
$labels['setvarname'] = 'Nomine del variabile:';
$labels['setvarvalue'] = 'Valor del variabile:';
$labels['setvarmodifiers'] = 'Modificatores:';
$labels['varlower'] = 'minusculas';
$labels['varupper'] = 'majusculas';
$labels['varlowerfirst'] = 'prime character es minuscula';
$labels['varupperfirst'] = 'prime character es majuscula';
$labels['varquotewildcard'] = 'mitter characteres special inter virgulettas';
$labels['varlength'] = 'longitude';
$labels['notify'] = 'Inviar notification';
$labels['notifytarget'] = 'Scopo del notification:';
$labels['notifymessage'] = 'Message del notification (optional):';
$labels['notifyoptions'] = 'Optiones de notification (optional):';
$labels['notifyfrom'] = 'Expeditor del notification (optional):';
$labels['notifyimportance'] = 'Importantia:';
$labels['notifyimportancelow'] = 'basse';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alte';
$labels['notifymethodmailto'] = 'E-mail';
$labels['notifymethodtel'] = 'Telephono';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar le sequente datos in le filtro:';
$labels['nextstep'] = 'Proxime passo';
$labels['...'] = '...';
$labels['string'] = 'Catena';
$labels['currdate'] = 'Data actual';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'capite:';
$labels['year'] = 'anno';
$labels['month'] = 'mense';
$labels['day'] = 'die';
$labels['date'] = 'data (aaaa-mm-dd)';
$labels['julian'] = 'data (julian)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuta';
$labels['second'] = 'secunda';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fuso horari';
$labels['weekday'] = 'die del septimana (0-6)';
$labels['advancedopts'] = 'Optiones avantiate';
$labels['body'] = 'Texto';
$labels['address'] = 'adresse';
$labels['envelope'] = 'inveloppe';
$labels['modifier'] = 'modificator:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'non decodificate (crude)';
$labels['contenttype'] = 'typo de contento';
$labels['modtype'] = 'typo:';
$labels['allparts'] = 'totes';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'usator';
$labels['detail'] = 'detalio';
$labels['comparator'] = 'comparator:';
$labels['default'] = 'predefinite';
$labels['octet'] = 'stricte (octetto)';
$labels['asciicasemap'] = 'non sensibile al differentia inter majusculas e minusculas (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'indice:';
$labels['indexlast'] = 'a retro';
$labels['spamtestequals'] = 'es equal a';
$labels['spamtestnotequals'] = 'non es equal a';
$labels['vacation.reply'] = 'Message de responsa';
$labels['vacation.advanced'] = 'Configuration avantiate';
$labels['vacation.from'] = 'Adresse del expeditor pro responder';
$labels['vacation.subject'] = 'Subjecto';
$labels['vacation.body'] = 'Texto';
$labels['vacation.status'] = 'Stato';
$labels['vacation.on'] = 'Active';
$labels['vacation.off'] = 'Non active';
$labels['vacation.addresses'] = 'Mi adresses de e-mail';
$labels['vacation.interval'] = 'Intervallo de responsa';
$labels['vacation.saving'] = 'Salveguarda datos...';
$labels['vacation.action'] = 'Action pro message entrante';
$labels['vacation.keep'] = 'Conservar';
$labels['vacation.discard'] = 'Abandonar';
$labels['vacation.redirect'] = 'Rediriger a';
$labels['vacation.copy'] = 'Inviar copia a';
$labels['forward.redirect'] = 'Rediriger a';
$labels['forward.copy'] = 'Inviar copia a';
$labels['forward.on'] = 'Active';
$labels['forward.off'] = 'Non active';
$labels['forward.saving'] = 'Salveguarda datos...';
$labels['filladdresses'] = 'Plenar con tote mi adresses';
$labels['arialabelfiltersetactions'] = 'Actiones de gruppo de filtros';
$labels['arialabelfilteractions'] = 'Actiones de filtro';
$labels['arialabelfilterform'] = 'Proprietates de filtro';
$labels['ariasummaryfilterslist'] = 'Lista de filtros';
$labels['ariasummaryfiltersetslist'] = 'Lista de gruppos de filtros';
$labels['filterstitle'] = 'Modificar filtros de e-mail entrante';
$labels['vacationtitle'] = 'Modificar regula de absentia';
$labels['message'] = 'Message';
$labels['duplicate'] = 'es duplicate';
$labels['notduplicate'] = 'non es duplicate';
$labels['duplicate.handle'] = 'pseudonymo:';
$labels['duplicate.header'] = 'capite:';
$labels['duplicate.uniqueid'] = 'identificator:';
$labels['duplicate.seconds'] = 'expiration (secundas):';
$labels['duplicate.last'] = 'relative al ultime execution';
$messages['filterunknownerror'] = 'Error de servitor incognite.';
$messages['filterconnerror'] = 'Impossibile connecter al servitor.';
$messages['filterdeleteerror'] = 'Impossibile deler le filtro. Un error de servitor ha occurrite.';
$messages['filterdeleted'] = 'Le filtro ha essite delite.';
$messages['filtersaved'] = 'Le filtro ha essite salveguardate.';
$messages['filtersaveerror'] = 'Impossibile salveguardar le filtro. Un error de servitor ha occurrite.';
$messages['filterformerror'] = 'Le forma del filtro contine errores.';
$messages['filterdeleteconfirm'] = 'Es vos secur de voler deler le filtro seligite?';
$messages['ruledeleteconfirm'] = 'Es vos secur de voler deler le regula seligite?';
$messages['actiondeleteconfirm'] = 'Es vos secur de voler deler le action seligite?';
$messages['forbiddenchars'] = 'Le campo contine characteres interdicte.';
$messages['cannotbeempty'] = 'Le campo non pote esser vacue.';
$messages['ruleexist'] = 'Un filtro con le nomine specificate jam existe.';
$messages['activateerror'] = 'Impossibile activar le filtro(s) seligite. Un error de servitor ha occurrite.';
$messages['deactivateerror'] = 'Impossibile disactivar le filtro(s) seligite. Un error de servitor ha occurrite.';
$messages['deactivated'] = 'Le filtro(s) ha essite disactivate.';
$messages['activated'] = 'Le filtro(s) ha essite activate.';
$messages['moved'] = 'Le filtro ha essite displaciate.';
$messages['moveerror'] = 'Impossibile displaciar le filtro seligite. Un error de servitor ha occurrite.';
$messages['nametoolong'] = 'Le nomine es troppo longe.';
$messages['namereserved'] = 'Nomine reservate.';
$messages['setexist'] = 'Le gruppo jam existe.';
$messages['nodata'] = 'Al minus un position debe esser seligite.';
$messages['invaliddateformat'] = 'Le formato del data o del parte de data non es valide';
$messages['saveerror'] = 'Impossibile salveguardar le datos. Un error de servitor ha occurrite.';
$messages['emptyvacationbody'] = 'Le texto del message de vacantias es obligatori.';
$messages['duplicate.conflict.err'] = 'Ambe le capite e le identificator unic non es permittite.';
PK{c�\M^0��'�'"managesieve/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filteri';
$labels['managefilters'] = 'Upravljanje dolaznim email filterima';
$labels['filtername'] = 'Naziv filtera';
$labels['newfilter'] = 'Novi filter';
$labels['filteradd'] = 'Dodaj filter';
$labels['filterdel'] = 'Obriši filter';
$labels['scope'] = 'Opseg';
$labels['moveup'] = 'Pomjeri gore';
$labels['movedown'] = 'Pomjeri dole';
$labels['filterallof'] = 'poklapa se sa svim sljedećim pravilima';
$labels['filteranyof'] = 'poklapa se sa bilo kojim od sljedećih pravila';
$labels['filterany'] = 'sve poruke';
$labels['filtercontains'] = 'sadrži';
$labels['filternotcontains'] = 'ne sadrži';
$labels['filteris'] = 'jednako';
$labels['filterisnot'] = 'nije jednako';
$labels['filterexists'] = 'postoji';
$labels['filternotexists'] = 'ne postoji';
$labels['filtermatches'] = 'poklapa se sa izrazom';
$labels['filternotmatches'] = 'ne poklapa se sa izrazom';
$labels['filterregex'] = 'poklapa se sa regularnim izrazom';
$labels['filternotregex'] = 'ne poklapa se sa regularnim izrazom';
$labels['filterunder'] = 'ispod';
$labels['filterover'] = 'iznad';
$labels['addrule'] = 'Dodaj pravilo';
$labels['delrule'] = 'Obriši pravilo';
$labels['messagemoveto'] = 'Premjesti poruku u';
$labels['messageredirect'] = 'Preusmjeri poruku ka';
$labels['messagecopyto'] = 'Kopiraj poruku u';
$labels['messagesendcopy'] = 'Pošalji kopiju poruke';
$labels['messagereply'] = 'Odgovori';
$labels['messagedelete'] = 'Obriši poruku';
$labels['messagediscard'] = 'Odbaci sa porukom';
$labels['messagekeep'] = 'Zadrži poruku u sandučetu';
$labels['messagesrules'] = 'Za dolazne emailove:';
$labels['messagesactions'] = '...izvrši sljedeće akcije:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Obriši';
$labels['sender'] = 'Pošiljaoc';
$labels['recipient'] = 'Primaoc';
$labels['vacationaddr'] = 'Moje email adrese:';
$labels['vacationdays'] = 'Frekvencija slanja poruka (u danima):';
$labels['vacationinterval'] = 'Frekvencija slanja poruka:';
$labels['vacationreason'] = 'Tijelo poruke (razlog za odmor):';
$labels['vacationsubject'] = 'Naslov poruke:';
$labels['days'] = 'dana';
$labels['seconds'] = 'sekundi';
$labels['rulestop'] = 'Prestani procjenjivati pravila';
$labels['enable'] = 'Omogući/Onemogući';
$labels['filtersets'] = 'Setovi filtera';
$labels['filterdef'] = 'Definicija filtera';
$labels['active'] = 'aktivno';
$labels['none'] = 'ništa';
$labels['fromset'] = 'iz seta';
$labels['fromfile'] = 'iz datoteke';
$labels['filterdisabled'] = 'Filter je onemogućen';
$labels['countisgreaterthan'] = 'brojač je veći od';
$labels['countisgreaterthanequal'] = 'brojač je veći ili jednak';
$labels['countislessthan'] = 'brojač je manji od';
$labels['countislessthanequal'] = 'brojač je manji ili jednak';
$labels['countequals'] = 'brojač je jednak';
$labels['countnotequals'] = 'zbir nije jednak';
$labels['valueisgreaterthan'] = 'vrijednost je veća od';
$labels['valueisgreaterthanequal'] = 'vrijednost je veća ili jednaka';
$labels['valueislessthan'] = 'vrijednost je manja od';
$labels['valueislessthanequal'] = 'vrijednost je manja ili jednaka';
$labels['valueequals'] = 'vrijednost je jednaka';
$labels['valuenotequals'] = 'vrijednost nije jednaka';
$labels['setflags'] = 'Postavi oznake za poruku';
$labels['addflags'] = 'Dodaj oznake u poruku';
$labels['removeflags'] = 'Ukloni oznake iz poruke';
$labels['flagread'] = 'Pročitano';
$labels['flagdeleted'] = 'Obrisano';
$labels['flaganswered'] = 'Odgovoreno';
$labels['flagflagged'] = 'Važno';
$labels['flagdraft'] = 'Skica';
$labels['setvariable'] = 'Postavi promjenjivu';
$labels['setvarname'] = 'Naziv promjenjive:';
$labels['setvarvalue'] = 'Vrijednost promjenjive:';
$labels['setvarmodifiers'] = 'Parametri:';
$labels['varlower'] = 'mala slova';
$labels['varupper'] = 'velika slova';
$labels['varlowerfirst'] = 'prvi znak malim slovom';
$labels['varupperfirst'] = 'prvi znak velikim slovom';
$labels['varquotewildcard'] = 'citiraj specijalne znakove';
$labels['varlength'] = 'dužina';
$labels['notify'] = 'Pošalji napomenu';
$labels['notifytarget'] = 'Odredište napomene:';
$labels['notifymessage'] = 'Poruka napomene (neobavezno):';
$labels['notifyoptions'] = 'Opcije napomene (neobavezno):';
$labels['notifyfrom'] = 'Pošiljalac napomene (neobavezno):';
$labels['notifyimportance'] = 'Prioritet:';
$labels['notifyimportancelow'] = 'mali';
$labels['notifyimportancenormal'] = 'obični';
$labels['notifyimportancehigh'] = 'veliki';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Kreiraj filter';
$labels['usedata'] = 'Koristite sljedeće podatke u filteru:';
$labels['nextstep'] = 'Sljedeći korak';
$labels['...'] = '...';
$labels['currdate'] = 'Trenutni datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'zaglavlje:';
$labels['year'] = 'godina';
$labels['month'] = 'mjesec';
$labels['day'] = 'dan';
$labels['date'] = 'datum (gggg-mm-dd)';
$labels['julian'] = 'datum (julijanski)';
$labels['hour'] = 'sat';
$labels['minute'] = 'minuta';
$labels['second'] = 'sekunda';
$labels['time'] = 'vrijeme (hh:mm:ss)';
$labels['iso8601'] = 'datum (ISO8601)';
$labels['std11'] = 'datum (RFC2822)';
$labels['zone'] = 'vremenska zona';
$labels['weekday'] = 'sedmica (0-6)';
$labels['advancedopts'] = 'Napredne opcije';
$labels['body'] = 'Tijelo';
$labels['address'] = 'adresa';
$labels['envelope'] = 'koverta';
$labels['modifier'] = 'prilagođavanje:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'nekodiran (obični)';
$labels['contenttype'] = 'vrsta sadržaja';
$labels['modtype'] = 'vrsta:';
$labels['allparts'] = 'sve';
$labels['domain'] = 'domena';
$labels['localpart'] = 'lokalni dio';
$labels['user'] = 'korisnik';
$labels['detail'] = 'detalji';
$labels['comparator'] = 'upoređivač:';
$labels['default'] = 'početno';
$labels['octet'] = 'striktno (oktet)';
$labels['asciicasemap'] = 'osjetljivo na velika/mala slova (ascii-casemap)';
$labels['asciinumeric'] = 'numerički (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'unazad';
$labels['spamtestequals'] = 'jednako';
$labels['spamtestnotequals'] = 'nije jednako';
$labels['vacation.reply'] = 'Poruka sa odgovorom';
$labels['vacation.advanced'] = 'Napredmen postavke';
$labels['vacation.subject'] = 'Naslov';
$labels['vacation.body'] = 'Tijelo';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Uključeno';
$labels['vacation.off'] = 'Isključeno';
$labels['vacation.addresses'] = 'Moje email adrese';
$labels['vacation.interval'] = 'Interval odgovora';
$labels['vacation.saving'] = 'Snimam podatke...';
$labels['vacation.action'] = 'Akcija za dolazne poruke';
$labels['vacation.keep'] = 'Zadrži';
$labels['vacation.discard'] = 'Odbaci';
$labels['vacation.redirect'] = 'Preusmeri ka';
$labels['vacation.copy'] = 'Pošalji kopiju na';
$labels['forward.redirect'] = 'Preusmeri ka';
$labels['forward.copy'] = 'Pošalji kopiju na';
$labels['forward.on'] = 'Uključeno';
$labels['forward.off'] = 'Isključeno';
$labels['forward.saving'] = 'Snimam podatke...';
$labels['filladdresses'] = 'Popuni svim mojim adresama';
$labels['arialabelfiltersetactions'] = 'Akcije za filterske setove';
$labels['arialabelfilteractions'] = 'Filterske akcije';
$labels['arialabelfilterform'] = 'Svojstva filtera';
$labels['ariasummaryfilterslist'] = 'Lista filtera';
$labels['ariasummaryfiltersetslist'] = 'Lista filterskih setova';
$labels['filterstitle'] = 'Uredi filtere za dolazni email';
$labels['vacationtitle'] = 'Uredi pravila kada nisam na poslu';
$labels['duplicate.header'] = 'zaglavlje:';
$messages['filterunknownerror'] = 'Nepoznata serverska greška.';
$messages['filterconnerror'] = 'Nije se moguće povezati na server.';
$messages['filterdeleteerror'] = 'Nije moguće obrisati filter. Desila se serverska greška.';
$messages['filterdeleted'] = 'Filter je uspješno obrisan.';
$messages['filtersaved'] = 'Filter je uspješno sačuvan.';
$messages['filtersaveerror'] = 'Nije moguće sačuvati filter. Desila se serverska greška.';
$messages['filterdeleteconfirm'] = 'Da li zaista želite obrisati označeni filter?';
$messages['ruledeleteconfirm'] = 'Jeste li sigurni da želite obrisati označeno pravilo?';
$messages['actiondeleteconfirm'] = 'Jeste li sigurni da želite obrisati označenu akciju?';
$messages['forbiddenchars'] = 'U polje su uneseni nedozvoljeni znakovi.';
$messages['cannotbeempty'] = 'Polje ne može biti prazno.';
$messages['ruleexist'] = 'Filter s tim imenom već postoji.';
$messages['activateerror'] = 'Nije moguće omogućiti označene filtere. Desila se serverska greška.';
$messages['deactivateerror'] = 'Nije moguće onemogućiti označene filtere. Desila se serverska greška.';
$messages['deactivated'] = 'Filteri su uspješno omogućeni.';
$messages['activated'] = 'Filteri su uspješno onemogućeni.';
$messages['moved'] = 'Filteri su uspješno premješteni.';
$messages['moveerror'] = 'Nije moguće premjestiti označeni filter. Desila se serverska greška.';
$messages['nametoolong'] = 'Ime je predugo.';
$messages['namereserved'] = 'Ime je rezervisano.';
$messages['setexist'] = 'Set već postoji.';
$messages['nodata'] = 'Morate označiti barem jednu poziciju!';
$messages['invaliddateformat'] = 'Netačan datum ili dio formata datuma';
$messages['saveerror'] = 'Nije moguće snimiti podatke. Desila se serverska greška.';
$messages['emptyvacationbody'] = 'Tijelo poruke za odmor je neophodno!';
PK{c�\�v�pJpJ"managesieve/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Фильтры';
$labels['managefilters'] = 'Управление фильтрами для входящей почты';
$labels['filtername'] = 'Название фильтра';
$labels['newfilter'] = 'Новый фильтр';
$labels['filteradd'] = 'Добавить фильтр';
$labels['filterdel'] = 'Удалить фильтр';
$labels['rules'] = 'Правила';
$labels['actions'] = 'Действия';
$labels['scope'] = 'Область';
$labels['moveup'] = 'Сдвинуть вверх';
$labels['movedown'] = 'Сдвинуть вниз';
$labels['filterallof'] = 'соответствует всем указанным правилам';
$labels['filteranyof'] = 'соответствует любому из указанных правил';
$labels['filterany'] = 'все сообщения';
$labels['filtercontains'] = 'содержит';
$labels['filternotcontains'] = 'не содержит';
$labels['filteris'] = 'соответствует';
$labels['filterisnot'] = 'не соответствует';
$labels['filterexists'] = 'существует';
$labels['filternotexists'] = 'не существует';
$labels['filtermatches'] = 'совпадает с выражением';
$labels['filternotmatches'] = 'не совпадает с выражением';
$labels['filterregex'] = 'совпадает с регулярным выражением';
$labels['filternotregex'] = 'не совпадает с регулярным выражением';
$labels['filterunder'] = 'меньше';
$labels['filterover'] = 'больше';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME часть:';
$labels['mime-message'] = 'сообщение';
$labels['mime-anychild'] = 'любой';
$labels['mime-type'] = 'тип';
$labels['mime-subtype'] = 'подтип';
$labels['mime-contenttype'] = 'тип содержимого';
$labels['mime-param'] = 'параметр';
$labels['addrule'] = 'Добавить правило';
$labels['delrule'] = 'Удалить правило';
$labels['messagemoveto'] = 'Переместить сообщение в';
$labels['messageredirect'] = 'Перенаправить сообщение на';
$labels['messagecopyto'] = 'Скопировать сообщение в';
$labels['messagesendcopy'] = 'Отправить копию сообщения на';
$labels['messagereply'] = 'Ответить с сообщением';
$labels['messagedelete'] = 'Удалить сообщение';
$labels['messagediscard'] = 'Не принимать и ответить:';
$labels['messagekeep'] = 'Оставить сообщение во Входящих';
$labels['messagesrules'] = 'Для входящей почты:';
$labels['messagesactions'] = '...выполнить следующие действия:';
$labels['add'] = 'Добавить';
$labels['del'] = 'Удалить';
$labels['sender'] = 'Отправитель';
$labels['recipient'] = 'Получатель';
$labels['vacationaddr'] = 'Мои адреса эл. почты:';
$labels['vacationdays'] = 'Как часто отправлять сообщения (в днях):';
$labels['vacationinterval'] = 'Как часто отправлять сообщения:';
$labels['vacationreason'] = 'Текст сообщения (причина отсутствия):';
$labels['vacationfrom'] = 'Обратный адрес отправителя:';
$labels['vacationsubject'] = 'Тема сообщения:';
$labels['days'] = 'дней';
$labels['seconds'] = 'секунд';
$labels['rulestop'] = 'Закончить выполнение';
$labels['enable'] = 'Включить/Выключить';
$labels['filterset'] = 'Набор фильтров';
$labels['filtersets'] = 'Наборы фильтров';
$labels['filtersetadd'] = 'Добавить набор фильтров';
$labels['filtersetdel'] = 'Удалить набор фильтров';
$labels['filtersetact'] = 'Включить текущий набор фильтров';
$labels['filtersetdeact'] = 'Отключить текущий набор фильтров';
$labels['filterseteditraw'] = 'Изменить набор фильтров';
$labels['filtersetswitch'] = 'Включить/выключить набор фильтров';
$labels['filterdef'] = 'Описание фильтра';
$labels['filtersetname'] = 'Название набора фильтров';
$labels['newfilterset'] = 'Новый набор фильтров';
$labels['active'] = 'используется';
$labels['none'] = 'нет';
$labels['fromset'] = 'из набора';
$labels['fromfile'] = 'из файла';
$labels['filterdisabled'] = 'Отключить фильтр';
$labels['filterenabled'] = 'Фильтр включен';
$labels['countisgreaterthan'] = 'количество больше, чем';
$labels['countisgreaterthanequal'] = 'количество больше или равно';
$labels['countislessthan'] = 'количество меньше, чем';
$labels['countislessthanequal'] = 'количество меньше или равно';
$labels['countequals'] = 'количество равно';
$labels['countnotequals'] = 'количество не равно';
$labels['valueisgreaterthan'] = 'значение больше, чем';
$labels['valueisgreaterthanequal'] = 'значение больше или равно';
$labels['valueislessthan'] = 'значение меньше, чем';
$labels['valueislessthanequal'] = 'значение меньше или равно';
$labels['valueequals'] = 'значение равно';
$labels['valuenotequals'] = 'значение не равно';
$labels['setflags'] = 'Установить флаги на сообщение';
$labels['addflags'] = 'Добавить флаги к сообщению';
$labels['removeflags'] = 'Убрать флаги из сообщения';
$labels['flagread'] = 'Прочитано';
$labels['flagdeleted'] = 'Удалено';
$labels['flaganswered'] = 'Отвечено';
$labels['flagflagged'] = 'Помечено';
$labels['flagdraft'] = 'Черновик';
$labels['addheader'] = 'Добавить заголовок к сообщению';
$labels['deleteheader'] = 'Удалить заголовок из сообщения';
$labels['headername'] = 'Название заголовка';
$labels['headervalue'] = 'Значение заголовка';
$labels['headerpos'] = 'Положение заголовка';
$labels['headeratstart'] = 'в начале';
$labels['headeratend'] = 'в конце';
$labels['headeroccurrence'] = 'Появление/положение заголовка';
$labels['headerfromstart'] = 'с конца';
$labels['headerfromend'] = 'с начала';
$labels['headerpatterns'] = 'Шаблоны значений заголовков';
$labels['headermatchtype'] = 'тип соответствия:';
$labels['setvariable'] = 'Задать переменную';
$labels['setvarname'] = 'Имя переменной:';
$labels['setvarvalue'] = 'Значение переменной:';
$labels['setvarmodifiers'] = 'Модификаторы:';
$labels['varlower'] = 'нижний регистр';
$labels['varupper'] = 'верхний регистр';
$labels['varlowerfirst'] = 'первый символ в нижнем регистре';
$labels['varupperfirst'] = 'первый символ в верхнем регистре';
$labels['varquotewildcard'] = 'символ кавычек';
$labels['varlength'] = 'длина';
$labels['notify'] = 'Отправить уведомление';
$labels['notifytarget'] = 'Объект уведомления:';
$labels['notifymessage'] = 'Сообщение уведомления (не обязательно):';
$labels['notifyoptions'] = 'Параметры уведомления (не обязательно):';
$labels['notifyfrom'] = 'Отправитель уведомления (не обязательно):';
$labels['notifyimportance'] = 'Важность:';
$labels['notifyimportancelow'] = 'низкая';
$labels['notifyimportancenormal'] = 'нормальная';
$labels['notifyimportancehigh'] = 'высокая';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Телефон';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Создать фильтр';
$labels['usedata'] = 'Использовать следующие данные в фильтре:';
$labels['nextstep'] = 'Далее';
$labels['...'] = '...';
$labels['string'] = 'Строка';
$labels['currdate'] = 'Текущая дата';
$labels['datetest'] = 'Дата';
$labels['dateheader'] = 'заголовок:';
$labels['year'] = 'год';
$labels['month'] = 'месяц';
$labels['day'] = 'день';
$labels['date'] = 'дата (гггг-мм-дд)';
$labels['julian'] = 'дата (юлианская)';
$labels['hour'] = 'час';
$labels['minute'] = 'минута';
$labels['second'] = 'секунда';
$labels['time'] = 'время (чч:мм:сс)';
$labels['iso8601'] = 'дата (ISO8601)';
$labels['std11'] = 'дата (RFC2822)';
$labels['zone'] = 'часовой пояс';
$labels['weekday'] = 'день недели (0-6)';
$labels['advancedopts'] = 'Дополнительные параметры';
$labels['body'] = 'Тело письма';
$labels['address'] = 'адрес';
$labels['envelope'] = 'конверт';
$labels['modifier'] = 'модификатор области поиска:';
$labels['text'] = 'текст';
$labels['undecoded'] = 'необработанный (сырой)';
$labels['contenttype'] = 'тип содержимого';
$labels['modtype'] = 'поиск в адресах:';
$labels['allparts'] = 'везде';
$labels['domain'] = 'в имени домена';
$labels['localpart'] = 'только в имени пользователя, без домена';
$labels['user'] = 'в полном имени пользователя';
$labels['detail'] = 'в дополнительных сведениях';
$labels['comparator'] = 'способ сравнения:';
$labels['default'] = 'по умолчанию';
$labels['octet'] = 'Строгий (octet)';
$labels['asciicasemap'] = 'Регистронезависимый (ascii-casemap)';
$labels['asciinumeric'] = 'Числовой (ascii-numeric)';
$labels['index'] = 'индекс:';
$labels['indexlast'] = 'наоборот';
$labels['spamtest'] = 'Уровень спама';
$labels['spamtestisgreaterthan'] = 'больше, чем';
$labels['spamtestisgreaterthanequal'] = 'больше или равно';
$labels['spamtestislessthan'] = 'меньше чем';
$labels['spamtestislessthanequal'] = 'меньше или равно';
$labels['spamtestequals'] = 'соответствует';
$labels['spamtestnotequals'] = 'не соответствует';
$labels['spamtestisunknown'] = 'неизвестно';
$labels['vacation'] = 'Вне офиса';
$labels['vacation.reply'] = 'Ответное сообщение';
$labels['vacation.advanced'] = 'Дополнительные настройки';
$labels['vacation.from'] = 'Обратный адрес отправителя';
$labels['vacation.subject'] = 'Тема';
$labels['vacation.body'] = 'Тело письма';
$labels['vacation.start'] = 'Время начала';
$labels['vacation.end'] = 'Время окончания';
$labels['vacation.status'] = 'Состояние';
$labels['vacation.on'] = 'Вкл.';
$labels['vacation.off'] = 'Выкл.';
$labels['vacation.addresses'] = 'Мои адреса эл. почты';
$labels['vacation.interval'] = 'Интервал ответа';
$labels['vacation.after'] = 'Поместить правило отсутствия в офисе после';
$labels['vacation.saving'] = 'Сохранение данных...';
$labels['vacation.action'] = 'Действия с входящим сообщением';
$labels['vacation.keep'] = 'Оставить';
$labels['vacation.discard'] = 'Отменить';
$labels['vacation.redirect'] = 'Перенаправить на';
$labels['vacation.copy'] = 'Отправить копию на';
$labels['forward'] = 'Пересылка';
$labels['forward.redirect'] = 'Перенаправить на';
$labels['forward.copy'] = 'Отправить копию на';
$labels['forward.on'] = 'Вкл.';
$labels['forward.off'] = 'Выкл.';
$labels['forward.status'] = 'Статус:';
$labels['forward.action'] = 'Выполнить следующее действие для входящих сообщений:';
$labels['forward.saving'] = 'Сохранение данных...';
$labels['filladdresses'] = 'Заполнить всеми моими адресами';
$labels['arialabelfiltersetactions'] = 'Действия набора фильтров';
$labels['arialabelfilteractions'] = 'Действия фильтра';
$labels['arialabelfilterform'] = 'Свойства фильтра';
$labels['ariasummaryfilterslist'] = 'Список фильтров';
$labels['ariasummaryfiltersetslist'] = 'Список набора фильтров';
$labels['filterstitle'] = 'Редактировать фильтры для входящей почты';
$labels['vacationtitle'] = 'Изменить правило "Не в офисе"';
$labels['forwardtitle'] = 'Изменить правило пересылки';
$labels['message'] = 'Сообщение';
$labels['duplicate'] = 'дублируется';
$labels['notduplicate'] = 'не дублируется';
$labels['duplicate.handle'] = 'дескриптор:';
$labels['duplicate.header'] = 'заголовок:';
$labels['duplicate.uniqueid'] = 'идентификатор:';
$labels['duplicate.seconds'] = 'тайм-аут (секунд):';
$labels['duplicate.last'] = 'относительно последнего запуска';
$messages['filterunknownerror'] = 'Неизвестная ошибка сервера.';
$messages['filterconnerror'] = 'Невозможно подключиться к серверу.';
$messages['filterdeleteerror'] = 'Невозможно удалить фильтр. Ошибка сервера.';
$messages['filterdeleted'] = 'Фильтр успешно удалён.';
$messages['filtersaved'] = 'Фильтр успешно сохранён.';
$messages['filtersaveerror'] = 'Невозможно сохранить фильтр. Ошибка сервера.';
$messages['filterformerror'] = 'Форма фильтра содержит ошибки.';
$messages['filterdeleteconfirm'] = 'Вы действительно хотите удалить выделенный фильтр?';
$messages['ruledeleteconfirm'] = 'Вы уверенны, что хотите удалить выделенное правило?';
$messages['actiondeleteconfirm'] = 'Вы уверенны, что хотите удалить выделенное действие?';
$messages['forbiddenchars'] = 'Недопустимые символы в поле.';
$messages['cannotbeempty'] = 'Поле не может быть пустым.';
$messages['ruleexist'] = 'Фильтр с таким именем уже существует.';
$messages['setactivateerror'] = 'Невозможно включить выбранный набор фильтров. Ошибка сервера.';
$messages['setdeactivateerror'] = 'Невозможно отключить выбранный набор фильтров. Ошибка сервера.';
$messages['setdeleteerror'] = 'Невозможно удалить выбранный набор фильтров. Ошибка сервера.';
$messages['setactivated'] = 'Набор фильтров успешно включён.';
$messages['setdeactivated'] = 'Набор фильтров успешно отключён.';
$messages['setdeleted'] = 'Набор фильтров успешно удалён.';
$messages['setupdated'] = 'Набор фильтров успешно обновлён.';
$messages['setdeleteconfirm'] = 'Вы уверены в том, что хотите удалить выбранный набор фильтров?';
$messages['setcreateerror'] = 'Невозможно создать набор фильтров. Ошибка сервера.';
$messages['setcreated'] = 'Набор фильтров успешно создан.';
$messages['activateerror'] = 'Невозможно включить выбранный(е) фильтр(ы). Ошибка сервера.';
$messages['deactivateerror'] = 'Невозможно выключить выбранный(е) фильтр(ы). Ошибка сервера.';
$messages['deactivated'] = 'Фильтр(ы) успешно отключен(ы).';
$messages['activated'] = 'Фильтр(ы) успешно включен(ы).';
$messages['moved'] = 'Фильтр успешно перемещён.';
$messages['moveerror'] = 'Невозможно переместить фильтр. Ошибка сервера.';
$messages['nametoolong'] = 'Слишком длинное имя.';
$messages['namereserved'] = 'Зарезервированное имя.';
$messages['setexist'] = 'Набор уже существует.';
$messages['nodata'] = 'Нужно выбрать хотя бы одну позицию!';
$messages['invaliddateformat'] = 'Неверная дата или формат части даты';
$messages['saveerror'] = 'Невозможно сохранить данные. Ошибка сервера.';
$messages['vacationsaved'] = 'Данные об отсутствии успешно сохранены.';
$messages['forwardsaved'] = 'Данные о пересылке успешно сохранены.';
$messages['emptyvacationbody'] = 'Сообщение о причине отсутствия не может быть пустым!';
$messages['duplicate.conflict.err'] = 'Не разрешено использовать заголовок и уникальный идентификатор вместе.';
$messages['disabledaction'] = 'Действие не разрешено.';
$messages['lastindexempty'] = 'Индекс необходим при подсчете с конца';
$messages['noflagset'] = 'Нужно выбрать хотя бы один флаг.';
PK{c�\2~��0/0/"managesieve/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'پالایه‌ها';
$labels['managefilters'] = 'مدیریت پالایه‌های نامه ورودی';
$labels['filtername'] = 'نام پالایه';
$labels['newfilter'] = 'پالایه جدید';
$labels['filteradd'] = 'افزودن پالایه';
$labels['filterdel'] = 'حذف پالایه';
$labels['actions'] = 'اقدام‌ها';
$labels['scope'] = 'حوزه';
$labels['moveup'] = 'انتقال به بالا';
$labels['movedown'] = 'انتقال به پایین';
$labels['filterallof'] = 'مطابقت همه قوانین ذیل';
$labels['filteranyof'] = 'مطابقت هر کدام از قوانین ذیل';
$labels['filterany'] = 'همه پیام ها';
$labels['filtercontains'] = 'دربرگیرنده';
$labels['filternotcontains'] = 'بدون';
$labels['filteris'] = 'برابر است با';
$labels['filterisnot'] = 'برابر نیست با';
$labels['filterexists'] = 'وجود دارد';
$labels['filternotexists'] = 'وجود ندارد';
$labels['filtermatches'] = 'با عبارت تطابق دارد';
$labels['filternotmatches'] = 'با عبارت تطابق ندارد';
$labels['filterregex'] = 'با عبارت عمومی تطابق دارد';
$labels['filternotregex'] = 'با عبارت عمومی تطابق ندارد';
$labels['filterunder'] = 'زیر';
$labels['filterover'] = 'بالا';
$labels['addrule'] = 'افزودن قانون';
$labels['delrule'] = 'حذف قانون';
$labels['messagemoveto'] = 'انتقال پیام به';
$labels['messageredirect'] = 'بازگردانی پیام به';
$labels['messagecopyto'] = 'رونوشت پیام به';
$labels['messagesendcopy'] = 'ارسال رونوشت پیام به';
$labels['messagereply'] = 'پاسخ همراه پیام';
$labels['messagedelete'] = 'حذف پیام';
$labels['messagediscard'] = 'دور ریختن با پیام';
$labels['messagekeep'] = 'پیام را در صندوق ورودی نگه دار';
$labels['messagesrules'] = 'برای  صندوق ورودی:';
$labels['messagesactions'] = '...انجام اعمال ذیل:';
$labels['add'] = 'افزودن';
$labels['del'] = 'حذف';
$labels['sender'] = 'فرستنده';
$labels['recipient'] = 'گیرنده';
$labels['vacationdays'] = 'پیام ها در چه مواقعی فرستاده شدند (در روزهای):';
$labels['vacationinterval'] = 'مواقعی که پیام‌ها ارسال می‌شوند:';
$labels['vacationreason'] = 'بدنه پیام (علت مسافرت):';
$labels['vacationsubject'] = 'موضوع پیام:';
$labels['days'] = 'روزها';
$labels['seconds'] = 'ثانیه‌ها';
$labels['rulestop'] = 'توقف قوانین ارزیابی';
$labels['enable'] = 'فعال/غیرفعال‌سازی';
$labels['filtersets'] = 'مجموعه‌های پالایه‌ها';
$labels['filterdef'] = 'تعریف پالایه';
$labels['active'] = 'فعال';
$labels['none'] = 'هیچ‌کدام';
$labels['fromset'] = 'از مجموعه';
$labels['fromfile'] = 'از پرونده';
$labels['filterdisabled'] = 'پالایه غیرفعال شد';
$labels['countisgreaterthan'] = 'تعداد بیشتر است از';
$labels['countisgreaterthanequal'] = 'تعداد بیشتر یا مساوی است با';
$labels['countislessthan'] = 'تعداد کمتر است از';
$labels['countislessthanequal'] = 'تعداد کمتر یا مساوی است با';
$labels['countequals'] = 'تعداد مساوی است با';
$labels['countnotequals'] = 'تعداد برابر نیست با';
$labels['valueisgreaterthan'] = 'مقدار بیشتر است از';
$labels['valueisgreaterthanequal'] = 'مقدار بیشتر یا مساوی است با';
$labels['valueislessthan'] = 'مقدار کمتر است از';
$labels['valueislessthanequal'] = 'مقدار کمتر یا مساوی است با';
$labels['valueequals'] = 'مقدار مساوی است با';
$labels['valuenotequals'] = 'مقدار برابر نیست با';
$labels['setflags'] = 'انتخاب پرچم‌ها برای پیام';
$labels['addflags'] = 'افزودن پرچم‌ها برای پیام';
$labels['removeflags'] = 'حذف پرچم‌ها از پیام';
$labels['flagread'] = 'خوانده‌‌شده';
$labels['flagdeleted'] = 'حذف شده';
$labels['flaganswered'] = 'جواب داده شده';
$labels['flagflagged'] = 'پرچم‌دار';
$labels['flagdraft'] = 'پیش‌نویس';
$labels['setvariable'] = 'تنظیم متغیر';
$labels['setvarname'] = 'نام متغییر';
$labels['setvarvalue'] = 'مقدار متغیر:';
$labels['setvarmodifiers'] = 'اصلاح:';
$labels['varlower'] = 'حروف کوچک';
$labels['varupper'] = 'حروف بزرگ';
$labels['varlowerfirst'] = 'حرف اول کوچک';
$labels['varupperfirst'] = 'حرف اول بزرگ';
$labels['varquotewildcard'] = 'نقل قول کاراکترهای خاص';
$labels['varlength'] = 'طول';
$labels['notify'] = 'ارسال تذکر';
$labels['notifytarget'] = 'مقصد آگاه‌سازی:';
$labels['notifymessage'] = 'متن آگاه‌سازی (تختیاری):';
$labels['notifyoptions'] = 'گزینه‌های آگاه‌سازی (اختیاری):';
$labels['notifyfrom'] = 'فرستنده آگاه‌سازی (اختیاری):';
$labels['notifyimportance'] = 'اهمیت:';
$labels['notifyimportancelow'] = 'کم';
$labels['notifyimportancenormal'] = 'معمولی';
$labels['notifyimportancehigh'] = 'زیاد';
$labels['notifymethodmailto'] = 'رایانامه';
$labels['notifymethodtel'] = 'تلفن';
$labels['notifymethodsms'] = 'پیامک';
$labels['filtercreate'] = 'ایجاد پالایه';
$labels['usedata'] = 'استفاده از داده ذیل در پالایه:';
$labels['nextstep'] = 'مرحله بعدی';
$labels['...'] = '...';
$labels['currdate'] = 'تاریخ جاری';
$labels['datetest'] = 'تاریخ';
$labels['dateheader'] = 'سربرگ:';
$labels['year'] = 'سال';
$labels['month'] = 'ماه';
$labels['day'] = 'روز';
$labels['date'] = 'تاریخ (yyyy-mm-dd)';
$labels['julian'] = 'تاریخ (میلادی)';
$labels['hour'] = 'ساعت';
$labels['minute'] = 'دقیقه';
$labels['second'] = 'ثانیه';
$labels['time'] = 'ساعت (hh:mm:ss)';
$labels['iso8601'] = 'تاریخ (ISO8601)';
$labels['std11'] = 'تاریخ (RFC2822)';
$labels['zone'] = 'منطقه زمانی';
$labels['weekday'] = 'روز هفته (0-6)';
$labels['advancedopts'] = 'گزینه‌های پیشرفته';
$labels['body'] = 'بدنه';
$labels['address'] = 'نشانی';
$labels['envelope'] = 'پاکت';
$labels['modifier'] = 'تغییر دهنده:';
$labels['text'] = 'متن‌';
$labels['undecoded'] = 'کد نشده (خام)';
$labels['contenttype'] = 'نوع محتوا';
$labels['modtype'] = 'نوع';
$labels['allparts'] = 'همه';
$labels['domain'] = 'دامنه';
$labels['localpart'] = 'قسمت محلی';
$labels['user'] = 'کاربر';
$labels['detail'] = 'جزئیات';
$labels['comparator'] = 'مقایسه:';
$labels['default'] = 'پیش‌فرض';
$labels['octet'] = 'سخت (octet)';
$labels['asciicasemap'] = 'حساس به حروه کوچک و بزرگ (ascii-casemap)';
$labels['asciinumeric'] = 'عددی (ascii-numeric)';
$labels['index'] = 'فهرست:';
$labels['indexlast'] = 'به عقب';
$labels['spamtestequals'] = 'برابر است با';
$labels['spamtestnotequals'] = 'برابر نیست با';
$labels['vacation.reply'] = 'پاسخ به یغام';
$labels['vacation.advanced'] = 'تنظیمات پیشرفته';
$labels['vacation.subject'] = 'موضوع';
$labels['vacation.body'] = 'بدنه';
$labels['vacation.status'] = 'وضعیت';
$labels['vacation.on'] = 'روشن';
$labels['vacation.off'] = 'خاموش';
$labels['vacation.interval'] = 'فاصله پاسخ';
$labels['vacation.saving'] = 'ذخیره داده‌ها...';
$labels['vacation.action'] = 'کنش عملکرد ورودی';
$labels['vacation.keep'] = 'نگه داشتن';
$labels['vacation.discard'] = 'دور انداختن';
$labels['vacation.redirect'] = 'بازگردانی به';
$labels['vacation.copy'] = 'ارسال رونوشت به';
$labels['forward.redirect'] = 'بازگردانی به';
$labels['forward.copy'] = 'ارسال رونوشت به';
$labels['forward.on'] = 'روشن';
$labels['forward.off'] = 'خاموش';
$labels['forward.saving'] = 'ذخیره داده‌ها...';
$labels['arialabelfiltersetactions'] = 'کنش‌های مجموعه پالایه';
$labels['arialabelfilteractions'] = 'کنش‌های پالایه';
$labels['arialabelfilterform'] = 'خصوصیات پالایه';
$labels['ariasummaryfilterslist'] = 'فهرست پالایه‌ها';
$labels['ariasummaryfiltersetslist'] = 'فهرست مجموعه پالایه‌ها';
$labels['filterstitle'] = 'ویرایش پالایه‌های پست ورودی';
$labels['vacationtitle'] = 'ویرایش نقش بیرون از دفتر';
$labels['duplicate.header'] = 'سربرگ:';
$messages['filterunknownerror'] = 'خطای سرور نامعلوم.';
$messages['filterconnerror'] = 'ناتوانی در اتصال به سرور.';
$messages['filterdeleteerror'] = 'ناتوانی در حذف پالایه. خطای سرور رخ داد.';
$messages['filterdeleted'] = 'پالایه با کام‌یابی حذف شد.';
$messages['filtersaved'] = 'پالایه با کام‌یابی ذخیره شد.';
$messages['filtersaveerror'] = 'ناتوانی در ذخیره فیلتر. خطای سرور رخ داد.';
$messages['filterdeleteconfirm'] = 'آیا مطمئن به حذف پالایه انتخاب شده هستید؟';
$messages['ruledeleteconfirm'] = 'آیا مطمئن هستید که می خواهید قانون انتخاب شده را حذف کنید؟';
$messages['actiondeleteconfirm'] = 'آیا مطمئن هستید که می خواهید عمل انتخاب شده را حذف کنید.';
$messages['forbiddenchars'] = 'حروف ممنوعه در فیلد.';
$messages['cannotbeempty'] = 'فیلد نمی تواند خالی باشد.';
$messages['ruleexist'] = 'پالایه با این نام مشخص وجود دارد.';
$messages['activateerror'] = 'ناتوانی در فعال کردن پالایه(های) انتخاب شده. خطای سرور رخ داد.';
$messages['deactivateerror'] = 'ناتوانی در غیرفعال کردن پالایه(های) انتخاب شده. خطای سرور رخ داد.';
$messages['deactivated'] = 'پالایه(ها) با کام‌یابی فعال شدند.';
$messages['activated'] = 'پالایه(ها) با کام‌یابی غیرفعال شدند.';
$messages['moved'] = 'پالایه با کام‌یابی منتقل شد.';
$messages['moveerror'] = 'ناتوانی در انتقال پالایه انتخاب شده. خطای سرور رخ داد.';
$messages['nametoolong'] = 'نام خیلی بلند.';
$messages['namereserved'] = 'نام رزرو شده.';
$messages['setexist'] = 'مجموعه در حال حاضر موجود است.';
$messages['nodata'] = 'حداقل باید یک موقعیت باید انتخاب شود.';
$messages['invaliddateformat'] = 'قالب تاریخ اشتباه';
$messages['saveerror'] = 'ناتوانی در ذخیره اطلاعات. خطای سرور رخ داد.';
$messages['emptyvacationbody'] = 'متن پیام تعطیلی لازم است!';
PK{c�\6+��mm"managesieve/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Síur';
$labels['filtername'] = 'Heiti síu';
$labels['newfilter'] = 'Ný sía';
$labels['filteradd'] = 'Bæta við síu';
$labels['filterdel'] = 'Eyða síu';
$labels['rules'] = 'Reglur';
$labels['actions'] = 'Aðgerðir';
$labels['scope'] = 'Umfang';
$labels['moveup'] = 'Færa upp';
$labels['movedown'] = 'Færa niður';
$labels['filterany'] = 'öll skilaboð';
$labels['filtercontains'] = 'inniheldur';
$labels['filternotcontains'] = 'inniheldur ekki';
$labels['filteris'] = 'er jafnt og';
$labels['filterisnot'] = 'er ekki jafnt og';
$labels['filterexists'] = 'er til';
$labels['filternotexists'] = 'er ekki til';
$labels['filterunder'] = 'undir';
$labels['filterover'] = 'yfir';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME part:';
$labels['mime-message'] = 'skilaboð';
$labels['addrule'] = 'Bæta við reglu';
$labels['delrule'] = 'Eyða reglu';
$labels['messagemoveto'] = 'Færa skilaboð í';
$labels['messageredirect'] = 'Endurbeina skilaboðum til';
$labels['messagecopyto'] = 'Afrita skilaboð í';
$labels['messagesendcopy'] = 'Senda afrit af skilaboðum til';
$labels['messagedelete'] = 'Eyða skilaboðum';
$labels['add'] = 'Bæta við';
$labels['del'] = 'Eyða';
$labels['sender'] = 'Sendandi';
$labels['recipient'] = 'Viðtakandi';
$labels['vacationaddr'] = 'Tölvupóstföngin mín:';
$labels['vacationsubject'] = 'Meginmál skilaboða:';
$labels['days'] = 'dagar';
$labels['seconds'] = 'sekúndur';
$labels['enable'] = 'Gera virkt/óvirkt';
$labels['active'] = 'virkt';
$labels['none'] = 'ekkert';
$labels['flagread'] = 'Lesið';
$labels['flagdeleted'] = 'Eytt';
$labels['flaganswered'] = 'Svarað';
$labels['flagflagged'] = 'Flaggað';
$labels['flagdraft'] = 'Drög';
$labels['varlower'] = 'lágstafa';
$labels['varupper'] = 'hástafa';
$labels['varlowerfirst'] = 'fyrsti stafur lágstafur';
$labels['varupperfirst'] = 'fyrsti stafur hástafur';
$labels['varlength'] = 'lengd';
$labels['notifyimportance'] = 'Mikilvægi:';
$labels['notifyimportancelow'] = 'lítið';
$labels['notifyimportancenormal'] = 'venjulegt';
$labels['notifyimportancehigh'] = 'mikið';
$labels['notifymethodmailto'] = 'Tölvupóstfang';
$labels['notifymethodtel'] = 'Sími';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Búa til síu';
$labels['nextstep'] = 'Næsta skref';
$labels['...'] = '...';
$labels['currdate'] = 'Dagsetning núna';
$labels['datetest'] = 'Dagsetning';
$labels['year'] = 'ár';
$labels['month'] = 'mánuður';
$labels['day'] = 'dagur';
$labels['date'] = 'dagsetning (yyyy-mm-dd)';
$labels['julian'] = 'dagsetning (júlíönsk)';
$labels['hour'] = 'klukkustund';
$labels['minute'] = 'mínúta';
$labels['second'] = 'sekúnda';
$labels['time'] = 'tími (hh:mm:ss)';
$labels['iso8601'] = 'dagsetning (ISO8601)';
$labels['std11'] = 'dagsetning (RFC2822)';
$labels['zone'] = 'tímabelti';
$labels['weekday'] = 'vikudagur (0-6)';
$labels['advancedopts'] = 'Ítarlegir valkostir';
$labels['body'] = 'Meginmál';
$labels['address'] = 'heimilisfang';
$labels['envelope'] = 'umslag';
$labels['text'] = 'texti';
$labels['allparts'] = 'allt';
$labels['domain'] = 'lén';
$labels['user'] = 'notandi';
$labels['detail'] = 'nánar';
$labels['indexlast'] = 'afturábak';
$labels['spamtestequals'] = 'er jafnt og';
$labels['spamtestnotequals'] = 'er ekki jafnt og';
$labels['vacation'] = 'Ekki í vinnunni';
$labels['vacation.reply'] = 'Svarskilaboð';
$labels['vacation.advanced'] = 'Flóknari stillingar';
$labels['vacation.subject'] = 'Viðfangsefni';
$labels['vacation.body'] = 'Meginmál';
$labels['vacation.start'] = 'Upphafstími';
$labels['vacation.end'] = 'Lokatími';
$labels['vacation.status'] = 'Staða';
$labels['vacation.on'] = 'Kveikt';
$labels['vacation.off'] = 'Slökkt';
$labels['vacation.addresses'] = 'Tölvupóstföngin mín';
$labels['vacation.saving'] = 'Vista gögn...';
$labels['vacation.keep'] = 'Halda';
$labels['vacation.discard'] = 'Henda';
$labels['vacation.redirect'] = 'Endurbeina til';
$labels['vacation.copy'] = 'Senda afrit á';
$labels['forward'] = 'Áframsending';
$labels['forward.redirect'] = 'Endurbeina til';
$labels['forward.copy'] = 'Senda afrit á';
$labels['forward.on'] = 'Kveikt';
$labels['forward.off'] = 'Slökkt';
$labels['forward.status'] = 'Staða:';
$labels['forward.saving'] = 'Vista gögn...';
$labels['message'] = 'Skilaboð';
$messages['nametoolong'] = 'Nafn er of langt.';
$messages['namereserved'] = 'Nafn er frátekið.';
PK{c�\��'�'"managesieve/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Bộ lọc';
$labels['managefilters'] = 'Quản lý bộ lọc thư đến';
$labels['filtername'] = 'Lọc tên';
$labels['newfilter'] = 'Bộ lọc mới';
$labels['filteradd'] = 'Thêm bộ lọc';
$labels['filterdel'] = 'Xóa bộ lọc';
$labels['scope'] = 'Phạm vi';
$labels['moveup'] = 'Chuyển lên';
$labels['movedown'] = 'Chuyển xuống';
$labels['filterallof'] = 'Phù hợp với tất cả các qui luật sau đây';
$labels['filteranyof'] = 'Phù hợp với bất kỳ qui luật nào sau đây';
$labels['filterany'] = 'Tất cả tin nhắn';
$labels['filtercontains'] = 'Bao gồm';
$labels['filternotcontains'] = 'Không bao gồm';
$labels['filteris'] = 'Bằng với';
$labels['filterisnot'] = 'Không bằng với';
$labels['filterexists'] = 'Tồn tại';
$labels['filternotexists'] = 'Không tồn tại';
$labels['filtermatches'] = 'Tương ứng với cách diễn đạt';
$labels['filternotmatches'] = 'Không tương ứng với cách diễn đạt';
$labels['filterregex'] = 'Tương ứng với cách diễn đạt thông thường';
$labels['filternotregex'] = 'Không phù  hợp với cách diễn đạt thông thường';
$labels['filterunder'] = 'Dưới';
$labels['filterover'] = 'Hơn';
$labels['addrule'] = 'Thêm qui luật';
$labels['delrule'] = 'Xóa qui luật';
$labels['messagemoveto'] = 'Chuyển tin nhắn tới';
$labels['messageredirect'] = 'Gửi lại tin nhắn tới';
$labels['messagecopyto'] = 'Sao chép tin nhắn tới';
$labels['messagesendcopy'] = 'Gửi bản sao chép tin nhắn tới';
$labels['messagereply'] = 'Trả lời tin nhắn';
$labels['messagedelete'] = 'Xóa thư';
$labels['messagediscard'] = 'Loại bỏ với tin nhắn';
$labels['messagekeep'] = 'Giữ thư ở Hộp thư chính';
$labels['messagesrules'] = 'Với thư đến';
$labels['messagesactions'] = 'Thực hiện các hành động sau:';
$labels['add'] = 'Thêm';
$labels['del'] = 'Xoá';
$labels['sender'] = 'Người gửi';
$labels['recipient'] = 'Người nhận';
$labels['vacationdays'] = 'Số lần gửi thư (trong ngày)';
$labels['vacationinterval'] = 'Tần suất gửi thư:';
$labels['vacationreason'] = 'Nội dung chính';
$labels['vacationsubject'] = 'Tiêu đề thư';
$labels['days'] = 'ngày';
$labels['seconds'] = 'giây';
$labels['rulestop'] = 'Ngừng đánh giá qui luật';
$labels['enable'] = 'Kích hoạt/Không kích hoạt';
$labels['filtersets'] = 'Thiết lập bộ lọc';
$labels['filterdef'] = 'Định nghĩa bộ lọc';
$labels['active'] = 'Kích hoạt';
$labels['none'] = 'Không có';
$labels['fromset'] = 'Từ thiết lập';
$labels['fromfile'] = 'Từ hồ sơ';
$labels['filterdisabled'] = 'Bộ lọc được ngừng hoạt động';
$labels['countisgreaterthan'] = 'Đếm lớn hơn';
$labels['countisgreaterthanequal'] = 'Đếm lớn hơn hoặc bằng';
$labels['countislessthan'] = 'Đếm ít hơn';
$labels['countislessthanequal'] = 'Đếm ít hơn hoặc bằng';
$labels['countequals'] = 'Đếm bằng';
$labels['countnotequals'] = 'đếm không bằng với';
$labels['valueisgreaterthan'] = 'Giá trị lớn hơn';
$labels['valueisgreaterthanequal'] = 'Giá trị lớn hơn hoặc bằng';
$labels['valueislessthan'] = 'Giá trị nhỏ hơn';
$labels['valueislessthanequal'] = 'Giá trị nhỏ hơn hoặc bằng';
$labels['valueequals'] = 'Giá trị bằng';
$labels['valuenotequals'] = 'giá trị không bằng với';
$labels['setflags'] = 'Thiết lập đánh dấu cho thư';
$labels['addflags'] = 'Thêm đánh dấu cho thư';
$labels['removeflags'] = 'Bỏ đánh dấu khỏi thư';
$labels['flagread'] = 'Đọc';
$labels['flagdeleted'] = 'Đã được xóa';
$labels['flaganswered'] = 'Đã trả lời';
$labels['flagflagged'] = 'Đã đánh dấu';
$labels['flagdraft'] = 'Nháp';
$labels['setvariable'] = 'Đặt biến';
$labels['setvarname'] = 'Tên biến:';
$labels['setvarvalue'] = 'Giá trị biến:';
$labels['setvarmodifiers'] = 'Bộ chia:';
$labels['varlower'] = 'viết thường';
$labels['varupper'] = 'viết hoa';
$labels['varlowerfirst'] = 'chữ cái đầu viết thường';
$labels['varupperfirst'] = 'chữ cái đầu viết hoa';
$labels['varquotewildcard'] = 'trích dẫn ký tự đặc biệt';
$labels['varlength'] = 'độ dài';
$labels['notify'] = 'Gửi thông báo';
$labels['notifytarget'] = 'Mục tiêu thông báo:';
$labels['notifymessage'] = 'Nội dung thông báo (tuỳ chọn):';
$labels['notifyoptions'] = 'Lựa chọn thông báo (tuỳ chọn):';
$labels['notifyfrom'] = 'Người gửi thông báo (tuỳ chọn):';
$labels['notifyimportance'] = 'Mức độ quan trọng:';
$labels['notifyimportancelow'] = 'thấp';
$labels['notifyimportancenormal'] = 'vừa phải';
$labels['notifyimportancehigh'] = 'cao';
$labels['notifymethodmailto'] = 'Thư điện tử';
$labels['notifymethodtel'] = 'Điện thoại';
$labels['notifymethodsms'] = 'Tin nhắn';
$labels['filtercreate'] = 'Tạo bộ lọc';
$labels['usedata'] = 'Dùng dữ liệu trong bộ lọc sau:';
$labels['nextstep'] = 'Bước tiếp theo';
$labels['...'] = '…';
$labels['currdate'] = 'Ngày hiện tại';
$labels['datetest'] = 'Ngày';
$labels['dateheader'] = 'tiêu đề:';
$labels['year'] = 'năm';
$labels['month'] = 'tháng';
$labels['day'] = 'ngày';
$labels['date'] = 'ngày (cú pháp: năm-tháng-ngày)';
$labels['julian'] = 'ngày (theo kiểu Julian)';
$labels['hour'] = 'giờ';
$labels['minute'] = 'phút';
$labels['second'] = 'giây';
$labels['time'] = 'giờ (cú pháp: giờ:phút:giây)';
$labels['iso8601'] = 'ngày (theo chuẩn ISO 8601)';
$labels['std11'] = 'ngày (theo chuẩn RFC 2822)';
$labels['zone'] = 'vùng thời gian';
$labels['weekday'] = 'ngày trog tuần (0-6)';
$labels['advancedopts'] = 'Tùy chọn tính năng cao hơn';
$labels['body'] = 'Nội dung';
$labels['address'] = 'Địa chỉ';
$labels['envelope'] = 'Phong bì';
$labels['modifier'] = 'Bổ nghĩa';
$labels['text'] = 'Văn bản';
$labels['undecoded'] = 'Chưa được giải mã (nguyên bản)';
$labels['contenttype'] = 'Kiểu mẫu nội dung';
$labels['modtype'] = 'Kiểu:';
$labels['allparts'] = 'Tất cả';
$labels['domain'] = 'Phạm vi';
$labels['localpart'] = 'Phần nội bộ';
$labels['user'] = 'Người dùng';
$labels['detail'] = 'Chi tiết';
$labels['comparator'] = 'Vật so sánh';
$labels['default'] = 'Mặc định';
$labels['octet'] = 'Khắt khe';
$labels['asciicasemap'] = 'Không phân biệt chữ hoa chữ thường';
$labels['asciinumeric'] = 'Bảng mã ASCII';
$labels['index'] = 'chỉ mục:';
$labels['indexlast'] = 'ngược';
$labels['spamtestequals'] = 'Bằng với';
$labels['spamtestnotequals'] = 'Không bằng với';
$labels['vacation.reply'] = 'Trả lời thư';
$labels['vacation.advanced'] = 'Tùy chọn tính năng cao hơn';
$labels['vacation.subject'] = 'Tiêu đề';
$labels['vacation.body'] = 'Nội dung thư';
$labels['vacation.status'] = 'Trạng thái';
$labels['vacation.on'] = 'Bật';
$labels['vacation.off'] = 'Tắt';
$labels['vacation.interval'] = 'Khoảng thời gian trả lời';
$labels['vacation.saving'] = 'Lưu lại dữ liệu...';
$labels['vacation.keep'] = 'Giữ';
$labels['forward.on'] = 'Bật';
$labels['forward.off'] = 'Tắt';
$labels['forward.saving'] = 'Lưu lại dữ liệu...';
$labels['duplicate.header'] = 'tiêu đề:';
$messages['filterunknownerror'] = 'Không tìm được lỗi máy chủ';
$messages['filterconnerror'] = 'Không kết nối được với máy chủ.';
$messages['filterdeleteerror'] = 'Không thể xóa bộ lọc. Xuất hiện lỗi ở máy chủ';
$messages['filterdeleted'] = 'Xóa bộ lọc thành công';
$messages['filtersaved'] = 'Lưu bộ lọc thành công';
$messages['filtersaveerror'] = 'Không thể lưu bộ lọc. Xuất hiện lỗi ở máy chủ';
$messages['filterdeleteconfirm'] = 'Bạn có thực sự muốn xóa bộ lọc được chọn?';
$messages['ruledeleteconfirm'] = 'Bạn có chắc chắn muốn xóa qui luật được chọn?';
$messages['actiondeleteconfirm'] = 'Bạn có chắc chắn muốn xóa hành động được chọn?';
$messages['forbiddenchars'] = 'Ký tự bị cấm trong ô';
$messages['cannotbeempty'] = 'Ô không thể bị bỏ trống';
$messages['ruleexist'] = 'Đã tồn tại bộ lọc với tên cụ thế';
$messages['activateerror'] = 'Không thể khởi động (các) bộ lọc được chọn. Có lỗi xuất hiện ở máy chủ';
$messages['deactivateerror'] = 'Không thể tắt (các) bộ lọc đã chọn. Có lỗi xuất hiện ở máy chủ';
$messages['deactivated'] = 'Bộ lọc được khởi động thành công';
$messages['activated'] = 'Bộ lọc được tắt thành công';
$messages['moved'] = 'Bộ lọc được chuyển đi thành công';
$messages['moveerror'] = 'Không thể chuyển bộ lọc đã chọn. Có lỗi xuất hiện ở máy chủ.';
$messages['nametoolong'] = 'Tên quá dài';
$messages['namereserved'] = 'Tên đã được bảo vệ';
$messages['setexist'] = 'Thiết lập đã tồn tại';
$messages['nodata'] = 'Ít nhất một vị trí phải được chọn';
$messages['invaliddateformat'] = 'Lỗi không đúng cú pháp ngày hoặc nhập ngày sai';
$messages['saveerror'] = 'Không thể lưu trữ dữ liệu. Xuất hiện lỗi ở máy chủ.';
PK{c�\D�
]]"managesieve/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'ตัวกรองข้อมูล';
$labels['managefilters'] = 'จัดการตัวกรองอีเมลขาเข้า';
$labels['filtername'] = 'ชื่อตัวกรองข้อมูล';
$labels['newfilter'] = 'สร้างตัวกรองข้อมูลใหม่';
$labels['filteradd'] = 'เพิ่มตัวกรองข้อมูล';
$labels['filterdel'] = 'ลบตัวกรองข้อมูล';
$labels['scope'] = 'ขอบเขต';
$labels['moveup'] = 'เลื่อนขึ้น';
$labels['movedown'] = 'เลื่อนลง';
$labels['filterallof'] = 'จับคู่กฎทั้งหมดต่อไปนี้';
$labels['filteranyof'] = 'จับคู่กฎใด ๆ ต่อไปนี้';
$labels['filterany'] = 'ข้อความทั้งหมด';
$labels['filtercontains'] = 'ที่มีคำว่า';
$labels['filternotcontains'] = 'ไม่มีคำว่า';
$labels['filteris'] = 'ที่มีค่าเท่ากับ';
$labels['filterisnot'] = 'ที่มีค่าไม่เท่ากับ';
$labels['filterexists'] = 'ที่มีอยู่';
$labels['filternotexists'] = 'ไม่มีอยู่';
$labels['filtermatches'] = 'ตรงกับนิพจน์';
$labels['filternotmatches'] = 'ไม่ตรงกับนิพจน์';
$labels['addrule'] = 'เพิ่มกฏ';
$labels['delrule'] = 'ลบกฏ';
$labels['messagemoveto'] = 'ย้ายข้อความไปที่';
$labels['messageredirect'] = 'เปลียนเส้นทางข้อความไปที่';
$labels['messagecopyto'] = 'คัดลอกข้อความไปที่';
$labels['messagesendcopy'] = 'ส่งข้อความคัดลอกไปที่';
$labels['messagedelete'] = 'ลบข้อความ';
$labels['messagediscard'] = 'ยกเลิกข้อความ';
$labels['messagesrules'] = 'สำหรับอีเมลขาเข้า:';
$labels['add'] = 'เพิ่ม';
$labels['del'] = 'ลบ';
$labels['sender'] = 'ผู้ส่ง';
$labels['recipient'] = 'ผู้รับ';
$labels['vacationsubject'] = 'หัวเรื่องข้อความ:';
$labels['enable'] = 'เปิดใช้งาน/ปิดใช้งาน';
$labels['flagread'] = 'อ่าน';
$labels['flagdeleted'] = 'ลบแล้ว';
$labels['flagflagged'] = 'ปักธง';
$labels['notifymethodmailto'] = 'อีเมล์';
$labels['notifymethodtel'] = 'โทรศัพท์';
$labels['datetest'] = 'วันที่';
$labels['advancedopts'] = 'ตัวเลือกขั้นสูง';
$labels['body'] = 'เนื้อหา';
$labels['spamtestequals'] = 'ที่มีค่าเท่ากับ';
$labels['spamtestnotequals'] = 'ที่มีค่าไม่เท่ากับ';
$labels['vacation.subject'] = 'หัวจดหมาย';
$labels['vacation.body'] = 'เนื้อหา';
$labels['vacation.keep'] = 'เก็บ';
PK{c�\�o�:�'�'"managesieve/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'تصفية';
$labels['managefilters'] = 'ادارة تصفية البريد الوارد';
$labels['filtername'] = 'اسم التصفية';
$labels['newfilter'] = 'تصفية جديدة';
$labels['filteradd'] = 'اضافة تصفية';
$labels['filterdel'] = 'حذف تصفية';
$labels['actions'] = 'الإجراءات';
$labels['scope'] = 'مجال';
$labels['moveup'] = 'نقل الى الاعلى ';
$labels['movedown'] = 'نقل الى الاسفل';
$labels['filterallof'] = 'مطابقة جميع القواعد التالية';
$labels['filteranyof'] = 'مطابقة اي القواعد التالية';
$labels['filterany'] = 'كل الرسائل';
$labels['filtercontains'] = 'محتوى';
$labels['filternotcontains'] = 'بدون محتوى';
$labels['filteris'] = 'مساوي الى';
$labels['filterisnot'] = 'لا يساوي';
$labels['filterexists'] = 'موجود';
$labels['filternotexists'] = 'غير موجود';
$labels['filtermatches'] = 'يطابق التعبير';
$labels['filternotmatches'] = 'لا يطابق التعبير';
$labels['filterregex'] = 'يطابق التعبير العادي';
$labels['filternotregex'] = 'لا يطابق التعبير العادي';
$labels['filterunder'] = 'تحت';
$labels['filterover'] = 'خلال';
$labels['addrule'] = 'اضافة قاعدة';
$labels['delrule'] = 'حذف قاعدة';
$labels['messagemoveto'] = 'نقل الرساله الى ';
$labels['messageredirect'] = 'إعادة توجيه الرسالة الى ';
$labels['messagecopyto'] = 'نسخ الرسالة الى ';
$labels['messagesendcopy'] = 'ارسال نسخة من الرسالة الى ';
$labels['messagereply'] = 'الرد مع رسالة';
$labels['messagedelete'] = 'حذف الرسالة';
$labels['messagediscard'] = 'تجاهل مع الرسالة';
$labels['messagekeep'] = 'إبقاء الرسالة في علبة الوارد';
$labels['messagesrules'] = 'للبريد الوارد:';
$labels['messagesactions'] = '...تنفيذ المهام التالية:';
$labels['add'] = 'إضافة';
$labels['del'] = 'حذف';
$labels['sender'] = 'المرسل';
$labels['recipient'] = 'مستلم';
$labels['vacationdays'] = 'في الغالب كم رسالة ترسل (بالايام):';
$labels['vacationinterval'] = 'كم عدد الرسائل المرسلة عادةً:';
$labels['vacationreason'] = 'نص الرسالة (بسبب الاجازة):';
$labels['vacationsubject'] = 'موضوع الرسالة:';
$labels['days'] = 'ايام';
$labels['seconds'] = 'ثواني';
$labels['rulestop'] = 'ايقاف تقييم القواعد';
$labels['enable'] = 'تفعيل/تعطيل';
$labels['filtersets'] = 'مجموعة تصفية';
$labels['filterdef'] = 'تعريف التصفية ';
$labels['active'] = 'نشط';
$labels['none'] = 'لاشيء';
$labels['fromset'] = 'من مجموعة';
$labels['fromfile'] = 'من ملف';
$labels['filterdisabled'] = 'تعطيل التصفية';
$labels['countisgreaterthan'] = 'العدد اكبر من ';
$labels['countisgreaterthanequal'] = 'العدد اكبر من او يساوي ';
$labels['countislessthan'] = 'العدد اقل من ';
$labels['countislessthanequal'] = 'العدد اقل من او يساوي';
$labels['countequals'] = 'العدد يساوي ';
$labels['countnotequals'] = 'العدد لا يساوي';
$labels['valueisgreaterthan'] = 'القيمة اكبر من ';
$labels['valueisgreaterthanequal'] = 'القيمة اكبر من او تساوي';
$labels['valueislessthan'] = 'القيمة اقل من ';
$labels['valueislessthanequal'] = 'القيمة اقل من او يساوي';
$labels['valueequals'] = 'القيمة تساوي';
$labels['valuenotequals'] = 'القيمة لا تساوي';
$labels['setflags'] = 'ضع وسم على هذه الرسالة ';
$labels['addflags'] = 'اضف وسم على هذه الرسالة ';
$labels['removeflags'] = 'احذف الوسم الموجود على هذه الرسالة ';
$labels['flagread'] = 'قراءة ';
$labels['flagdeleted'] = 'محذوف';
$labels['flaganswered'] = 'مجابة';
$labels['flagflagged'] = 'موسوم';
$labels['flagdraft'] = 'مسودة';
$labels['setvariable'] = 'تعيين متغير';
$labels['setvarname'] = 'اسم المتغير:';
$labels['setvarvalue'] = 'قيمة المتغير:';
$labels['setvarmodifiers'] = 'تعديلات:';
$labels['varquotewildcard'] = 'أقتبس أحرف خاصة';
$labels['varlength'] = 'الطول';
$labels['notify'] = 'ارسل تنبية';
$labels['notifyimportance'] = 'اهمية:';
$labels['notifyimportancelow'] = 'منخفض';
$labels['notifyimportancenormal'] = 'عادي';
$labels['notifyimportancehigh'] = 'مرتفع';
$labels['notifymethodmailto'] = 'البريد الإلكتروني';
$labels['notifymethodtel'] = 'الهاتف';
$labels['filtercreate'] = 'انشئ تصفية';
$labels['usedata'] = 'استخدم البيانات التالية في الفلتر:';
$labels['nextstep'] = 'الخطوة التالية';
$labels['...'] = '...';
$labels['currdate'] = 'التاريخ الحالي';
$labels['datetest'] = 'التاريخ';
$labels['dateheader'] = 'الراس:';
$labels['year'] = 'السنة';
$labels['month'] = 'شهر';
$labels['day'] = 'يوم';
$labels['date'] = 'التاريخ (yyyy-mm-dd)';
$labels['julian'] = 'التاريخ (يوليان)';
$labels['hour'] = 'ساعات';
$labels['minute'] = 'دقائق';
$labels['second'] = 'ثواني';
$labels['time'] = 'الوقت (hh:mm:ss)';
$labels['iso8601'] = 'التاريخ (ISO8601)';
$labels['std11'] = 'التاريخ (RFC2822)';
$labels['zone'] = 'المنطقة الزمنية';
$labels['weekday'] = 'ايام العمل (0-6)';
$labels['advancedopts'] = 'خيارات متقدّمة';
$labels['body'] = 'نص';
$labels['address'] = 'العنوان';
$labels['modifier'] = 'تعديل:';
$labels['text'] = 'نص';
$labels['contenttype'] = 'نوع المحتوى';
$labels['modtype'] = 'نوع:';
$labels['allparts'] = 'الكل';
$labels['domain'] = 'المجال';
$labels['localpart'] = 'الجزء المحلي';
$labels['user'] = 'مستخدم';
$labels['detail'] = 'تفاصيل';
$labels['default'] = 'افتراضي';
$labels['index'] = 'الوارد:';
$labels['indexlast'] = 'تراجع';
$labels['spamtestequals'] = 'مساوي الى';
$labels['spamtestnotequals'] = 'لا يساوي';
$labels['vacation'] = 'خارج المكتب';
$labels['vacation.advanced'] = 'اعدادات متقدمة';
$labels['vacation.from'] = 'الرد على عنوان المرسل';
$labels['vacation.subject'] = 'موضوع';
$labels['vacation.body'] = 'محتوى ';
$labels['vacation.status'] = 'الحالة ';
$labels['vacation.on'] = 'تشغيل';
$labels['vacation.off'] = 'ايقاف';
$labels['vacation.after'] = 'ضع قاعدة الخروج من المنصب بعد ذلك';
$labels['vacation.saving'] = 'يتم حفظ البيانات...';
$labels['vacation.keep'] = 'ابقاء';
$labels['forward.on'] = 'تشغيل';
$labels['forward.off'] = 'ايقاف';
$labels['forward.saving'] = 'يتم حفظ البيانات...';
$labels['duplicate.header'] = 'الراس:';
$messages['filterunknownerror'] = 'خطا غير معروف من الخادم.';
$messages['filterconnerror'] = 'لا يمكن الاتصال بالخادم.';
$messages['filterdeleteerror'] = 'لا يمكن حذف التصفية.خطا في الخادم.';
$messages['filterdeleted'] = 'تم حذف التصفية بنجاح.';
$messages['filtersaved'] = 'تم حفظ التصفية بنجاح.';
$messages['filtersaveerror'] = 'لا يمكن حفظ التصفية.خطا في الخادم.';
$messages['filterdeleteconfirm'] = 'هل تريد فعلاً حذف التصفية المحددة؟';
$messages['ruledeleteconfirm'] = 'هل تريد فعلاً حذف القواعد المحددة؟';
$messages['actiondeleteconfirm'] = 'هل تريد فعلاً حذف الاجراءات المحددة؟';
$messages['forbiddenchars'] = 'احرف محظورة في هذا الحقل.';
$messages['cannotbeempty'] = 'لا يمكن ترك الحقل فارغاً';
$messages['ruleexist'] = 'اسم هذة التصفية موجود مسبقاً';
$messages['setactivateerror'] = 'تعذر تنشيط مجموعة التصفية المحددة. حدث خطأ في الخادم.';
$messages['setdeactivateerror'] = 'تعذر إلغاء تنشيط مجموعة التصفية المحددة. حدث خطأ في الخادم.';
$messages['activateerror'] = 'لا يمكن تمكين التصفية(ـات) المحددة .خطا في الخادم.';
$messages['deactivateerror'] = 'لا يمكن تعطيل التصفية(ـات) المحددة .خطا في الخادم.';
$messages['deactivated'] = 'تم تعطيل المصفيـ(ـاة) بنجاح.';
$messages['activated'] = 'تم تفعيل المصفيـ(ـاة) بنجاح.';
$messages['moved'] = 'تم نقل التصفية بنجاح.';
$messages['moveerror'] = 'لا يمكن نقل التصفياة المحددة.خطا في الخادم.';
$messages['nametoolong'] = 'الإسم طويل جداً';
$messages['setexist'] = 'المجموعة موجودة مسبقا.';
$messages['nodata'] = 'يجب تحديد موضع واحد على الأقل!';
$messages['invaliddateformat'] = 'تاريخ غير صحيح او يوجد خطا في تنسق اجزاء التاريخ';
$messages['saveerror'] = 'لا يمكن حفظ البيانات. خطا في الخادم.';
PK{c�\l�|**"managesieve/localization/ms_MY.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'Pindah mesej ke sampah';
$labels['del'] = 'Padam';
$labels['flagdeleted'] = 'Telah dipadam';
$labels['flagflagged'] = 'Ditanda';
$labels['notifymethodmailto'] = 'E-Mel';
$labels['datetest'] = 'Tarikh';
$labels['vacation.subject'] = 'Subjek';
PK{c�\>} ��!�!"managesieve/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Süzgəclər';
$labels['managefilters'] = 'Gələn məktub üçün süzgəclərin idarəsi';
$labels['filtername'] = 'Süzgəcin adı';
$labels['newfilter'] = 'Yeni süzgəc';
$labels['filteradd'] = 'Süzgəc əlavə et';
$labels['filterdel'] = 'Süzgəci sil';
$labels['moveup'] = 'Yuxarı apar';
$labels['movedown'] = 'Aşağı apar';
$labels['filterallof'] = 'göstərilən bütün qaydalara uyur';
$labels['filteranyof'] = 'verilmiş istənilən qaydaya uyur';
$labels['filterany'] = 'bütün məktublar';
$labels['filtercontains'] = 'daxildir';
$labels['filternotcontains'] = 'daxil deyil';
$labels['filteris'] = 'uyğundur';
$labels['filterisnot'] = 'uyğun deyil';
$labels['filterexists'] = 'mövcuddur';
$labels['filternotexists'] = 'mövcud deyil';
$labels['filtermatches'] = 'ifadə ilə üst-üstə düşür';
$labels['filternotmatches'] = 'ifadə ilə üst-üstə düşmür';
$labels['filterregex'] = 'daimi ifadənin nəticəsi ilə üst-üstə düşür';
$labels['filternotregex'] = 'daimi ifadə ilə üst-üstə düşmür';
$labels['filterunder'] = 'altında';
$labels['filterover'] = 'yuxarıda';
$labels['addrule'] = 'Qayda əlavə et';
$labels['delrule'] = 'Qaydanı sil';
$labels['messagemoveto'] = 'Məktubu köçür';
$labels['messageredirect'] = 'Məktubu yolla';
$labels['messagecopyto'] = 'Məktubu kopyala';
$labels['messagesendcopy'] = 'Məktubun kopyasını göndər';
$labels['messagereply'] = 'Məktubla cavab ver';
$labels['messagedelete'] = 'Sil';
$labels['messagediscard'] = 'Məktubla rədd et';
$labels['messagekeep'] = 'Məktubu gələnlərdə saxla';
$labels['messagesrules'] = 'Daxil olan məktub üçün:';
$labels['messagesactions'] = '...növbəti hərəkəti yerinə yetir:';
$labels['add'] = 'Əlavə et';
$labels['del'] = 'Sil';
$labels['sender'] = 'Göndərən';
$labels['recipient'] = 'Qəbul edən';
$labels['vacationdays'] = 'Məktub neçə müddətdən bir göndərilsin (gündə):';
$labels['vacationinterval'] = 'Məktublar nə qədər sıx göndərilsin:';
$labels['vacationreason'] = 'Məktubun mətni (səbəb yoxdur):';
$labels['vacationsubject'] = 'Məktubun mövzusu:';
$labels['days'] = 'günlər';
$labels['seconds'] = 'saniyələr';
$labels['rulestop'] = 'Yerinə yetirməyi dayandır';
$labels['enable'] = 'Yandır/Söndür';
$labels['filtersets'] = 'Süzgəc dəstləri';
$labels['filterdef'] = 'Süzgəcin təsviri';
$labels['active'] = 'aktiv';
$labels['none'] = 'heç biri';
$labels['fromset'] = 'dəstdən';
$labels['fromfile'] = 'fayldan';
$labels['filterdisabled'] = 'Süzgəci söndür';
$labels['countisgreaterthan'] = 'sayı buradan daha çoxdur';
$labels['countisgreaterthanequal'] = 'say çox və ya bərabərdir';
$labels['countislessthan'] = 'say buradan azdır';
$labels['countislessthanequal'] = 'say azdır və ya bərabərdir';
$labels['countequals'] = 'say bərabərdir';
$labels['countnotequals'] = 'say bərabər deyil';
$labels['valueisgreaterthan'] = 'dəyər buradan daha böyükdür';
$labels['valueisgreaterthanequal'] = 'dəyər çoxdur və ya bərabərdir';
$labels['valueislessthan'] = 'dəyər buradan azdır';
$labels['valueislessthanequal'] = 'dəyər azdır və ya bərabərdir';
$labels['valueequals'] = 'dəyər bərabərdir';
$labels['valuenotequals'] = 'dəyər bərabər deyil';
$labels['setflags'] = 'Məktublara flaq quraşdır';
$labels['addflags'] = 'Məktuba flaq əlavə et';
$labels['removeflags'] = 'Məktubdan flaqları sil';
$labels['flagread'] = 'Oxu';
$labels['flagdeleted'] = 'Silindi';
$labels['flaganswered'] = 'Cavab verilmiş';
$labels['flagflagged'] = 'İşarəlilər';
$labels['flagdraft'] = 'Qaralama';
$labels['setvariable'] = 'Dəyişəni təyin et';
$labels['setvarname'] = 'Dəyişənin adı:';
$labels['setvarvalue'] = 'Dəyişənin dəyəri:';
$labels['setvarmodifiers'] = 'Modifikatorlar';
$labels['varlower'] = 'aşağı registr';
$labels['varupper'] = 'yuxarı registr';
$labels['varlowerfirst'] = 'aşağı registrdə birinci simvol';
$labels['varupperfirst'] = 'yuxarı registrdə birinci simvol';
$labels['varquotewildcard'] = 'dırnaq simvolu';
$labels['varlength'] = 'uzunluq';
$labels['notify'] = 'Bildiriş göndər';
$labels['notifyimportance'] = 'Vaciblik';
$labels['notifyimportancelow'] = 'aşağı';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'yuxarı';
$labels['notifymethodmailto'] = 'E-Poçt';
$labels['notifymethodtel'] = 'Telefon';
$labels['filtercreate'] = 'Süzgəc yarat';
$labels['usedata'] = 'Süzgəcdə bu məlumatları istifadə et:';
$labels['nextstep'] = 'Sonrakı';
$labels['...'] = '...';
$labels['currdate'] = 'İndiki tarix';
$labels['datetest'] = 'Tarix';
$labels['dateheader'] = 'başlıq:';
$labels['year'] = 'il';
$labels['month'] = 'ay';
$labels['day'] = 'gün';
$labels['date'] = 'tarix (iiii-aa-gg)';
$labels['julian'] = 'tarix (yulian)';
$labels['hour'] = 'saat';
$labels['minute'] = 'dəqiqə';
$labels['second'] = 'saniyə';
$labels['time'] = 'saat (sa:dd:sn)';
$labels['iso8601'] = 'tarix (ISO8601)';
$labels['std11'] = 'tarix (RFC2822)';
$labels['zone'] = 'saat-zona';
$labels['weekday'] = 'həftənin günü (0-6)';
$labels['advancedopts'] = 'Əlavə ayarlar';
$labels['body'] = 'Məzmun';
$labels['address'] = 'ünvan';
$labels['envelope'] = 'zərf';
$labels['modifier'] = 'modifikator:';
$labels['text'] = 'mətn';
$labels['undecoded'] = 'emal olunmamış (xammal)';
$labels['contenttype'] = 'məzmun növü';
$labels['modtype'] = 'növ:';
$labels['allparts'] = 'hamısı';
$labels['domain'] = 'domen';
$labels['localpart'] = 'lokal hissə';
$labels['user'] = 'istifadəçi';
$labels['detail'] = 'təfsilat';
$labels['comparator'] = 'komparator:';
$labels['default'] = 'ön qurğulu';
$labels['octet'] = 'ciddi (oktet)';
$labels['asciicasemap'] = 'qeydiyyat üzrə müstəqil (ascii-casemap)';
$labels['asciinumeric'] = 'ədədi (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'arxaya';
$labels['spamtestequals'] = 'uyğundur';
$labels['spamtestnotequals'] = 'uyğun deyil';
$labels['vacation.subject'] = 'Mövzu';
$labels['vacation.body'] = 'Mətn';
$labels['vacation.keep'] = 'Saxla';
$labels['duplicate.header'] = 'başlıq:';
$messages['filterunknownerror'] = 'Serverin naməlum xətası.';
$messages['filterconnerror'] = 'Serverə qoşulmaq alınmır';
$messages['filterdeleteerror'] = 'Süzgəci silmək mümkün deyil. Server xətası.';
$messages['filterdeleted'] = 'Süzgəc uğurla silindi.';
$messages['filtersaved'] = 'Süzgəc uğurla saxlanıldı.';
$messages['filtersaveerror'] = 'Süzgəci saxlamaq mümkün deyil. Server xətası.';
$messages['filterdeleteconfirm'] = 'Siz həqiqətən süzgəci silmək istəyirsiniz?';
$messages['ruledeleteconfirm'] = 'Bu qaydanı silməkdə əminsiniz?';
$messages['actiondeleteconfirm'] = 'Bu hərəkəti silməkdə əminsiniz?';
$messages['forbiddenchars'] = 'Sahədə qadağan edilən işarələr.';
$messages['cannotbeempty'] = 'Sahə boş ola bilməz.';
$messages['ruleexist'] = 'Bu adla süzgəc artıq mövcuddur.';
$messages['activateerror'] = 'Seçilmiş süzgəc(lər)i yandırmaq mümkün deyil. Server xətası.';
$messages['deactivateerror'] = 'Seçilmiş süzgəc(lər)i söndürmək mümkün deyil. Server xətası.';
$messages['deactivated'] = 'Süzgəc(lər) uğurla yandırıldı.';
$messages['activated'] = 'Süzgəc(lər) uğurla söndürüldü.';
$messages['moved'] = 'Süzgəc uğurla köçürüldü.';
$messages['moveerror'] = 'Süzgəci köçürmək mümkün deyil. Server xətası.';
$messages['nametoolong'] = 'Süzgəc dəstini yaratmaq mümkün deyil. Ad çox uzundur.';
$messages['namereserved'] = 'Rezerv edilmiş ad.';
$messages['setexist'] = 'Dəst artıq mövcuddur.';
$messages['nodata'] = 'Heç olmasa bir mövqe tutmaq lazımdır!';
$messages['invaliddateformat'] = 'Tarix və ya tarix formatının bir hissəsi səhvdir';
PK{c�\�a�!33"managesieve/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Atur filter email masuk';
$labels['filtername'] = 'Nama filter';
$labels['newfilter'] = 'Filter baru';
$labels['filteradd'] = 'Tambah filter';
$labels['filterdel'] = 'Hapus filter';
$labels['rules'] = 'Peraturan';
$labels['actions'] = 'Tindakan';
$labels['scope'] = 'Jangkauan';
$labels['moveup'] = 'Pindah ke atas';
$labels['movedown'] = 'Pindah ke bawah';
$labels['filterallof'] = 'cocok dengan semua aturan berikut ini';
$labels['filteranyof'] = 'cocok dengan aturan manapun';
$labels['filterany'] = 'semua pesan';
$labels['filtercontains'] = 'berisi';
$labels['filternotcontains'] = 'tidak berisi';
$labels['filteris'] = 'sama dengan';
$labels['filterisnot'] = 'tidak sama dengan';
$labels['filterexists'] = 'ada';
$labels['filternotexists'] = 'tidak ada';
$labels['filtermatches'] = 'ekspresi yg cocok';
$labels['filternotmatches'] = 'ekspresi yg tidak cocok';
$labels['filterregex'] = 'cocok dengan ekspresi reguler';
$labels['filternotregex'] = 'tidak cocok dengan ekspresi reguler';
$labels['filterunder'] = 'di bawah';
$labels['filterover'] = 'di atas';
$labels['mime'] = 'MIME';
$labels['mimepart'] = 'MIME part:';
$labels['mime-message'] = 'Pesan';
$labels['mime-anychild'] = 'Apapun';
$labels['mime-type'] = 'Tipe';
$labels['mime-subtype'] = 'Sub tipe';
$labels['mime-contenttype'] = 'Konten tipe';
$labels['mime-param'] = 'Parameter';
$labels['addrule'] = 'Tambah aturan';
$labels['delrule'] = 'Hapus aturan';
$labels['messagemoveto'] = 'Pindah pesan ke';
$labels['messageredirect'] = 'Alihkan pesan ke';
$labels['messagecopyto'] = 'Salin pesan ke';
$labels['messagesendcopy'] = 'Kirim salinan pesan ke';
$labels['messagereply'] = 'balas dengan pesan';
$labels['messagedelete'] = 'Hapus pesan';
$labels['messagediscard'] = 'Buang dengan pesan';
$labels['messagekeep'] = 'Biarkan pesan tetap didalam kotak surat';
$labels['messagesrules'] = 'Untuk email masuk:';
$labels['messagesactions'] = '...lakukan tindakan berikut';
$labels['add'] = 'Tambah';
$labels['del'] = 'Hapus';
$labels['sender'] = 'Pengirim';
$labels['recipient'] = 'Penerima';
$labels['vacationaddr'] = 'Alamat email saya:';
$labels['vacationdays'] = 'Seberapa sering mengirim pesan (dalam hari):';
$labels['vacationinterval'] = 'Seberapa sering untuk pengiriman pesan:';
$labels['vacationreason'] = 'Isi pesan (alasan liburan):';
$labels['vacationfrom'] = 'Alamat pengirim balasan:';
$labels['vacationsubject'] = 'Judul pesan:';
$labels['days'] = 'hari';
$labels['seconds'] = 'detik';
$labels['rulestop'] = 'Berhenti mengevaluasi aturan';
$labels['enable'] = 'Aktifkan/Non-Aktifkan';
$labels['filterset'] = 'Set tapis';
$labels['filtersets'] = 'Himpunan banyak filter';
$labels['filtersetadd'] = 'Tambahkan set tapis';
$labels['filtersetdel'] = 'Hapus set tapis';
$labels['filtersetact'] = 'Aktifkan set tapis saat ini';
$labels['filtersetdeact'] = 'Nonaktifkan set tapis saat ini';
$labels['filterseteditraw'] = 'Sunting set penyaring';
$labels['filterdef'] = 'Definisi filter';
$labels['filtersetname'] = 'Nama set tapis';
$labels['newfilterset'] = 'Set tapis baru';
$labels['active'] = 'aktif';
$labels['none'] = 'nihil';
$labels['fromset'] = 'dari himpunan';
$labels['fromfile'] = 'dari berkas';
$labels['filterdisabled'] = 'Filter dimatikan';
$labels['countisgreaterthan'] = 'penghitungan lebih besar dari';
$labels['countisgreaterthanequal'] = 'penghitungan lebih besa dari atau sama dengan';
$labels['countislessthan'] = 'penghitungan lebih kecil dari';
$labels['countislessthanequal'] = 'penghitungan lebih kecil dari atau sama dengan';
$labels['countequals'] = 'penghitungan sama dengan';
$labels['countnotequals'] = 'penghitungan tidak sama dengan';
$labels['valueisgreaterthan'] = 'nilai lebih besar dari';
$labels['valueisgreaterthanequal'] = 'nilai lebih besar dari atau sama dengan';
$labels['valueislessthan'] = 'nilai lebih kecil dari';
$labels['valueislessthanequal'] = 'nilai lebih kecil dari atau sama dengan';
$labels['valueequals'] = 'nilai sama dengan';
$labels['valuenotequals'] = 'nilai tidak sadengan';
$labels['setflags'] = 'Atur tanda pada pesan';
$labels['addflags'] = 'Berikan tanda pada pesan';
$labels['removeflags'] = 'Cabut tanda dari pesan';
$labels['flagread'] = 'Baca';
$labels['flagdeleted'] = 'Terhapus';
$labels['flaganswered'] = 'Terjawab';
$labels['flagflagged'] = 'Ditandai';
$labels['flagdraft'] = 'Konsep';
$labels['setvariable'] = 'Set variabel';
$labels['setvarname'] = 'Nama variabel:';
$labels['setvarvalue'] = 'Nilai variabel';
$labels['setvarmodifiers'] = 'Pengubah';
$labels['varlower'] = 'huruf kecil';
$labels['varupper'] = 'huruf besar';
$labels['varlowerfirst'] = 'karakter pertama huruf kecil';
$labels['varupperfirst'] = 'karakter pertama huruf besar';
$labels['varquotewildcard'] = 'kutip karakter khusus';
$labels['varlength'] = 'panjang';
$labels['notify'] = 'Kirim pemberitahuan';
$labels['notifytarget'] = 'Pemberitahuan yang dituju:';
$labels['notifymessage'] = 'Pemberitahuan pesan (pilihan):';
$labels['notifyoptions'] = 'Pemberitahuan untuk beberapa pilihan (pilihan):';
$labels['notifyfrom'] = 'Pemberitahuan ke pengirim (tidak harus):';
$labels['notifyimportance'] = 'Tingkat kepentingan:';
$labels['notifyimportancelow'] = 'rendah';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'tinggi';
$labels['notifymethodmailto'] = 'Surat Elektronik / Email';
$labels['notifymethodtel'] = 'Telepon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Buat filter';
$labels['usedata'] = 'Gunakan data berikut dalam filter:';
$labels['nextstep'] = 'Langkah Selanjutnya';
$labels['...'] = '...';
$labels['string'] = 'String';
$labels['currdate'] = 'Tanggal sekarang';
$labels['datetest'] = 'Tanggal';
$labels['dateheader'] = 'header / tajuk:';
$labels['year'] = 'tahun';
$labels['month'] = 'bulan';
$labels['day'] = 'hari';
$labels['date'] = 'tanggal (yyyy-mm-dd)';
$labels['julian'] = 'tanggal (kalender julian)';
$labels['hour'] = 'jam';
$labels['minute'] = 'menit';
$labels['second'] = 'detik';
$labels['time'] = 'waktu :(hh:mm:ss)';
$labels['iso8601'] = 'tanggal (ISO8601)';
$labels['std11'] = 'tanggal (RFC2822)';
$labels['zone'] = 'zona-waktu';
$labels['weekday'] = 'hari kerja (0-6)';
$labels['advancedopts'] = 'Pilihan lanjutan';
$labels['body'] = 'Isi';
$labels['address'] = 'alamat';
$labels['envelope'] = 'amplop';
$labels['modifier'] = 'peubah:';
$labels['text'] = 'teks';
$labels['undecoded'] = 'praterjemahan (mentah)';
$labels['contenttype'] = 'tipe isi';
$labels['modtype'] = 'tipe:';
$labels['allparts'] = 'semua';
$labels['domain'] = 'domain';
$labels['localpart'] = 'bagian lokal';
$labels['user'] = 'pengguna';
$labels['detail'] = 'rinci';
$labels['comparator'] = 'pembanding:';
$labels['default'] = 'standar';
$labels['octet'] = 'ketat (oktet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'mundur:';
$labels['spamtestequals'] = 'sama dengan';
$labels['spamtestnotequals'] = 'tidak sama dengan';
$labels['vacation'] = 'Di Luar Kantor';
$labels['vacation.reply'] = 'Balas pesan';
$labels['vacation.advanced'] = 'Pengaturan Lanjutan';
$labels['vacation.from'] = 'Alamat pengirim balasan';
$labels['vacation.subject'] = 'Judul';
$labels['vacation.body'] = 'Isi';
$labels['vacation.start'] = 'Waktu mulai';
$labels['vacation.end'] = 'Waktu berakhir';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Nyala';
$labels['vacation.off'] = 'Mati';
$labels['vacation.addresses'] = 'Alamat email saya';
$labels['vacation.interval'] = 'Balas secara interval';
$labels['vacation.after'] = 'Pasang aturan di-luar-kantor setelah';
$labels['vacation.saving'] = 'Menyimpan data...';
$labels['vacation.action'] = 'Tindakan untuk pesan masuk';
$labels['vacation.keep'] = 'Simpan';
$labels['vacation.discard'] = 'Buang';
$labels['vacation.redirect'] = 'Alihkan ke';
$labels['vacation.copy'] = 'Kirim salinan ke';
$labels['forward'] = 'Diteruskan / Meneruskan';
$labels['forward.redirect'] = 'Alihkan ke';
$labels['forward.copy'] = 'Kirim salinan ke';
$labels['forward.on'] = 'Nyala';
$labels['forward.off'] = 'Mati';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Tindakan untuk eksekusi masuknya surat';
$labels['forward.saving'] = 'Menyimpan data...';
$labels['filladdresses'] = 'Isi dengan semua alamat saya';
$labels['arialabelfiltersetactions'] = 'Tindakan untuk penyaringan';
$labels['arialabelfilteractions'] = 'Tindakan penyaringan';
$labels['arialabelfilterform'] = 'Properti untuk penyaringan';
$labels['ariasummaryfilterslist'] = 'Daftar penyaringan';
$labels['ariasummaryfiltersetslist'] = 'Daftar penyaringan yang telah di set';
$labels['filterstitle'] = 'Ubah penyaringan untuk email masuk';
$labels['vacationtitle'] = 'Ubah aturan untuk sedang-diluar-kantor';
$labels['forwardtitle'] = 'Edit peraturan untuk meneruskan surat';
$labels['message'] = 'Pesan';
$labels['duplicate'] = 'duplikat';
$labels['notduplicate'] = 'tidak duplikat';
$labels['duplicate.handle'] = 'handle:';
$labels['duplicate.header'] = 'header:';
$labels['duplicate.uniqueid'] = 'identifier:';
$labels['duplicate.seconds'] = 'tenggat waktu (detik):';
$labels['duplicate.last'] = 'relatif terhadap eksekusi terakhir';
$messages['filterunknownerror'] = 'Error pada server tak dikenali.';
$messages['filterconnerror'] = 'Tidak dapat menyambung ke server.';
$messages['filterdeleteerror'] = 'Tidak dapat menghapus penyaringan. Terjadi kesalahan pada server.';
$messages['filterdeleted'] = 'Penyaringan berhasil dihapus.';
$messages['filtersaved'] = 'Penyaringan berhasil disimpan.';
$messages['filtersaveerror'] = 'Tidak dapat menyimpan penyaringan. Terjadi kesalahan pada server.';
$messages['filterformerror'] = 'Formulir penyaring memuat kesalahan.';
$messages['filterdeleteconfirm'] = 'Yakin untuk menghapus penyaringan terpilih?';
$messages['ruledeleteconfirm'] = 'Yakin untuk menghapus aturan terpilih?';
$messages['actiondeleteconfirm'] = 'Yakin untuk menghapus tindakan terpilih?';
$messages['forbiddenchars'] = 'Karakter terlarang pada isian.';
$messages['cannotbeempty'] = 'Isian tidak bisa kosong.';
$messages['ruleexist'] = 'Penyaringan dengan nama tersebut sudah ada.';
$messages['setactivateerror'] = 'Tidak bisa mengaktifkan set tapis yang dipilih. Terjadi kesalahan server.';
$messages['setdeactivateerror'] = 'Tidak bisa menonaktifkan set tapis yang dipilih. Terjadi kesalahan server.';
$messages['setdeleteerror'] = 'Tidak bisa menghapus set tapis yang dipilih. Terjadi kesalahan server.';
$messages['setactivated'] = 'Set tapis sukses diaktifkan.';
$messages['setdeactivated'] = 'Set tapis sukses dinonaktifkan.';
$messages['setdeleted'] = 'Set tapis sukses dihapus.';
$messages['setupdated'] = 'Set tapis sukses diperbarui';
$messages['setdeleteconfirm'] = 'Anda yakin hendak menghapus set tapis yang dipilih?';
$messages['setcreateerror'] = 'Tidak bisa membuat set tapis. Terjadi kesalahan server.';
$messages['setcreated'] = 'Set tapis sukses dibuat.';
$messages['activateerror'] = 'Tidak dapat mengaktifkan penyaringan terpilih. Terjadi kesalahan pada server';
$messages['deactivateerror'] = 'Tidak dapat mematikan penyaringan terpilih. Terjadi kesalahan pada server';
$messages['deactivated'] = 'Berhasil menghidupkan penyaringan.';
$messages['activated'] = 'Berhasil mematikan penyaringan.';
$messages['moved'] = 'Berhasil memindahkan penyaringan.';
$messages['moveerror'] = 'Tidak bisa memindahkan penyaringan terpilih. Ada kesalahan di server.';
$messages['nametoolong'] = 'Nama terlalu panjang.';
$messages['namereserved'] = 'Nama sudah terpesan.';
$messages['setexist'] = 'Kumpulan sudah ada.';
$messages['nodata'] = 'Setidaknya satu posisi harus dipilih!';
$messages['invaliddateformat'] = 'Format tanggal atau bagian dari tanggal salah';
$messages['saveerror'] = 'Tidak dapat menyimpan data. Terjadi kesalahan pada server.';
$messages['vacationsaved'] = 'Data di-luar-kantor sukses disimpan';
$messages['forwardsaved'] = 'Meneruskan data sukses tersimpan';
$messages['emptyvacationbody'] = 'Tubuh pesan liburan diperlukan!';
$messages['duplicate.conflict.err'] = 'Header dan identifier unik keduanya tidak diijinkan.';
$messages['disabledaction'] = 'Tindakan tidak di izinkan';
PK{c�\셔�� managesieve/localization/tzl.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Strecureirs';
$labels['messagedelete'] = 'Zeletarh el mensatx';
$labels['del'] = 'Zeletarh';
$labels['days'] = 'ziuas';
$labels['seconds'] = 'secunds';
$labels['active'] = 'actíu';
$labels['flagread'] = 'Lirarh';
$labels['notifymethodmailto'] = 'Telepost';
$labels['...'] = '...';
$labels['datetest'] = 'Däts';
$labels['year'] = 'ar';
$labels['month'] = 'mes';
$labels['day'] = 'ziua';
$labels['date'] = 'däts (aaaa-mm-zz)';
$labels['hour'] = 'þora';
$labels['minute'] = 'míut';
$labels['second'] = 'secund';
$labels['iso8601'] = 'däts (ISO8601)';
$labels['std11'] = 'däts (RFC2822)';
$labels['text'] = 'text';
$labels['domain'] = 'bain';
$labels['user'] = 'uçeir';
$labels['vacation.subject'] = 'Subxhect';
PK{c�\����d:d:"managesieve/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Üzenetszűrők';
$labels['managefilters'] = 'Bejövő üzenetek szűrői';
$labels['filtername'] = 'Szűrő neve';
$labels['newfilter'] = 'Új szűrő';
$labels['filteradd'] = 'Szűrő hozzáadása';
$labels['filterdel'] = 'Szűrő törlése';
$labels['rules'] = 'Szabályok';
$labels['actions'] = 'Műveletek';
$labels['scope'] = 'Hatókör';
$labels['moveup'] = 'Mozgatás felfelé';
$labels['movedown'] = 'Mozgatás lefelé';
$labels['filterallof'] = 'A következők szabályok mind illeszkedjenek';
$labels['filteranyof'] = 'A következő szabályok bármelyike illeszkedjen';
$labels['filterany'] = 'Minden üzenet illeszkedjen';
$labels['filtercontains'] = 'tartalmazza';
$labels['filternotcontains'] = 'nem tartalmazza';
$labels['filteris'] = 'megegyezik';
$labels['filterisnot'] = 'nem egyezik meg';
$labels['filterexists'] = 'létezik';
$labels['filternotexists'] = 'nem létezik';
$labels['filtermatches'] = 'kifejezéssel egyezők';
$labels['filternotmatches'] = 'kifejezéssel nem egyezők';
$labels['filterregex'] = 'reguláris kifejezéssel egyezők';
$labels['filternotregex'] = 'reguláris kifejezéssel nem egyezők';
$labels['filterunder'] = 'alatta';
$labels['filterover'] = 'felette';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME rész:';
$labels['mime-message'] = 'üzenet';
$labels['mime-anychild'] = 'bármilyen';
$labels['mime-type'] = 'típus';
$labels['mime-subtype'] = 'altípus';
$labels['mime-contenttype'] = 'tartalom-típus';
$labels['mime-param'] = 'paraméter';
$labels['addrule'] = 'Szabály hozzáadása';
$labels['delrule'] = 'Szabály törlése';
$labels['messagemoveto'] = 'Üzenet áthelyezése ide:';
$labels['messageredirect'] = 'Üzenet továbbítása ide:';
$labels['messagecopyto'] = 'Üzenet másolása';
$labels['messagesendcopy'] = 'Másolat küldése az üzenetből';
$labels['messagereply'] = 'Válaszüzenet küldése (autoreply)';
$labels['messagedelete'] = 'Üzenet törlése';
$labels['messagediscard'] = 'Válaszüzenet küldése, a levél törlése';
$labels['messagekeep'] = 'Tartsa az üzenetet a beérkező leveleknél';
$labels['messagesrules'] = 'Az adott tulajdonságú beérkezett üzenetekre:';
$labels['messagesactions'] = '... a következő műveletek végrehajtása:';
$labels['add'] = 'Hozzáadás';
$labels['del'] = 'Törlés';
$labels['sender'] = 'Feladó';
$labels['recipient'] = 'Címzett';
$labels['vacationaddr'] = 'Saját e-mail címeim:';
$labels['vacationdays'] = 'Válaszüzenet küldése ennyi naponként:';
$labels['vacationinterval'] = 'Milyen gyakran küld üzeneteket:';
$labels['vacationreason'] = 'Levél szövege (automatikus válasz):';
$labels['vacationfrom'] = 'Válasz küldőjének címe:';
$labels['vacationsubject'] = 'Üzenet tárgya:';
$labels['days'] = 'napok';
$labels['seconds'] = 'másodpercek';
$labels['rulestop'] = 'Műveletek végrehajtásának befejezése';
$labels['enable'] = 'Bekapcsol/Kikapcsol';
$labels['filterset'] = 'Szűrő készlet';
$labels['filtersets'] = 'Szűrő készletek';
$labels['filtersetadd'] = 'Szűrőkészle hozzáadása';
$labels['filtersetdel'] = 'Szűrőkészlet törlése';
$labels['filtersetact'] = 'Az aktuális szűrőkészlet aktiválása';
$labels['filtersetdeact'] = 'Az aktuális szűrőkészlet deaktiválása';
$labels['filterseteditraw'] = 'Szűrőkészlet beállítás';
$labels['filtersetswitch'] = 'Engedélyezni/letiltani szűrőkészletet';
$labels['filterdef'] = 'Szűrő definíció';
$labels['filtersetname'] = 'Szűrőkészlet neve';
$labels['newfilterset'] = 'Új szűrőkészlet';
$labels['active'] = 'aktív';
$labels['none'] = 'nincs';
$labels['fromset'] = 'készletből';
$labels['fromfile'] = 'fájlból';
$labels['filterdisabled'] = 'Szűrő kikapcsolása';
$labels['filterenabled'] = 'Szűrő engedélyezve';
$labels['countisgreaterthan'] = 'a számláló nagyobb mint';
$labels['countisgreaterthanequal'] = 'a számláló nagyobb vagy egyenlő';
$labels['countislessthan'] = 'a számláló kissebb mint';
$labels['countislessthanequal'] = 'a számláló kissebb vagy egyenlő';
$labels['countequals'] = 'a számláló egyenlő';
$labels['countnotequals'] = 'össze számolva nem egyenlő';
$labels['valueisgreaterthan'] = 'az érték nagyobb mint';
$labels['valueisgreaterthanequal'] = 'az érték nagyobb vagy egyenlő';
$labels['valueislessthan'] = 'az érték kisebb mint';
$labels['valueislessthanequal'] = 'az érték kisebb vagy egyenlő';
$labels['valueequals'] = 'az érték megegyzik';
$labels['valuenotequals'] = 'az értéke nem azonos';
$labels['setflags'] = 'Jelzők beállítása az üzeneten';
$labels['addflags'] = 'Jelző hozzáadása az üzenethez';
$labels['removeflags'] = 'Jelzők eltávolítása az üzenetből';
$labels['flagread'] = 'Olvasás';
$labels['flagdeleted'] = 'Törölt';
$labels['flaganswered'] = 'Megválaszolt';
$labels['flagflagged'] = 'Megjelölt';
$labels['flagdraft'] = 'Vázlat';
$labels['addheader'] = 'Fejléc hozzáadása az üzenethez';
$labels['deleteheader'] = 'Fejléc eltávolítása az üzenetből';
$labels['headername'] = 'Fejléc neve';
$labels['headervalue'] = 'Fejléc értéke';
$labels['headerpos'] = 'Fejléc pozició';
$labels['headeratstart'] = 'az elején';
$labels['headeratend'] = 'a végére';
$labels['headeroccurrence'] = 'Fejléc előfordulás/pozició';
$labels['headerfromstart'] = 'az elejétől';
$labels['headerfromend'] = 'a végétől';
$labels['headerpatterns'] = 'Fejléc értékeinek mintái';
$labels['headermatchtype'] = 'egyezés tipúsa:';
$labels['setvariable'] = 'Változó beállítása';
$labels['setvarname'] = 'Változó neve:';
$labels['setvarvalue'] = 'Változó értéke:';
$labels['setvarmodifiers'] = 'Módosítók';
$labels['varlower'] = 'kisbetű';
$labels['varupper'] = 'nagybetű';
$labels['varlowerfirst'] = 'első karakter kisbetű';
$labels['varupperfirst'] = 'első karakter nagybetű';
$labels['varquotewildcard'] = 'speciális karakterek idézése';
$labels['varlength'] = 'hossz';
$labels['varencodeurl'] = 'százalék-kódolású (az URL-ekhez)';
$labels['notify'] = 'Értesítés küldése';
$labels['notifytarget'] = 'Értesítés célja:';
$labels['notifymessage'] = 'Értesítési üzenet (opcionális):';
$labels['notifyoptions'] = 'Értesítés opcióik (opcionális):';
$labels['notifyfrom'] = 'Értesítés feladója (opcionális):';
$labels['notifyimportance'] = 'Fontosság:';
$labels['notifyimportancelow'] = 'alacsony';
$labels['notifyimportancenormal'] = 'normál';
$labels['notifyimportancehigh'] = 'magas';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefonszám';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Szűrő létrehozása';
$labels['usedata'] = 'A következő adatok használata a szűrőben';
$labels['nextstep'] = 'Következő lépés';
$labels['...'] = '…';
$labels['string'] = 'Szöveg';
$labels['currdate'] = 'Mai dátum';
$labels['datetest'] = 'Dátum';
$labels['dateheader'] = 'fejléc:';
$labels['year'] = 'év';
$labels['month'] = 'hónap';
$labels['day'] = 'nap';
$labels['date'] = 'dátum (éééé-hh-nn)';
$labels['julian'] = 'dátum ( julián)';
$labels['hour'] = 'óra';
$labels['minute'] = 'perc';
$labels['second'] = 'másodperc';
$labels['time'] = 'idő (óó:pp:ms)';
$labels['iso8601'] = 'dátum (ISO8601)';
$labels['std11'] = 'dátum (RFC2822)';
$labels['zone'] = 'idő-zóna';
$labels['weekday'] = 'hét napjai (0-6)';
$labels['advancedopts'] = 'Haladó beállítások';
$labels['body'] = 'Levéltörzs';
$labels['address'] = 'cím';
$labels['envelope'] = 'boriték';
$labels['modifier'] = 'módosító:';
$labels['text'] = 'szöveg';
$labels['undecoded'] = 'kódolatlan(nyers)';
$labels['contenttype'] = 'tartalom tipusa';
$labels['modtype'] = 'típus:';
$labels['allparts'] = 'összes';
$labels['domain'] = 'domain';
$labels['localpart'] = 'név rész';
$labels['user'] = 'felhasználó';
$labels['detail'] = 'részlet';
$labels['comparator'] = 'összehasonlító';
$labels['default'] = 'alapértelmezett';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'kis-nagybetüre nem érzékeny (ascii-casemap)';
$labels['asciinumeric'] = 'számszerü (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'visszafelé';
$labels['spamtest'] = 'Levélszemét szint';
$labels['spamtestisgreaterthan'] = 'nagyobb mint';
$labels['spamtestisgreaterthanequal'] = 'nagyobb vagy egyenlő ';
$labels['spamtestislessthan'] = 'kisebb mint';
$labels['spamtestislessthanequal'] = 'kisebb vagy egyenlő';
$labels['spamtestequals'] = 'megegyezik';
$labels['spamtestnotequals'] = 'nem egyezik meg';
$labels['spamtestisunknown'] = 'ismeretlen';
$labels['vacation'] = 'Irodán kívül';
$labels['vacation.reply'] = 'Válasz az üzenetre';
$labels['vacation.advanced'] = 'Haladó beállítások';
$labels['vacation.from'] = 'Válasz küldőjének címe:';
$labels['vacation.subject'] = 'Tárgy';
$labels['vacation.body'] = 'Törzs';
$labels['vacation.start'] = 'Kezdő időpontja';
$labels['vacation.end'] = 'Befejezés időpontja';
$labels['vacation.status'] = 'Állapot';
$labels['vacation.on'] = 'Be';
$labels['vacation.off'] = 'Ki';
$labels['vacation.addresses'] = 'Saját e-mail címeim';
$labels['vacation.interval'] = 'Válasz intervallum';
$labels['vacation.after'] = 'Tedd az irodán kívül szabályt ez után';
$labels['vacation.saving'] = 'Adatok mentése...';
$labels['vacation.action'] = 'Beérkező üzenet akció';
$labels['vacation.keep'] = 'Megtartás';
$labels['vacation.discard'] = 'Érvénytelenít';
$labels['vacation.redirect'] = 'Átírányítás ide';
$labels['vacation.copy'] = 'Másolat küldése ide';
$labels['forward'] = 'Továbbítás';
$labels['forward.redirect'] = 'Átírányítás ide';
$labels['forward.copy'] = 'Másolat küldése ide';
$labels['forward.on'] = 'Be';
$labels['forward.off'] = 'Ki';
$labels['forward.status'] = 'Állapot:';
$labels['forward.action'] = 'A beérkező leveleken hajtsa végre a következő műveletet:';
$labels['forward.saving'] = 'Adatok mentése...';
$labels['filladdresses'] = 'Töltsd ki mindent a címeimmel';
$labels['arialabelfiltersetactions'] = 'Szűrő készlet müveletek';
$labels['arialabelfilteractions'] = 'Szűrő müveletek';
$labels['arialabelfilterform'] = 'Szűrő tulajdonságai';
$labels['ariasummaryfilterslist'] = 'Szűrők listája';
$labels['ariasummaryfiltersetslist'] = 'Szűrő készletek listája';
$labels['filterstitle'] = 'Bejövő üzenetek szűrőinek szerkesztése';
$labels['vacationtitle'] = 'Irodán kiívül szabász szerkesztése';
$labels['forwardtitle'] = 'Levél továbbítási szabály szerkesztése';
$labels['message'] = 'Üzenet';
$labels['duplicate'] = 'duplikált';
$labels['notduplicate'] = 'nem duplikált';
$labels['duplicate.handle'] = 'kezelő:';
$labels['duplicate.header'] = 'fejléc:';
$labels['duplicate.uniqueid'] = 'azonsító:';
$labels['duplicate.seconds'] = 'timeout (másodperc):';
$labels['duplicate.last'] = 'relatív az utolsó végrehajtástól';
$messages['filterunknownerror'] = 'Ismeretlen szerverhiba';
$messages['filterconnerror'] = 'Nem tudok a szűrőszerverhez kapcsolódni';
$messages['filterdeleteerror'] = 'A szűrőt nem lehet törölni. Szerverhiba történt';
$messages['filterdeleted'] = 'A szűrő törlése sikeres';
$messages['filtersaved'] = 'A szűrő mentése sikeres';
$messages['filtersaveerror'] = 'A szűrő mentése sikertelen. Szerverhiba történt';
$messages['filterformerror'] = 'A szűrő űrlapon hibák vannak.';
$messages['filterdeleteconfirm'] = 'Biztosan törli ezt a szűrőt?';
$messages['ruledeleteconfirm'] = 'Biztosan törli ezt a szabályt?';
$messages['actiondeleteconfirm'] = 'Biztosan törli ezt a műveletet?';
$messages['forbiddenchars'] = 'Érvénytelen karakter a mezőben';
$messages['cannotbeempty'] = 'A mező nem lehet üres';
$messages['ruleexist'] = 'Már van ilyen névvel elmentett szűrő.';
$messages['setactivateerror'] = 'A szűrőkészlet aktiválása sikertelen. Szerver hiba történt.';
$messages['setdeactivateerror'] = 'A szűrőkészlet deaktiválása sikertelen. Szerver hiba történt.';
$messages['setdeleteerror'] = 'A szűrőkészlet törlése sikertelen. Szerver hiba történt.';
$messages['setactivated'] = 'A szűrőkészlet aktiválása sikeres.';
$messages['setdeactivated'] = 'A szűrőkészlet deaktiválása sikeres.';
$messages['setdeleted'] = 'A szűrőkészlet törlése sikeres.';
$messages['setupdated'] = 'A szűrőkészlet frissítése sikeres.';
$messages['setdeleteconfirm'] = 'Biztos, hogy törlöd a kiválasztott szűrőkészletet?';
$messages['setcreateerror'] = 'Nem sikerült létrehozni a szűrőkészletet. Szerver hiba történt.';
$messages['setcreated'] = 'Szűrőkészlet sikeresen létrejött.';
$messages['activateerror'] = 'Nem sikerült engedélyezni a kiválasztott szűrö(k)et. Szerver hiba történt.';
$messages['deactivateerror'] = 'Nem sikerült kikapcsolni a kiválasztott szűrő(ke)t. Szerver hiba történt.';
$messages['deactivated'] = 'Szűrő(k) sikeresen bekapcsolva.';
$messages['activated'] = 'Szűrő(k) sikeresen kikapcsolva.';
$messages['moved'] = 'A szűrő sikeresen áthelyezve.';
$messages['moveerror'] = 'Az áthelyezés nem sikerült. Szerver hiba történt.';
$messages['nametoolong'] = 'Túll hosszu név';
$messages['namereserved'] = 'Nem használható (foglalt) név-';
$messages['setexist'] = 'A készlet már létezik.';
$messages['nodata'] = 'Legalább egyet ki kell választani.';
$messages['invaliddateformat'] = 'hibás dátum formátum';
$messages['saveerror'] = 'Az adat mentése sikertelen. Szerverhiba történt';
$messages['vacationsaved'] = 'Irodán kívül adatai sikeresen elmentve.';
$messages['forwardsaved'] = 'A továbbítási adatok sikeresen elmentve.';
$messages['emptyvacationbody'] = 'A vakácíó üzenet szövegtörzse kötelező!';
$messages['duplicate.conflict.err'] = 'Egyszerre fejléc és egyedi azonosító nem engedélyezett.';
$messages['disabledaction'] = 'A művelet nem megengedett.';
$messages['lastindexempty'] = 'Az index kötelező amikor a végétől számoljuk';
$messages['noflagset'] = 'Legalább egy jelző ki kell legyen választva.';
PK{c�\"���++"managesieve/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtre';
$labels['managefilters'] = 'Administreaza filtrele pentru mesaje primite.';
$labels['filtername'] = 'Nume filtru';
$labels['newfilter'] = 'Filtru nou';
$labels['filteradd'] = 'Adauga un filtru';
$labels['filterdel'] = 'Sterge filtru.';
$labels['moveup'] = 'Muta mai sus';
$labels['movedown'] = 'Muta mai jos';
$labels['filterallof'] = 'se potriveste cu toate regulile urmatoare';
$labels['filteranyof'] = 'se potriveste cu oricare din regulile urmatoare';
$labels['filterany'] = 'toate mesajele';
$labels['filtercontains'] = 'contine';
$labels['filternotcontains'] = 'nu contine';
$labels['filteris'] = 'este egal cu';
$labels['filterisnot'] = 'este diferit de';
$labels['filterexists'] = 'exista';
$labels['filternotexists'] = 'nu exista';
$labels['filtermatches'] = 'se potriveste cu expresia';
$labels['filternotmatches'] = 'nu se potriveste cu expresia';
$labels['filterregex'] = 'se potriveste cu expresia regulata';
$labels['filternotregex'] = 'nu se potriveste cu expresia regulata';
$labels['filterunder'] = 'sub';
$labels['filterover'] = 'peste';
$labels['addrule'] = 'Adauga regula';
$labels['delrule'] = 'Sterge regula';
$labels['messagemoveto'] = 'Muta mesajul in';
$labels['messageredirect'] = 'Redirectioneaza mesajul catre';
$labels['messagecopyto'] = 'Copiaza mesajul in';
$labels['messagesendcopy'] = 'Trimite o copie a mesajului catre';
$labels['messagereply'] = 'Raspunde cu mesajul';
$labels['messagedelete'] = 'Sterge mesajul';
$labels['messagediscard'] = 'Respinge cu mesajul';
$labels['messagekeep'] = 'Pastreaza mesajele in Inbox';
$labels['messagesrules'] = 'Pentru e-mail primit:';
$labels['messagesactions'] = '...executa urmatoarele actiuni:';
$labels['add'] = 'Adauga';
$labels['del'] = 'Sterge';
$labels['sender'] = 'Expeditor';
$labels['recipient'] = 'Destinatar';
$labels['vacationaddr'] = 'Adresele mele de e-mail ';
$labels['vacationdays'] = 'Cat de des sa trimit mesajele (in zile):';
$labels['vacationinterval'] = 'Cât de des să trimit mesaje:';
$labels['vacationreason'] = 'Corpul mesajului (motivul vacantei):';
$labels['vacationfrom'] = 'Adresa expeditorului răspunsului:';
$labels['vacationsubject'] = 'Subiectul mesajului:';
$labels['days'] = 'zile';
$labels['seconds'] = 'secunde';
$labels['rulestop'] = 'Nu mai evalua reguli';
$labels['enable'] = 'Activeaza/Dezactiveaza';
$labels['filtersets'] = 'Filtrul seteaza';
$labels['filterseteditraw'] = 'Modifică set filtre';
$labels['filterdef'] = 'Definiţie filtru';
$labels['active'] = 'activ';
$labels['none'] = 'niciunul';
$labels['fromset'] = 'din setul';
$labels['fromfile'] = 'din fişier';
$labels['filterdisabled'] = 'Filtru dezactivat';
$labels['countisgreaterthan'] = 'numărul este mai mare ca';
$labels['countisgreaterthanequal'] = 'numărul este mai mare sau egal cu';
$labels['countislessthan'] = 'numărul este mai mic decât';
$labels['countislessthanequal'] = 'numărul este mai mic sau egal cu';
$labels['countequals'] = 'numărul este egal cu';
$labels['countnotequals'] = 'numaratoarea nu este egala cu';
$labels['valueisgreaterthan'] = 'valoarea este egală cu';
$labels['valueisgreaterthanequal'] = 'valoarea este mai mare sau egala cu';
$labels['valueislessthan'] = 'valoarea este mai mică decât';
$labels['valueislessthanequal'] = 'valoarea este mai mică sau egală cu';
$labels['valueequals'] = 'valoarea este egală cu';
$labels['valuenotequals'] = 'valoarea nu este egala cu';
$labels['setflags'] = 'Pune marcaje mesajului';
$labels['addflags'] = 'Adaugă marcaje mesajului';
$labels['removeflags'] = 'Şterge marcajele mesajului';
$labels['flagread'] = 'Citit';
$labels['flagdeleted'] = 'Șters';
$labels['flaganswered'] = 'Răspuns';
$labels['flagflagged'] = 'Marcat';
$labels['flagdraft'] = 'Schiță';
$labels['setvariable'] = 'Setare variabilă';
$labels['setvarname'] = 'Nume variabilă:';
$labels['setvarvalue'] = 'Valoare variabilă:';
$labels['setvarmodifiers'] = 'Modificatori:';
$labels['varlower'] = 'cu litere mici';
$labels['varupper'] = 'cu litere mari';
$labels['varlowerfirst'] = 'primul caracter cu litre mici';
$labels['varupperfirst'] = 'primul caracter cu litre mari';
$labels['varquotewildcard'] = 'caracterele speciale in citat';
$labels['varlength'] = 'lungime';
$labels['notify'] = 'Notificare trimitere';
$labels['notifytarget'] = 'Scopul notificării:';
$labels['notifymessage'] = 'Mesaj notificare (opțional)';
$labels['notifyoptions'] = 'Opțiuni notificare (opțional)';
$labels['notifyfrom'] = 'Expeditor notificare (opțional)';
$labels['notifyimportance'] = 'Importanța:';
$labels['notifyimportancelow'] = 'mică';
$labels['notifyimportancenormal'] = 'normală';
$labels['notifyimportancehigh'] = 'mare';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crează filtru';
$labels['usedata'] = 'Foloseşte următoarele date în filtru:';
$labels['nextstep'] = 'Următorul Pas';
$labels['...'] = '...';
$labels['string'] = 'Text';
$labels['currdate'] = 'Data curenta';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'header:';
$labels['year'] = 'an';
$labels['month'] = 'luna';
$labels['day'] = 'zi';
$labels['date'] = 'data (AAAA-LL-ZZ)';
$labels['julian'] = 'data (calendar iulian)';
$labels['hour'] = 'ora';
$labels['minute'] = 'minut';
$labels['second'] = 'secunda';
$labels['time'] = 'ora (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fus orar';
$labels['weekday'] = 'zi saptamana (0-6)';
$labels['advancedopts'] = 'Opţiuni avansate';
$labels['body'] = 'Corp';
$labels['address'] = 'adresă';
$labels['envelope'] = 'plic';
$labels['modifier'] = 'modificator:';
$labels['text'] = 'text';
$labels['undecoded'] = 'nedecodat (brut)';
$labels['contenttype'] = 'tip conţinut';
$labels['modtype'] = 'tip:';
$labels['allparts'] = 'toate';
$labels['domain'] = 'domeniu';
$labels['localpart'] = 'partea locală';
$labels['user'] = 'utilizator';
$labels['detail'] = 'detaliu';
$labels['comparator'] = 'comparator:';
$labels['default'] = 'implicit';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'ignoră majusculele (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'invers';
$labels['spamtestequals'] = 'este egal cu';
$labels['spamtestnotequals'] = 'este diferit de';
$labels['vacation.reply'] = 'Raspunde mesajului';
$labels['vacation.advanced'] = 'Setari avansate';
$labels['vacation.from'] = 'Adresa expeditorului răspunsului';
$labels['vacation.subject'] = 'Subiect';
$labels['vacation.body'] = 'Corp';
$labels['vacation.status'] = 'Statut';
$labels['vacation.on'] = 'Pe';
$labels['vacation.off'] = 'De pe';
$labels['vacation.addresses'] = 'Adresele mele de e-mail';
$labels['vacation.interval'] = 'Interval de raspundere';
$labels['vacation.saving'] = 'Salvez datele...';
$labels['vacation.action'] = 'Acțiune mesaj primit';
$labels['vacation.keep'] = 'Păstrează';
$labels['vacation.discard'] = 'Renunță';
$labels['vacation.redirect'] = 'Redirecționează către';
$labels['vacation.copy'] = 'Trimite o copie către';
$labels['forward.redirect'] = 'Redirecționează către';
$labels['forward.copy'] = 'Trimite o copie către';
$labels['forward.on'] = 'Pe';
$labels['forward.off'] = 'De pe';
$labels['forward.saving'] = 'Salvez datele...';
$labels['filladdresses'] = 'Completează cu toate adresele mele';
$labels['arialabelfiltersetactions'] = 'Acțiuni set filtre';
$labels['arialabelfilteractions'] = 'Acțiuni filtru';
$labels['arialabelfilterform'] = 'Propretăți filtru';
$labels['ariasummaryfilterslist'] = 'Listă filtre';
$labels['ariasummaryfiltersetslist'] = 'Listă seturi filtre';
$labels['filterstitle'] = 'Modifică filtre de mesaje primite';
$labels['vacationtitle'] = 'Modifică regulă out-of-office';
$labels['message'] = 'Mesaj';
$labels['duplicate'] = 'este duplicat';
$labels['notduplicate'] = 'nu este duplicat';
$labels['duplicate.header'] = 'antet:';
$labels['duplicate.uniqueid'] = 'identificator:';
$labels['duplicate.seconds'] = 'timeout (secunde):';
$labels['duplicate.last'] = 'relativ ultimei execuții';
$messages['filterunknownerror'] = 'Eroare necunoscută la server:';
$messages['filterconnerror'] = 'Nu mă pot conecta la server.';
$messages['filterdeleteerror'] = 'Nu pot şterge filtrul. S-a produs o eroare la server.';
$messages['filterdeleted'] = 'Filtrul a fost şters cu succes.';
$messages['filtersaved'] = 'Filtrul a fost salvat cu succes.';
$messages['filtersaveerror'] = 'Nu am putut salva filtrul. S-a produs o eroare la server.';
$messages['filterformerror'] = 'Formularul de filtre conține erori.';
$messages['filterdeleteconfirm'] = 'Chiar vrei să ştergi filtrul selectat?';
$messages['ruledeleteconfirm'] = 'Eşti sigur că vrei să ştergi regula selectată?';
$messages['actiondeleteconfirm'] = 'Eşti sigur că vrei să ştergi acţiunea selectată?';
$messages['forbiddenchars'] = 'Caractere nepermise în câmp.';
$messages['cannotbeempty'] = 'Câmpul nu poate fi gol.';
$messages['ruleexist'] = 'Filtrul cu numele specificat există deja.';
$messages['activateerror'] = 'Nu am putut activa filtrul (filtrele) selectate. S-a produs o eroare la server.';
$messages['deactivateerror'] = 'Nu am putut dezactiva filtrele (filtrele) selectate. S-a produs o eroare la server.';
$messages['deactivated'] = 'Filtrele au fost activate cu succes.';
$messages['activated'] = 'Filtrele au fost dezactivate cu succes.';
$messages['moved'] = 'Filtrele au fost mutate cu succes.';
$messages['moveerror'] = 'Nu am putut muta filtrul selectat. S-a produs o eroare la server.';
$messages['nametoolong'] = 'Numele este prea lung.';
$messages['namereserved'] = 'Nume rezervat.';
$messages['setexist'] = 'Setul există deja.';
$messages['nodata'] = 'Trebuie selectată cel putin o poziţie!';
$messages['invaliddateformat'] = 'Data sau parte din data in format invalid';
$messages['saveerror'] = 'Nu am putut salva datele. A aparut o eroare de server.';
$messages['emptyvacationbody'] = 'Corpul mesajului de vacanță este obligatoriu!';
$messages['duplicate.conflict.err'] = 'Atât antetul, cât și identificatorul unic nu sunt permise.';
PK{c�\�6��+
+
managesieve/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtriloj';
$labels['managefilters'] = 'Mastrumi filtrilojn pri enirantaj mesaĝoj';
$labels['filtername'] = 'Nomo de filtrilo';
$labels['newfilter'] = 'Nova filtrilo';
$labels['filteradd'] = 'Aldoni filtrilon';
$labels['filterdel'] = 'Forigi filtrilon';
$labels['moveup'] = 'Movi supren';
$labels['movedown'] = 'Movi malsupren';
$labels['filterany'] = 'ĉiuj mesaĝoj';
$labels['filtercontains'] = 'enhavas';
$labels['filternotcontains'] = 'ne enhavas';
$labels['filteris'] = 'egalas al';
$labels['filterisnot'] = 'ne egalas al';
$labels['filterexists'] = 'ekzistas';
$labels['filternotexists'] = 'ne ekzistas';
$labels['filtermatches'] = 'kongruas esprimon';
$labels['filternotmatches'] = 'ne kongruas esprimon';
$labels['filterregex'] = 'kongruas regularan esprimon';
$labels['filternotregex'] = 'ne kongruas regularan esprimon';
$labels['filterunder'] = 'sub';
$labels['filterover'] = 'preter';
$labels['addrule'] = 'Aldoni regulon';
$labels['delrule'] = 'Forigi regulon';
$labels['messagemoveto'] = 'Movi mesaĝon al';
$labels['messageredirect'] = 'Aidirekti mesaĝon al';
$labels['messagecopyto'] = 'Kopii mesaĝo en';
$labels['messagesendcopy'] = 'Sendi kopion de mesaĝo al';
$labels['messagereply'] = 'Respondi per mesaĝo';
$labels['messagedelete'] = 'Forigi mesaĝon';
$labels['add'] = 'Aldoni';
$labels['del'] = 'Forigi';
$labels['sender'] = 'Sendanto';
$labels['recipient'] = 'Ricevanto';
$labels['flagread'] = 'Legi';
$labels['flagdeleted'] = 'Forigita';
$labels['flagflagged'] = 'Markita';
$labels['notifymethodmailto'] = 'Retpoŝto';
$labels['notifymethodtel'] = 'Telefono';
$labels['datetest'] = 'Dato';
$labels['spamtestequals'] = 'egalas al';
$labels['spamtestnotequals'] = 'ne egalas al';
$labels['vacation.subject'] = 'Temo';
$labels['vacation.keep'] = 'Manteni';
PK{c�\��M@��"managesieve/localization/bn_BD.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'মেইল/চিঠি ছিড়ে ফেলুন';
$labels['del'] = 'ফেলে দিন';
$labels['sender'] = 'প্রেরক';
$labels['flagread'] = 'পড়';
$labels['flagflagged'] = 'দাগানো (flagged)';
$labels['notifymethodmailto'] = 'ই-মেইল/চিঠি';
$labels['datetest'] = 'তারিখ';
$labels['advancedopts'] = 'জটিল বিষয়';
$labels['vacation.subject'] = 'বিষয়';
PK{c�\x�ES<S<"managesieve/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtres';
$labels['managefilters'] = 'Gérer les filtres de courriels entrants';
$labels['filtername'] = 'Nom du filtre';
$labels['newfilter'] = 'Nouveau filtre';
$labels['filteradd'] = 'Ajouter un filtre';
$labels['filterdel'] = 'Supprimer le filtre';
$labels['rules'] = 'Règles';
$labels['actions'] = 'Actions';
$labels['scope'] = 'Portée';
$labels['moveup'] = 'Monter';
$labels['movedown'] = 'Descendre';
$labels['filterallof'] = 'correspondant à toutes les règles suivantes';
$labels['filteranyof'] = 'valident au moins une des conditions suivantes';
$labels['filterany'] = 'tous les courriels';
$labels['filtercontains'] = 'contient';
$labels['filternotcontains'] = 'ne contient pas';
$labels['filteris'] = 'est égal à';
$labels['filterisnot'] = 'est différent de';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'n’existe pas';
$labels['filtermatches'] = 'correspond à l’expression';
$labels['filternotmatches'] = 'ne correspond pas à l’expression';
$labels['filterregex'] = 'correspond à l’expression rationnelle';
$labels['filternotregex'] = 'ne correspond pas à l’expression rationnelle';
$labels['filterunder'] = 'plus petit que';
$labels['filterover'] = 'plus grand que';
$labels['mime'] = 'MIME :';
$labels['mimepart'] = 'Partie MIME :';
$labels['mime-message'] = 'message';
$labels['mime-anychild'] = 'tout';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'sous-type';
$labels['mime-contenttype'] = 'type de contenu';
$labels['mime-param'] = 'paramètre';
$labels['addrule'] = 'Ajouter une règle';
$labels['delrule'] = 'Supprimer une règle';
$labels['messagemoveto'] = 'Déplacer le courriel vers';
$labels['messageredirect'] = 'Rediriger le courriel vers';
$labels['messagecopyto'] = 'Copier le courriel vers';
$labels['messagesendcopy'] = 'Envoyer une copie du courriel à';
$labels['messagereply'] = 'Répondre avec le courriel';
$labels['messagedelete'] = 'Supprimer le courriel';
$labels['messagediscard'] = 'Rejeter avec le courriel';
$labels['messagekeep'] = 'Conserver le courriel dans la boîte de réception';
$labels['messagesrules'] = 'Pour les courriels entrants :';
$labels['messagesactions'] = '…exécuter les actions suivantes :';
$labels['add'] = 'Ajouter';
$labels['del'] = 'Supprimer';
$labels['sender'] = 'Expéditeur';
$labels['recipient'] = 'Destinataire';
$labels['vacationaddr'] = 'Mes adresses courriel :';
$labels['vacationdays'] = 'Fréquence d’envoi des courriels (en jours) :';
$labels['vacationinterval'] = 'Fréquence d’envoi des courriels :';
$labels['vacationreason'] = 'Corps du courriel (raison de l’absence) :';
$labels['vacationfrom'] = 'Adresse de réponse de l’expéditeur :';
$labels['vacationsubject'] = 'Objet du courriel :';
$labels['days'] = 'jours';
$labels['seconds'] = 'secondes';
$labels['rulestop'] = 'Arrêter l’évaluation des règles';
$labels['enable'] = 'Activer/désactiver';
$labels['filterset'] = 'Jeu de filtres';
$labels['filtersets'] = 'Jeux de filtres';
$labels['filtersetadd'] = 'Ajouter un jeu de filtres';
$labels['filtersetdel'] = 'Supprimer le jeu de filtres';
$labels['filtersetact'] = 'Activer le jeu de filtres actuel';
$labels['filtersetdeact'] = 'Désactiver le jeu de filtres actuel';
$labels['filterseteditraw'] = 'Modifier le jeu de filtres';
$labels['filtersetswitch'] = 'Activer, désactiver un jeu de filtres';
$labels['filterdef'] = 'Définition du filtre';
$labels['filtersetname'] = 'Nom du jeu de filtres';
$labels['newfilterset'] = 'Nouveau jeu de filtres';
$labels['active'] = 'activer';
$labels['none'] = 'aucun';
$labels['fromset'] = 'à partir du jeu';
$labels['fromfile'] = 'à partir du fichier';
$labels['filterdisabled'] = 'Filtre désactivé';
$labels['filterenabled'] = 'Le filtre est activé';
$labels['countisgreaterthan'] = 'total supérieur à';
$labels['countisgreaterthanequal'] = 'total supérieur ou égal à';
$labels['countislessthan'] = 'total inférieur à';
$labels['countislessthanequal'] = 'total inférieur ou égal à';
$labels['countequals'] = 'total égal à';
$labels['countnotequals'] = 'le nombre n’est pas égal à';
$labels['valueisgreaterthan'] = 'valeur supérieure à';
$labels['valueisgreaterthanequal'] = 'valeur supérieure ou égale à';
$labels['valueislessthan'] = 'valeur inférieure à';
$labels['valueislessthanequal'] = 'valeur inférieure ou égale à';
$labels['valueequals'] = 'valeur égale à';
$labels['valuenotequals'] = 'la valeur n’est pas égale à';
$labels['setflags'] = 'Définir les drapeaux pour le courriel';
$labels['addflags'] = 'Ajouter les drapeaux au courriel';
$labels['removeflags'] = 'Supprimer les drapeaux du courriel';
$labels['flagread'] = 'Lu';
$labels['flagdeleted'] = 'Supprimé';
$labels['flaganswered'] = 'Réponse envoyée';
$labels['flagflagged'] = 'Signalé';
$labels['flagdraft'] = 'Brouillon';
$labels['addheader'] = 'Ajouter un en-tête au courriel';
$labels['deleteheader'] = 'Supprimer l’en-tête du courriel';
$labels['headername'] = 'Nom de l’en-tête';
$labels['headervalue'] = 'Valeur de l’en-tête';
$labels['headerpos'] = 'Position de l’en-tête';
$labels['headeratstart'] = 'au début';
$labels['headeratend'] = 'à la fin';
$labels['headeroccurrence'] = 'Occurrence/position de l’en-tête';
$labels['headerfromstart'] = 'du début';
$labels['headerfromend'] = 'de la fin';
$labels['headerpatterns'] = 'Schémas de valeur d’en-tête';
$labels['headermatchtype'] = 'type de concordance :';
$labels['setvariable'] = 'Définir une variable';
$labels['setvarname'] = 'Nom de la variable :';
$labels['setvarvalue'] = 'Valeur de la variable :';
$labels['setvarmodifiers'] = 'Modificateurs :';
$labels['varlower'] = 'minuscule';
$labels['varupper'] = 'majuscule';
$labels['varlowerfirst'] = 'premier caractère en minuscule';
$labels['varupperfirst'] = 'premier caractère en majuscule';
$labels['varquotewildcard'] = 'citer les caractères spéciaux';
$labels['varlength'] = 'longueur';
$labels['varencodeurl'] = 'pourcentage encodé (pour les URL)';
$labels['notify'] = 'Envoyer la notification';
$labels['notifytarget'] = 'Cible de la notification :';
$labels['notifymessage'] = 'Courriel de notification (facultatif) :';
$labels['notifyoptions'] = 'Options de notification (facultatif) :';
$labels['notifyfrom'] = 'Expéditeur de la notification (facultatif) :';
$labels['notifyimportance'] = 'Importance :';
$labels['notifyimportancelow'] = 'faible';
$labels['notifyimportancenormal'] = 'normale';
$labels['notifyimportancehigh'] = 'haute';
$labels['notifymethodmailto'] = 'Courriel';
$labels['notifymethodtel'] = 'Téléphone';
$labels['notifymethodsms'] = 'Texto';
$labels['filtercreate'] = 'Créer un filtre';
$labels['usedata'] = 'Utiliser les données suivantes dans le filtre :';
$labels['nextstep'] = 'Étape suivante';
$labels['...'] = '…';
$labels['string'] = 'Chaîne';
$labels['currdate'] = 'Date actuelle';
$labels['datetest'] = 'Date';
$labels['dateheader'] = 'en-tête :';
$labels['year'] = 'année';
$labels['month'] = 'mois';
$labels['day'] = 'jour';
$labels['date'] = 'date (aaaa-mm-jj)';
$labels['julian'] = 'date (julien)';
$labels['hour'] = 'heure';
$labels['minute'] = 'minute';
$labels['second'] = 'seconde';
$labels['time'] = 'heure (hh:mm:ss)';
$labels['iso8601'] = 'date (ISO8601)';
$labels['std11'] = 'date (RFC2822)';
$labels['zone'] = 'fuseau horaire';
$labels['weekday'] = 'jour de la semaine (0 à 6)';
$labels['advancedopts'] = 'Options avancées';
$labels['body'] = 'Corps';
$labels['address'] = 'adresse';
$labels['envelope'] = 'enveloppe';
$labels['modifier'] = 'modificateur :';
$labels['text'] = 'texte';
$labels['undecoded'] = 'non décodé (brut)';
$labels['contenttype'] = 'type de contenu';
$labels['modtype'] = 'type :';
$labels['allparts'] = 'tout';
$labels['domain'] = 'domaine';
$labels['localpart'] = 'partie locale';
$labels['user'] = 'utilisateur';
$labels['detail'] = 'détail';
$labels['comparator'] = 'comparateur :';
$labels['default'] = 'par défaut';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'insensible à la casse (ascii-casemap)';
$labels['asciinumeric'] = 'numérique (ascii-numeric)';
$labels['index'] = 'index :';
$labels['indexlast'] = 'à l’envers';
$labels['spamtest'] = 'Le niveau de pourriel';
$labels['spamtestisgreaterthan'] = 'est supérieur à';
$labels['spamtestisgreaterthanequal'] = 'est supérieur ou égal à';
$labels['spamtestislessthan'] = 'est inférieur à';
$labels['spamtestislessthanequal'] = 'est inférieur ou égal à';
$labels['spamtestequals'] = 'est égal à';
$labels['spamtestnotequals'] = 'est différent de';
$labels['spamtestisunknown'] = 'est inconnu';
$labels['vacation'] = 'Avis d’absence';
$labels['vacation.reply'] = 'Courriel de réponse';
$labels['vacation.advanced'] = 'Paramètres avancés';
$labels['vacation.from'] = 'Adresse de réponse de l’expéditeur';
$labels['vacation.subject'] = 'Objet';
$labels['vacation.body'] = 'Corps';
$labels['vacation.start'] = 'Début';
$labels['vacation.end'] = 'Fin';
$labels['vacation.status'] = 'État';
$labels['vacation.on'] = 'Marche';
$labels['vacation.off'] = 'Arrêt';
$labels['vacation.addresses'] = 'Mes adresses courriel';
$labels['vacation.interval'] = 'Plage de réponse';
$labels['vacation.after'] = 'Mettre la règle d’avis d’absence après';
$labels['vacation.saving'] = 'Enregistrement des données…';
$labels['vacation.action'] = 'Action pour courriel entrant';
$labels['vacation.keep'] = 'Garder';
$labels['vacation.discard'] = 'Rejeter';
$labels['vacation.redirect'] = 'Réacheminer à';
$labels['vacation.copy'] = 'Envoyer une copie à';
$labels['forward'] = 'Transfert';
$labels['forward.redirect'] = 'Réacheminer à';
$labels['forward.copy'] = 'Envoyer une copie à';
$labels['forward.on'] = 'Marche';
$labels['forward.off'] = 'Arrêt';
$labels['forward.status'] = 'État :';
$labels['forward.action'] = 'Pour les courriels entrants, exécuter l’action suivante :';
$labels['forward.saving'] = 'Enregistrement des données…';
$labels['filladdresses'] = 'Remplir avec toutes mes adresses';
$labels['arialabelfiltersetactions'] = 'Actions des jeux de filtrage';
$labels['arialabelfilteractions'] = 'Actions de filtrage';
$labels['arialabelfilterform'] = 'Propriété du filtrage';
$labels['ariasummaryfilterslist'] = 'Liste des filtres';
$labels['ariasummaryfiltersetslist'] = 'Liste des jeux de filtrage';
$labels['filterstitle'] = 'Modifier les filtres de courriels entrants';
$labels['vacationtitle'] = 'Modifier la règle d’absence du bureau';
$labels['forwardtitle'] = 'Modifier la règle de transfert des courriels';
$labels['message'] = 'Message';
$labels['duplicate'] = 'est un doublon';
$labels['notduplicate'] = 'n’est pas un doublon';
$labels['duplicate.handle'] = 'descripteur :';
$labels['duplicate.header'] = 'en-tête :';
$labels['duplicate.uniqueid'] = 'identifiant :';
$labels['duplicate.seconds'] = 'temporisation (secondes) :';
$labels['duplicate.last'] = 'par rapport à la dernière exécution';
$messages['filterunknownerror'] = 'Erreur de serveur inconnue';
$messages['filterconnerror'] = 'La connexion au serveur n’aboutit pas.';
$messages['filterdeleteerror'] = 'Impossible de supprimer le filtre. Une erreur de serveur est survenue.';
$messages['filterdeleted'] = 'Le filtre a été supprimé avec succès.';
$messages['filtersaved'] = 'Le filtre a été enregistré avec succès.';
$messages['filtersaveerror'] = 'Impossible d’enregistrer le filtre. Une erreur de serveur est survenue.';
$messages['filterformerror'] = 'Le formulaire de filtrage contient des erreurs.';
$messages['filterdeleteconfirm'] = 'Voulez-vous vraiment supprimer le filtre sélectionné ?';
$messages['ruledeleteconfirm'] = 'Voulez-vous vraiment supprimer la règle sélectionnée ?';
$messages['actiondeleteconfirm'] = 'Voulez-vous vraiment supprimer l’action sélectionnée ?';
$messages['forbiddenchars'] = 'Caractères interdits dans le champ';
$messages['cannotbeempty'] = 'Le champ ne peut pas être vide';
$messages['ruleexist'] = 'Un filtre existe déjà avec ce nom.';
$messages['setactivateerror'] = 'Impossible d’activer le jeu de filtres sélectionné. Une erreur de serveur est survenue.';
$messages['setdeactivateerror'] = 'Impossible de désactiver le jeu de filtres sélectionné. Une erreur de serveur est survenue.';
$messages['setdeleteerror'] = 'Impossible de supprimer le jeu de filtres sélectionné. Une erreur de serveur est survenue.';
$messages['setactivated'] = 'Le jeu de filtres a été activé avec succès.';
$messages['setdeactivated'] = 'Le jeu de filtres a été désactivé avec succès.';
$messages['setdeleted'] = 'Le jeu de filtres a été supprimé avec succès.';
$messages['setupdated'] = 'Le jeu de filtres a été mis à jour avec succès.';
$messages['setdeleteconfirm'] = 'Voulez vous vraiment supprimer le jeu de filtres sélectionné ?';
$messages['setcreateerror'] = 'Impossible de créer un jeu de filtres. Une erreur de serveur est survenue.';
$messages['setcreated'] = 'Le jeu de filtres a été créé avec succès.';
$messages['activateerror'] = 'Impossible d’activer les filtres sélectionnés. Une erreur de serveur est survenue.';
$messages['deactivateerror'] = 'Impossible de désactiver les filtres sélectionnés. Une erreur de serveur est survenue.';
$messages['deactivated'] = 'Filtres désactivés avec succès.';
$messages['activated'] = 'Filtres activés avec succès.';
$messages['moved'] = 'Filtre déplacé avec succès.';
$messages['moveerror'] = 'Impossible de déplacer le filtre sélectionné. Une erreur de serveur est survenue.';
$messages['nametoolong'] = 'Nom trop long.';
$messages['namereserved'] = 'Nom réservé.';
$messages['setexist'] = 'Le jeu existe déjà.';
$messages['nodata'] = 'Au moins un élément doit être sélectionné.';
$messages['invaliddateformat'] = 'Format de date ou d’une partie de la date invalide';
$messages['saveerror'] = 'Impossible d’enregistrer les données. Une erreur du serveur est survenue.';
$messages['vacationsaved'] = 'Les données d’avis d’absence ont été enregistrées avec succès.';
$messages['forwardsaved'] = 'Les données de transfert ont été enregistrées avec succès.';
$messages['emptyvacationbody'] = 'Le corps du courriel de vacances est requis';
$messages['duplicate.conflict.err'] = 'L’en-tête et l’identifiant unique ne sont pas permis.';
$messages['disabledaction'] = 'L’action n’est pas permise.';
$messages['lastindexempty'] = 'L’index est requis en comptant de la fin';
$messages['noflagset'] = 'Au moins un drapeau doit être sélectionné.';
PK{c�\�
a�%�%"managesieve/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filteri';
$labels['managefilters'] = 'Uredi filtere za pristiglu poštu';
$labels['filtername'] = 'Naziv filtera';
$labels['newfilter'] = 'Novi filter';
$labels['filteradd'] = 'Dodaj filter';
$labels['filterdel'] = 'Obriši filter';
$labels['rules'] = 'Pravila';
$labels['actions'] = 'Radnje';
$labels['scope'] = 'Djelokrug';
$labels['moveup'] = 'Pomakni gore';
$labels['movedown'] = 'Pomakni dolje';
$labels['filterallof'] = 'koje odgovaraju svim sljedećim pravilima';
$labels['filteranyof'] = 'koje odgovaraju bilo kojem od sljedećih pravila';
$labels['filterany'] = 'sve poruke';
$labels['filtercontains'] = 'sadrži';
$labels['filternotcontains'] = 'ne sadrži';
$labels['filteris'] = 'jednako je';
$labels['filterisnot'] = 'nije jednako';
$labels['filterexists'] = 'postoji';
$labels['filternotexists'] = 'ne postoji';
$labels['filtermatches'] = 'odgovara izrazu';
$labels['filternotmatches'] = 'ne odgovara izrazu';
$labels['filterregex'] = 'odgovara regularnom izrazu';
$labels['filternotregex'] = 'ne odgovara regularnom izrazu';
$labels['filterunder'] = 'ispod';
$labels['filterover'] = 'iznad';
$labels['mime-message'] = 'poruka';
$labels['mime-anychild'] = 'bilo koji';
$labels['mime-type'] = 'vrsta';
$labels['mime-subtype'] = 'podvrsta';
$labels['mime-param'] = 'parametar';
$labels['addrule'] = 'Dodaj pravilo';
$labels['delrule'] = 'Obriši pravilo';
$labels['messagemoveto'] = 'Premjesti poruku u';
$labels['messageredirect'] = 'Preusmjeri poruku na';
$labels['messagecopyto'] = 'Kopiraju poruku u';
$labels['messagesendcopy'] = 'Pošalji kopiju poruke na';
$labels['messagereply'] = 'Odgovori sa porukom';
$labels['messagedelete'] = 'Obriši poruku';
$labels['messagediscard'] = 'Otkaži sa porukom';
$labels['messagekeep'] = 'Zadrži poruku u mapi Inbox';
$labels['messagesrules'] = 'Za pristigle poruke:';
$labels['messagesactions'] = '...primijeni sljedeće akcije:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Obriši';
$labels['sender'] = 'Pošiljatelj';
$labels['recipient'] = 'Primatelj';
$labels['vacationaddr'] = 'Moje email adrese:';
$labels['vacationdays'] = 'Koliko često slati poruku (u danima):';
$labels['vacationinterval'] = 'Koliko često slati poruku:';
$labels['vacationreason'] = 'Tijelo poruke (razlog odmora):';
$labels['vacationsubject'] = 'Naslov poruke:';
$labels['days'] = 'dana';
$labels['seconds'] = 'sekundi';
$labels['rulestop'] = 'Prekini izvođenje filtera';
$labels['enable'] = 'Omogući/Onemogući';
$labels['filtersets'] = 'Filteri';
$labels['filtersetadd'] = 'Dodaj skup filtera';
$labels['filtersetdel'] = 'Obriši skup filtera';
$labels['filterdef'] = 'Definicije filtera';
$labels['active'] = 'aktivan';
$labels['none'] = 'nijedan';
$labels['fromset'] = 'iz grupe';
$labels['fromfile'] = 'iz datoteke';
$labels['filterdisabled'] = 'Deaktiviraj filter';
$labels['countisgreaterthan'] = 'brojač je veći od';
$labels['countisgreaterthanequal'] = 'brojač je veći ili jednak od';
$labels['countislessthan'] = 'brojač je manji od';
$labels['countislessthanequal'] = 'brojač je manji ili jednak od';
$labels['countequals'] = 'brojač je jednak';
$labels['countnotequals'] = 'brojač nije jednak';
$labels['valueisgreaterthan'] = 'vrijednost je veća od';
$labels['valueisgreaterthanequal'] = 'vrijednost je veća ili jednaka od';
$labels['valueislessthan'] = 'vrijednost je manja od';
$labels['valueislessthanequal'] = 'vrijednost je manja ili jednaka od';
$labels['valueequals'] = 'vrijednost je jednaka';
$labels['valuenotequals'] = 'vrijednost nije jednaka';
$labels['setflags'] = 'Postavi oznake na poruku';
$labels['addflags'] = 'Dodaj oznake na poruku';
$labels['removeflags'] = 'Ukloni oznake sa poruke';
$labels['flagread'] = 'Pročitana';
$labels['flagdeleted'] = 'Obrisana';
$labels['flaganswered'] = 'Odgovorena';
$labels['flagflagged'] = 'Označena';
$labels['flagdraft'] = 'Predložak';
$labels['setvariable'] = 'Postavi varijablu';
$labels['setvarname'] = 'Ime varijable:';
$labels['setvarvalue'] = 'Vrijednost varijable:';
$labels['setvarmodifiers'] = 'Modifikatori:';
$labels['varlower'] = 'mala slova';
$labels['varupper'] = 'velika slova';
$labels['varlowerfirst'] = 'prvo slovo malo';
$labels['varupperfirst'] = 'prvo slovo veliko';
$labels['varquotewildcard'] = 'Citiraj specijalne znakove';
$labels['varlength'] = 'duljina';
$labels['notify'] = 'Pošalji obavijest';
$labels['notifyimportance'] = 'Važnost:';
$labels['notifyimportancelow'] = 'niska';
$labels['notifyimportancenormal'] = 'normalna';
$labels['notifyimportancehigh'] = 'visoka';
$labels['notifymethodmailto'] = 'E-mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['filtercreate'] = 'Stvori filter';
$labels['usedata'] = 'Koristi podatke za filter:';
$labels['nextstep'] = 'Idući korak';
$labels['...'] = '…';
$labels['currdate'] = 'Današnji datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'zaglavlje:';
$labels['year'] = 'godina';
$labels['month'] = 'mjesec';
$labels['day'] = 'dan';
$labels['date'] = 'datum (yyyy-mm-dd)';
$labels['julian'] = 'datum (julijanski)';
$labels['hour'] = 'sat';
$labels['minute'] = 'minute';
$labels['second'] = 'sekunde';
$labels['time'] = 'vrijeme (hh:mm:ss)';
$labels['iso8601'] = 'datum (ISO8601)';
$labels['std11'] = 'datum (RFC2822)';
$labels['zone'] = 'vremenska zona';
$labels['weekday'] = 'dan u tjednu (0-6)';
$labels['advancedopts'] = 'Napredne postavke';
$labels['body'] = 'Tijelo poruke';
$labels['address'] = 'adresa';
$labels['envelope'] = 'omotnica';
$labels['modifier'] = 'modificirao:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'nedekodirano (raw)';
$labels['contenttype'] = 'tip sadržaja';
$labels['modtype'] = 'tip:';
$labels['allparts'] = 'sve';
$labels['domain'] = 'domena';
$labels['localpart'] = 'lokalni dio';
$labels['user'] = 'korisnik';
$labels['detail'] = 'detalj';
$labels['comparator'] = 'usporedio:';
$labels['default'] = 'preddefinirano';
$labels['octet'] = 'strogo (oktet)';
$labels['asciicasemap'] = 'neosjetljivo na veličinu slova (ascii-casemap)';
$labels['asciinumeric'] = 'numerički (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'unatrag';
$labels['spamtestequals'] = 'jednako je';
$labels['spamtestnotequals'] = 'nije jednako';
$labels['vacation.reply'] = 'Automatski odgovor';
$labels['vacation.advanced'] = 'Napredne postavke';
$labels['vacation.subject'] = 'Naslov';
$labels['vacation.body'] = 'Tijelo poruke';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Uključeno';
$labels['vacation.off'] = 'Isključeno';
$labels['vacation.addresses'] = 'Moje email adrese';
$labels['vacation.interval'] = 'Interval za odgovor';
$labels['vacation.after'] = 'Postavi out-off-office pravilo nakon';
$labels['vacation.saving'] = 'Spremanje podataka...';
$labels['vacation.keep'] = 'Zadrži';
$labels['forward.on'] = 'Aktivno';
$labels['forward.off'] = 'Isključeno';
$labels['forward.saving'] = 'Spremanje podataka...';
$labels['duplicate.header'] = 'zaglavlje:';
$messages['filterunknownerror'] = 'Nepoznata greška na poslužitelju';
$messages['filterconnerror'] = 'Nemoguće spajanje na poslužitelj (managesieve)';
$messages['filterdeleteerror'] = 'Nemoguće brisanje filtera. Greška na poslužitelju.';
$messages['filterdeleted'] = 'Filter je uspješno obrisan';
$messages['filtersaved'] = 'Filter je uspješno spremljen';
$messages['filtersaveerror'] = 'Nemoguće spremiti filter. Greška na poslužitelju.';
$messages['filterdeleteconfirm'] = 'Sigurno želite obrisati odabrani filter?';
$messages['ruledeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabrana pravila?';
$messages['actiondeleteconfirm'] = 'Jeste li sigurni da želite obrisati odabrane akcije?';
$messages['forbiddenchars'] = 'Nedozvoljeni znakovi u polju';
$messages['cannotbeempty'] = 'Polje nesmije biti prazno';
$messages['ruleexist'] = 'Filter sa zadanim imenom već postoji.';
$messages['activateerror'] = 'Nije moguće omogućiti odabrani filter(e). Greška poslužitelja.';
$messages['deactivateerror'] = 'Nije moguće onemogućiti odabrane filter(e). Greška poslužitelja.';
$messages['deactivated'] = 'Filter(i) omogućen(i) uspješno.';
$messages['activated'] = 'Filter(i) onemogućen(i) uspješno.';
$messages['moved'] = 'Filter uspješno premješten.';
$messages['moveerror'] = 'Nije moguće premjestiti odabrani filter. Greška poslužitelja.';
$messages['nametoolong'] = 'Nemoguće napraviti grupu filtera. Naziv je predugačak';
$messages['namereserved'] = 'Rezervirano ime.';
$messages['setexist'] = 'Skup već postoji.';
$messages['nodata'] = 'Barem jedan pozicija mora biti odabrana!';
$messages['invaliddateformat'] = 'Neispravan datum ili dio datuma';
$messages['saveerror'] = 'Nemoguće spremiti podatke. Greška na poslužitelju.';
$messages['vacationsaved'] = 'Out-off-office podaci uspješno pohranjeni.';
PK{c�\O��I99"managesieve/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtry';
$labels['managefilters'] = 'Zarządzanie filtrami poczty przychodzącej';
$labels['filtername'] = 'Nazwa filtru';
$labels['newfilter'] = 'Nowy filtr';
$labels['filteradd'] = 'Dodaj filtr';
$labels['filterdel'] = 'Usuń filtr';
$labels['rules'] = 'Reguły';
$labels['actions'] = 'Akcje';
$labels['scope'] = 'Zakres';
$labels['moveup'] = 'W górę';
$labels['movedown'] = 'W dół';
$labels['filterallof'] = 'spełniających wszystkie poniższe kryteria';
$labels['filteranyof'] = 'spełniających dowolne z poniższych kryteriów';
$labels['filterany'] = 'wszystkich';
$labels['filtercontains'] = 'zawiera';
$labels['filternotcontains'] = 'nie zawiera';
$labels['filteris'] = 'jest równe';
$labels['filterisnot'] = 'nie jest równe';
$labels['filterexists'] = 'istnieje';
$labels['filternotexists'] = 'nie istnieje';
$labels['filtermatches'] = 'pasuje do wyrażenia';
$labels['filternotmatches'] = 'nie pasuje do wyrażenia';
$labels['filterregex'] = 'pasuje do wyrażenia regularnego';
$labels['filternotregex'] = 'nie pasuje do wyrażenia regularnego';
$labels['filterunder'] = 'poniżej';
$labels['filterover'] = 'ponad';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Część MIME:';
$labels['mime-message'] = 'wiadomość';
$labels['mime-anychild'] = 'dowolne';
$labels['mime-type'] = 'typ';
$labels['mime-subtype'] = 'podtyp';
$labels['mime-contenttype'] = 'typ treści';
$labels['mime-param'] = 'parametr';
$labels['addrule'] = 'Dodaj regułę';
$labels['delrule'] = 'Usuń regułę';
$labels['messagemoveto'] = 'Przenieś wiadomość do';
$labels['messageredirect'] = 'Przekaż wiadomość na konto';
$labels['messagecopyto'] = 'Skopiuj wiadomość do';
$labels['messagesendcopy'] = 'Wyślij kopię do';
$labels['messagereply'] = 'Odpowiedz wiadomością o treści';
$labels['messagedelete'] = 'Usuń wiadomość';
$labels['messagediscard'] = 'Odrzuć z komunikatem';
$labels['messagekeep'] = 'Zachowaj wiadomość w Odebranych';
$labels['messagesrules'] = 'W stosunku do przychodzącej poczty:';
$labels['messagesactions'] = '...wykonaj następujące czynności:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Usuń';
$labels['sender'] = 'Nadawca';
$labels['recipient'] = 'Odbiorca';
$labels['vacationaddr'] = 'Moje adresy e-mail:';
$labels['vacationdays'] = 'Częstotliwość wysyłania wiadomości (w dniach):';
$labels['vacationinterval'] = 'Jak często wysyłać wiadomości:';
$labels['vacationreason'] = 'Treść (przyczyna nieobecności):';
$labels['vacationfrom'] = 'Adres nadawcy odpowiedzi:';
$labels['vacationsubject'] = 'Temat wiadomości:';
$labels['days'] = 'dni';
$labels['seconds'] = 'sekundy';
$labels['rulestop'] = 'Przerwij przetwarzanie reguł';
$labels['enable'] = 'Włącz/Wyłącz';
$labels['filterset'] = 'Zbiory fitrów';
$labels['filtersets'] = 'Zbiory fitrów';
$labels['filtersetadd'] = 'Dodaj zbiór filtrów';
$labels['filtersetdel'] = 'Usuń zbiór filtrów';
$labels['filtersetact'] = 'Aktywuj bieżący zbiór filtrów';
$labels['filtersetdeact'] = 'Deaktywuj bieżący zbiór filtrów';
$labels['filterseteditraw'] = 'Edytuj zbiór filtrów';
$labels['filtersetswitch'] = 'Włącz/Wyłącz zbiór filtrów';
$labels['filterdef'] = 'Definicja filtra';
$labels['filtersetname'] = 'Nazwa zbioru';
$labels['newfilterset'] = 'Nowy zbiór filtrów';
$labels['active'] = 'aktywny';
$labels['none'] = 'brak';
$labels['fromset'] = 'ze zbioru';
$labels['fromfile'] = 'z pliku';
$labels['filterdisabled'] = 'Filtr wyłączony';
$labels['filterenabled'] = 'Filtr włączony';
$labels['countisgreaterthan'] = 'ilość jest większa od';
$labels['countisgreaterthanequal'] = 'ilość jest równa lub większa od';
$labels['countislessthan'] = 'ilość jest mniejsza od';
$labels['countislessthanequal'] = 'ilość jest równa lub mniejsza od';
$labels['countequals'] = 'ilość jest równa';
$labels['countnotequals'] = 'ilość nie jest równa';
$labels['valueisgreaterthan'] = 'wartość jest większa od';
$labels['valueisgreaterthanequal'] = 'wartość jest równa lub większa od';
$labels['valueislessthan'] = 'wartość jest mniejsza od';
$labels['valueislessthanequal'] = 'wartość jest równa lub mniejsza od';
$labels['valueequals'] = 'wartość jest równa';
$labels['valuenotequals'] = 'wartość nie jest równa';
$labels['setflags'] = 'Ustaw flagi wiadomości';
$labels['addflags'] = 'Dodaj flagi do wiadomości';
$labels['removeflags'] = 'Usuń flagi wiadomości';
$labels['flagread'] = 'Przeczytana';
$labels['flagdeleted'] = 'Usunięta';
$labels['flaganswered'] = 'Z odpowiedzią';
$labels['flagflagged'] = 'Oflagowana';
$labels['flagdraft'] = 'Szkic';
$labels['addheader'] = 'Dodaj nagłówek do wiadomości';
$labels['deleteheader'] = 'Usuń nagłówek z wiadomości';
$labels['headername'] = 'Nazwa nagłówka';
$labels['headervalue'] = 'Treść nagłówka';
$labels['headerpos'] = 'Pozycja nagłówka';
$labels['headeratstart'] = 'na początku';
$labels['headeratend'] = 'na końcu';
$labels['headeroccurrence'] = 'Wystąpienie/pozycja nagłówka';
$labels['headerfromstart'] = 'od początku';
$labels['headerfromend'] = 'od końca';
$labels['headerpatterns'] = 'Wzorce treści nagłówka';
$labels['headermatchtype'] = 'typ dopasowania:';
$labels['setvariable'] = 'Ustaw zmienną';
$labels['setvarname'] = 'Nazwa zmiennej:';
$labels['setvarvalue'] = 'Wartość zmiennej:';
$labels['setvarmodifiers'] = 'Modyfikatory:';
$labels['varlower'] = 'małe litery';
$labels['varupper'] = 'wielkie litery';
$labels['varlowerfirst'] = 'pierwsza mała litera';
$labels['varupperfirst'] = 'pierwsza wielka litera';
$labels['varquotewildcard'] = 'zamień znaki specjalne';
$labels['varlength'] = 'długość';
$labels['notify'] = 'Wyślij powiadomienie';
$labels['notifytarget'] = 'Odbiorca powiadomienia:';
$labels['notifymessage'] = 'Wiadomość powiadomienia (opcjonalne):';
$labels['notifyoptions'] = 'Opcje powiadomienia (opcjonalne):';
$labels['notifyfrom'] = 'Nadawca powiadomienia (opcjonalne):';
$labels['notifyimportance'] = 'Priorytet:';
$labels['notifyimportancelow'] = 'niski';
$labels['notifyimportancenormal'] = 'normalny';
$labels['notifyimportancehigh'] = 'wysoki';
$labels['notifymethodmailto'] = 'E-Mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Utwórz filtr';
$labels['usedata'] = 'Użyj następujących danych do utworzenia filtra:';
$labels['nextstep'] = 'Następny krok';
$labels['...'] = '...';
$labels['string'] = 'Ciąg znaków';
$labels['currdate'] = 'Bieżąca data';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'nagłówek:';
$labels['year'] = 'rok';
$labels['month'] = 'miesiąc';
$labels['day'] = 'dzień';
$labels['date'] = 'data (rrrr-mm-dd)';
$labels['julian'] = 'data (kalendarz juliański)';
$labels['hour'] = 'godzina';
$labels['minute'] = 'minuta';
$labels['second'] = 'sekunda';
$labels['time'] = 'czas (gg:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'Strefa czasowa';
$labels['weekday'] = 'dzień tygodnia (0-6)';
$labels['advancedopts'] = 'Zaawansowane opcje';
$labels['body'] = 'Treść';
$labels['address'] = 'adres';
$labels['envelope'] = 'koperta (envelope)';
$labels['modifier'] = 'modyfikator:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'nieprzetworzony (raw)';
$labels['contenttype'] = 'typ części (content type)';
$labels['modtype'] = 'typ:';
$labels['allparts'] = 'wszystkie';
$labels['domain'] = 'domena';
$labels['localpart'] = 'część lokalna';
$labels['user'] = 'użytkownik';
$labels['detail'] = 'detal';
$labels['comparator'] = 'komparator:';
$labels['default'] = 'domyślny';
$labels['octet'] = 'dokładny (octet)';
$labels['asciicasemap'] = 'nierozróżniający wielkości liter (ascii-casemap)';
$labels['asciinumeric'] = 'numeryczny (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'wstecz';
$labels['spamtest'] = 'Poziom spamu';
$labels['spamtestisgreaterthan'] = 'jest większy od';
$labels['spamtestisgreaterthanequal'] = 'jest równy lub większy od';
$labels['spamtestislessthan'] = 'jest mniejszy od';
$labels['spamtestislessthanequal'] = 'jest równy lub mniejszy od';
$labels['spamtestequals'] = 'jest równe';
$labels['spamtestnotequals'] = 'nie jest równe';
$labels['spamtestisunknown'] = 'jest nieokreślony';
$labels['vacation'] = 'Nieobecność';
$labels['vacation.reply'] = 'Odpowiedź';
$labels['vacation.advanced'] = 'Ustawienia zaawansowane';
$labels['vacation.from'] = 'Adres nadawcy odpowiedzi';
$labels['vacation.subject'] = 'Temat';
$labels['vacation.body'] = 'Treść';
$labels['vacation.start'] = 'Początek nieobecności';
$labels['vacation.end'] = 'Koniec nieobecności';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'włączone';
$labels['vacation.off'] = 'wyłączone';
$labels['vacation.addresses'] = 'Moje adresy e-mail';
$labels['vacation.interval'] = 'Częstotliwość odpowiedzi';
$labels['vacation.after'] = 'Umieść regułę odpowiedzi po';
$labels['vacation.saving'] = 'Zapisywanie danych...';
$labels['vacation.action'] = 'Akcje wiadomości przychodzących';
$labels['vacation.keep'] = 'Zachowaj';
$labels['vacation.discard'] = 'Odrzuć';
$labels['vacation.redirect'] = 'Przekaż do';
$labels['vacation.copy'] = 'Wyślij kopię do';
$labels['forward'] = 'Przekierowania';
$labels['forward.redirect'] = 'Przekaż do';
$labels['forward.copy'] = 'Wyślij kopię do';
$labels['forward.on'] = 'włączone';
$labels['forward.off'] = 'wyłączone';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Dla wiadomości przychodzących wykonaj następującą akcję:';
$labels['forward.saving'] = 'Zapisywanie danych...';
$labels['filladdresses'] = 'Wypełnij wszystkimi moimi adresami';
$labels['arialabelfiltersetactions'] = 'Zbiór filtrów akcji';
$labels['arialabelfilteractions'] = 'Akcje filtrów';
$labels['arialabelfilterform'] = 'Ustawienia filtrów';
$labels['ariasummaryfilterslist'] = 'Spis filtrów';
$labels['ariasummaryfiltersetslist'] = 'Lista zbiorów filtrów';
$labels['filterstitle'] = 'Zarządzaj filtrami wiadomości przychodzących';
$labels['vacationtitle'] = 'Zarządzaj asystentem nieobecności';
$labels['forwardtitle'] = 'Edycja reguł przekierowań poczty';
$labels['message'] = 'Wiadomość';
$labels['duplicate'] = 'jest duplikatem';
$labels['notduplicate'] = 'nie jest duplikatem';
$labels['duplicate.handle'] = 'uchwyt:';
$labels['duplicate.header'] = 'nagłówek:';
$labels['duplicate.uniqueid'] = 'identyfikator:';
$labels['duplicate.seconds'] = 'Limit czasu (sekundy):';
$labels['duplicate.last'] = 'względem ostatniego wykonania';
$messages['filterunknownerror'] = 'Nieznany błąd serwera.';
$messages['filterconnerror'] = 'Nie można nawiązać połączenia z serwerem.';
$messages['filterdeleteerror'] = 'Nie można usunąć filtra. Błąd serwera.';
$messages['filterdeleted'] = 'Filtr został usunięty pomyślnie.';
$messages['filtersaved'] = 'Filtr został zapisany pomyślnie.';
$messages['filtersaveerror'] = 'Nie można zapisać filtra. Wystąpił błąd serwera.';
$messages['filterformerror'] = 'Formularz zawiera błędy.';
$messages['filterdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany filtr?';
$messages['ruledeleteconfirm'] = 'Czy na pewno chcesz usunąć wybraną regułę?';
$messages['actiondeleteconfirm'] = 'Czy na pewno usunąć wybraną akcję?';
$messages['forbiddenchars'] = 'Pole zawiera niedozwolone znaki.';
$messages['cannotbeempty'] = 'Pole nie może być puste.';
$messages['ruleexist'] = 'Filtr o podanej nazwie już istnieje.';
$messages['setactivateerror'] = 'Nie można aktywować wybranego zbioru filtrów. Błąd serwera.';
$messages['setdeactivateerror'] = 'Nie można deaktywować wybranego zbioru filtrów. Błąd serwera.';
$messages['setdeleteerror'] = 'Nie można usunąć wybranego zbioru filtrów. Błąd serwera.';
$messages['setactivated'] = 'Zbiór filtrów został aktywowany pomyślnie.';
$messages['setdeactivated'] = 'Zbiór filtrów został deaktywowany pomyślnie.';
$messages['setdeleted'] = 'Zbiór filtrów został usunięty pomyślnie.';
$messages['setupdated'] = 'Zbiór filtrów został zaktualizowany pomyślnie.';
$messages['setdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany zbiór filtrów?';
$messages['setcreateerror'] = 'Nie można utworzyć zbioru filtrów. Błąd serwera.';
$messages['setcreated'] = 'Zbiór filtrów został utworzony pomyślnie.';
$messages['activateerror'] = 'Nie można włączyć wybranych filtrów. Błąd serwera.';
$messages['deactivateerror'] = 'Nie można wyłączyć wybranych filtrów. Błąd serwera.';
$messages['deactivated'] = 'Filtr(y) wyłączono pomyślnie.';
$messages['activated'] = 'Filtr(y) włączono pomyślnie.';
$messages['moved'] = 'Filter został przeniesiony pomyślnie.';
$messages['moveerror'] = 'Nie można przenieść wybranego filtra. Błąd serwera.';
$messages['nametoolong'] = 'Zbyt długa nazwa.';
$messages['namereserved'] = 'Nazwa zarezerwowana.';
$messages['setexist'] = 'Zbiór już istnieje.';
$messages['nodata'] = 'Należy wybrać co najmniej jedną pozycję!';
$messages['invaliddateformat'] = 'Nieprawidłowy format daty lub fragmentu daty';
$messages['saveerror'] = 'Nie można zapisać danych. Wystąpił błąd serwera.';
$messages['vacationsaved'] = 'Dane nieobecności zapisano pomyślnie.';
$messages['forwardsaved'] = 'Dane przekierowania zostały zapisane pomyślnie.';
$messages['emptyvacationbody'] = 'Treść wiadomości jest wymagana!';
$messages['duplicate.conflict.err'] = 'Nagłówek i identyfikator nie mogą być używane równocześnie.';
$messages['disabledaction'] = 'Niedozwolona akcja';
$messages['lastindexempty'] = 'Number pozycji jest wymagany przy odliczaniu od końca';
$messages['noflagset'] = 'Przynajmniej jedna flaga musi być zaznaczona.';
PK{c�\��6��"managesieve/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'चाळण्या';
$labels['moveup'] = 'वर हलवा';
$labels['movedown'] = 'खाली हलवा';
$labels['filterallof'] = 'खालील सर्व नियम जुळत आहेत';
$labels['filterany'] = 'सर्व संदेश';
$labels['filteris'] = 'च्या बरोबर आहे';
$labels['filterisnot'] = 'च्या बरोबर नाही';
$labels['filterexists'] = 'अस्तित्वात आहे';
$labels['filternotexists'] = 'अस्तित्वात नाही';
$labels['filterunder'] = 'खाली';
$labels['filterover'] = 'वरती';
$labels['messagedelete'] = 'संदेश काढून टाका';
$labels['messagesactions'] = 'खालील कृती आमलात आणा :';
$labels['add'] = 'समावेश करा';
$labels['del'] = 'नष्ट करा';
$labels['sender'] = 'प्रेषक';
$labels['flagdeleted'] = 'काढून टाकलेला(ले)';
$labels['flagflagged'] = 'खूण लावलेले';
$labels['notifymethodmailto'] = 'इ-मेल्';
$labels['notifymethodtel'] = 'दूरध्वनी';
$labels['datetest'] = 'दिनांक';
$labels['advancedopts'] = 'अधिक पर्याय';
$labels['spamtestequals'] = 'च्या बरोबर आहे';
$labels['spamtestnotequals'] = 'च्या बरोबर नाही';
$labels['vacation.subject'] = 'विषय';
PK{c�\w�f!>!>"managesieve/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'フィルター';
$labels['managefilters'] = '受信メールのフィルターを管理';
$labels['filtername'] = 'フィルター名';
$labels['newfilter'] = '新しいフィルター';
$labels['filteradd'] = 'フィルターを追加';
$labels['filterdel'] = 'フィルターを削除';
$labels['rules'] = '規則';
$labels['actions'] = '操作';
$labels['scope'] = 'スコープ';
$labels['moveup'] = '上に移動';
$labels['movedown'] = '下に移動';
$labels['filterallof'] = '次の規則のすべてに一致';
$labels['filteranyof'] = '次の規則のいずれかに一致';
$labels['filterany'] = 'すべてのメッセージ';
$labels['filtercontains'] = '含む';
$labels['filternotcontains'] = '含まない';
$labels['filteris'] = '次に等しい';
$labels['filterisnot'] = '次に等しくない';
$labels['filterexists'] = 'が存在';
$labels['filternotexists'] = 'が存在しない';
$labels['filtermatches'] = '次の式に一致';
$labels['filternotmatches'] = '次の式に一致しない';
$labels['filterregex'] = '次の正規表現に一致';
$labels['filternotregex'] = '次の正規表現に一致しない';
$labels['filterunder'] = 'より下';
$labels['filterover'] = 'より上';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIMEのパート:';
$labels['mime-message'] = 'メッセージ';
$labels['mime-anychild'] = '任意';
$labels['mime-type'] = 'タイプ';
$labels['mime-subtype'] = 'サブタイプ';
$labels['mime-contenttype'] = 'コンテントタイプ';
$labels['mime-param'] = 'パラメーター';
$labels['addrule'] = '規則を追加';
$labels['delrule'] = '規則を削除';
$labels['messagemoveto'] = '次にメッセージを移動';
$labels['messageredirect'] = '次のメールアドレスに転送';
$labels['messagecopyto'] = '次にメッセージをコピー';
$labels['messagesendcopy'] = '次にメッセージのコピーを送信';
$labels['messagereply'] = 'メッセージを返信';
$labels['messagedelete'] = 'メッセージを削除';
$labels['messagediscard'] = 'メッセージを破棄';
$labels['messagekeep'] = 'メッセージを受信箱に保持';
$labels['messagesrules'] = '受信したメールの処理:';
$labels['messagesactions'] = '以下の操作を実行:';
$labels['add'] = '追加';
$labels['del'] = '削除';
$labels['sender'] = '送信者';
$labels['recipient'] = '宛先';
$labels['vacationaddr'] = '私の電子メールアドレス:';
$labels['vacationdays'] = 'メッセージを(1日に)送信する頻度:';
$labels['vacationinterval'] = 'メッセージを送信する頻度:';
$labels['vacationreason'] = 'メッセージ本体(休暇の理由):';
$labels['vacationfrom'] = '返信する送信者のアドレス:';
$labels['vacationsubject'] = 'メッセージの件名:';
$labels['days'] = '日';
$labels['seconds'] = '秒';
$labels['rulestop'] = '規則の評価を停止';
$labels['enable'] = '有効/無効';
$labels['filterset'] = 'フィルターセット';
$labels['filtersets'] = 'フィルターセット';
$labels['filtersetadd'] = 'フィルターセットを追加';
$labels['filtersetdel'] = 'フィルターセットを削除';
$labels['filtersetact'] = '現在のフィルターセットを有効化';
$labels['filtersetdeact'] = '現在のフィルターセットを無効化';
$labels['filterseteditraw'] = 'フィルターセットを編集';
$labels['filtersetswitch'] = 'フィルターセットを有効・無効';
$labels['filterdef'] = 'フィルターの定義';
$labels['filtersetname'] = 'フィルターセットの名前';
$labels['newfilterset'] = '新しいフィルターセット';
$labels['active'] = '有効';
$labels['none'] = 'なし';
$labels['fromset'] = 'セットから';
$labels['fromfile'] = 'ファイルから';
$labels['filterdisabled'] = 'フィルターは無効';
$labels['filterenabled'] = 'フィルターは有効';
$labels['countisgreaterthan'] = 'より大きい回数';
$labels['countisgreaterthanequal'] = '以上の回数';
$labels['countislessthan'] = '未満の回数';
$labels['countislessthanequal'] = '以下の回数';
$labels['countequals'] = '次と等しい回数';
$labels['countnotequals'] = '次と等しくない回数';
$labels['valueisgreaterthan'] = 'より大きい値';
$labels['valueisgreaterthanequal'] = '以上の値';
$labels['valueislessthan'] = '未満の値';
$labels['valueislessthanequal'] = '以下の値';
$labels['valueequals'] = '次と等しい値';
$labels['valuenotequals'] = '次と等しくない値';
$labels['setflags'] = 'メッセージにフラグを設定';
$labels['addflags'] = 'メッセージにフラグを追加';
$labels['removeflags'] = 'メッセージからフラグを削除';
$labels['flagread'] = '既読';
$labels['flagdeleted'] = '削除済み';
$labels['flaganswered'] = '返信済み';
$labels['flagflagged'] = 'フラグ付き';
$labels['flagdraft'] = '下書き';
$labels['addheader'] = 'メッセージにヘッダーを追加';
$labels['deleteheader'] = 'メッセージからヘッダーを削除';
$labels['headername'] = 'ヘッダーの名前';
$labels['headervalue'] = 'ヘッダーの値';
$labels['headerpos'] = 'ヘッダーの位置';
$labels['headeratstart'] = '最初';
$labels['headeratend'] = '最後';
$labels['headeroccurrence'] = 'ヘッダーの存在・位置';
$labels['headerfromstart'] = '開始';
$labels['headerfromend'] = '終了';
$labels['headerpatterns'] = 'ヘッダーの値のパターン';
$labels['headermatchtype'] = '一致タイプ:';
$labels['setvariable'] = '変数を設定';
$labels['setvarname'] = '変数の名前:';
$labels['setvarvalue'] = '変数の値:';
$labels['setvarmodifiers'] = '修飾子:';
$labels['varlower'] = '小文字';
$labels['varupper'] = '大文字';
$labels['varlowerfirst'] = '最初の文字を小文字';
$labels['varupperfirst'] = '最初の文字を大文字';
$labels['varquotewildcard'] = '特殊文字を引用処理';
$labels['varlength'] = '長さ';
$labels['varencodeurl'] = '(URLを)パーセント・エンコード';
$labels['notify'] = '通知を送信';
$labels['notifytarget'] = '通知の対象:';
$labels['notifymessage'] = '通知のメッセージ(任意):';
$labels['notifyoptions'] = '通知のオプション(任意):';
$labels['notifyfrom'] = '通知の送信者(任意):';
$labels['notifyimportance'] = '重要度:';
$labels['notifyimportancelow'] = '低';
$labels['notifyimportancenormal'] = '通常';
$labels['notifyimportancehigh'] = '高';
$labels['notifymethodmailto'] = '電子メール';
$labels['notifymethodtel'] = '電話';
$labels['notifymethodsms'] = 'ショートメッセージ';
$labels['filtercreate'] = 'フィルターを作成';
$labels['usedata'] = 'フィルターで次のデータを使用';
$labels['nextstep'] = '次の段階';
$labels['...'] = '...';
$labels['string'] = '文字列';
$labels['currdate'] = '現在の日付';
$labels['datetest'] = '日付';
$labels['dateheader'] = 'ヘッダー:';
$labels['year'] = '年';
$labels['month'] = '月';
$labels['day'] = '日';
$labels['date'] = '日付(年-月-日)';
$labels['julian'] = '日付(ユリウス歴)';
$labels['hour'] = '時';
$labels['minute'] = '分';
$labels['second'] = '秒';
$labels['time'] = '時刻 (時:分:秒)';
$labels['iso8601'] = '日付(ISO8601)';
$labels['std11'] = '日付(RFC2822)';
$labels['zone'] = 'タイムゾーン';
$labels['weekday'] = '平日(0-6)';
$labels['advancedopts'] = '高度なオプション';
$labels['body'] = '本文';
$labels['address'] = 'メールアドレス';
$labels['envelope'] = 'エンベロープ';
$labels['modifier'] = '修正:';
$labels['text'] = 'テキスト';
$labels['undecoded'] = '未デコード(そのまま)';
$labels['contenttype'] = 'コンテント・タイプ';
$labels['modtype'] = '種類:';
$labels['allparts'] = 'すべて';
$labels['domain'] = 'ドメイン';
$labels['localpart'] = 'ローカルパート';
$labels['user'] = 'ユーザー';
$labels['detail'] = '詳細';
$labels['comparator'] = '比較器:';
$labels['default'] = '初期値';
$labels['octet'] = '厳密(オクテット)';
$labels['asciicasemap'] = '大文字小文字を区別しない(ascii-casemap)';
$labels['asciinumeric'] = '数値(ascii-numeric)';
$labels['index'] = 'インデックス:';
$labels['indexlast'] = '後方';
$labels['spamtest'] = 'SPAMのレベル';
$labels['spamtestisgreaterthan'] = 'より大きい';
$labels['spamtestisgreaterthanequal'] = '以上';
$labels['spamtestislessthan'] = 'より小さい';
$labels['spamtestislessthanequal'] = '以下';
$labels['spamtestequals'] = '次に等しい';
$labels['spamtestnotequals'] = '次に等しくない';
$labels['spamtestisunknown'] = '不明';
$labels['vacation'] = '事務所に不在';
$labels['vacation.reply'] = '返信のメッセージ';
$labels['vacation.advanced'] = '詳細な設定';
$labels['vacation.from'] = '送信者のアドレスに返信';
$labels['vacation.subject'] = '件名';
$labels['vacation.body'] = '本文';
$labels['vacation.start'] = '開始時刻';
$labels['vacation.end'] = '終了時刻';
$labels['vacation.status'] = '状態';
$labels['vacation.on'] = 'オン';
$labels['vacation.off'] = 'オフ';
$labels['vacation.addresses'] = '私の電子メールアドレス';
$labels['vacation.interval'] = '返信の間隔';
$labels['vacation.after'] = '事務所不在のルールを後に配置';
$labels['vacation.saving'] = 'データを保存中...';
$labels['vacation.action'] = '届いたメッセージの操作';
$labels['vacation.keep'] = '保持';
$labels['vacation.discard'] = '破棄';
$labels['vacation.redirect'] = '次のメールアドレスに転送';
$labels['vacation.copy'] = '次にメッセージを送信';
$labels['forward'] = '転送';
$labels['forward.redirect'] = '次のメールアドレスに転送';
$labels['forward.copy'] = '次にメッセージを送信';
$labels['forward.on'] = 'オン';
$labels['forward.off'] = 'オフ';
$labels['forward.status'] = '状態:';
$labels['forward.action'] = '到着したメールに以下の操作を実行:';
$labels['forward.saving'] = 'データを保存中...';
$labels['filladdresses'] = 'すべてのアドレスで満たす';
$labels['arialabelfiltersetactions'] = 'フィルターセットの動作';
$labels['arialabelfilteractions'] = 'フィルターの動作';
$labels['arialabelfilterform'] = 'フィルターの特性';
$labels['ariasummaryfilterslist'] = 'フィルターの一覧';
$labels['ariasummaryfiltersetslist'] = 'フィルターセットの一覧';
$labels['filterstitle'] = '届いたメールのフィルターを編集';
$labels['vacationtitle'] = '勤務時間外の規則を編集';
$labels['forwardtitle'] = 'メールの転送の規則を編集';
$labels['message'] = 'メッセージ';
$labels['duplicate'] = 'は重複';
$labels['notduplicate'] = 'は非重複';
$labels['duplicate.handle'] = 'ハンドル:';
$labels['duplicate.header'] = 'ヘッダー:';
$labels['duplicate.uniqueid'] = '識別子:';
$labels['duplicate.seconds'] = '時間切れ(秒):';
$labels['duplicate.last'] = '最後の実行から相対的';
$messages['filterunknownerror'] = '不明なサーバーのエラーです。';
$messages['filterconnerror'] = 'サーバに接続できません。';
$messages['filterdeleteerror'] = 'フィルターを削除できません。サーバーでエラーが発生しました。';
$messages['filterdeleted'] = 'フィルターを削除しました。';
$messages['filtersaved'] = 'フィルターを保存しました。';
$messages['filtersaveerror'] = 'フィルターの保存できません。サーバーでエラーが発生しました。';
$messages['filterformerror'] = 'フィルターのフォームにエラーがあります。';
$messages['filterdeleteconfirm'] = '本当に選択したフィルターを削除しますか?';
$messages['ruledeleteconfirm'] = '本当に選択した規則を削除しますか?';
$messages['actiondeleteconfirm'] = '本当に選択した動作を削除しますか?';
$messages['forbiddenchars'] = '項目に禁止している文字が含まれています。';
$messages['cannotbeempty'] = '項目は空欄にできません。';
$messages['ruleexist'] = '指定した名前のフィルターが既に存在します。';
$messages['setactivateerror'] = '選択したフィルターセットを有効にできませんでした。サーバーでエラーが発生しました。';
$messages['setdeactivateerror'] = '選択したフィルターセットを無効にできませんでした。サーバーでエラーが発生しました。';
$messages['setdeleteerror'] = '選択したフィルターセットを削除できませんでした。サーバーでエラーが発生しました。';
$messages['setactivated'] = 'フィルターセットを有効にしました。';
$messages['setdeactivated'] = 'フィルターセットを無効にしました。';
$messages['setdeleted'] = 'フィルターセットを削除しました。';
$messages['setupdated'] = 'フィルターセットを更新しました。';
$messages['setdeleteconfirm'] = '本当に削除したフィルターセットを削除しますか?';
$messages['setcreateerror'] = 'フィルターセットを作成できませんでした。サーバーでエラーが発生しました。';
$messages['setcreated'] = 'フィルターセットを作成しました。';
$messages['activateerror'] = '選択したフィルターを有効にできません。サーバーでエラーが発生しました。';
$messages['deactivateerror'] = '選択したフィルターを無効にできません。サーバーでエラーが発生しました。';
$messages['deactivated'] = 'フィルターを無効にしました。';
$messages['activated'] = 'フィルターを有効にしました。';
$messages['moved'] = 'フィルターを移動しました。';
$messages['moveerror'] = '選択したフィルターを移動できません。サーバーでエラーが発生しました。';
$messages['nametoolong'] = '名前が長すぎます。';
$messages['namereserved'] = '予約されている名前です。';
$messages['setexist'] = 'フィルターセットが既に存在します。';
$messages['nodata'] = '少なくとも場所を1つ選択しなければなりません!';
$messages['invaliddateformat'] = '無効な日付または日付部分の書式';
$messages['saveerror'] = 'フィルターの保存できません。サーバーでエラーが発生しました。';
$messages['vacationsaved'] = '事務所不在のデータを保存しました。';
$messages['forwardsaved'] = '転送のデータを保存しました。';
$messages['emptyvacationbody'] = '休暇のメッセージの本文が必要です!';
$messages['duplicate.conflict.err'] = 'ヘッダーと一意な識別子の両方は同時に使用できません。';
$messages['disabledaction'] = '許可されていない動作です。';
$messages['lastindexempty'] = '最後から数える時はインデックスが必要';
$messages['noflagset'] = '少なくともフラッグを1つ選択しなければなりません。';
PK{c�\, B�VVmanagesieve/localization/ps.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'استوزه ړنګول';
$labels['del'] = 'ړنګول';
$labels['flagflagged'] = 'بې کاره';
$labels['notifymethodmailto'] = 'برېښناليک';
$labels['datetest'] = 'نېټه';
$labels['advancedopts'] = 'پرمختللي لارې';
$labels['vacation.subject'] = 'مضمون';
PK{c�\E�̝ee"managesieve/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Rediger filter for innkommande e-post';
$labels['filtername'] = 'Filternamn';
$labels['newfilter'] = 'Nytt filter';
$labels['filteradd'] = 'Legg til filter';
$labels['filterdel'] = 'Slett filter';
$labels['moveup'] = 'Flytt opp';
$labels['movedown'] = 'Flytt ned';
$labels['filterallof'] = 'som treffer alle følgjande regler';
$labels['filteranyof'] = 'som treffer ein av følgjande regler';
$labels['filterany'] = 'alle meldingar';
$labels['filtercontains'] = 'inneheld';
$labels['filternotcontains'] = 'ikkje inneheld';
$labels['filteris'] = 'er lik';
$labels['filterisnot'] = 'er ikkje lik';
$labels['filterexists'] = 'eksisterer';
$labels['filternotexists'] = 'ikkje eksisterer';
$labels['filtermatches'] = 'treffer uttrykk';
$labels['filternotmatches'] = 'ikkje treffer uttrykk';
$labels['filterregex'] = 'treffer regulært uttrykk';
$labels['filternotregex'] = 'ikkje treffer regulært uttrykk';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['addrule'] = 'Legg til regel';
$labels['delrule'] = 'Slett regel';
$labels['messagemoveto'] = 'Flytt meldinga til';
$labels['messageredirect'] = 'Vidaresend meldinga til';
$labels['messagecopyto'] = 'Kopier meldinga til';
$labels['messagesendcopy'] = 'Send ein kopi av meldinga til';
$labels['messagereply'] = 'Svar med melding';
$labels['messagedelete'] = 'Slett melding';
$labels['messagediscard'] = 'Avvis med melding';
$labels['messagesrules'] = 'For innkommande e-post';
$labels['messagesactions'] = '…gjer følgjande:';
$labels['add'] = 'Legg til';
$labels['del'] = 'Slett';
$labels['sender'] = 'Avsendar';
$labels['recipient'] = 'Mottakar';
$labels['vacationdays'] = 'Periode mellom meldingar (i dagar):';
$labels['vacationreason'] = 'Innhald (grunngjeving for fråvær)';
$labels['vacationsubject'] = 'Meldingsemne:';
$labels['rulestop'] = 'Stopp evaluering av regler';
$labels['enable'] = 'Aktiver/Deaktiver';
$labels['filtersets'] = 'Filtersett';
$labels['filterdef'] = 'Filterdefinisjon';
$labels['active'] = 'aktiv';
$labels['none'] = 'ingen';
$labels['fromset'] = 'frå sett';
$labels['fromfile'] = 'frå fil';
$labels['filterdisabled'] = 'Filter deaktivert';
$labels['countisgreaterthan'] = 'mengd er fleire enn';
$labels['countisgreaterthanequal'] = 'mengd er fleire enn eller lik';
$labels['countislessthan'] = 'mengd er færre enn';
$labels['countislessthanequal'] = 'mengd er færre enn eller lik';
$labels['countequals'] = 'mengd er lik';
$labels['valueisgreaterthan'] = 'verdien er høgare enn';
$labels['valueisgreaterthanequal'] = 'verdien er høgare eller lik';
$labels['valueislessthan'] = 'verdien er lågare enn';
$labels['valueislessthanequal'] = 'verdien er lågare eller lik';
$labels['valueequals'] = 'verdien er lik';
$labels['setflags'] = 'Sett meldingsflagg';
$labels['addflags'] = 'Legg til flagg på meldinga';
$labels['removeflags'] = 'Fjern flagg fra meldinga';
$labels['flagread'] = 'Lese';
$labels['flagdeleted'] = 'Sletta';
$labels['flaganswered'] = 'Svart på';
$labels['flagflagged'] = 'Flagga';
$labels['flagdraft'] = 'Skisse';
$labels['setvariable'] = 'Sett variabel:';
$labels['setvarname'] = 'Variabelnamn:';
$labels['setvarvalue'] = 'Variabelverdi:';
$labels['setvarmodifiers'] = 'Modifikator:';
$labels['varlower'] = 'med små bokstavar';
$labels['varupper'] = 'med store bokstavar';
$labels['varlowerfirst'] = 'med liten forbokstav';
$labels['varupperfirst'] = 'med stor forbokstav';
$labels['varlength'] = 'lengde';
$labels['notify'] = 'Send varsel';
$labels['notifyimportance'] = 'Betyding:';
$labels['notifyimportancelow'] = 'låg';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'høg';
$labels['notifymethodmailto'] = 'E-post';
$labels['notifymethodtel'] = 'Telefon';
$labels['filtercreate'] = 'Opprett filter';
$labels['usedata'] = 'Bruk følgande data i filteret:';
$labels['nextstep'] = 'Neste steg';
$labels['...'] = '…';
$labels['datetest'] = 'Dato';
$labels['advancedopts'] = 'Avanserte val';
$labels['body'] = 'Meldingstekst';
$labels['address'] = 'adresse';
$labels['envelope'] = 'konvolutt';
$labels['modifier'] = 'modifikator:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'ikkje dekoda (rå)';
$labels['contenttype'] = 'innhaldstype';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'alle';
$labels['domain'] = 'domene';
$labels['localpart'] = 'lokal del (local part)';
$labels['user'] = 'brukar';
$labels['detail'] = 'detalj';
$labels['comparator'] = 'samanlikning:';
$labels['default'] = 'standard';
$labels['octet'] = 'streng (oktett)';
$labels['asciicasemap'] = 'ikkje skil mellom store og små bokstavar (ascii-casemap)';
$labels['asciinumeric'] = 'numerisk (ascii-numeric)';
$labels['spamtestequals'] = 'er lik';
$labels['spamtestnotequals'] = 'er ikkje lik';
$labels['vacation.subject'] = 'Emne';
$labels['vacation.body'] = 'Meldingstekst';
$labels['vacation.keep'] = 'Behald';
$messages['filterunknownerror'] = 'Ukjent problem med tenar.';
$messages['filterconnerror'] = 'Kunne ikkje kople til tenaren.';
$messages['filterdeleted'] = 'Filteret er blitt sletta.';
$messages['filtersaved'] = 'Filteret er blitt lagra.';
$messages['filterdeleteconfirm'] = 'Vil du verkeleg slette det valde filteret?';
$messages['ruledeleteconfirm'] = 'Er du sikker på at du vil slette vald regel?';
$messages['actiondeleteconfirm'] = 'Er du sikker på at du vil slette vald hending?';
$messages['forbiddenchars'] = 'Ugyldige teikn i felt.';
$messages['cannotbeempty'] = 'Feltet kan ikkje stå tomt.';
$messages['ruleexist'] = 'Det finst alt eit filter med dette namnet.';
$messages['deactivated'] = 'Filter skrudd på.';
$messages['activated'] = 'Filter skrudd av.';
$messages['moved'] = 'Filter vart flytta.';
$messages['nametoolong'] = 'Namnet er for langt.';
$messages['namereserved'] = 'Namnet er reservert.';
$messages['setexist'] = 'Settet eksisterer alt.';
$messages['nodata'] = 'Du må velje minst éin posisjon!';
PK{c�\K�YZ
Z
 managesieve/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Alministrar filtros de corréu entrante';
$labels['filtername'] = 'Nome del filtru';
$labels['newfilter'] = 'Filtru nuevu';
$labels['filteradd'] = 'Amestar filtru';
$labels['filterdel'] = 'Desaniciar filtru';
$labels['scope'] = 'Algame';
$labels['moveup'] = 'Mover arriba';
$labels['movedown'] = 'Mover abaxo';
$labels['filterany'] = 'tolos mensaxes';
$labels['filtercontains'] = 'contien';
$labels['filternotcontains'] = 'nun contien';
$labels['filteris'] = 'ye igual a';
$labels['filterisnot'] = 'nun ye igual a';
$labels['filterexists'] = 'esiste';
$labels['filternotexists'] = 'nun esiste';
$labels['filtermatches'] = 'espresiones que concasen';
$labels['filternotmatches'] = 'espresiones que nun concasen';
$labels['addrule'] = 'Amestar regla';
$labels['delrule'] = 'Desaniciar regla';
$labels['messagemoveto'] = 'Mover mensaxe a';
$labels['messageredirect'] = 'Redireicionar mensaxe a';
$labels['messagecopyto'] = 'Copiar mensaxe a';
$labels['messagedelete'] = 'Desaniciar mensaxe';
$labels['messagesrules'] = 'Pa corréu entrante:';
$labels['messagesactions'] = '...executar les aiciones siguientes:';
$labels['add'] = 'Amestar';
$labels['del'] = 'Desaniciar';
$labels['sender'] = 'Remitente';
$labels['enable'] = 'Habilitar/Deshabilitar';
$labels['flagread'] = 'Lleer';
$labels['flagdeleted'] = 'Desaniciáu';
$labels['flaganswered'] = 'Respondíu';
$labels['flagflagged'] = 'Etiquetaos';
$labels['notifymethodmailto'] = 'Corréu';
$labels['notifymethodtel'] = 'Teléfonu';
$labels['datetest'] = 'Data';
$labels['advancedopts'] = 'Opciones avanzaes';
$labels['body'] = 'Cuerpu';
$labels['spamtestequals'] = 'ye igual a';
$labels['spamtestnotequals'] = 'nun ye igual a';
$labels['vacation.subject'] = 'Asuntu';
$labels['vacation.body'] = 'Cuerpu';
$labels['vacation.keep'] = 'Caltener';
PK{c�\���UU managesieve/localization/kab.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['del'] = 'Kkes';
$labels['flagread'] = 'Ɣeṛ';
PK{c�\��P�ff"managesieve/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Филтери';
$labels['managefilters'] = 'Управљај филтерима долазне поште';
$labels['filtername'] = 'Назив филтера';
$labels['newfilter'] = 'Нови филтер';
$labels['filteradd'] = 'Додај филтер';
$labels['filterdel'] = 'Обриши филтер';
$labels['actions'] = 'Радње';
$labels['scope'] = 'Распон';
$labels['moveup'] = 'Помери горе';
$labels['movedown'] = 'Помери доле';
$labels['filterallof'] = 'поклопи сва ова правила';
$labels['filteranyof'] = 'поклопи било које од ових правила';
$labels['filterany'] = 'све поруке';
$labels['filtercontains'] = 'садржи';
$labels['filternotcontains'] = 'не садржи';
$labels['filteris'] = 'је једнак';
$labels['filterisnot'] = 'није једнак';
$labels['filterexists'] = 'постоји';
$labels['filternotexists'] = 'не постоји';
$labels['filtermatches'] = 'поклапа израз';
$labels['filternotmatches'] = 'не поклапа израз';
$labels['filterregex'] = 'поклапа регуларни израз';
$labels['filternotregex'] = 'не поклапа регуларни израз';
$labels['filterunder'] = 'испод';
$labels['filterover'] = 'преко';
$labels['addrule'] = 'Додај правило';
$labels['delrule'] = 'Обриши правило';
$labels['messagemoveto'] = 'Премести поруку у';
$labels['messageredirect'] = 'Преусмери поруку у';
$labels['messagecopyto'] = 'Копирај поруку у';
$labels['messagesendcopy'] = 'Пошаљи копију поруке за';
$labels['messagereply'] = 'Одговори поруком';
$labels['messagedelete'] = 'Обриши поруку';
$labels['messagediscard'] = 'Одбаци поруком';
$labels['messagekeep'] = 'Задржи поруку у примљеним';
$labels['messagesrules'] = 'За долазну пошту:';
$labels['add'] = 'Додај';
$labels['del'] = 'Обриши';
$labels['sender'] = 'Пошиљалац';
$labels['flagread'] = 'Читање';
$labels['flagdeleted'] = 'Обрисано';
$labels['flagflagged'] = 'Обележено';
$labels['notifymethodmailto'] = 'Е-пошта';
$labels['notifymethodtel'] = 'Телефон';
$labels['datetest'] = 'Датум';
$labels['advancedopts'] = 'Напредне опције';
$labels['body'] = 'Тело';
$labels['spamtestequals'] = 'је једнак';
$labels['spamtestnotequals'] = 'није једнак';
$labels['vacation.subject'] = 'Наслов';
$labels['vacation.body'] = 'Тело';
$labels['vacation.keep'] = 'Задржи';
$messages['filterunknownerror'] = 'Непозната грешка сервера.';
$messages['filterconnerror'] = 'Не могу да се повежем на сервер.';
PK{c�\t	��
�
"managesieve/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filteren';
$labels['managefilters'] = 'Filtere geréieren fir Mailen déi erakommen';
$labels['filtername'] = 'Numm vum Filter';
$labels['newfilter'] = 'Neie Filter';
$labels['filteradd'] = 'Filter dobäisetzen';
$labels['filterdel'] = 'Filter läschen';
$labels['scope'] = 'Ëmfang';
$labels['moveup'] = 'Eropréckelen';
$labels['movedown'] = 'Erofréckelen';
$labels['filterallof'] = 'all dës Reegele mussen zoutreffen';
$labels['filteranyof'] = 'just eng vun de Reegele muss zoutreffen';
$labels['filterany'] = 'all d\'Messagen';
$labels['filtercontains'] = 'enthält';
$labels['filternotcontains'] = 'enthält net';
$labels['filteris'] = 'ass gläich';
$labels['filterisnot'] = 'ass net gläich';
$labels['filterexists'] = 'existéiert';
$labels['filternotexists'] = 'existéiert net';
$labels['filterunder'] = 'ënner';
$labels['filterover'] = 'iwwer';
$labels['addrule'] = 'Reegel dobäisetzen';
$labels['delrule'] = 'Reegel läschen';
$labels['messagemoveto'] = 'Message verréckelen an';
$labels['messageredirect'] = 'Message ëmleeden an';
$labels['messagecopyto'] = 'Message kopéieren an';
$labels['messagesendcopy'] = 'Kopie vum Message schécken un';
$labels['messagereply'] = 'Mat dësem Message äntweren';
$labels['messagedelete'] = 'Message läschen';
$labels['add'] = 'Dobäisetzen';
$labels['del'] = 'Läschen';
$labels['sender'] = 'Ofsender';
$labels['recipient'] = 'Empfänger';
$labels['flagread'] = 'Gelies';
$labels['flagdeleted'] = 'Geläscht';
$labels['flagflagged'] = 'Mat Fändel';
$labels['notifymethodmailto'] = 'E-Mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['datetest'] = 'Datum';
$labels['advancedopts'] = 'Avancéiert Optiounen';
$labels['body'] = 'Kierper';
$labels['spamtestequals'] = 'ass gläich';
$labels['spamtestnotequals'] = 'ass net gläich';
$labels['vacation.subject'] = 'Sujet';
$labels['vacation.body'] = 'Kierper';
$labels['vacation.keep'] = 'Halen';
PK{c�\�%��]]"managesieve/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'فیلترها';
$labels['filtername'] = 'نام فیلتر';
$labels['newfilter'] = 'فیلتر جدید';
$labels['filteranyof'] = 'تطبیق با هر کدام از رول های زیر';
$labels['filterany'] = 'تمام پیام ها';
$labels['filtercontains'] = 'شامل';
$labels['filteris'] = 'مساوی با';
$labels['filterunder'] = 'زیر';
$labels['filterover'] = 'بالای';
$labels['addrule'] = 'افزودن نقش';
$labels['delrule'] = 'حذف نقش';
$labels['messagereply'] = 'پاسخ توسط پیام';
$labels['messagedelete'] = 'حذف پیام';
$labels['add'] = 'افزودن';
$labels['del'] = 'حذف';
$labels['sender'] = 'فرستنده';
$labels['recipient'] = 'گیرنده';
$labels['days'] = 'روز';
$labels['filtersets'] = 'مجموعه فیلتر';
$labels['filterdef'] = 'تعریف فیلتر';
$labels['active'] = 'فعال';
$labels['none'] = 'هیچ کدام';
$labels['flagread'] = 'خواندن';
$labels['flagdeleted'] = 'حذف شد';
$labels['flagflagged'] = 'نشانه گذاری شده';
$labels['flagdraft'] = 'پیش نویس';
$labels['varlength'] = 'طول';
$labels['notifyimportancenormal'] = 'عادی';
$labels['notifymethodmailto'] = 'ایمیل';
$labels['nextstep'] = 'مرحله بعدی';
$labels['...'] = '...';
$labels['currdate'] = 'تاریخ کنونی';
$labels['datetest'] = 'تاریخ';
$labels['dateheader'] = 'سرایند:';
$labels['year'] = 'سال';
$labels['month'] = 'ماه';
$labels['day'] = 'روز';
$labels['second'] = 'ثانیه';
$labels['advancedopts'] = 'انتخاب های پیشرفته';
$labels['body'] = 'متن پیام';
$labels['address'] = 'آدرس';
$labels['envelope'] = 'پاکت نامه';
$labels['modifier'] = 'ویرایش کننده:';
$labels['text'] = 'متن';
$labels['contenttype'] = 'نوع محتوا';
$labels['allparts'] = 'همه';
$labels['domain'] = 'دامنه';
$labels['localpart'] = 'جز محلی';
$labels['user'] = 'کاربر';
$labels['detail'] = 'جزئیات';
$labels['comparator'] = 'مقایسه کننده:';
$labels['default'] = 'پیش فرض';
$labels['index'] = 'اندیس';
$labels['spamtestequals'] = 'مساوی با';
$labels['vacation.reply'] = 'پیام پاسخ';
$labels['vacation.advanced'] = 'تنظیمات پیشرفته';
$labels['vacation.subject'] = 'موضوع';
$labels['vacation.body'] = 'متن پیام';
$labels['vacation.status'] = 'وضعیت';
$labels['vacation.on'] = 'فعال';
$labels['vacation.off'] = 'غیرفعال';
$labels['forward.on'] = 'فعال';
$labels['forward.off'] = 'غیرفعال';
$labels['arialabelfilterform'] = 'خصوصیات فیلترها';
$labels['ariasummaryfilterslist'] = 'لیست فیلترها';
$labels['duplicate.header'] = 'سرایند:';
$messages['filterdeleted'] = 'فیلتر با موفقیت حذف شد.';
$messages['filtersaved'] = 'فیلتر با موفقیت ذخیره شد.';
$messages['deactivated'] = 'فیلتر(ها) با موفقیت غیر فعال شدند';
$messages['nametoolong'] = 'نام بسیار بلند است.';
$messages['namereserved'] = 'نام  رزرو شده.';
PK{c�\2z�`,`,managesieve/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Siloù';
$labels['managefilters'] = 'Ardeiñ siloù ar posteloù o tont tre';
$labels['filtername'] = 'Anv ar sil';
$labels['newfilter'] = 'Sil nevez';
$labels['filteradd'] = 'Ouzhpennañ ur sil';
$labels['filterdel'] = 'Dilemel ar sil';
$labels['scope'] = 'Ledennad';
$labels['moveup'] = 'Dilec\'hiañ da grec\'h ';
$labels['movedown'] = 'Dilec\'hiañ d\'an traoñ';
$labels['filterallof'] = 'o kenglotañ gant an holl reolennoù da heul';
$labels['filteranyof'] = 'o kenglotañ gant unan eus ar reolennoù da heul';
$labels['filterany'] = 'An holl posteloù';
$labels['filtercontains'] = 'a endalc\'h';
$labels['filternotcontains'] = 'na endalc\'h ket';
$labels['filteris'] = 'a zo kevatal da';
$labels['filterisnot'] = 'n\'eo ket kevatal da';
$labels['filterexists'] = 'a zo dioutañ/diouti';
$labels['filternotexists'] = 'n\'eus ket dioutañ/diouti';
$labels['filtermatches'] = 'a genglot gant ar riñvenn';
$labels['filternotmatches'] = 'ne genglot ket gant ar riñvenn';
$labels['filterregex'] = 'a genglot gant ar bomm reol';
$labels['filternotregex'] = 'ne genglot ket gant ar bomm reol';
$labels['filterunder'] = 'dindan';
$labels['filterover'] = 'a-us';
$labels['addrule'] = 'Ouzhpennañ ur reolenn';
$labels['delrule'] = 'Dilemel ar reolenn';
$labels['messagemoveto'] = 'Dilec\'hiañ ar gemennadenn da';
$labels['messageredirect'] = 'Adheñchañ ar gemennadenn da';
$labels['messagecopyto'] = 'Eilañ ar postel e';
$labels['messagesendcopy'] = 'Kas un eilenn da';
$labels['messagereply'] = 'Respont gant ur gemennadenn';
$labels['messagedelete'] = 'Dilemel ar postel';
$labels['messagediscard'] = 'Dilezel gant ur gemennadenn';
$labels['messagekeep'] = 'Mirout ar gemennadenn er voest degemer';
$labels['messagesrules'] = 'Evit ar postel o tont-tre:';
$labels['messagesactions'] = '...erounit ar gweredoù da heul:';
$labels['add'] = 'Ouzhpennañ';
$labels['del'] = 'Dilemel';
$labels['sender'] = 'Kaser';
$labels['recipient'] = 'Degemerer';
$labels['vacationaddr'] = 'Ma chomlec\'hioù postel';
$labels['vacationdays'] = 'Feur kas ar c\'hemennadennoù (e devezhioù):';
$labels['vacationinterval'] = 'Feur kas ar c\'hemennadennoù:';
$labels['vacationreason'] = 'Korf ar gemennadenn (abeg an ezvezañs):';
$labels['vacationfrom'] = 'Chomlec\'h kaser ar respont:';
$labels['vacationsubject'] = 'Danvez';
$labels['days'] = 'a zevezhioù';
$labels['seconds'] = 'eilenn';
$labels['rulestop'] = 'Paouez da briziañ ar reolennoù';
$labels['enable'] = '(Di)weredekaat';
$labels['filtersets'] = 'Strolladoù sil';
$labels['filterdef'] = 'Despizadur ar sil';
$labels['active'] = 'gweredekaet';
$labels['none'] = 'hini ebet';
$labels['fromset'] = 'eus ar strollad';
$labels['fromfile'] = 'eus ur restr';
$labels['filterdisabled'] = 'Sil diweredekaet';
$labels['countisgreaterthan'] = 'an niver a zo ouzhpenn';
$labels['countisgreaterthanequal'] = 'an niver a zo ouzhpenn pe kevatal da';
$labels['countislessthan'] = 'An niver a zo nebeutoc\'h eget';
$labels['countislessthanequal'] = 'an niver a zo nebeutoc\'h pe kevatal da';
$labels['countequals'] = 'an niver a zo kevatal da';
$labels['countnotequals'] = 'an niver a zo dishenvel diouzh';
$labels['valueisgreaterthan'] = 'ar werzh a zo brasoc\'h eget';
$labels['valueisgreaterthanequal'] = 'ar gwerzh a zo brasoc\'h pe kevatal da';
$labels['valueislessthan'] = 'ar gwerzh a zo nebeutoc\'h eget';
$labels['valueislessthanequal'] = 'ar gwerzh a zo nebeutoc\'h pe kevatal da';
$labels['valueequals'] = 'ar gwerzh a zo kevatal da';
$labels['valuenotequals'] = 'ar gwerzh n\'eo ket kevatal da';
$labels['setflags'] = 'Lakaat bannieloù d\'ar gemennadenn';
$labels['addflags'] = 'Ouzhpennañ bannieloù d\'ar gemennadenn';
$labels['removeflags'] = 'Dilemel bannieloù diouzh ar gemennaenn';
$labels['flagread'] = 'Lennet';
$labels['flagdeleted'] = 'Dilamet';
$labels['flaganswered'] = 'Repsontet';
$labels['flagflagged'] = 'Bannielet';
$labels['flagdraft'] = 'Brouilhed';
$labels['setvariable'] = 'Lakaat un argemenn';
$labels['setvarname'] = 'Anv an argemenn';
$labels['setvarvalue'] = 'Gwerzh an argemenn';
$labels['setvarmodifiers'] = 'Daskemmerien:';
$labels['varlower'] = 'lizherennoù munut';
$labels['varupper'] = 'pennlizherennoù';
$labels['varlowerfirst'] = 'lizherenn gentañ munut';
$labels['varupperfirst'] = 'lizherenn gentañ bras';
$labels['varquotewildcard'] = 'menegiñ arouezennoù dibar';
$labels['varlength'] = 'hirder';
$labels['notify'] = 'Kas ur rebuziñ';
$labels['notifytarget'] = 'Bukenn ar rebuziñ:';
$labels['notifymessage'] = 'Kemennadenn rebuziñ (diret):';
$labels['notifyoptions'] = 'Dibarzhioù rebuziñ (diret):';
$labels['notifyfrom'] = 'Kaser rebuzi (diret):';
$labels['notifyimportance'] = 'Pouezusted:';
$labels['notifyimportancelow'] = 'izel';
$labels['notifyimportancenormal'] = 'reoliek';
$labels['notifyimportancehigh'] = 'uhel';
$labels['notifymethodmailto'] = 'Chomlec\'h postel';
$labels['notifymethodtel'] = 'Pellgomz';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Krouiñ ur sil';
$labels['usedata'] = 'Ober gant ar roadennoù da heul er sil';
$labels['nextstep'] = 'Pazenn da heul';
$labels['...'] = '...';
$labels['currdate'] = 'Deiziad bremanel';
$labels['datetest'] = 'Deiziad';
$labels['dateheader'] = 'talbenn:';
$labels['year'] = 'bloavezh';
$labels['month'] = 'miz';
$labels['day'] = 'devezh';
$labels['date'] = 'deiziad (bbbb-mm-dd)';
$labels['julian'] = 'deiziad (julian)';
$labels['hour'] = 'eur';
$labels['minute'] = 'munutenn';
$labels['second'] = 'eilenn';
$labels['time'] = 'eur (eur:miz:eilennoù)';
$labels['iso8601'] = 'deiziad (ISO8601)';
$labels['std11'] = 'deiziad (RFC2822)';
$labels['zone'] = 'gwerzhid-eur';
$labels['weekday'] = 'devezh ar sizhun (0-6)';
$labels['advancedopts'] = 'Dibarzhioù kempleshoc\'h';
$labels['body'] = 'Korf';
$labels['address'] = 'chomlec\'h';
$labels['envelope'] = 'golo-lizher';
$labels['modifier'] = 'dazkemmer:';
$labels['text'] = 'testenn';
$labels['undecoded'] = 'dienboneget (diaoz)';
$labels['contenttype'] = 'rizh an endalc\'had';
$labels['modtype'] = 'rizh:';
$labels['allparts'] = 'an holl';
$labels['domain'] = 'domani';
$labels['localpart'] = 'lodenn lec\'hel';
$labels['user'] = 'arveriad';
$labels['detail'] = 'munud';
$labels['comparator'] = 'keñverier';
$labels['default'] = 'dre ziouer';
$labels['octet'] = 'strizh (eizhbit)';
$labels['asciicasemap'] = 'chom hep teurel evezh ouzh an direnneg (ascii-casemap)';
$labels['asciinumeric'] = 'niverel (ascii-numeric)';
$labels['index'] = 'ibil:';
$labels['indexlast'] = 'war-gil';
$labels['spamtestequals'] = 'a zo kevatal da';
$labels['spamtestnotequals'] = 'n\'eo ket kevatal da';
$labels['vacation.reply'] = 'Kemennadenn respont';
$labels['vacation.advanced'] = 'Arventennoù kempleshoc\'h';
$labels['vacation.from'] = 'Chomlec\'h kaser ar respont';
$labels['vacation.subject'] = 'Danvez';
$labels['vacation.body'] = 'Korf';
$labels['vacation.status'] = 'Stad';
$labels['vacation.on'] = 'Ya';
$labels['vacation.off'] = 'Ket';
$labels['vacation.addresses'] = 'Ma chomlec\'hioù postel';
$labels['vacation.interval'] = 'Etremez respont';
$labels['vacation.saving'] = 'Oc\'h enrollañ ar roadennoù';
$labels['vacation.action'] = 'Gwered kemennadenn o tont-tre';
$labels['vacation.keep'] = 'Mirout';
$labels['vacation.discard'] = 'Dilezel';
$labels['vacation.redirect'] = 'Adheñchañ da';
$labels['vacation.copy'] = 'Kas un eilenn da';
$labels['forward.redirect'] = 'Adheñchañ da';
$labels['forward.copy'] = 'Kas un eilenn da';
$labels['forward.on'] = 'Ya';
$labels['forward.off'] = 'Ket';
$labels['forward.saving'] = 'Oc\'h enrollañ ar roadennoù';
$labels['filladdresses'] = 'Leuniañ gant ma holl chomlec\'hioù';
$labels['arialabelfiltersetactions'] = 'Gweredeoù ar strollad siloù';
$labels['arialabelfilteractions'] = 'Gweredoù ar sil';
$labels['arialabelfilterform'] = 'Perzhioù ar sil';
$labels['ariasummaryfilterslist'] = 'Roll ar siloù';
$labels['ariasummaryfiltersetslist'] = 'Roll ar strolladoù siloù';
$labels['filterstitle'] = 'Embann ar siloù posteloù o tont-tre';
$labels['vacationtitle'] = 'Embann ar reolenn maez-ar-burev';
$labels['message'] = 'Kemennadenn';
$labels['duplicate'] = 'a zo un eilad';
$labels['notduplicate'] = 'n\'eo ket un eilad';
$labels['duplicate.handle'] = 'merañ:';
$labels['duplicate.header'] = 'talbenn:';
$labels['duplicate.uniqueid'] = 'naoudi:';
$labels['duplicate.seconds'] = 'diamzeret (eilennoù):';
$labels['duplicate.last'] = 'daveel d\'an erounezadur kent';
$messages['filterunknownerror'] = 'Fazi dafariad dianav.';
$messages['filterconnerror'] = 'N\'haller ket kennaskañ d\'an dafariad';
$messages['filterdeleteerror'] = 'N\'haller ket dilemel ar sil. Ur fazi dafariad a zo c\'hoavezet.';
$messages['filterdeleted'] = 'Sil dilamet gant berzh.';
$messages['filtersaved'] = 'Sil enrollet gant berzh.';
$messages['filtersaveerror'] = 'N\'haller ket enrollañ ar sil. Ur fazi dafariad a zo c\'hoarvezet.';
$messages['filterformerror'] = 'Fazio a zo e furmskrid ar sil.';
$messages['filterdeleteconfirm'] = 'Fellout a ra deoc\'h dilemel ar sil dibabet?';
$messages['ruledeleteconfirm'] = 'Fellout a ra deoc\'h dilemel ar reolenn diuzet?';
$messages['actiondeleteconfirm'] = 'Fellout a ra deoc\'h dilemel ar gwered diuzet?';
$messages['forbiddenchars'] = 'Arouezennoù difennet er vaezienn.';
$messages['cannotbeempty'] = 'N\'hall ket ar vaezienn bezañ goullo.';
$messages['ruleexist'] = 'Ur sil gant an anv erspizet an zo dioutañ endeo.';
$messages['activateerror'] = 'N\'haller ket gweredekaat ar sil(où) diuzet. Ur fazi dafariad a zo c\'hoarvezet.';
$messages['deactivateerror'] = 'N\'haller ket diweredekaat ar sil(où) diuzet. Ur fazi dafariad a zo c\'hoarvezet.';
$messages['deactivated'] = 'Sil(où) diweredekaet gant berzh.';
$messages['activated'] = 'Sil(où) diweredekaet gant berzh.';
$messages['moved'] = 'Sil(où) dilec\'hiet gant berzh.';
$messages['moveerror'] = 'N\'haller ket dilec\'hiañ ar sil diuzet. Ur fazi dafariad a zo c\'hoarvezet.';
$messages['nametoolong'] = 'Re hir eo an anv.';
$messages['namereserved'] = 'Miret eo an anv.';
$messages['setexist'] = 'Ar strollad a zo anezhañ endeo.';
$messages['nodata'] = 'Ul lec\'hiadur a rank bezañ diuzet d\'an nebeutañ!';
$messages['invaliddateformat'] = 'Mentrezh deiziad pe lodenn deiziad didalvoudek';
$messages['saveerror'] = 'N\'haller ket enrollañ ar roadennoù. Ur fazi dafariad a zo c\'hoarvezet.';
$messages['emptyvacationbody'] = 'Dleet eo korf ar gemennadenn ezvezañs!';
$messages['duplicate.conflict.err'] = 'Un talbenn hag un naoudi unel n\'int ket aotreet.';
PK{c�\]�(II"managesieve/localization/ka_GE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'წაშლა';
$labels['add'] = 'დამატება';
$labels['del'] = 'წაშლა';
$labels['sender'] = 'გამგზავნელი';
$labels['flagread'] = 'წაკითხვა';
$labels['flagdeleted'] = 'წაშლილი';
$labels['flagflagged'] = 'მონიშნული';
$labels['notifymethodmailto'] = 'ელ–ფოსტა';
$labels['notifymethodtel'] = 'ტელეფონი';
$labels['datetest'] = 'თარიღი';
$labels['advancedopts'] = 'დამატებითი პარამეტრები';
$labels['body'] = 'შეტყობინების ტექსტი';
$labels['vacation.subject'] = 'სათაური';
$labels['vacation.body'] = 'შეტყობინების ტექსტი';
PK{c�\�#8�8�8"managesieve/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Филтри ';
$labels['managefilters'] = 'Управувај филтри за дојдовна пошта';
$labels['filtername'] = 'Име на филтер ';
$labels['newfilter'] = 'Нов филтер ';
$labels['filteradd'] = 'Додај филтер ';
$labels['filterdel'] = 'Избришај филтер ';
$labels['scope'] = 'Опсег';
$labels['moveup'] = 'Помести нагоре ';
$labels['movedown'] = 'Помести надолу ';
$labels['filterallof'] = 'Појавување на сите од следниве правила';
$labels['filteranyof'] = 'Појавување на било кои од следниве правила';
$labels['filterany'] = 'Сите пораки ';
$labels['filtercontains'] = 'Содржи';
$labels['filternotcontains'] = 'Не содржи';
$labels['filteris'] = 'Е еднакво на ';
$labels['filterisnot'] = 'Не е еднакво на ';
$labels['filterexists'] = 'Постои ';
$labels['filternotexists'] = 'Не постои ';
$labels['filtermatches'] = 'Се совпаѓаат изразувањата ';
$labels['filternotmatches'] = 'Не се совпаѓаат изразувањата';
$labels['filterregex'] = 'Се совпаѓаат регуларни изразувања';
$labels['filternotregex'] = 'Не се совпаѓаат регуларни изразувања';
$labels['filterunder'] = 'Под ';
$labels['filterover'] = 'Над';
$labels['addrule'] = 'Додај правило';
$labels['delrule'] = 'Избришај правило';
$labels['messagemoveto'] = 'Премести порака во ';
$labels['messageredirect'] = 'Пренасочи порака до ';
$labels['messagecopyto'] = 'Копирај порака до ';
$labels['messagesendcopy'] = 'Прати порака до ';
$labels['messagereply'] = 'Врати со порака ';
$labels['messagedelete'] = 'Избриши порака ';
$labels['messagediscard'] = 'Отфрли со порака ';
$labels['messagekeep'] = 'Задржи ја пораката во дојдовно сандаче ';
$labels['messagesrules'] = 'За дојдовна пошта:';
$labels['messagesactions'] = '...Изврши ги следните акции:';
$labels['add'] = 'Додај';
$labels['del'] = 'Избриши';
$labels['sender'] = 'Праќач';
$labels['recipient'] = 'Примач';
$labels['vacationaddr'] = 'Мојата електорнска пошта:';
$labels['vacationdays'] = 'Колку често праќа пораки (дневно):';
$labels['vacationinterval'] = 'Колку често праќа пораки:';
$labels['vacationreason'] = 'Тело на порака (причина за одмор)';
$labels['vacationfrom'] = 'Врати адреса на испраќач:';
$labels['vacationsubject'] = 'Предмет на порака ';
$labels['days'] = 'Денови';
$labels['seconds'] = 'Секунди';
$labels['rulestop'] = 'Престани да евалуираш правила ';
$labels['enable'] = 'Овозможи/Оневозможи';
$labels['filtersets'] = 'Сетови филтри';
$labels['filterseteditraw'] = 'Уреди го филтер сетот ';
$labels['filterdef'] = 'Дефиниција на филтер ';
$labels['active'] = 'Активен';
$labels['none'] = 'Нема ';
$labels['fromset'] = 'од сет ';
$labels['fromfile'] = 'од папка';
$labels['filterdisabled'] = 'Филтер исклучен';
$labels['countisgreaterthan'] = 'Бројот е поголем од ';
$labels['countisgreaterthanequal'] = 'бројот е поголем од или еднаков на ';
$labels['countislessthan'] = 'бројот е помал од ';
$labels['countislessthanequal'] = 'бројот е помл од или еднаков на ';
$labels['countequals'] = 'бројот е еднаков на ';
$labels['countnotequals'] = 'бројот не е еднаков на ';
$labels['valueisgreaterthan'] = 'вредноста е поголема од ';
$labels['valueisgreaterthanequal'] = 'вредноста е поголема од или еднаква на ';
$labels['valueislessthan'] = 'вредноста е помала од ';
$labels['valueislessthanequal'] = 'вредноста е помало од или еднаква на ';
$labels['valueequals'] = 'вредноста е еднаква на ';
$labels['valuenotequals'] = 'вредноста не е еднаква на ';
$labels['setflags'] = 'Постави знамиња на пораката ';
$labels['addflags'] = 'Додај знамиња на пораката ';
$labels['removeflags'] = 'Тргни знамиња од пораката ';
$labels['flagread'] = 'Читај';
$labels['flagdeleted'] = 'Избришани';
$labels['flaganswered'] = 'Одговорени';
$labels['flagflagged'] = 'Означени';
$labels['flagdraft'] = 'Предлог';
$labels['setvariable'] = 'Постави променлива';
$labels['setvarname'] = 'Име на променлива:';
$labels['setvarvalue'] = 'Вредност на променлива:';
$labels['setvarmodifiers'] = 'Модификатори:';
$labels['varlower'] = 'мали букви';
$labels['varupper'] = 'големи букви';
$labels['varlowerfirst'] = 'мала прва буква';
$labels['varupperfirst'] = 'голем прва буква';
$labels['varquotewildcard'] = 'цитирај специјален карактер ';
$labels['varlength'] = 'должина';
$labels['notify'] = 'Испрати известување';
$labels['notifytarget'] = 'Цел на известување:';
$labels['notifymessage'] = 'Порака за известување (незадолжително):';
$labels['notifyoptions'] = 'Опции за известување (незадолжително):';
$labels['notifyfrom'] = 'Известување за испраќачот (незадолжително):';
$labels['notifyimportance'] = 'Важност:';
$labels['notifyimportancelow'] = 'ниско';
$labels['notifyimportancenormal'] = 'нормално';
$labels['notifyimportancehigh'] = 'високо';
$labels['notifymethodmailto'] = 'Електронска пошта';
$labels['notifymethodtel'] = 'Телефон';
$labels['notifymethodsms'] = 'СМС';
$labels['filtercreate'] = 'Креирај филтер';
$labels['usedata'] = 'Искористи ги следните податоци за филтер:';
$labels['nextstep'] = 'Следен чекор';
$labels['...'] = '...';
$labels['string'] = 'Низа';
$labels['currdate'] = 'Денешна дата ';
$labels['datetest'] = 'Дата ';
$labels['dateheader'] = 'Заглавие';
$labels['year'] = 'година';
$labels['month'] = 'месец';
$labels['day'] = 'ден';
$labels['date'] = 'дата (гггг-мм-дд)';
$labels['julian'] = 'дата (јулијански календар)';
$labels['hour'] = 'час';
$labels['minute'] = 'минута';
$labels['second'] = 'секунда';
$labels['time'] = 'време (чч:мм:сс)';
$labels['iso8601'] = 'дата (ISO8601)';
$labels['std11'] = 'дата (RFC2822)';
$labels['zone'] = 'временска зона';
$labels['weekday'] = 'ден од неделата (0-6)';
$labels['advancedopts'] = 'Напредни опции';
$labels['body'] = 'Тело';
$labels['address'] = 'адреса';
$labels['envelope'] = 'плик';
$labels['modifier'] = 'модификатор:';
$labels['text'] = 'текст';
$labels['undecoded'] = 'Недекодирано (сурово)';
$labels['contenttype'] = 'тип на содржина';
$labels['modtype'] = 'Тип:';
$labels['allparts'] = 'сите ';
$labels['domain'] = 'домен';
$labels['localpart'] = 'локален дел';
$labels['user'] = 'корисник';
$labels['detail'] = 'детал';
$labels['comparator'] = 'Компаратор:';
$labels['default'] = 'стандардно';
$labels['octet'] = 'строг (октет)';
$labels['asciicasemap'] = 'Нечуствителен за големи и мали букви (ascii-csemap)';
$labels['asciinumeric'] = 'Нумерички (ascii-numeric)';
$labels['index'] = 'Индекс:';
$labels['indexlast'] = 'наназад';
$labels['spamtestequals'] = 'Е еднакво на ';
$labels['spamtestnotequals'] = 'Не е еднакво на ';
$labels['vacation.reply'] = 'Порака за одговор ';
$labels['vacation.advanced'] = 'Напредни подесувања';
$labels['vacation.from'] = 'Одговори на адресата на испраќачот';
$labels['vacation.subject'] = 'Предмет';
$labels['vacation.body'] = 'Тело';
$labels['vacation.status'] = 'Статус ';
$labels['vacation.on'] = 'Вклучи';
$labels['vacation.off'] = 'Исклучи';
$labels['vacation.addresses'] = 'Моите електронски пошти';
$labels['vacation.interval'] = 'Интервал на враќање ';
$labels['vacation.saving'] = 'Зачувување на податок...';
$labels['vacation.action'] = 'Акција за дојдовна порака';
$labels['vacation.keep'] = 'Задржи';
$labels['vacation.discard'] = 'Отфрли';
$labels['vacation.redirect'] = 'Пренасочи до';
$labels['vacation.copy'] = 'Испрати копија до ';
$labels['forward.redirect'] = 'Пренасочи до';
$labels['forward.copy'] = 'Испрати копија до ';
$labels['forward.on'] = 'Вклучи';
$labels['forward.off'] = 'Исклучи';
$labels['forward.saving'] = 'Зачувување на податок...';
$labels['filladdresses'] = 'Пополни со сите мои адреси ';
$labels['arialabelfiltersetactions'] = 'Акции на филтер сет ';
$labels['arialabelfilteractions'] = 'Акции на филтер ';
$labels['arialabelfilterform'] = 'Својства на филтер ';
$labels['ariasummaryfilterslist'] = 'Иста од филтри';
$labels['ariasummaryfiltersetslist'] = 'Листа од филтер сетови';
$labels['filterstitle'] = 'Уреди ги дојдовните филтри за пошта ';
$labels['vacationtitle'] = 'Уреди го надвор од канцеларија правилото';
$labels['message'] = 'Порака ';
$labels['duplicate'] = 'е дупликат ';
$labels['notduplicate'] = 'не е дупликат';
$labels['duplicate.handle'] = 'Справи се со:';
$labels['duplicate.header'] = 'заглавие:';
$labels['duplicate.uniqueid'] = 'идентификатор:';
$labels['duplicate.seconds'] = 'Истек на време (секунди):';
$labels['duplicate.last'] = 'Во однос на последното извршување';
$messages['filterunknownerror'] = 'Непозната грешка на серверот.';
$messages['filterconnerror'] = 'Не може да се поврзе со серверот .';
$messages['filterdeleteerror'] = 'Не може да се избришат филтри. Настана грешка со серверот  ';
$messages['filterdeleted'] = 'Филтерот е успешно избришан';
$messages['filtersaved'] = 'Филтерот е успешно зачуван';
$messages['filtersaveerror'] = 'Не може да се зачува филтерот. Настана грешка со серверот ';
$messages['filterformerror'] = 'Формата за филтер содржи грешка';
$messages['filterdeleteconfirm'] = 'Дали навистина сакате да го избришате избраниот филтер?';
$messages['ruledeleteconfirm'] = 'Дали сте сигурни дека сакате да го избришате избраното правило?';
$messages['actiondeleteconfirm'] = 'Дали сте сигурни дека сакате да го избришате избранота акција?';
$messages['forbiddenchars'] = 'Забранет карактер во полето.';
$messages['cannotbeempty'] = 'Полето не може да биде празно.';
$messages['ruleexist'] = 'Веќе постои филтер со избраното поле.';
$messages['activateerror'] = 'Не може да се овозможи селектираниот филтер(и). настана грешка со серверот.';
$messages['deactivateerror'] = 'Не може да се оневозможи избраниот филтер(и). Настана грешка со серверот.';
$messages['deactivated'] = 'Филтер(и) е успешно оневозможен.';
$messages['activated'] = 'Филтер(и) е успешно овозможен.';
$messages['moved'] = 'Филтерот е успешно преместен.';
$messages['moveerror'] = 'Не може да се премести избраниот филтер. Настана грешка со серверот.';
$messages['nametoolong'] = 'Името е премногу долго.';
$messages['namereserved'] = 'Резервирано име.';
$messages['setexist'] = 'Сетот веќе постои.';
$messages['nodata'] = 'Мора барем една позиција да биде селектирана!';
$messages['invaliddateformat'] = 'Невалиден датум или дел од форматот за датум';
$messages['saveerror'] = 'Податокот не може да се зачува. Настана грешка со серверот.';
$messages['emptyvacationbody'] = 'Потребно е тело на пораката за одмор!';
$messages['duplicate.conflict.err'] = 'Заглавје и единствен идентификатор не се дозволени.';
PK{c�\�R`�NN"managesieve/localization/kn_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['messagedelete'] = 'ಸಂದೇಶ ಅಳಿಸು';
$labels['add'] = 'ಸೇರಿಸು';
$labels['notifymethodmailto'] = 'ಇಮೇಲ್';
$labels['notifymethodtel'] = 'ದೂರವಾಣಿ';
$labels['datetest'] = 'ದಿನಾಂಕ ';
$labels['vacation.subject'] = 'ವಿಷಯ';
PK{c�\ĕ��]]"managesieve/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'តម្រង';
$labels['managefilters'] = 'គ្រប់គ្រង​តម្រប​សំបុត្រ​ចូល';
$labels['filtername'] = 'ឈ្មោះ​តម្រង';
$labels['newfilter'] = 'តម្រង​ថ្មី';
$labels['filteradd'] = 'បន្ថែម​តម្រង';
$labels['filterdel'] = 'លុប​តម្រង';
$labels['moveup'] = 'រុញ​ទៅ​លើ';
$labels['movedown'] = 'រុញ​ចុះ​ក្រោម';
$labels['filterallof'] = 'ត្រូវ​គ្នា​ទៅ​នឹង​លក្ខខណ្ឌ​ទាំង​នេះ';
$labels['filteranyof'] = 'ត្រូវ​គ្នា​ទៅ​នឹង​លក្ខខណ្ឌ​ណាមួយ';
$labels['filterany'] = 'សារ​ទាំង​អស់';
$labels['filtercontains'] = 'មាន​ផ្ទុក';
$labels['filternotcontains'] = 'មិន​មាន';
$labels['filteris'] = 'ស្មើ​នឹង';
$labels['filterisnot'] = 'មិន​ស្មើ​នឹង';
$labels['filterexists'] = 'មាន';
$labels['filternotexists'] = 'មិន​មាន';
$labels['filtermatches'] = 'សញ្ញាណ​ដែល​ត្រូវ';
$labels['filterunder'] = 'ក្រោម';
$labels['filterover'] = 'លើ';
$labels['addrule'] = 'បន្ថែម​លក្ខខណ្ឌ';
$labels['delrule'] = 'លុប​លក្ខខណ្ឌ';
$labels['messagemoveto'] = 'ផ្លាស់​ទី​សារ​ទៅ';
$labels['messageredirect'] = 'ប្ដូរ​ទិសដៅ​សារ​ទៅ';
$labels['messagecopyto'] = 'ចម្លង​សារ​ទៅ';
$labels['messagesendcopy'] = 'ផ្ញើ​ការ​ចម្លង​សារ​ទៅ';
$labels['messagereply'] = 'ឆ្លើយ​តប​ជាមួយ​សារ';
$labels['messagedelete'] = 'លុប​សារ';
$labels['messagediscard'] = 'បោះបង់​ជាមួយ​នឹង​សារ';
$labels['messagesrules'] = 'សម្រាប់​សំបុត្រ​ចូល៖';
$labels['messagesactions'] = '...ប្រតិបត្តិ​សកម្មភាព​ទាំង​នេះ៖';
$labels['add'] = 'បន្ថែម';
$labels['del'] = 'លុប';
$labels['sender'] = 'អ្នក​ផ្ញើ';
$labels['recipient'] = 'អ្នក​ទទួល';
$labels['vacationdays'] = 'តើ​ផ្ញើ​សារ​ញឹកញាប់​ប៉ុណ្ណា (ក្នុង​មួយ​ថ្ងៃ)៖';
$labels['vacationreason'] = 'តួ​សារ (ហេតុផល​វិស្សមកាល)៖';
$labels['vacationsubject'] = 'ប្រធានបទ​សារ៖';
$labels['days'] = 'ថ្ងៃ';
$labels['seconds'] = 'វិនាទី';
$labels['rulestop'] = 'ឈប់​គិត​ទៅ​លើ​លក្ខខណ្ឌ';
$labels['enable'] = 'បើក/បិទ';
$labels['filterdef'] = 'អត្ថន័យ​តម្រង';
$labels['active'] = 'សកម្ម';
$labels['none'] = 'គ្មាន';
$labels['fromfile'] = 'ពី​ឯកសារ';
$labels['filterdisabled'] = 'បាន​បិទ​តម្រង';
$labels['valuenotequals'] = 'តម្លៃ​មិន​ស្មើ​នឹង';
$labels['flagread'] = 'បាន​អាន';
$labels['flagdeleted'] = 'បាន​លុប';
$labels['flaganswered'] = 'បាន​ឆ្លើយ';
$labels['flagflagged'] = 'បាន​ដាក់​ទង់';
$labels['flagdraft'] = 'ការ​ព្រាង';
$labels['setvariable'] = 'កំណត់​អថេរ';
$labels['setvarname'] = 'ឈ្មោះ​អថេរ៖';
$labels['setvarvalue'] = 'តម្លៃ​អថេរ៖';
$labels['varlower'] = 'អក្សរ​តូច';
$labels['varupper'] = 'អក្សរ​ធំ';
$labels['varlength'] = 'ប្រវែង';
$labels['notify'] = 'ផ្ញើ​ការ​ជូន​ដំណឹង';
$labels['notifyimportance'] = 'សំខាន់៖';
$labels['notifyimportancelow'] = 'ទាប';
$labels['notifyimportancenormal'] = 'ធម្មតា';
$labels['notifyimportancehigh'] = 'ខ្ពស់';
$labels['notifymethodmailto'] = 'អ៊ីមែល';
$labels['notifymethodtel'] = 'ទូរស័ព្ទ';
$labels['filtercreate'] = 'បង្កើត​តម្រង';
$labels['usedata'] = 'ប្រើ​ទិន្នន័យ​ទាំង​នេះ​ក្នុង​តម្រង៖';
$labels['nextstep'] = 'ជំហាន​បន្ទាប់';
$labels['...'] = '...';
$labels['currdate'] = 'កាលបរិច្ឆេទ​បច្ចុប្បន្ន';
$labels['datetest'] = 'កាលបរិច្ឆេទ';
$labels['dateheader'] = 'ក្បាល៖';
$labels['year'] = 'ឆ្នាំ';
$labels['month'] = 'ខែ';
$labels['day'] = 'ថ្ងៃ';
$labels['date'] = 'កាល​បរិច្ឆេទ (yyyy-mm-dd)';
$labels['julian'] = 'កាល​បរិច្ឆេទ (julian)';
$labels['hour'] = 'ម៉ោង';
$labels['minute'] = 'នាទី';
$labels['second'] = 'វិនាទី';
$labels['time'] = 'ម៉ោង (hh:mm:ss)';
$labels['iso8601'] = 'កាល​បរិច្ឆេទ (ISO8601)';
$labels['std11'] = 'កាល​បរិច្ឆេទ (RFC2822)';
$labels['zone'] = 'តំបន់​ម៉ោង';
$labels['weekday'] = 'ថ្ងៃ​សប្ដាហ៍ (0-6)';
$labels['advancedopts'] = 'ជម្រើស​កម្រិត​ខ្ពស់';
$labels['body'] = 'តួ';
$labels['address'] = 'អាសយដ្ឋាន';
$labels['envelope'] = 'ស្រោម​សំបុត្រ';
$labels['text'] = 'អត្ថបទ';
$labels['contenttype'] = 'ប្រភេទ​មាតិកា';
$labels['modtype'] = 'ប្រភេទ៖';
$labels['allparts'] = 'ទាំងអស់';
$labels['domain'] = 'ដូមេន';
$labels['localpart'] = 'ផ្នែក​មូលដ្ឋាន';
$labels['user'] = 'អ្នកប្រើ';
$labels['detail'] = 'លម្អិត';
$labels['index'] = 'លិបិក្រម៖';
$labels['indexlast'] = 'បកក្រោយ';
$labels['spamtestequals'] = 'ស្មើ​នឹង';
$labels['spamtestnotequals'] = 'មិន​ស្មើ​នឹង';
$labels['vacation.subject'] = 'ចំណងជើង';
$labels['vacation.body'] = 'តួ';
$labels['vacation.keep'] = 'រក្សា';
$labels['duplicate.header'] = 'ក្បាល៖';
PK{c�\d2z��
�
"managesieve/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Шүүлтүүр';
$labels['managefilters'] = 'Ирэх мэйлийн шүүлтүүр зохицуулах';
$labels['filtername'] = 'Шүүх нэр';
$labels['newfilter'] = 'Шинэ шүүлтүүр';
$labels['filteradd'] = 'Шүүлтүүр нэмэх';
$labels['filterdel'] = 'Шүүлтүүр устгах';
$labels['moveup'] = 'Дээш зөөх';
$labels['movedown'] = 'Доош зөөх';
$labels['filterallof'] = 'Дараах дүрмүүдтэй бүгдтэй нь таарч байна';
$labels['filteranyof'] = 'дараах дүрмүүдтэй таарч байна';
$labels['filterany'] = 'бүх зурвас';
$labels['filtercontains'] = 'агуулсан';
$labels['filternotcontains'] = 'агуулаагүй';
$labels['filteris'] = 'тэнцүү';
$labels['filterisnot'] = 'нь тэнцүү биш';
$labels['filterexists'] = 'байна';
$labels['filternotexists'] = 'байхгүй';
$labels['filtermatches'] = 'таарсан';
$labels['filternotmatches'] = 'таараагүй';
$labels['filterregex'] = 'хайлтад таарсан';
$labels['filternotregex'] = 'хайлт таараагүй';
$labels['filterunder'] = 'доор';
$labels['addrule'] = 'Дүрэм нэмэх';
$labels['delrule'] = 'Дүрэм устгах';
$labels['messagemoveto'] = 'Захиа зөөх';
$labels['messageredirect'] = 'Захиаг дамжуулах';
$labels['messagecopyto'] = 'Захиа хуулж явуулах';
$labels['messagesendcopy'] = 'Захианы хуулбарыг илгээх';
$labels['messagereply'] = 'Захианд хариулах';
$labels['messagedelete'] = 'Захиа устгах';
$labels['del'] = 'Устгах';
$labels['sender'] = 'Илгээгч';
$labels['flagread'] = 'Унших';
$labels['datetest'] = 'Огноо';
$labels['spamtestequals'] = 'тэнцүү';
$labels['spamtestnotequals'] = 'нь тэнцүү биш';
$labels['vacation.subject'] = 'Гарчиг';
PK{c�\2N��>�>"managesieve/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'מסננים';
$labels['managefilters'] = 'ניהול מסננים לדואר נכנס';
$labels['filtername'] = 'שם המסנן';
$labels['newfilter'] = 'מסנן חדש';
$labels['filteradd'] = 'הוספת מסנן';
$labels['filterdel'] = 'מחיקת מסנן';
$labels['rules'] = 'כללים';
$labels['actions'] = 'פעולות';
$labels['scope'] = 'היקף';
$labels['moveup'] = 'הזזה מעלה';
$labels['movedown'] = 'הזזה מטה';
$labels['filterallof'] = 'תאימות לכל הכללים שלהלן';
$labels['filteranyof'] = 'תאימות לחלק מהכללים שלהלן';
$labels['filterany'] = 'כל ההודעות';
$labels['filtercontains'] = 'מכיל';
$labels['filternotcontains'] = 'לא מכיל';
$labels['filteris'] = 'שווה ערך ל-';
$labels['filterisnot'] = 'אינו שווה ערך ל-';
$labels['filterexists'] = 'קיים';
$labels['filternotexists'] = 'לא קיים';
$labels['filtermatches'] = 'תואם ביטוי';
$labels['filternotmatches'] = 'לא תואם ביטוי';
$labels['filterregex'] = 'תואם ביטוי מורכב';
$labels['filternotregex'] = 'לא תואם ביטוי מורכב';
$labels['filterunder'] = 'תחת';
$labels['filterover'] = 'מעל';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME Part:';
$labels['mime-message'] = 'הודעה';
$labels['mime-anychild'] = 'הכל';
$labels['mime-type'] = 'סוג';
$labels['mime-subtype'] = 'תת סוג';
$labels['mime-contenttype'] = 'סוג תוכן';
$labels['mime-param'] = 'פרמטר';
$labels['addrule'] = 'הוספת כלל';
$labels['delrule'] = 'מחיקת כלל';
$labels['messagemoveto'] = 'העברת הודעה אל';
$labels['messageredirect'] = 'השמה חדשה של ההודעה אל';
$labels['messagecopyto'] = 'העתקת ההודעה אל';
$labels['messagesendcopy'] = 'משלוח העתק מההודעה אל';
$labels['messagereply'] = 'מענה עם הודעה';
$labels['messagedelete'] = 'מחיקת הודעה';
$labels['messagediscard'] = 'ביטול ההודעה';
$labels['messagekeep'] = 'שמירת הודעה בדואר נכנס';
$labels['messagesrules'] = 'עבור דואר נכנס:';
$labels['messagesactions'] = '...מבצע הפעולות הבאות:';
$labels['add'] = 'הוספה';
$labels['del'] = 'מחיקה';
$labels['sender'] = 'השולח';
$labels['recipient'] = 'הנמען';
$labels['vacationaddr'] = 'כתובות הדוא"ל שלי:';
$labels['vacationdays'] = 'באיזו תדירות ( בימים ) לשלוח הודעות:';
$labels['vacationinterval'] = 'באיזו תדירות לשלוח ההודעה';
$labels['vacationreason'] = 'גוף ההודעה (סיבת החופשה):';
$labels['vacationfrom'] = 'כתובת שולח התשובה:';
$labels['vacationsubject'] = 'נושא ההודעה:';
$labels['days'] = 'ימים';
$labels['seconds'] = 'שניות';
$labels['rulestop'] = 'עצירה של בחינת הכללים';
$labels['enable'] = 'אפשור/ניטרול';
$labels['filterset'] = 'ערכת מסננים';
$labels['filtersets'] = 'קבוצות מסננים';
$labels['filtersetadd'] = 'הוספה של ערכת מסננים';
$labels['filtersetdel'] = 'מחיקת של ערכת מסננים';
$labels['filtersetact'] = 'הפעלה של ערכת המסננים הנוכחית';
$labels['filtersetdeact'] = 'השבתה של ערכת מסננים נוכחית';
$labels['filterseteditraw'] = 'עריכת סינון';
$labels['filtersetswitch'] = 'הפעלה/השבתה ערכת מסננים';
$labels['filterdef'] = 'הגדרת מסנן';
$labels['filtersetname'] = 'שם של ערכת מסננים';
$labels['newfilterset'] = 'ערכת מסננים חדשה';
$labels['active'] = 'פעיל';
$labels['none'] = 'אף אחד מאלה';
$labels['fromset'] = 'מקבוצה';
$labels['fromfile'] = 'מקובץ';
$labels['filterdisabled'] = 'מסנן מושבת';
$labels['filterenabled'] = 'מופעל מסנן';
$labels['countisgreaterthan'] = 'המספר גדול מ-';
$labels['countisgreaterthanequal'] = 'המספר גדול או שווה ל-';
$labels['countislessthan'] = 'המספר קטן מ-';
$labels['countislessthanequal'] = 'המספר קטן או שווה ל-';
$labels['countequals'] = 'המספר שווה ל-';
$labels['countnotequals'] = 'המספר אינו שווה ל ';
$labels['valueisgreaterthan'] = 'הערך גדול מ-';
$labels['valueisgreaterthanequal'] = 'הערך גדול או שווה ל-';
$labels['valueislessthan'] = 'הערך קטן מ-';
$labels['valueislessthanequal'] = 'הערך קטן או שווה ל-';
$labels['valueequals'] = 'הערך שווה ל-';
$labels['valuenotequals'] = 'הערך אינו שוה ל ';
$labels['setflags'] = 'סימון דגלים להודעה';
$labels['addflags'] = 'הוספת דגלים להודעה';
$labels['removeflags'] = 'הסרת דגלים מההודעה';
$labels['flagread'] = 'נקרא';
$labels['flagdeleted'] = 'נמחק';
$labels['flaganswered'] = 'נענה';
$labels['flagflagged'] = 'סומן בדגל';
$labels['flagdraft'] = 'טיוטה';
$labels['addheader'] = 'הוספת כותרת להודעה';
$labels['deleteheader'] = 'הסרת כותרת מההודעה';
$labels['headername'] = 'שם הכותרת';
$labels['headervalue'] = 'תוכן הכותרת';
$labels['headerpos'] = 'מיקום הכותרת';
$labels['headeratstart'] = 'בהתחלה';
$labels['headeratend'] = 'בסוף';
$labels['headeroccurrence'] = 'מופע הכותרת/מיקומה';
$labels['headerfromstart'] = 'מההתחלה';
$labels['headerfromend'] = 'מהסוף';
$labels['headerpatterns'] = 'תבנית תוכנה של הכותרת';
$labels['headermatchtype'] = 'סוג ההתאמה:';
$labels['setvariable'] = 'הגדרת משתנה';
$labels['setvarname'] = 'שם המשתנה:';
$labels['setvarvalue'] = 'ערך המשתנה:';
$labels['setvarmodifiers'] = 'גורם משנה:';
$labels['varlower'] = 'אותיות קטנות';
$labels['varupper'] = 'אותיות גדולות';
$labels['varlowerfirst'] = 'התו הראשון אות קטנה';
$labels['varupperfirst'] = 'התו הראשון אות גדולה';
$labels['varquotewildcard'] = 'תו מיוחד יש לשים בין מרכאות';
$labels['varlength'] = 'אורך';
$labels['notify'] = 'משלוח התראה';
$labels['notifytarget'] = 'יעד התראה:';
$labels['notifymessage'] = 'הודעת התראה (רשות):';
$labels['notifyoptions'] = 'אפשרויות התראה (רשות):';
$labels['notifyfrom'] = 'שולח התראה (רשות):';
$labels['notifyimportance'] = 'חשיובת:';
$labels['notifyimportancelow'] = 'נמוכה';
$labels['notifyimportancenormal'] = 'רגילה';
$labels['notifyimportancehigh'] = 'גבוהה';
$labels['notifymethodmailto'] = 'דוא״ל';
$labels['notifymethodtel'] = 'טלפון';
$labels['notifymethodsms'] = 'מסרון';
$labels['filtercreate'] = 'יצירת מסנן';
$labels['usedata'] = 'שימוש במידע שלהלן ליצירת המסנן:';
$labels['nextstep'] = 'הצעד הבא';
$labels['...'] = '...';
$labels['string'] = 'מחרוזת';
$labels['currdate'] = 'תאריך נוכחי';
$labels['datetest'] = 'תאריך';
$labels['dateheader'] = 'כותרת:';
$labels['year'] = 'שנה';
$labels['month'] = 'חודש';
$labels['day'] = 'יום';
$labels['date'] = 'תאריך (שנה-חודש-יום)';
$labels['julian'] = 'תאריך (יוליאני)';
$labels['hour'] = 'שעה';
$labels['minute'] = 'דקה';
$labels['second'] = 'שניה';
$labels['time'] = 'זמן (שעה:דקה:שניה)';
$labels['iso8601'] = 'תאריך (ISO8601)';
$labels['std11'] = 'תאריך (RFC2822)';
$labels['zone'] = 'איזור זמן';
$labels['weekday'] = 'יום בשבוע (0-6)';
$labels['advancedopts'] = 'אפשרויות מתקדמות';
$labels['body'] = 'גוף ההודעה';
$labels['address'] = 'כתובת';
$labels['envelope'] = 'מעטפה';
$labels['modifier'] = 'גורם שינוי:';
$labels['text'] = 'תמליל';
$labels['undecoded'] = 'לא מקודד ( גולמי )';
$labels['contenttype'] = 'סוג התוכן';
$labels['modtype'] = 'סוג:';
$labels['allparts'] = 'הכל';
$labels['domain'] = 'מתחם';
$labels['localpart'] = 'חלק מקומי';
$labels['user'] = 'משתמש';
$labels['detail'] = 'פרטים';
$labels['comparator'] = 'משווה:';
$labels['default'] = 'ברירת מחדל';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'אינדקס:';
$labels['indexlast'] = 'בחזרה';
$labels['spamtest'] = 'דרגת הספאם';
$labels['spamtestisgreaterthan'] = 'גדול מ-';
$labels['spamtestisgreaterthanequal'] = 'גדול או שווה ל-';
$labels['spamtestislessthan'] = 'קטן מ-';
$labels['spamtestislessthanequal'] = 'קטן או שווה ל-';
$labels['spamtestequals'] = 'שווה ל-';
$labels['spamtestnotequals'] = 'אינו שווה ל-';
$labels['spamtestisunknown'] = 'לא ידוע';
$labels['vacation'] = 'מחוץ למשרד';
$labels['vacation.reply'] = 'הודעת תשובה';
$labels['vacation.advanced'] = 'הגדרות מתקדמות';
$labels['vacation.from'] = 'כתובת שולח התשובה';
$labels['vacation.subject'] = 'נושא';
$labels['vacation.body'] = 'גוף ההודעה';
$labels['vacation.start'] = 'מועד התחלה';
$labels['vacation.end'] = 'מועד סיום';
$labels['vacation.status'] = 'מצב';
$labels['vacation.on'] = 'מופעל';
$labels['vacation.off'] = 'כבוי';
$labels['vacation.addresses'] = 'כתובות הדוא"ל שלי';
$labels['vacation.interval'] = 'מרווח בין תשובות';
$labels['vacation.after'] = 'הצגת הודעה בדבר היעדרות מהמשרד אחרי ';
$labels['vacation.saving'] = 'שמירת מידע...';
$labels['vacation.action'] = 'פעולה על הודעה נכנסת';
$labels['vacation.keep'] = 'להשאיר';
$labels['vacation.discard'] = 'להפטר';
$labels['vacation.redirect'] = 'הפניה אל';
$labels['vacation.copy'] = 'שליחת העתק אל';
$labels['forward'] = 'העברה';
$labels['forward.redirect'] = 'הפניה אל';
$labels['forward.copy'] = 'שליחת העתק אל';
$labels['forward.on'] = 'מופעל';
$labels['forward.off'] = 'כבוי';
$labels['forward.status'] = 'סטטוס';
$labels['forward.action'] = 'יש לבצע הפעולה הבאה על דואר נכנס:';
$labels['forward.saving'] = 'שמירת מידע...';
$labels['filladdresses'] = 'שימוש בכל כתובת הדוא"ל שלי';
$labels['arialabelfiltersetactions'] = 'פעולות על קבוצה של חוקי סינון';
$labels['arialabelfilteractions'] = 'פעולות מסנן';
$labels['arialabelfilterform'] = 'מאפייני מסנן';
$labels['ariasummaryfilterslist'] = 'רשימה של מסננים';
$labels['ariasummaryfiltersetslist'] = 'רשימת קבוצות של חוקי סינון';
$labels['filterstitle'] = 'ערוך מסנני דואר נכנס';
$labels['vacationtitle'] = 'ערוך כלל מחוץ-אל-משרדי';
$labels['forwardtitle'] = 'עריכה של כלל להעברה';
$labels['message'] = 'הודעה';
$labels['duplicate'] = 'מוכפל';
$labels['notduplicate'] = 'לא מוכפל';
$labels['duplicate.handle'] = 'כינוי';
$labels['duplicate.header'] = 'כותרת';
$labels['duplicate.uniqueid'] = 'מזהה';
$labels['duplicate.seconds'] = 'תם הזמן שהוקצה (שניות):';
$labels['duplicate.last'] = 'יחסית לזמן הביצוע האחרון';
$messages['filterunknownerror'] = 'שגיאת שרת בלתי מוכרת.';
$messages['filterconnerror'] = 'לא ניתן להתחבר לשרת.';
$messages['filterdeleteerror'] = 'לא ניתן למחוק סינון. שגיאת שרת.';
$messages['filterdeleted'] = 'המסנן נמחק בהצלחה.';
$messages['filtersaved'] = 'המסנן נשמר בהצלחה.';
$messages['filtersaveerror'] = 'לא ניתן לשמור סינון. שגיאת שרת.';
$messages['filterformerror'] = 'טופס הסינון מכיל שגיאות';
$messages['filterdeleteconfirm'] = 'האם אכן ברצונך למחוק את המסנן הנבחר?';
$messages['ruledeleteconfirm'] = 'האם אכן ברצונך למחוק את הכלל הנבחר?';
$messages['actiondeleteconfirm'] = 'האם אכן ברצונך למחוק את הפעולה הנבחרת?';
$messages['forbiddenchars'] = 'תווים אסורים בשדה.';
$messages['cannotbeempty'] = 'השדה לא יכול להישאר ריק.';
$messages['ruleexist'] = 'כבר קיים מסנן בשם כזה.';
$messages['setactivateerror'] = 'לא ניתן להפעיל את ערכת המסננים שנבחרה. אירעה שגיאה בצד השרת.';
$messages['setdeactivateerror'] = 'לא ניתן להשבית את ערכת המסננים שנבחרה. אירעה שגיאה בצד השרת.';
$messages['setdeleteerror'] = 'לא ניתן למחוק את ערכת המסננים הנבחרת. אירעה שגיאה בצד השרת.';
$messages['setactivated'] = 'ערכת המסננים הופעלה בהצלחה.';
$messages['setdeactivated'] = 'ערכת המסננים הושבתה בהצלחה.';
$messages['setdeleted'] = 'ערכת המסננים נמחקה בהצלחה.';
$messages['setupdated'] = 'ערכת המסננים עודכנה בהצלחה.';
$messages['setdeleteconfirm'] = 'האם אכן ברצונך למחוק את ערכת המסננים שנבחרה?';
$messages['setcreateerror'] = 'לא ניתן ליצור ערכת מסננים. אירעה שגיאה בצד השרת.';
$messages['setcreated'] = 'ערכת המסננים נוצרה בהצלחה.';
$messages['activateerror'] = 'לא ניתן להפעיל את המסננים הנבחרים. אירעה שגיאה בצד השרת.';
$messages['deactivateerror'] = 'לא ניתן לנטרל את המסננים הנבחרים. אירעה שגיאה בצד השרת.';
$messages['deactivated'] = 'המסננים הופעלו בהצלחה.';
$messages['activated'] = 'המסננים נוטרלו בהצלחה.';
$messages['moved'] = 'המסנן הועבר בהצלחה.';
$messages['moveerror'] = 'לא ניתן להעביר את המסנן הנבחר. אירעה שגיאה בצד השרת.';
$messages['nametoolong'] = 'השם ארוך מדי.';
$messages['namereserved'] = 'השם הזה שמור.';
$messages['setexist'] = 'הערכה כבר קיימת.';
$messages['nodata'] = 'חובה לבחור במיקום אחד לפחות!';
$messages['invaliddateformat'] = 'תאריך לא חוקי אן פורמט לא תקין';
$messages['saveerror'] = 'לא ניתן לשמור המידע בשל שגיאה של השרת';
$messages['vacationsaved'] = 'הגדרת המועד להפעלת ההודעה על היעדרות מהמשרד נשמרה';
$messages['forwardsaved'] = 'מידע להעברה נשמר בהצלחה';
$messages['emptyvacationbody'] = 'גוף של הודעת חופשה נדרש!';
$messages['duplicate.conflict.err'] = 'לא ניתן להוסיף כותרת עם מזהה יחודי';
$messages['disabledaction'] = 'פעולה אסורה';
$messages['lastindexempty'] = 'נחוץ מצביע כאשר סופרים מהסוף';
$messages['noflagset'] = 'יש לסמן לפחות דגל אחד';
PK{c�\�o�I I "managesieve/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Scagairí';
$labels['managefilters'] = 'Bainistigh na scagairí do theachtaireachtaí isteach';
$labels['filtername'] = 'Ainm an scagaire';
$labels['newfilter'] = 'Scagaire nua';
$labels['filteradd'] = 'Cuir scagaire leis';
$labels['filterdel'] = 'Scrios an scagaire';
$labels['rules'] = 'Rialacha';
$labels['actions'] = 'Gníomhartha';
$labels['scope'] = 'Raon feidhme';
$labels['moveup'] = 'Bog suas';
$labels['movedown'] = 'Bog síos';
$labels['filterany'] = 'gach teachtaireacht';
$labels['filtercontains'] = 'ina bhfuil';
$labels['filternotcontains'] = 'níl seo ann';
$labels['filteris'] = 'cothrom le';
$labels['filterisnot'] = 'níl sé cothrom le';
$labels['filterunder'] = 'faoi';
$labels['filterover'] = 'thar';
$labels['mime-message'] = 'teachtaireacht';
$labels['mime-anychild'] = 'ceann ar bith';
$labels['mime-type'] = 'cineál';
$labels['mime-subtype'] = 'fochineál';
$labels['mime-param'] = 'paraiméadar';
$labels['addrule'] = 'Cuir rial leis';
$labels['delrule'] = 'Scrios an rial';
$labels['messagemoveto'] = 'Bog teachtaireacht chuig';
$labels['messageredirect'] = 'Atreoraigh an teachtaireacht chuig';
$labels['messagecopyto'] = 'Macasamhlaigh an teachtaireacht chuig';
$labels['messagesendcopy'] = 'Seol macasamhail den teachtaireacht chuig';
$labels['messagereply'] = 'Freagair le teachtaireacht';
$labels['messagedelete'] = 'Scrios an teachtaireacht';
$labels['messagediscard'] = 'Cuileáil leis an teachtaireacht';
$labels['messagekeep'] = 'Coinnigh an teachtaireacht sa Bhosca Isteach';
$labels['messagesrules'] = 'I gcomhair teachtaireachtaí isteach:';
$labels['messagesactions'] = '...rith na gníomhartha seo a leanas:';
$labels['add'] = 'Cuir leis';
$labels['del'] = 'Scrios';
$labels['sender'] = 'Seoltóir';
$labels['recipient'] = 'Faighteoir';
$labels['vacationaddr'] = 'Mo sheoltaí ríomhphoist:';
$labels['vacationdays'] = 'Cé chomh minic ar chóir teachtaireachtaí a sheoladh (i laetheanta):';
$labels['vacationinterval'] = 'Cé chomh minic ar chóir teachtaireachtaí a sheoladh:';
$labels['vacationfrom'] = 'Seoladh fhreagair an tseoltóra:';
$labels['vacationsubject'] = 'Ábhar na teachtaireachta:';
$labels['days'] = 'lá';
$labels['seconds'] = 'soicind';
$labels['enable'] = 'Cumasaigh/Díchumasaigh';
$labels['filtersets'] = 'Tacair scagairí';
$labels['filterdef'] = 'Sainmhíniú an fhillteáin';
$labels['active'] = 'gníomhach';
$labels['none'] = 'dada';
$labels['fromset'] = 'ón tacair';
$labels['fromfile'] = 'ón gcomhad';
$labels['filterdisabled'] = 'Díchumasaíodh an scagaire';
$labels['valueisgreaterthan'] = 'tá an luach níos mó ná';
$labels['valueisgreaterthanequal'] = 'tá an luach níos mó ná nó cothrom le';
$labels['valueislessthan'] = 'tá an luach níos lú ná';
$labels['valueequals'] = 'tá an luach cothrom le';
$labels['removeflags'] = 'Bain bratacha ón teachtaireacht';
$labels['flagread'] = 'Léite';
$labels['flagdeleted'] = 'Scriosta';
$labels['flaganswered'] = 'Freagartha';
$labels['flagflagged'] = 'Bratach curtha leis';
$labels['flagdraft'] = 'Cum teachtaireacht';
$labels['headeratstart'] = 'ag an tús';
$labels['headeratend'] = 'ag an deireadh';
$labels['headerfromstart'] = 'ón tús';
$labels['headerfromend'] = 'ón deireadh';
$labels['setvariable'] = 'Socraigh athraitheach';
$labels['setvarmodifiers'] = 'Mionathraitheoirí:';
$labels['varlower'] = 'cás íochtar';
$labels['varupper'] = 'cás uachtar';
$labels['varlength'] = 'fad';
$labels['notify'] = 'Seol fógra';
$labels['notifytarget'] = 'Sprioc an fhógra:';
$labels['notifyimportance'] = 'Tábhacht:';
$labels['notifyimportancelow'] = 'íseal';
$labels['notifyimportancenormal'] = 'gnáth';
$labels['notifyimportancehigh'] = 'ard';
$labels['notifymethodmailto'] = 'Seoladh ríomhphoist';
$labels['notifymethodtel'] = 'Guthán';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Cruthaigh scagaire';
$labels['nextstep'] = 'An chéad chéim eile';
$labels['...'] = '...';
$labels['string'] = 'Teaghrán';
$labels['currdate'] = 'An dáta reatha';
$labels['datetest'] = 'Dáta';
$labels['dateheader'] = 'ceanntásc:';
$labels['year'] = 'bliain';
$labels['month'] = 'mí';
$labels['day'] = 'lá';
$labels['date'] = 'dáta (bbbb-mm-ll)';
$labels['julian'] = 'dáta (Iúil)';
$labels['hour'] = 'uair';
$labels['minute'] = 'nóiméad';
$labels['second'] = 'soicind';
$labels['time'] = 'am (uu:nn:ss)';
$labels['iso8601'] = 'dáta (ISO8601)';
$labels['std11'] = 'dáta (RFC2822)';
$labels['zone'] = 'crios ama';
$labels['weekday'] = 'lá oibre (0-6)';
$labels['advancedopts'] = 'Ardroghanna';
$labels['body'] = 'Corp';
$labels['address'] = 'seoladh';
$labels['envelope'] = 'clúdach litreach';
$labels['modifier'] = 'mionathraitheoir:';
$labels['text'] = 'téacs';
$labels['modtype'] = 'cineál:';
$labels['allparts'] = 'uile';
$labels['domain'] = 'fearann';
$labels['localpart'] = 'páirt logánta';
$labels['user'] = 'úsáideoir';
$labels['detail'] = 'mionsonra';
$labels['default'] = 'réamhshocrú';
$labels['index'] = 'Treorán:';
$labels['indexlast'] = 'siar';
$labels['spamtestequals'] = 'cothrom le';
$labels['spamtestnotequals'] = 'níl sé cothrom le';
$labels['vacation'] = 'As Oifig';
$labels['vacation.reply'] = 'Freagair an teachtaireacht';
$labels['vacation.advanced'] = 'Ardsocruithe';
$labels['vacation.subject'] = 'Ábhar';
$labels['vacation.body'] = 'Corp';
$labels['vacation.start'] = 'Am tosaigh';
$labels['vacation.end'] = 'Am le críochnú';
$labels['vacation.status'] = 'Treo';
$labels['vacation.on'] = 'Ar siúl';
$labels['vacation.off'] = 'As';
$labels['vacation.addresses'] = 'Mo sheoltaí ríomhphoist';
$labels['vacation.interval'] = 'Eatramh an fhreagra';
$labels['vacation.keep'] = 'Coinnigh';
$labels['vacation.discard'] = 'Cuileáil';
$labels['vacation.redirect'] = 'Atreoraigh chuig';
$labels['vacation.copy'] = 'Seol macasamhail chuig';
$labels['forward'] = 'Cur ar aghaidh';
$labels['forward.redirect'] = 'Atreoraigh chuig';
$labels['forward.copy'] = 'Seol macasamhail chuig';
$labels['forward.on'] = 'Ar siúl';
$labels['forward.off'] = 'As';
$labels['forward.status'] = 'Treo:';
$labels['filladdresses'] = 'Líon le mo sheoltaí uile';
$labels['arialabelfilteractions'] = 'Gníomhartha an scagaire';
$labels['arialabelfilterform'] = 'Airíonna an fhillteáin';
$labels['ariasummaryfilterslist'] = 'Liosta de na fillteáin';
$labels['message'] = 'Teachtaireacht';
$labels['duplicate.header'] = 'ceanntásc:';
$labels['duplicate.uniqueid'] = 'aitheantóir:';
$messages['filterdeleted'] = 'Scriosadh an fillteán go ráthúil.';
$messages['filterdeleteconfirm'] = 'An bhfuil tú cinnte gur mian leat an scagaire roghnaithe a scriosadh?';
$messages['ruledeleteconfirm'] = 'An bhfuil tú cinnte gur mian leat an riail roghnaithe sin a scriosadh?';
$messages['actiondeleteconfirm'] = 'An bhfuil tú cinnte gur mian leat an gníomh roghnaithe a scriosadh?';
$messages['forbiddenchars'] = 'Tá carachtair neamhcheadaithe sa réimse.';
$messages['cannotbeempty'] = 'Ní féidir leis an réimse bheith folamh.';
$messages['ruleexist'] = 'Tá an scagaire leis an ainm sonraithe ann cheana.';
$messages['moved'] = 'Bogadh an scagaire go ráthúil.';
$messages['nametoolong'] = 'Tá an t-ainm rófhada.';
$messages['namereserved'] = 'Ainm curtha in áirithe.';
$messages['setexist'] = 'Tá an tacair sin ann cheana.';
$messages['nodata'] = 'Caithfear ar a laghad suíomh amháin a roghnú!';
$messages['disabledaction'] = 'Ní cheadaítear an gníomh sin.';
PK{c�\��x�W+W+"managesieve/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtre';
$labels['managefilters'] = 'Administrer indgående mail filtrering';
$labels['filtername'] = 'Filter navn';
$labels['newfilter'] = 'Nyt filter';
$labels['filteradd'] = 'Tilføj filter';
$labels['filterdel'] = 'Slet filter';
$labels['rules'] = 'Regler';
$labels['actions'] = 'Handlinger';
$labels['scope'] = 'Omfang';
$labels['moveup'] = 'Flyt op';
$labels['movedown'] = 'Flyt ned';
$labels['filterallof'] = 'matcher alle af de følgende regler';
$labels['filteranyof'] = 'matcher en af følgende regler';
$labels['filterany'] = 'alle meddelelser';
$labels['filtercontains'] = 'indeholder';
$labels['filternotcontains'] = 'indeholder ikke';
$labels['filteris'] = 'er ens med';
$labels['filterisnot'] = 'er ikke ens med';
$labels['filterexists'] = 'findes';
$labels['filternotexists'] = 'ikke eksisterer';
$labels['filtermatches'] = 'matcher udtryk';
$labels['filternotmatches'] = 'matcher ikke udtryk';
$labels['filterregex'] = 'matcher regulært udtryk';
$labels['filternotregex'] = 'matcher ikke regulært udtryk';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME del:';
$labels['mime-message'] = 'besked';
$labels['mime-anychild'] = 'vilkårlig';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'undertype';
$labels['mime-contenttype'] = 'content-type';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Tilføj regel';
$labels['delrule'] = 'Slet regel';
$labels['messagemoveto'] = 'Flyt besked til';
$labels['messageredirect'] = 'Omdiriger mail til';
$labels['messagecopyto'] = 'Kopier besked til';
$labels['messagesendcopy'] = 'Send kopi af besked til';
$labels['messagereply'] = 'Svar med besked';
$labels['messagedelete'] = 'Slet besked';
$labels['messagediscard'] = 'Slet med besked';
$labels['messagekeep'] = 'Behold besked i Inbox';
$labels['messagesrules'] = 'For indgående mails:';
$labels['messagesactions'] = '...udfør følgende handlinger:';
$labels['add'] = 'Tilføje';
$labels['del'] = 'Fjern';
$labels['sender'] = 'Afsender';
$labels['recipient'] = 'Modtager';
$labels['vacationaddr'] = 'Min e-mail adresse:';
$labels['vacationdays'] = 'Hvor tit skal besked sendes (i dage):';
$labels['vacationinterval'] = 'Hvor tit skal besked sendes:';
$labels['vacationreason'] = 'Besked (ved ferie):';
$labels['vacationfrom'] = 'Svar afsender adresse:';
$labels['vacationsubject'] = 'Besked emne:';
$labels['days'] = 'dage';
$labels['seconds'] = 'sekunder';
$labels['rulestop'] = 'Stop behandling af regler';
$labels['enable'] = 'Aktivér/Deaktivér';
$labels['filterset'] = 'Filtersæt';
$labels['filtersets'] = 'Filtersæt';
$labels['filtersetadd'] = 'Tilføj filtersæt';
$labels['filtersetdel'] = 'Slet filtersæt';
$labels['filtersetact'] = 'Aktiver nuværende filtersæt';
$labels['filtersetdeact'] = 'Deaktiver nuværende filtersæt';
$labels['filterseteditraw'] = 'Rediger filtersæt';
$labels['filtersetswitch'] = 'Aktivér/Deaktivér filtersæt';
$labels['filterdef'] = 'Filter definition';
$labels['filtersetname'] = 'Filtersæt navn';
$labels['newfilterset'] = 'Nyt filtersæt';
$labels['active'] = 'aktiv';
$labels['none'] = 'ingen';
$labels['fromset'] = 'fra sæt';
$labels['fromfile'] = 'fra fil';
$labels['filterdisabled'] = 'Filter deaktiveret';
$labels['filterenabled'] = 'Filter aktiveret';
$labels['countisgreaterthan'] = 'antal er større end';
$labels['countisgreaterthanequal'] = 'antal er større end eller lig med';
$labels['countislessthan'] = 'antal er mindre end';
$labels['countislessthanequal'] = 'antal er mindre end eller lig med';
$labels['countequals'] = 'antal er lig med';
$labels['countnotequals'] = 'antal er ikke lig med';
$labels['valueisgreaterthan'] = 'værdi er større end';
$labels['valueisgreaterthanequal'] = 'værdi er større end eller lig med';
$labels['valueislessthan'] = 'værdi er mindre end';
$labels['valueislessthanequal'] = 'værdi er mindre end eller lig med';
$labels['valueequals'] = 'værdi er lig med';
$labels['valuenotequals'] = 'værdi er ikke lig med';
$labels['setflags'] = 'Sæt flag i beskeden';
$labels['addflags'] = 'Tilføj flag til beskeden';
$labels['removeflags'] = 'Fjern flag fra beskeden';
$labels['flagread'] = 'Læs';
$labels['flagdeleted'] = 'Slettede';
$labels['flaganswered'] = 'Besvaret';
$labels['flagflagged'] = 'Markeret';
$labels['flagdraft'] = 'Kladde';
$labels['addheader'] = 'Tilføj header til beskeden';
$labels['deleteheader'] = 'Fjern header fra beskeden';
$labels['headername'] = 'Headernavn';
$labels['headervalue'] = 'Headerværdi';
$labels['headerpos'] = 'Headerposition';
$labels['headeratstart'] = 'i begyndelsen';
$labels['headeratend'] = 'i slutningen';
$labels['headerfromstart'] = 'Fra start';
$labels['headerfromend'] = 'Fra slut';
$labels['setvariable'] = 'Skriv variablen';
$labels['setvarname'] = 'Variabel navn:';
$labels['setvarvalue'] = 'Variabel værdi:';
$labels['setvarmodifiers'] = 'Modifikator';
$labels['varlower'] = 'små bogstaver';
$labels['varupper'] = 'store bogstaver';
$labels['varlowerfirst'] = 'første bogstav lille';
$labels['varupperfirst'] = 'Første bogstav stort';
$labels['varquotewildcard'] = 'Sæt specialle tegn i citationstegn ';
$labels['varlength'] = 'længde';
$labels['notify'] = 'Send meddelelse';
$labels['notifytarget'] = 'Meddelelse mål:';
$labels['notifyimportance'] = 'Vigtighed:';
$labels['notifyimportancelow'] = 'lav';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'høj';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Opret filter';
$labels['usedata'] = 'Brug følgende data i filteret:';
$labels['nextstep'] = 'Næste trin';
$labels['...'] = '...';
$labels['string'] = 'Streng';
$labels['currdate'] = 'Aktuel dato';
$labels['datetest'] = 'Dato';
$labels['dateheader'] = 'header:';
$labels['year'] = 'år';
$labels['month'] = 'måned';
$labels['day'] = 'dag';
$labels['date'] = 'dato (åååå-mm-dd)';
$labels['julian'] = 'dato (juliansk)';
$labels['hour'] = 'time';
$labels['minute'] = 'minut';
$labels['second'] = 'sekund';
$labels['time'] = 'tid (tt:mm:ss)';
$labels['iso8601'] = 'dato (ISO8601)';
$labels['std11'] = 'dato (RFC2822)';
$labels['zone'] = 'tidszone';
$labels['weekday'] = 'ugedag (0-6)';
$labels['advancedopts'] = 'Avancerede muligheder';
$labels['body'] = 'Brødtekst';
$labels['address'] = 'adresse';
$labels['envelope'] = 'kuvert';
$labels['modifier'] = 'modificerer:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'udekodet (råt):';
$labels['contenttype'] = 'indholdstype';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'alle';
$labels['domain'] = 'domæne';
$labels['localpart'] = 'lokal del';
$labels['user'] = 'bruger';
$labels['detail'] = 'detalje';
$labels['comparator'] = 'sammenligner:';
$labels['default'] = 'standard';
$labels['octet'] = 'præcis (oktet)';
$labels['asciicasemap'] = 'store og små bogstaver (ascii-bogstaver)';
$labels['asciinumeric'] = 'numerisk (ascii-numerisk)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'baglends';
$labels['spamtest'] = 'Spam score ';
$labels['spamtestisgreaterthan'] = 'er større end';
$labels['spamtestisgreaterthanequal'] = 'er større end eller lig med';
$labels['spamtestislessthan'] = 'er mindre end';
$labels['spamtestislessthanequal'] = 'er mindre end eller lig med';
$labels['spamtestequals'] = 'er ens med';
$labels['spamtestnotequals'] = 'er ikke ens med';
$labels['spamtestisunknown'] = 'er ukendt';
$labels['vacation'] = 'Ikke tilstede';
$labels['vacation.reply'] = 'Svar besked';
$labels['vacation.advanced'] = 'Avancerede indstillinger ';
$labels['vacation.subject'] = 'Emne';
$labels['vacation.body'] = 'Body';
$labels['vacation.start'] = 'Start tid';
$labels['vacation.end'] = 'Slut tid';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Tænd';
$labels['vacation.off'] = 'Sluk';
$labels['vacation.addresses'] = 'Mine e-mail adresser';
$labels['vacation.saving'] = 'Gemmer data...';
$labels['vacation.keep'] = 'Behold';
$labels['vacation.discard'] = 'Kasser';
$labels['vacation.redirect'] = 'Omdiriger til ';
$labels['vacation.copy'] = 'Send kopi til';
$labels['forward.redirect'] = 'Omdiriger til ';
$labels['forward.copy'] = 'Send kopi til';
$labels['forward.on'] = 'Tænd';
$labels['forward.off'] = 'Sluk';
$labels['forward.status'] = 'Status:';
$labels['forward.saving'] = 'Gemmer data...';
$labels['ariasummaryfilterslist'] = 'Liste over filtre';
$labels['ariasummaryfiltersetslist'] = 'Liste over filtre indstillinger';
$labels['filterstitle'] = 'Rediger filter for indkommende mails';
$labels['vacationtitle'] = 'Rediger out-of-office regel';
$labels['message'] = 'Besked';
$labels['duplicate.header'] = 'header:';
$messages['filterunknownerror'] = 'Ukendt server fejl.';
$messages['filterconnerror'] = 'Kan ikke forbinde til server.';
$messages['filterdeleteerror'] = 'Kunne ikke slette filter. Serverfejl opstod.';
$messages['filterdeleted'] = 'Filter slettet.';
$messages['filtersaved'] = 'Filter gemt.';
$messages['filtersaveerror'] = 'Kunne ikke gemme filter. Serverfejl.';
$messages['filterdeleteconfirm'] = 'Vil du slette det valgte filter?';
$messages['ruledeleteconfirm'] = 'Er du sikker på at du vil slette den valgte regel?';
$messages['actiondeleteconfirm'] = 'Er du sikker på du vil slette den valgte handling?';
$messages['forbiddenchars'] = 'Ulovlige tegn i feltet';
$messages['cannotbeempty'] = 'Feltet kan ikke være tomt.';
$messages['ruleexist'] = 'Filter med dette navn eksisterer allerede.';
$messages['activateerror'] = 'Kan ikke aktivere valgt filter sæt. Server fejl.';
$messages['deactivateerror'] = 'Kan ikke deaktivere valgt filter sæt. Server fejl.';
$messages['deactivated'] = 'Filter(filtre) aktiveret.';
$messages['activated'] = 'Filter(filtre) deaktiveret.';
$messages['moved'] = 'Filter flyttet.';
$messages['moveerror'] = 'Kan ikke flytte valgt filter. Server fejl.';
$messages['nametoolong'] = 'Navn er for langt.';
$messages['namereserved'] = 'Reserveret navn.';
$messages['setexist'] = 'Filtersæt eksisterer allerede.';
$messages['nodata'] = 'Mindst en position skal vælges!';
$messages['invaliddateformat'] = 'Ugyldigt dato- eller tidsformat';
$messages['saveerror'] = 'Kunne ikke gemme data. Server fejl';
PK{c�\�Dw0w0"managesieve/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtri';
$labels['managefilters'] = 'Uredi filtre za dohodno pošto';
$labels['filtername'] = 'Ime filtra';
$labels['newfilter'] = 'Nov filter';
$labels['filteradd'] = 'Dodaj filter';
$labels['filterdel'] = 'Izbriši filter';
$labels['rules'] = 'Pravila';
$labels['actions'] = 'Možnosti';
$labels['scope'] = 'Obseg';
$labels['moveup'] = 'Pomakni se navzgor';
$labels['movedown'] = 'Pomakni se navzdol';
$labels['filterallof'] = 'izpolnjeni morajo biti vsi pogoji';
$labels['filteranyof'] = 'izpolnjen mora biti vsaj eden od navedenih pogojev';
$labels['filterany'] = 'pogoj velja za vsa sporočila';
$labels['filtercontains'] = 'vsebuje';
$labels['filternotcontains'] = 'ne vsebuje';
$labels['filteris'] = 'je enak/a';
$labels['filterisnot'] = 'ni enak/a';
$labels['filterexists'] = 'obstaja';
$labels['filternotexists'] = 'ne obstaja';
$labels['filtermatches'] = 'ustreza izrazu';
$labels['filternotmatches'] = 'ne ustreza izrazu';
$labels['filterregex'] = 'ustreza regularnemu izrazu';
$labels['filternotregex'] = 'ne ustreza regularnemu izrazu';
$labels['filterunder'] = 'pod';
$labels['filterover'] = 'nad';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Del MIME:';
$labels['mime-message'] = 'sporočilo';
$labels['mime-anychild'] = 'katerikoli';
$labels['mime-type'] = 'tip';
$labels['mime-subtype'] = 'podtip';
$labels['mime-contenttype'] = 'tip vsebine';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Dodaj pravilo';
$labels['delrule'] = 'Izbriši pravilo';
$labels['messagemoveto'] = 'Premakni sporočilo v';
$labels['messageredirect'] = 'Preusmeri sporočilo v';
$labels['messagecopyto'] = 'Kopiraj sporočila na';
$labels['messagesendcopy'] = 'Pošlji kopijo sporočila na';
$labels['messagereply'] = 'Odgovori s sporočilom';
$labels['messagedelete'] = 'Izbriši sporočilo';
$labels['messagediscard'] = 'Zavrži s sporočilom';
$labels['messagekeep'] = 'Ohrani sporočila v mapi Prejeto';
$labels['messagesrules'] = 'Določi pravila za dohodno pošto:';
$labels['messagesactions'] = '...izvrši naslednja dejanja:';
$labels['add'] = 'Dodaj';
$labels['del'] = 'Izbriši';
$labels['sender'] = 'Pošiljatelj';
$labels['recipient'] = 'Prejemnik';
$labels['vacationaddr'] = 'Moji elektronski naslovi:';
$labels['vacationdays'] = 'Kako pogosto naj bodo sporočila poslana (v dnevih):';
$labels['vacationinterval'] = 'Sporočila pošlji na:';
$labels['vacationreason'] = 'Vsebina sporočila (vzrok za odsotnost):';
$labels['vacationfrom'] = 'Naslov za odgovor:';
$labels['vacationsubject'] = 'Zadeva sporočila';
$labels['days'] = 'dni';
$labels['seconds'] = 'sekund';
$labels['rulestop'] = 'Prekini z izvajanjem pravil';
$labels['enable'] = 'Omogoči/Onemogoči';
$labels['filtersets'] = 'Nastavitve filtrov';
$labels['filterseteditraw'] = 'Uredi nabor filtrov';
$labels['filterdef'] = 'Opis filtra';
$labels['active'] = 'aktiven';
$labels['none'] = 'brez';
$labels['fromset'] = 'iz nastavitve';
$labels['fromfile'] = 'iz dokumenta';
$labels['filterdisabled'] = 'Filter onemogočen';
$labels['countisgreaterthan'] = 'seštevek je večji od';
$labels['countisgreaterthanequal'] = 'seštevek je večji ali enak';
$labels['countislessthan'] = 'seštevek je manjši od';
$labels['countislessthanequal'] = 'seštevel je manjši ali enak';
$labels['countequals'] = 'seštevek je enak';
$labels['countnotequals'] = 'vsota ne ustreza';
$labels['valueisgreaterthan'] = 'vrednost je večja od';
$labels['valueisgreaterthanequal'] = 'vrednost je večja ali enaka';
$labels['valueislessthan'] = 'vrednost je manjša od';
$labels['valueislessthanequal'] = 'vrednost je manjša ali enaka';
$labels['valueequals'] = 'vrednost je enaka';
$labels['valuenotequals'] = 'vrednost ni enaka';
$labels['setflags'] = 'Označi sporočilo';
$labels['addflags'] = 'Označi sporočilo';
$labels['removeflags'] = 'Odstrani zaznamke s sporočil';
$labels['flagread'] = 'Prebrano';
$labels['flagdeleted'] = 'Izbrisano';
$labels['flaganswered'] = 'Odgovorjeno';
$labels['flagflagged'] = 'Označeno';
$labels['flagdraft'] = 'Osnutek';
$labels['addheader'] = 'Dodaj glavo sporočilu';
$labels['deleteheader'] = 'Odstrani glavo iz sporočila';
$labels['headername'] = 'Ime glave sporočila';
$labels['headervalue'] = 'Vrednost glave sporočila';
$labels['headeratstart'] = 'na začetku';
$labels['headeratend'] = 'na koncu';
$labels['headerfromstart'] = 'od začetka';
$labels['headerfromend'] = 'od konca';
$labels['setvariable'] = 'Nastavi spremenljivko';
$labels['setvarname'] = 'Ime spremenljivke:';
$labels['setvarvalue'] = 'Vrednost spremenljivke:';
$labels['setvarmodifiers'] = 'Modifikator:';
$labels['varlower'] = 'majhne črke';
$labels['varupper'] = 'velike črke';
$labels['varlowerfirst'] = 'prvi znak velika začetnica';
$labels['varupperfirst'] = 'prvi znak velika začetnica';
$labels['varquotewildcard'] = 'citiraj posebne znake';
$labels['varlength'] = 'dolžina';
$labels['notify'] = 'Poštlji obvestilo';
$labels['notifytarget'] = 'Cilj obvestila:';
$labels['notifymessage'] = 'Besedilo obvestila (ni obvezno):';
$labels['notifyoptions'] = 'Možnosti obvestila (ni obvezno):';
$labels['notifyfrom'] = 'Pošiljatelj obvestila (ni obvezno):';
$labels['notifyimportance'] = 'Pomembnost:';
$labels['notifyimportancelow'] = 'nizko';
$labels['notifyimportancenormal'] = 'običajno';
$labels['notifyimportancehigh'] = 'visoko';
$labels['notifymethodmailto'] = 'E-Pošta';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Ustvari filter';
$labels['usedata'] = 'Pri stvarjanju filtra uporabi naslednje podatke';
$labels['nextstep'] = 'Naslednji korak';
$labels['...'] = '...';
$labels['string'] = 'Niz';
$labels['currdate'] = 'Današnji datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'glava:';
$labels['year'] = 'leto';
$labels['month'] = 'mesec';
$labels['day'] = 'dan';
$labels['date'] = 'datum(yyyy-mm-dd)';
$labels['julian'] = 'datum (julijanski)';
$labels['hour'] = 'ura';
$labels['minute'] = 'minuta';
$labels['second'] = 'sekunda';
$labels['time'] = 'čas';
$labels['iso8601'] = 'datum (ISO8601)';
$labels['std11'] = 'datum (RFC2822)';
$labels['zone'] = 'časovni pas';
$labels['weekday'] = 'dan v tednu (0-6)';
$labels['advancedopts'] = 'Dodatne možnosti';
$labels['body'] = 'Vsebina';
$labels['address'] = 'naslov';
$labels['envelope'] = 'ovojnica';
$labels['modifier'] = 'modifikator';
$labels['text'] = 'besedilo';
$labels['undecoded'] = 'neobdelano';
$labels['contenttype'] = 'tip vsebine';
$labels['modtype'] = 'tip';
$labels['allparts'] = 'vse';
$labels['domain'] = 'domena';
$labels['localpart'] = 'lokalni del';
$labels['user'] = 'uporabnik';
$labels['detail'] = 'podrobnosti';
$labels['comparator'] = 'primerjalnik';
$labels['default'] = 'privzeto';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'ni občutljiv na velike/male črke (ascii-casemap)';
$labels['asciinumeric'] = 'numerično (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'obraten vrstni red';
$labels['spamtestequals'] = 'je enak/a';
$labels['spamtestnotequals'] = 'ni enak/a';
$labels['vacation'] = 'Sporočilo o odsotnosti';
$labels['vacation.reply'] = 'Sporočilo za odgovor';
$labels['vacation.advanced'] = 'Napredne nastavitve';
$labels['vacation.from'] = 'Naslov za odgovor';
$labels['vacation.subject'] = 'Zadeva';
$labels['vacation.body'] = 'Vsebina';
$labels['vacation.start'] = 'Začetek';
$labels['vacation.end'] = 'Konec';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Vključeno';
$labels['vacation.off'] = 'Izključeno';
$labels['vacation.addresses'] = 'Moji elektronski naslovi';
$labels['vacation.interval'] = 'Interval za odgovor';
$labels['vacation.saving'] = 'Shranjevanje podatkov...';
$labels['vacation.action'] = 'Operacije za dohodna sporočila';
$labels['vacation.keep'] = 'Ohrani';
$labels['vacation.discard'] = 'Zavrži';
$labels['vacation.redirect'] = 'Preusmeri na';
$labels['vacation.copy'] = 'Pošlji kopijo na';
$labels['forward'] = 'Posredovanje';
$labels['forward.redirect'] = 'Preusmeri na';
$labels['forward.copy'] = 'Pošlji kopijo na';
$labels['forward.on'] = 'Vključeno';
$labels['forward.off'] = 'Izključeno';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Za dohodna sporočila izvrši naslednje operacije';
$labels['forward.saving'] = 'Shranjevanje podatkov...';
$labels['filladdresses'] = 'Dopolni z mojimi naslovi';
$labels['arialabelfiltersetactions'] = 'Nastavitve operacij filtrov';
$labels['arialabelfilteractions'] = 'Operacije filtrov';
$labels['arialabelfilterform'] = 'Lastnosti filtra';
$labels['ariasummaryfilterslist'] = 'Seznam filtrov';
$labels['ariasummaryfiltersetslist'] = 'Seznam filtrov';
$labels['filterstitle'] = 'Uredi filtre za dohodno pošto';
$labels['vacationtitle'] = 'Uredi sporočilo o odsotnosti';
$labels['forwardtitle'] = 'Uredi pravilo posredovanja pošte';
$labels['message'] = 'Sporočilo';
$labels['duplicate'] = 'je podvojen';
$labels['notduplicate'] = 'ni podvojen';
$labels['duplicate.handle'] = 'ukrep:';
$labels['duplicate.header'] = 'glava sporočila:';
$labels['duplicate.uniqueid'] = 'označevalnik:';
$labels['duplicate.seconds'] = 'časovna omejitev (sekunde):';
$labels['duplicate.last'] = 'relativno glede na zadnjo izvedbo';
$messages['filterunknownerror'] = 'Prišlo je do neznane napake.';
$messages['filterconnerror'] = 'Povezave s strežnikom (managesieve) ni bilo mogoče vzpostaviti';
$messages['filterdeleteerror'] = 'Pravila ni bilo mogoče izbrisati. Prišlo je do napake.';
$messages['filterdeleted'] = 'Pravilo je bilo uspešno izbrisano.';
$messages['filtersaved'] = 'Pravilo je bilo uspešno shranjeno';
$messages['filtersaveerror'] = 'Pravila ni bilo mogoče shraniti. Prišlo je do napake.';
$messages['filterformerror'] = 'Filter vsebuje napake.';
$messages['filterdeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano pravilo?';
$messages['ruledeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano pravilo?';
$messages['actiondeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano dejanje?';
$messages['forbiddenchars'] = 'V polju so neveljavni znaki';
$messages['cannotbeempty'] = 'Polje ne sme biti prazno';
$messages['ruleexist'] = 'Filer s tem imenom že obstaja';
$messages['activateerror'] = 'Izbranega/ih filtra/ov ni bilo mogoče vključiti. Prišlo je do napake na strežniku.';
$messages['deactivateerror'] = 'Izbranega/ih fitra/ov ni bilo mogoče izključiti. Prišlo je do napake na strežniku.';
$messages['deactivated'] = 'Filtri so bili uspešno omogočeni.';
$messages['activated'] = 'Filtri so bili uspešno onemogočeni.';
$messages['moved'] = 'Filter je bil uspešno premaknjen.';
$messages['moveerror'] = 'Izbranega filtra ni bilo mogoče premakniti. Prišlo je do napake na strežniku.';
$messages['nametoolong'] = 'Ime je predolgo.';
$messages['namereserved'] = 'Rezervirano ime.';
$messages['setexist'] = 'Nastavitev filtra že obstaja.';
$messages['nodata'] = 'Izbrana mora biti vsaj ena nastavitev!';
$messages['invaliddateformat'] = 'Neveljaven datum ali oblika zapisa datuma';
$messages['saveerror'] = 'Podatkov ni bilo mogoče shraniti. Prišlo je do napake na strežniku.';
$messages['vacationsaved'] = 'Sporočilo o odsotnosti je bilo uspešno shranjeno.';
$messages['forwardsaved'] = 'Posredovanje podatkov je bilo uspešno shranjeno.';
$messages['emptyvacationbody'] = 'Zahtevana je vsebina sporočila o odsotnosti';
$messages['duplicate.conflict.err'] = 'Tako glava sporočila kot enoličen označevalnik nista dovoljena.';
$messages['disabledaction'] = 'Operacija ni dovoljena.';
PK{c�\�/��//managesieve/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'عوامل التصفية';
$labels['filtername'] = 'إسم عامل التصفية';
$labels['newfilter'] = 'عامل تصفية جديد';
$labels['filteradd'] = 'إضافة عامل تصفية';
$labels['filterdel'] = 'حذف عامل تصفية';
$labels['rules'] = 'القواعد';
$labels['actions'] = 'الإجراءات';
$labels['scope'] = 'المجال';
$labels['moveup'] = 'النقل إلى أعلى';
$labels['movedown'] = 'النقل إلى أسفل';
$labels['filterany'] = 'كافة الرسائل';
$labels['filtercontains'] = 'يحتوي على';
$labels['filternotcontains'] = 'لا يحتوي على';
$labels['addrule'] = 'إضافة قاعدة';
$labels['delrule'] = 'حذف قاعدة';
$labels['messagemoveto'] = 'نقل الرسالة إلى';
$labels['messageredirect'] = 'تحويل الرسالة إلى';
$labels['messagecopyto'] = 'نسخ الرسالة إلى';
$labels['messagedelete'] = 'حذف الرسالة';
$labels['add'] = 'إضافة';
$labels['del'] = 'حذف';
$labels['sender'] = 'المُرسِل';
$labels['recipient'] = 'المتلقَّي';
$labels['vacationaddr'] = 'عناوين البريد الإلكترونية الخاصة بي :';
$labels['vacationsubject'] = 'موضوع الرسالة :';
$labels['days'] = 'أيام';
$labels['seconds'] = 'ثواني';
$labels['enable'] = 'تعطيل/تشغيل';
$labels['flagdeleted'] = 'محذوف';
$labels['flagflagged'] = 'موسوم';
$labels['varlength'] = 'الطول';
$labels['notifyimportance'] = 'الأهمية :';
$labels['notifymethodmailto'] = 'البريد الإلكتروني';
$labels['notifymethodtel'] = 'الهاتف';
$labels['notifymethodsms'] = 'رسالة نصية قصيرة';
$labels['nextstep'] = 'الخطوة التالية';
$labels['string'] = 'السلسلة';
$labels['currdate'] = 'التاريخ الحالي';
$labels['datetest'] = 'التاريخ';
$labels['year'] = 'سنة';
$labels['month'] = 'شهر';
$labels['day'] = 'يوم';
$labels['hour'] = 'ساعة';
$labels['minute'] = 'دقيقة';
$labels['second'] = 'ثانية';
$labels['time'] = 'الوقت (hh:mm:ss)';
$labels['iso8601'] = 'التاريخ (ISO8601)';
$labels['std11'] = 'التاريخ (RFC2822)';
$labels['advancedopts'] = 'خيارات متقدّمة';
$labels['body'] = 'هيكل الرسالة';
$labels['address'] = 'العنوان';
$labels['domain'] = 'النطاق';
$labels['detail'] = 'التفاصيل';
$labels['default'] = 'إفتراضي';
$labels['vacation.advanced'] = 'الإعدادات المتقدمة';
$labels['vacation.subject'] = 'الموضوع';
$labels['vacation.body'] = 'هيكل الرسالة';
$labels['vacation.saving'] = 'جارٍ حفظ البيانات...';
$labels['forward.status'] = 'الحالة:';
$labels['forward.saving'] = 'جارٍ حفظ البيانات...';
PK{c�\������"managesieve/localization/si_LK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'පෙරහණ';
$labels['moveup'] = 'ඉහළට ගෙනයන්න';
$labels['movedown'] = 'පහළට ගෙනයන්න';
$labels['filterany'] = 'සියලු පණිවිඩ';
$labels['filtercontains'] = 'අඩංගු';
$labels['messagedelete'] = 'පණිවිඩය මකන්න';
$labels['add'] = 'එක් කරන්න';
$labels['del'] = 'මකන්න';
$labels['sender'] = 'යවන්නා';
$labels['recipient'] = 'ලබන්නා';
$labels['vacationsubject'] = 'පණිවිඩයේ මාතෘකාව:';
$labels['enable'] = 'සක්‍රීය කරන්න/අක්‍රීය කරන්න';
$labels['active'] = 'සක්‍රීය';
$labels['none'] = 'කිසිවක් නැත';
$labels['flagread'] = 'කියවන්න';
$labels['flagdeleted'] = 'මකන ලදී';
$labels['flagdraft'] = 'කටු සටහන';
$labels['notifymethodmailto'] = 'විද්‍යුත් තැපෑල';
$labels['notifymethodtel'] = 'දුරකථනය';
$labels['nextstep'] = 'මීලග පියවර';
$labels['...'] = '...';
$labels['datetest'] = 'දිනය';
$labels['address'] = 'ලිපිනය';
$labels['envelope'] = 'ලියුම් කවරය';
$labels['modtype'] = 'වර්ගය:';
$labels['allparts'] = 'සියල්ල';
$labels['vacation.subject'] = 'මාතෘකාව';
$messages['nametoolong'] = 'නම දිග වැඩිය.';
PK{c�\N���5959"managesieve/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Filter für eingehende Nachrichten verwalten';
$labels['filtername'] = 'Filtername';
$labels['newfilter'] = 'Neuer Filter';
$labels['filteradd'] = 'Filter hinzufügen';
$labels['filterdel'] = 'Filter löschen';
$labels['rules'] = 'Regeln';
$labels['actions'] = 'Aktionen';
$labels['scope'] = 'Bereich';
$labels['moveup'] = 'Nach oben';
$labels['movedown'] = 'Nach unten';
$labels['filterallof'] = 'trifft auf alle folgenden Regeln zu';
$labels['filteranyof'] = 'trifft auf eine der folgenden Regeln zu';
$labels['filterany'] = 'alle Nachrichten';
$labels['filtercontains'] = 'enthält';
$labels['filternotcontains'] = 'enthält nicht';
$labels['filteris'] = 'ist gleich';
$labels['filterisnot'] = 'ist ungleich';
$labels['filterexists'] = 'existiert';
$labels['filternotexists'] = 'existiert nicht';
$labels['filtermatches'] = 'trifft auf Ausdruck zu';
$labels['filternotmatches'] = 'trifft nicht auf Ausdruck zu';
$labels['filterregex'] = 'trifft auf regulären Ausdruck zu';
$labels['filternotregex'] = 'trifft nicht auf regulären Ausdruck zu';
$labels['filterunder'] = 'unter';
$labels['filterover'] = 'über';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME-Teil:';
$labels['mime-message'] = 'Nachricht';
$labels['mime-anychild'] = 'weiteres';
$labels['mime-type'] = 'Typ';
$labels['mime-subtype'] = 'Untertyp';
$labels['mime-contenttype'] = 'Inhaltstyp';
$labels['mime-param'] = 'Parameter';
$labels['addrule'] = 'Regel hinzufügen';
$labels['delrule'] = 'Regel löschen';
$labels['messagemoveto'] = 'Nachricht verschieben nach';
$labels['messageredirect'] = 'Nachricht umleiten an';
$labels['messagecopyto'] = 'Nachricht kopieren nach';
$labels['messagesendcopy'] = 'Kopie senden an';
$labels['messagereply'] = 'Mit Nachricht antworten';
$labels['messagedelete'] = 'Nachricht löschen';
$labels['messagediscard'] = 'Abweisen mit Nachricht';
$labels['messagekeep'] = 'Behalte Nachricht im Posteingang';
$labels['messagesrules'] = 'Für eingehende Nachrichten:';
$labels['messagesactions'] = '...führe folgende Aktionen aus:';
$labels['add'] = 'Hinzufügen';
$labels['del'] = 'Löschen';
$labels['sender'] = 'Absender';
$labels['recipient'] = 'Empfänger';
$labels['vacationaddr'] = 'Meine E-Mail-Adressen:';
$labels['vacationdays'] = 'Wie oft sollen Nachrichten gesendet werden (in Tagen):';
$labels['vacationinterval'] = 'Wie oft sollen Nachrichten gesendet werden:';
$labels['vacationreason'] = 'Nachrichteninhalt (Abwesenheitsgrund):';
$labels['vacationfrom'] = 'Antwort E-Mail-Adresse:';
$labels['vacationsubject'] = 'Nachrichtenbetreff';
$labels['days'] = 'Tage';
$labels['seconds'] = 'Sekunden';
$labels['rulestop'] = 'Regelauswertung anhalten';
$labels['enable'] = 'Aktivieren/Deaktivieren';
$labels['filterset'] = 'Filtersatz';
$labels['filtersets'] = 'Filtersätze';
$labels['filtersetadd'] = 'Filtersatz anlegen';
$labels['filtersetdel'] = 'Filtersatz löschen';
$labels['filtersetact'] = 'Aktuellen Filtersatz aktivieren';
$labels['filtersetdeact'] = 'Aktuellen Filtersatz deaktivieren';
$labels['filterseteditraw'] = 'Filtersatz bearbeiten';
$labels['filtersetswitch'] = 'Filtersatz aktivieren/deaktivieren';
$labels['filterdef'] = 'Filterdefinition';
$labels['filtersetname'] = 'Filtersatzname';
$labels['newfilterset'] = 'Neuer Filtersatz';
$labels['active'] = 'aktiv';
$labels['none'] = 'keine';
$labels['fromset'] = 'aus Filtersatz';
$labels['fromfile'] = 'aus Datei';
$labels['filterdisabled'] = 'Filter deaktiviert';
$labels['filterenabled'] = 'Filter aktiviert';
$labels['countisgreaterthan'] = 'Anzahl ist größer als';
$labels['countisgreaterthanequal'] = 'Anzahl ist gleich oder größer als';
$labels['countislessthan'] = 'Anzahl ist kleiner als';
$labels['countislessthanequal'] = 'Anzahl ist gleich oder kleiner als';
$labels['countequals'] = 'Anzahl ist gleich';
$labels['countnotequals'] = 'Anzahl ist nicht gleich';
$labels['valueisgreaterthan'] = 'Wert ist größer als';
$labels['valueisgreaterthanequal'] = 'Wert ist gleich oder größer als';
$labels['valueislessthan'] = 'Wert ist kleiner';
$labels['valueislessthanequal'] = 'Wert ist gleich oder kleiner als';
$labels['valueequals'] = 'Wert ist gleich';
$labels['valuenotequals'] = 'Wert ist nicht gleich';
$labels['setflags'] = 'Markierung an der Nachricht setzen';
$labels['addflags'] = 'Markierung zur Nachricht hinzufügen';
$labels['removeflags'] = 'Markierungen von der Nachricht entfernen';
$labels['flagread'] = 'Gelesen';
$labels['flagdeleted'] = 'Gelöscht';
$labels['flaganswered'] = 'Beantwortet';
$labels['flagflagged'] = 'Markiert';
$labels['flagdraft'] = 'Entwurf';
$labels['addheader'] = 'Kopfzeile zur Nachricht hinzufügen';
$labels['deleteheader'] = 'Kopfzeile von Nachricht entfernen';
$labels['headername'] = 'Name der Kopfzeile';
$labels['headervalue'] = 'Wert der Kopfzeile';
$labels['headerpos'] = 'Position der Kopfzeile';
$labels['headeratstart'] = 'zu Beginn';
$labels['headeratend'] = 'am Ende';
$labels['headeroccurrence'] = 'Auftreten / Position der Kopfzeile';
$labels['headerfromstart'] = 'vom Start';
$labels['headerfromend'] = 'vom Ende';
$labels['headerpatterns'] = 'Vorlage des Kopfzeilen-Werts';
$labels['headermatchtype'] = 'passender Typ:';
$labels['setvariable'] = 'Variable setzen';
$labels['setvarname'] = 'Name der Variable:';
$labels['setvarvalue'] = 'Wert der Variable:';
$labels['setvarmodifiers'] = 'Modifikatoren:';
$labels['varlower'] = 'Kleinschreibung';
$labels['varupper'] = 'Großschreibung';
$labels['varlowerfirst'] = 'Erster Buchstabe kleingeschrieben';
$labels['varupperfirst'] = 'Erster Buchstabe großgeschrieben';
$labels['varquotewildcard'] = 'maskiere Sonderzeichen';
$labels['varlength'] = 'Länge';
$labels['notify'] = 'Sende Benachrichtigung';
$labels['notifytarget'] = 'Benachrichtigungs-Empfänger:';
$labels['notifymessage'] = 'Inhalt der Benachrichtigung (optional):';
$labels['notifyoptions'] = 'Optionen für die Benachrichtigung (optional)';
$labels['notifyfrom'] = 'Absender der Benachrichtigung (optional):';
$labels['notifyimportance'] = 'Priorität:';
$labels['notifyimportancelow'] = 'niedrig';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'hoch';
$labels['notifymethodmailto'] = 'E-Mail';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Filter erstellen';
$labels['usedata'] = 'Die folgenden Daten im Filter benutzen:';
$labels['nextstep'] = 'Nächster Schritt';
$labels['...'] = '...';
$labels['string'] = 'Zeichenkette';
$labels['currdate'] = 'Aktuelles Datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'Kopfzeile:';
$labels['year'] = 'jahr';
$labels['month'] = 'monat';
$labels['day'] = 'tag';
$labels['date'] = 'datum (yyyy-mm-dd)';
$labels['julian'] = 'datum (julian)';
$labels['hour'] = 'stunde';
$labels['minute'] = 'minute';
$labels['second'] = 'sekunde';
$labels['time'] = 'zeit (hh:mm:ss)';
$labels['iso8601'] = 'datum (ISO8601)';
$labels['std11'] = 'datum (RFC2822)';
$labels['zone'] = 'Zeitzone';
$labels['weekday'] = 'wochentag (0-6)';
$labels['advancedopts'] = 'Erweiterte Optionen';
$labels['body'] = 'Textkörper';
$labels['address'] = 'Adresse';
$labels['envelope'] = 'Umschlag';
$labels['modifier'] = 'Modifikator:';
$labels['text'] = 'Text';
$labels['undecoded'] = 'Nicht dekodiert';
$labels['contenttype'] = 'Inhaltstyp';
$labels['modtype'] = 'Typ:';
$labels['allparts'] = 'Alle';
$labels['domain'] = 'Domäne';
$labels['localpart'] = 'lokaler Teil';
$labels['user'] = 'Benutzer';
$labels['detail'] = 'Detail';
$labels['comparator'] = 'Komparator:';
$labels['default'] = 'Vorgabewert';
$labels['octet'] = 'strikt (Oktett)';
$labels['asciicasemap'] = 'Groß-/Kleinschreibung ignorieren';
$labels['asciinumeric'] = 'numerisch (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'rückwärts';
$labels['spamtest'] = 'Spam-Quote';
$labels['spamtestisgreaterthan'] = 'ist größer als';
$labels['spamtestisgreaterthanequal'] = 'ist größer oder gleich als';
$labels['spamtestislessthan'] = 'ist kleiner als';
$labels['spamtestislessthanequal'] = 'ist kleiner oder gleich als';
$labels['spamtestequals'] = 'ist gleich';
$labels['spamtestnotequals'] = 'ist ungleich';
$labels['spamtestisunknown'] = 'ist unbekannt';
$labels['vacation'] = 'Abwesenheit ';
$labels['vacation.reply'] = 'Antwort';
$labels['vacation.advanced'] = 'Erweiterte Einstellungen';
$labels['vacation.from'] = 'Antwort E-Mail-Adresse:';
$labels['vacation.subject'] = 'Betreff';
$labels['vacation.body'] = 'Nachricht';
$labels['vacation.start'] = 'Beginn der Abwesenheit';
$labels['vacation.end'] = 'Ende der Abwesenheit';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'An';
$labels['vacation.off'] = 'Aus';
$labels['vacation.addresses'] = 'Meine E-Mail-Adressen';
$labels['vacation.interval'] = 'Antwort Intervall';
$labels['vacation.after'] = 'Setze Filterregel nach';
$labels['vacation.saving'] = 'Speichere Daten...';
$labels['vacation.action'] = 'Aktion bei eingehende Nachrichten';
$labels['vacation.keep'] = 'Behalten';
$labels['vacation.discard'] = 'Verwerfen';
$labels['vacation.redirect'] = 'Weiterleiten an';
$labels['vacation.copy'] = 'Kopie senden an';
$labels['forward'] = 'Weiterleitung';
$labels['forward.redirect'] = 'Weiterleiten an';
$labels['forward.copy'] = 'Kopie senden an';
$labels['forward.on'] = 'An';
$labels['forward.off'] = 'Aus';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Für eingehende Mails die folgende Aktion ausführen:';
$labels['forward.saving'] = 'Speichere Daten...';
$labels['filladdresses'] = 'Mit allen meinen Adressen ausfüllen';
$labels['arialabelfiltersetactions'] = 'Aktionen für Filtersätze';
$labels['arialabelfilteractions'] = 'Aktionen für Filter';
$labels['arialabelfilterform'] = 'Filtereigenschaften';
$labels['ariasummaryfilterslist'] = 'Liste von Filtern';
$labels['ariasummaryfiltersetslist'] = 'Liste von Filtersätzen';
$labels['filterstitle'] = 'Eingehende Mailfilter bearbeiten';
$labels['vacationtitle'] = 'Abwesendheitsregel bearbeiten';
$labels['forwardtitle'] = 'Mail-Weiterleitungsregel bearbeiten';
$labels['message'] = 'Nachricht';
$labels['duplicate'] = 'ist doppelt';
$labels['notduplicate'] = 'ist nicht doppelt';
$labels['duplicate.handle'] = 'verarbeiten:';
$labels['duplicate.header'] = 'Kopfzeile:';
$labels['duplicate.uniqueid'] = 'Bezeichner:';
$labels['duplicate.seconds'] = 'Zeitüberschreitung (Sekunden):';
$labels['duplicate.last'] = 'relativ zur letzten Ausführung';
$messages['filterunknownerror'] = 'Unbekannter Serverfehler';
$messages['filterconnerror'] = 'Kann keine Verbindung mit Managesieve-Server herstellen';
$messages['filterdeleteerror'] = 'Filter kann nicht gelöscht werden. Ein Serverfehler ist aufgetreten.';
$messages['filterdeleted'] = 'Filter erfolgreich gelöscht';
$messages['filtersaved'] = 'Filter erfolgreich gespeichert';
$messages['filtersaveerror'] = 'Filter kann nicht gespeichert werden. Ein Serverfehler ist aufgetreten.';
$messages['filterformerror'] = 'Filterformular enthält Fehler.';
$messages['filterdeleteconfirm'] = 'Möchten Sie den ausgewählten Filter wirklich löschen?';
$messages['ruledeleteconfirm'] = 'Sind Sie sicher, dass Sie die ausgewählte Regel löschen möchten?';
$messages['actiondeleteconfirm'] = 'Sind Sie sicher, dass Sie die ausgewählte Aktion löschen möchten?';
$messages['forbiddenchars'] = 'Unzulässige Zeichen im Eingabefeld';
$messages['cannotbeempty'] = 'Eingabefeld darf nicht leer sein';
$messages['ruleexist'] = 'Ein Filter mit dem angegebenen Namen existiert bereits.';
$messages['setactivateerror'] = 'Kann ausgewählten Filtersatz nicht aktivieren. Serverfehler';
$messages['setdeactivateerror'] = 'Kann ausgewählten Filtersatz nicht deaktivieren. Serverfehler';
$messages['setdeleteerror'] = 'Kann ausgewählten Filtersatz nicht löschen. Serverfehler';
$messages['setactivated'] = 'Filtersatz erfolgreich aktiviert.';
$messages['setdeactivated'] = 'Filtersatz erfolgreich deaktiviert.';
$messages['setdeleted'] = 'Filtersatz erfolgreich gelöscht.';
$messages['setupdated'] = 'Filtersatz erfolgreich aktualisiert.';
$messages['setdeleteconfirm'] = 'Sind Sie sicher, dass Sie den ausgewählten Filtersatz löschen möchten?';
$messages['setcreateerror'] = 'Der Filtersatz kann nicht erstellt werden. Serverfehler aufgetreten.';
$messages['setcreated'] = 'Filtersatz erfolgreich erstellt.';
$messages['activateerror'] = 'Filter kann nicht aktiviert werden. Serverfehler.';
$messages['deactivateerror'] = 'Filter kann nicht deaktiviert werden. Serverfehler.';
$messages['deactivated'] = 'Filter erfolgreich deaktiviert.';
$messages['activated'] = 'Filter erfolgreich aktiviert.';
$messages['moved'] = 'Filter erfolgreich verschoben.';
$messages['moveerror'] = 'Filter kann nicht verschoben werden. Serverfehler.';
$messages['nametoolong'] = 'Kann Filtersatz nicht erstellen. Name zu lang';
$messages['namereserved'] = 'Reservierter Name.';
$messages['setexist'] = 'Filtersatz existiert bereits.';
$messages['nodata'] = 'Mindestens eine Position muss ausgewählt werden!';
$messages['invaliddateformat'] = 'Ungültiges Datum oder Teil-Format';
$messages['saveerror'] = 'Ein Serverfehler ist aufgetreten, Speicherung war nicht möglich.';
$messages['vacationsaved'] = 'Abwesenheitdaten erfolgreich gespeichert.';
$messages['forwardsaved'] = 'Weiterleitungsdaten erfolgreich gespeichert.';
$messages['emptyvacationbody'] = 'Inhalt der Abwesenheitsbenachrichtigung wird benötigt!';
$messages['duplicate.conflict.err'] = 'Beides, Kopfzeilen und eindeutige Kennzeichner, sind nicht erlaubt.';
$messages['disabledaction'] = 'Aktion nicht erlaubt.';
$messages['lastindexempty'] = 'Indexierung nötig, wenn vom Ende gezählt wird';
$messages['noflagset'] = 'Es muss mindestens ein Merker ausgewählt werden.';
PK{c�\���N�6�6"managesieve/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filter';
$labels['managefilters'] = 'Administrera filter';
$labels['filtername'] = 'Filternamn';
$labels['newfilter'] = 'Nytt filter';
$labels['filteradd'] = 'Nytt filter';
$labels['filterdel'] = 'Ta bort filter';
$labels['rules'] = 'Regler';
$labels['actions'] = 'Funktioner';
$labels['scope'] = 'Sökomfattning';
$labels['moveup'] = 'Flytta upp filter';
$labels['movedown'] = 'Flytta ner filter';
$labels['filterallof'] = 'Filtrera på alla följande regler';
$labels['filteranyof'] = 'Filtrera på någon av följande regler';
$labels['filterany'] = 'Filtrera alla meddelanden';
$labels['filtercontains'] = 'innehåller';
$labels['filternotcontains'] = 'inte innehåller';
$labels['filteris'] = 'är lika med';
$labels['filterisnot'] = 'är inte lika med';
$labels['filterexists'] = 'finns';
$labels['filternotexists'] = 'inte finns';
$labels['filtermatches'] = 'matchar uttryck';
$labels['filternotmatches'] = 'inte matchar uttryck';
$labels['filterregex'] = 'matchar reguljärt uttryck';
$labels['filternotregex'] = 'inte matchar reguljärt uttryck';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'över';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME-del:';
$labels['mime-message'] = 'meddelande';
$labels['mime-anychild'] = 'någon';
$labels['mime-type'] = 'typ';
$labels['mime-subtype'] = 'undertyp';
$labels['mime-contenttype'] = 'innehållstyp';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Lägg till regel';
$labels['delrule'] = 'Ta bort regel';
$labels['messagemoveto'] = 'Flytta meddelande till';
$labels['messageredirect'] = 'Ändra mottagare till';
$labels['messagecopyto'] = 'Kopiera meddelande till';
$labels['messagesendcopy'] = 'Skicka kopia av meddelande till';
$labels['messagereply'] = 'Besvara meddelande';
$labels['messagedelete'] = 'Ta bort meddelande';
$labels['messagediscard'] = 'Avböj med felmeddelande';
$labels['messagekeep'] = 'Behåll meddelande i Inkorg';
$labels['messagesrules'] = 'För inkommande meddelande';
$labels['messagesactions'] = 'Utför följande åtgärd';
$labels['add'] = 'Lägg till';
$labels['del'] = 'Ta bort';
$labels['sender'] = 'Avsändare';
$labels['recipient'] = 'Mottagare';
$labels['vacationaddr'] = 'Mina mottagaradresser:';
$labels['vacationdays'] = 'Antal dagar mellan auto-svar:';
$labels['vacationinterval'] = 'Tid mellan auto-svar:';
$labels['vacationreason'] = 'Meddelandetext (frånvaroanledning):';
$labels['vacationfrom'] = 'Svarsadress:';
$labels['vacationsubject'] = 'Meddelandeämne:';
$labels['days'] = 'Dagar';
$labels['seconds'] = 'Sekunder';
$labels['rulestop'] = 'Avsluta filtrering';
$labels['enable'] = 'Aktivera/inaktivera';
$labels['filterset'] = 'Filtergrupp';
$labels['filtersets'] = 'Filtergrupper';
$labels['filtersetadd'] = 'Ny filtergrupp';
$labels['filtersetdel'] = 'Ta bort filtergrupp';
$labels['filtersetact'] = 'Aktivera filtergrupp';
$labels['filtersetdeact'] = 'Inaktivera filtergrupp';
$labels['filterseteditraw'] = 'Ändra filtergrupp';
$labels['filtersetswitch'] = 'Aktivera/inaktivera filtergrupp';
$labels['filterdef'] = 'Filterdefinition';
$labels['filtersetname'] = 'Filtergruppsnamn';
$labels['newfilterset'] = 'Ny filtergrupp';
$labels['active'] = 'aktiv';
$labels['none'] = 'ingen';
$labels['fromset'] = 'från grupp';
$labels['fromfile'] = 'från fil';
$labels['filterdisabled'] = 'Filter inaktiverat';
$labels['filterenabled'] = 'Filter aktiverat';
$labels['countisgreaterthan'] = 'antal är större än';
$labels['countisgreaterthanequal'] = 'antal är större än eller lika med';
$labels['countislessthan'] = 'antal är mindre än';
$labels['countislessthanequal'] = 'antal är mindre än eller lika med';
$labels['countequals'] = 'antal är lika med';
$labels['countnotequals'] = 'antal är inte lika med';
$labels['valueisgreaterthan'] = 'värde är större än';
$labels['valueisgreaterthanequal'] = 'värde är större än eller lika med';
$labels['valueislessthan'] = 'värde är mindre än';
$labels['valueislessthanequal'] = 'värde är mindre än eller lika med';
$labels['valueequals'] = 'värde är lika med';
$labels['valuenotequals'] = 'värde är inte lika med';
$labels['setflags'] = 'Flagga meddelande';
$labels['addflags'] = 'Lägg till meddelandeflaggor';
$labels['removeflags'] = 'Ta bort meddelandeflaggor';
$labels['flagread'] = 'Läst';
$labels['flagdeleted'] = 'Borttaget';
$labels['flaganswered'] = 'Besvarat';
$labels['flagflagged'] = 'Flaggat';
$labels['flagdraft'] = 'Utkast';
$labels['addheader'] = 'Lägg till meddelandeinformation';
$labels['deleteheader'] = 'Ta bort meddelandeinformation';
$labels['headername'] = 'Meddelandeinformation namn';
$labels['headervalue'] = 'Meddelandeinformation värde';
$labels['headerpos'] = 'Meddelandeinformation position';
$labels['headeratstart'] = 'i början';
$labels['headeratend'] = 'i slutet';
$labels['headeroccurrence'] = ' Meddelandeinformation förekomst/position';
$labels['headerfromstart'] = 'från början';
$labels['headerfromend'] = 'från slutet';
$labels['headerpatterns'] = 'Meddelandeinformation sökmönster';
$labels['headermatchtype'] = 'resultattyp:';
$labels['setvariable'] = 'Sätt variabel';
$labels['setvarname'] = 'Variabelnamn:';
$labels['setvarvalue'] = 'Variabelvärde:';
$labels['setvarmodifiers'] = 'Modifierare:';
$labels['varlower'] = 'Gemener';
$labels['varupper'] = 'Versaler';
$labels['varlowerfirst'] = 'Första tecken gement';
$labels['varupperfirst'] = 'Första tecken versalt';
$labels['varquotewildcard'] = 'Koda specialtecken';
$labels['varlength'] = 'Längd';
$labels['notify'] = 'Skicka avisering';
$labels['notifytarget'] = 'Aviseringsmål:';
$labels['notifymessage'] = 'Aviseringsmeddelande (valfritt):';
$labels['notifyoptions'] = 'Aviseringstillval (valfritt):';
$labels['notifyfrom'] = 'Aviseringsavsändare (valfri):';
$labels['notifyimportance'] = 'Prioritet:';
$labels['notifyimportancelow'] = 'Låg';
$labels['notifyimportancenormal'] = 'Normal';
$labels['notifyimportancehigh'] = 'Hög';
$labels['notifymethodmailto'] = 'E-post';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Skapa filter';
$labels['usedata'] = 'Använd följande information i filtret:';
$labels['nextstep'] = 'Nästa steg';
$labels['...'] = '...';
$labels['string'] = 'Textsträng';
$labels['currdate'] = 'Dagens datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'huvud:';
$labels['year'] = 'år';
$labels['month'] = 'månad';
$labels['day'] = 'dag';
$labels['date'] = 'datum (åååå-mm-dd)';
$labels['julian'] = 'datum (Julianskt)';
$labels['hour'] = 'timme';
$labels['minute'] = 'minut';
$labels['second'] = 'sekund';
$labels['time'] = 'tid (hh:mm:ss)';
$labels['iso8601'] = 'datum (ISO 8601)';
$labels['std11'] = 'datum (RFC 2822)';
$labels['zone'] = 'tidszon';
$labels['weekday'] = 'veckodag (0-6)';
$labels['advancedopts'] = 'Avancerade inställningar';
$labels['body'] = 'Meddelandeinnehåll';
$labels['address'] = 'adress';
$labels['envelope'] = 'kuvert';
$labels['modifier'] = 'modifierare:';
$labels['text'] = 'text';
$labels['undecoded'] = 'obearbetat (rå)';
$labels['contenttype'] = 'innehållstyp';
$labels['modtype'] = 'typ:';
$labels['allparts'] = 'allt';
$labels['domain'] = 'domän';
$labels['localpart'] = 'lokal del';
$labels['user'] = 'användare';
$labels['detail'] = 'detalj';
$labels['comparator'] = 'jämförelse:';
$labels['default'] = 'standard';
$labels['octet'] = 'strikt (oktalt)';
$labels['asciicasemap'] = 'teckenlägesokänslig (ascii-casemap)';
$labels['asciinumeric'] = 'numerisk (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'omvänd';
$labels['spamtest'] = 'Skräppostnivå';
$labels['spamtestisgreaterthan'] = 'är större än';
$labels['spamtestisgreaterthanequal'] = 'är större än eller lika med';
$labels['spamtestislessthan'] = 'är mindre än';
$labels['spamtestislessthanequal'] = 'är mindre än eller lika med';
$labels['spamtestequals'] = 'är lika med';
$labels['spamtestnotequals'] = 'är inte lika med';
$labels['spamtestisunknown'] = 'är okänd';
$labels['vacation'] = 'Frånvaro';
$labels['vacation.reply'] = 'Besvara meddelande';
$labels['vacation.advanced'] = 'Avancerade inställningar';
$labels['vacation.from'] = 'Svarsadress';
$labels['vacation.subject'] = 'Ämne';
$labels['vacation.body'] = 'Innehåll';
$labels['vacation.start'] = 'Frånvaron börjar';
$labels['vacation.end'] = 'Frånvaron slutar';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'På';
$labels['vacation.off'] = 'Av';
$labels['vacation.addresses'] = 'Mina mottagaradresser';
$labels['vacation.interval'] = 'Svarsintervall';
$labels['vacation.after'] = 'Placera frånvaroregel efter';
$labels['vacation.saving'] = 'Sparar data...';
$labels['vacation.action'] = 'Hantering av inkommande meddelanden';
$labels['vacation.keep'] = 'Behåll';
$labels['vacation.discard'] = 'Förkasta';
$labels['vacation.redirect'] = 'Ändra mottagare till';
$labels['vacation.copy'] = 'Skicka kopia till';
$labels['forward'] = 'Skickar vidare';
$labels['forward.redirect'] = 'Ändra mottagare till';
$labels['forward.copy'] = 'Skicka kopia till';
$labels['forward.on'] = 'På';
$labels['forward.off'] = 'Av';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Utför följande åtgärd på inkommande meddelanden:';
$labels['forward.saving'] = 'Sparar data...';
$labels['filladdresses'] = 'Fyll i alla mina mottagaradresser';
$labels['arialabelfiltersetactions'] = 'Hantera filtergrupper';
$labels['arialabelfilteractions'] = 'Hantera filter';
$labels['arialabelfilterform'] = 'Filteregenskaper';
$labels['ariasummaryfilterslist'] = 'Lista med filter';
$labels['ariasummaryfiltersetslist'] = 'Lista med filtergrupper';
$labels['filterstitle'] = 'Ändra filter för inkommande meddelanden';
$labels['vacationtitle'] = 'Ändra regel för frånvaromeddelande';
$labels['forwardtitle'] = 'Ändra regel för skicka vidare meddelande';
$labels['message'] = 'Meddelande';
$labels['duplicate'] = 'är duplikat';
$labels['notduplicate'] = 'är inte duplikat';
$labels['duplicate.handle'] = 'hantera:';
$labels['duplicate.header'] = 'huvud:';
$labels['duplicate.uniqueid'] = 'identifikation:';
$labels['duplicate.seconds'] = 'vänta (sekunder):';
$labels['duplicate.last'] = 'i förhållande till senaste körningen';
$messages['filterunknownerror'] = 'Okänt serverfel';
$messages['filterconnerror'] = 'Anslutning till serverns filtertjänst misslyckades';
$messages['filterdeleteerror'] = 'Filtret kunde inte tas bort på grund av serverfel';
$messages['filterdeleted'] = 'Filtret är borttaget';
$messages['filtersaved'] = 'Filtret har sparats';
$messages['filtersaveerror'] = 'Filtret kunde inte sparas på grund av serverfel';
$messages['filterformerror'] = 'Filterformuläret innehåller fel.';
$messages['filterdeleteconfirm'] = 'Vill du ta bort det markerade filtret?';
$messages['ruledeleteconfirm'] = 'Vill du ta bort filterregeln?';
$messages['actiondeleteconfirm'] = 'Vill du ta bort filteråtgärden?';
$messages['forbiddenchars'] = 'Otillåtet tecken i fältet';
$messages['cannotbeempty'] = 'Fältet kan inte lämnas tomt';
$messages['ruleexist'] = 'Ett filter med angivet namn finns redan.';
$messages['setactivateerror'] = 'Filtergruppen kunde inte aktiveras på grund av serverfel.';
$messages['setdeactivateerror'] = 'Filtergruppen kunde inte deaktiveras på grund av serverfel.';
$messages['setdeleteerror'] = 'Filtergruppen kunde inte tas bort på grund av serverfel.';
$messages['setactivated'] = 'Filtergruppen är aktiverad.';
$messages['setdeactivated'] = 'Filtergruppen är inaktiverad.';
$messages['setdeleted'] = 'Filtergruppen är borttagen.';
$messages['setupdated'] = 'Filtergruppen är ändrad.';
$messages['setdeleteconfirm'] = 'Vill du ta bort filtergruppen?';
$messages['setcreateerror'] = 'Filtergruppen kunde inte läggas till på grund av serverfel.';
$messages['setcreated'] = 'Filtergruppen har lagts till.';
$messages['activateerror'] = 'Kunde inte aktivera filter på grund av serverfel.';
$messages['deactivateerror'] = 'Kunde inte inaktivera filter på grund av serverfel.';
$messages['deactivated'] = 'Filter inaktiverat.';
$messages['activated'] = 'Filter aktiverat.';
$messages['moved'] = 'Filter flyttat.';
$messages['moveerror'] = 'Kunde inte flytta filter på grund av serverfel.';
$messages['nametoolong'] = 'För långt namn.';
$messages['namereserved'] = 'Reserverat namn.';
$messages['setexist'] = 'Filtergrupp finns redan.';
$messages['nodata'] = 'Minst en position måste väljas!';
$messages['invaliddateformat'] = 'Ogiltigt datum eller del av datumformat';
$messages['saveerror'] = 'Datan kunde inte sparas på grund av serverfel.';
$messages['vacationsaved'] = 'Frånvarodatan har sparats.';
$messages['forwardsaved'] = 'Information för skicka vidare har sparats.';
$messages['emptyvacationbody'] = 'Text för frånvaromeddelande saknas!';
$messages['duplicate.conflict.err'] = 'Både huvud och unik identifikation är inte tillåtet.';
$messages['disabledaction'] = 'Otillåten åtgärd.';
$messages['lastindexempty'] = 'Index är nödvändigt för att räkna från slutet';
$messages['noflagset'] = 'Minst en flagga måste väljas.';
PK{c�\�r"�[I[Imanagesieve/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'سۈزگۈچلەر';
$labels['managefilters'] = 'كەلگەن خەت سۈزگۈچلىرىنى باشقۇرۇش';
$labels['filtername'] = 'سۈزگۈچ نامى';
$labels['newfilter'] = 'يېڭى سۈزگۈچ';
$labels['filteradd'] = 'سۈزگۈچ قېتىش';
$labels['filterdel'] = 'سۈزگۈچ ئۆچۈرۈش';
$labels['rules'] = 'قائىدىلەر';
$labels['actions'] = 'ھەركەتلەر';
$labels['scope'] = 'دائىرە';
$labels['moveup'] = 'ئۈستىگە يۆتكەش';
$labels['movedown'] = 'ئاستىغا يۆتكەش';
$labels['filterallof'] = 'تۆۋەندىكى ھەممە قائىدىلەرگە ماس كىلىدىغان';
$labels['filteranyof'] = 'تۆۋەندىكى قائىدىلەرنىڭ بىرىگە ماس كىلىدىغان';
$labels['filterany'] = 'بارلىق خەتلەر';
$labels['filtercontains'] = 'ئۆز-ئىچىگە ئېلىش';
$labels['filternotcontains'] = 'ئۆز-ئىچىگە ئالماسلىق';
$labels['filteris'] = 'تەڭ';
$labels['filterisnot'] = 'تەڭ ئەمەس';
$labels['filterexists'] = 'مەۋجۇت';
$labels['filternotexists'] = 'مەۋجۇت ئەمەس';
$labels['filtermatches'] = 'ئىپادىگە ماس كىلىدۇ';
$labels['filternotmatches'] = 'ئىپادىگە ماس كەلمەيدۇ';
$labels['filterregex'] = 'ئادەتتىكى ئىپادىگە ماس كىلىدۇ';
$labels['filternotregex'] = 'ئادەتتىكى ئىپادىگە ماس كەلمەيدۇ';
$labels['filterunder'] = 'ئاستىدا';
$labels['filterover'] = 'ئۈستىدە';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME قىسمى:';
$labels['mime-message'] = 'ئۇچۇر';
$labels['mime-anychild'] = 'ھەرقانداق';
$labels['mime-type'] = 'تۈر';
$labels['mime-subtype'] = 'بالا-تۈر';
$labels['mime-contenttype'] = 'مەزمۇن تۈرى';
$labels['mime-param'] = 'پارامىتىر';
$labels['addrule'] = 'قائىدە قۇشۇش';
$labels['delrule'] = 'قائىدە ئۆچۈرۈش';
$labels['messagemoveto'] = 'خەتنى يۆتكەش';
$labels['messageredirect'] = 'خەتنى يەتكۈزۈش';
$labels['messagecopyto'] = 'خەتنى كۆچۈرۈش';
$labels['messagesendcopy'] = 'خەت كۆچۈرمىسىنى ئەۋەتىش';
$labels['messagereply'] = 'خەت بىلەن جاۋاپ قايتۇرۇش';
$labels['messagedelete'] = 'خەتنى ئۆچۈرۈش';
$labels['messagediscard'] = 'خەت بىلەن تاشلىۋېتىش';
$labels['messagekeep'] = 'خەتنى كىلىش ساندۇقىدا ساقلاش';
$labels['messagesrules'] = 'كەلگەن خەت ئۈچۈن:';
$labels['messagesactions'] = '...تۆۋەندىكى ھەركەتلەرنى ئورۇنداش:';
$labels['add'] = 'قېتىش';
$labels['del'] = 'ئۆچۈرۈش';
$labels['sender'] = 'ئەۋەتكۈچى';
$labels['recipient'] = 'تاپشۇرۋالغۇچى';
$labels['vacationaddr'] = 'مېنىڭ ئېلىخەت ئادىرسلىرىم:';
$labels['vacationdays'] = 'قانچە  ئۇزۇندا (كۈندە) خەت يوللايسىز:';
$labels['vacationinterval'] = 'قانچە ئۇزۇندا خەت يوللايسىز:';
$labels['vacationreason'] = 'خەت مەزمۇنى (تەتىل سەۋەبى):';
$labels['vacationfrom'] = 'ئەۋەتكۈچى ئادىرسىغا جاۋاپ قايتۇرۇش:';
$labels['vacationsubject'] = 'خەت تېمىسى';
$labels['days'] = 'كۈنلەر';
$labels['seconds'] = 'سىكۇنتلار';
$labels['rulestop'] = 'تەكشۈرۈش قائىدىلىرىنى بىكار قىلىش';
$labels['enable'] = 'بار/يوق قىلىش';
$labels['filterset'] = 'سۈزگۈچ يۈرۈشى';
$labels['filtersets'] = 'سۈزگۈچ يۈرۈشلىرى';
$labels['filtersetadd'] = 'سۈزگۈچ يۈرۈشى قېتىش';
$labels['filtersetdel'] = 'سۈزگۈچ يۈرۈشىنى ئۆچۈرۈش';
$labels['filtersetact'] = 'نۆۋەتتىكى سۈزگۈچ يۈرۈشىنى قوزغىتىش';
$labels['filtersetdeact'] = 'نۆۋەتتىكى سۈزگۈچ يۈرۈشىنى توختىتىش';
$labels['filterseteditraw'] = 'سۈزگۈچ يۈرۈشىنى تەھرىرلەش';
$labels['filtersetswitch'] = 'سۈزگۈچ يۈرۈشىنى بار/يوق قىلىش';
$labels['filterdef'] = 'سۈزگۈچ بېكىتىش';
$labels['filtersetname'] = 'سۈزگۈچ يۈرۈشى نامى';
$labels['newfilterset'] = 'يېڭى سۈزگۈچ يۈرۈشى';
$labels['active'] = 'جانلىق';
$labels['none'] = 'يوق';
$labels['fromset'] = 'يۈرۈشتىن';
$labels['fromfile'] = 'ھۆججەتتىن';
$labels['filterdisabled'] = 'سۈزگۈچنى يوق بولدى';
$labels['filterenabled'] = 'سۈزگۈچ بار بولدى';
$labels['countisgreaterthan'] = 'سانىغۇچ بولسا چوڭ';
$labels['countisgreaterthanequal'] = 'سانىغۇچ چوڭ ياكى تەڭ';
$labels['countislessthan'] = 'سانىغۇچ كىچىك';
$labels['countislessthanequal'] = 'سانىغۇچ كىچىك ياكى تەڭ';
$labels['countequals'] = 'سانىغۇچ تەڭ';
$labels['countnotequals'] = 'سانىغۇچ تەڭ ئەمەس';
$labels['valueisgreaterthan'] = 'قىممەت چوڭ';
$labels['valueisgreaterthanequal'] = 'قىممەت چوڭ ياكى تەڭ';
$labels['valueislessthan'] = 'قىممەت كىچىك';
$labels['valueislessthanequal'] = 'قىممەت كىچىك ياكى تەڭ';
$labels['valueequals'] = 'قىممەت تەڭ';
$labels['valuenotequals'] = 'قىممەت تەڭ ئەمەس';
$labels['setflags'] = 'بۇ ئۇچۇرغا بايراق بەلگىلەش';
$labels['addflags'] = 'بۇ ئۇچۇرغا بايراق قېتىش';
$labels['removeflags'] = 'بۇ ئۇچۇردىن بايراقلارنى ئۆچۈرۈش';
$labels['flagread'] = 'ئۇقۇغان';
$labels['flagdeleted'] = 'ئۆچۈرۋەتكەن';
$labels['flaganswered'] = 'جاۋاپ قايتۇرغان';
$labels['flagflagged'] = 'بايراقلانغان';
$labels['flagdraft'] = 'قوليازما';
$labels['addheader'] = 'بۇ خەتكە باشلانما قۇشۇش';
$labels['deleteheader'] = 'بۇ خەتتىن باشلانمىنى ئۆچۈرۈش';
$labels['headername'] = 'باشلانما نامى';
$labels['headervalue'] = 'باشلانما قىممىتى';
$labels['headerpos'] = 'باشلانما ئورنى';
$labels['headeratstart'] = 'باشتا';
$labels['headeratend'] = 'ئاخىردا';
$labels['headeroccurrence'] = 'باشلانما كۆرسىتىش/ئورۇن';
$labels['headerfromstart'] = 'باشلىنىشتىن';
$labels['headerfromend'] = 'ئاخىردىن';
$labels['headerpatterns'] = 'باشلانما قىممەت ئۇسلۇبلىرى';
$labels['headermatchtype'] = 'ماسلىق تۈرى:';
$labels['setvariable'] = 'ئۆزگىرىشچان مىقدار بېكىتىش';
$labels['setvarname'] = 'ئۆزگىرىشچان مىقدار نامى:';
$labels['setvarvalue'] = 'ئۆزگىرىشچان مىقدار قىممىتى:';
$labels['setvarmodifiers'] = 'ئۆزگەرتكۈچ:';
$labels['varlower'] = 'كىچىك';
$labels['varupper'] = 'چوڭ';
$labels['varlowerfirst'] = 'تۇنجى ھەرىپ كىچىك';
$labels['varupperfirst'] = 'تۇنجى ھەرىپ چوڭ';
$labels['varquotewildcard'] = 'ئالاھىدە ھەرىپلەرنى نەقىللەش';
$labels['varlength'] = 'ئۇزۇنلۇق';
$labels['notify'] = 'ئۇقتۇرۇش ئەۋەتىش';
$labels['notifytarget'] = 'ئۇقتۇرۇش نىشانى:';
$labels['notifymessage'] = 'ئۇقتۇرۇش ئۇچۇرى (ئىختىيارى):';
$labels['notifyoptions'] = 'ئۇقتۇرۇش تاللانمىلىرى (ئىختىيارى):';
$labels['notifyfrom'] = 'ئۇقتۇرۇش ئەۋەتكۈچى (ئىختىيارى):';
$labels['notifyimportance'] = 'مۇھىملىقى:';
$labels['notifyimportancelow'] = 'تۆۋەت';
$labels['notifyimportancenormal'] = 'ئوتتۇراھال';
$labels['notifyimportancehigh'] = 'يۇقىرى';
$labels['notifymethodmailto'] = 'ئېلىخەت';
$labels['notifymethodtel'] = 'تېلىفۇن';
$labels['notifymethodsms'] = 'ئۇچۇر';
$labels['filtercreate'] = 'سۈزگۈچ قۇرۇش';
$labels['usedata'] = 'سۈزگۈچتە تۆۋەندىكى ئۇچۇرنى ئىشلىتىڭ:';
$labels['nextstep'] = 'كىيىنكى قەدەم';
$labels['...'] = '...';
$labels['string'] = 'تېكىست';
$labels['currdate'] = 'ھازىرقى چېسلا';
$labels['datetest'] = 'چېسلا';
$labels['dateheader'] = 'باشلانما:';
$labels['year'] = 'يىل';
$labels['month'] = 'ئاي';
$labels['day'] = 'كۈن';
$labels['date'] = 'چېسلا (يىل-ئاي-كۈن)';
$labels['julian'] = 'چېسلا (جۇلىئان)';
$labels['hour'] = 'سائەت';
$labels['minute'] = 'مىنۇت';
$labels['second'] = 'سېكۇنت';
$labels['time'] = 'ۋاقىت (سائەت:مىنۇت:سېكۇنت)';
$labels['iso8601'] = 'چېسلا (ISO8601)';
$labels['std11'] = 'چېسلا (RFC2822)';
$labels['zone'] = 'ۋاقىت رايۇنى';
$labels['weekday'] = 'ھەپتە كۈنلىرى(0-6)';
$labels['advancedopts'] = 'ئالاھىدە تاللانمىلار';
$labels['body'] = 'مەزمۇن';
$labels['address'] = 'ئادىرىس';
$labels['envelope'] = 'كونۋېرت';
$labels['modifier'] = 'ئۆزگەرتكۈچ:';
$labels['text'] = 'تېكىست';
$labels['undecoded'] = 'شىفىرسىزلانمىغان (خام)';
$labels['contenttype'] = 'مەزمۇن تۈرى';
$labels['modtype'] = 'تۈر:';
$labels['allparts'] = 'ھەممە';
$labels['domain'] = 'دائىرە';
$labels['localpart'] = 'يەرلىك قىسىم';
$labels['user'] = 'ئىشلەتكۈچى';
$labels['detail'] = 'تەپسىلات';
$labels['comparator'] = 'سېلىشتۇرما:';
$labels['default'] = 'سۈكۈت';
$labels['octet'] = 'قەتئىي (سەككىرلىك)';
$labels['asciicasemap'] = 'چوڭ-كىچىكلىكى پەرىقسىز (ascii خەرىتىسى)';
$labels['asciinumeric'] = 'سان (ascii-سانلىق)';
$labels['index'] = 'ئىندىكىس:';
$labels['indexlast'] = 'ئارقىغا';
$labels['spamtest'] = 'ئالدامچىلىق دەرىجىسى';
$labels['spamtestisgreaterthan'] = 'چوڭ';
$labels['spamtestisgreaterthanequal'] = 'چوڭ ياكى تەڭ';
$labels['spamtestislessthan'] = 'كىچىك';
$labels['spamtestislessthanequal'] = 'كىچىك ياكى تەڭ';
$labels['spamtestequals'] = 'تەڭ';
$labels['spamtestnotequals'] = 'تەڭ ئەمەس';
$labels['spamtestisunknown'] = 'نامەلۇم';
$labels['vacation'] = 'ئىشخانىنىڭ سىرتىدا';
$labels['vacation.reply'] = 'خەتكە جاۋاپ يېزىش';
$labels['vacation.advanced'] = 'ئالىي تەڭشەكلەر';
$labels['vacation.from'] = 'ئەۋەتكۈچى ئادىرسىغا جاۋاپ قايتۇرۇش';
$labels['vacation.subject'] = 'تېما';
$labels['vacation.body'] = 'مەزمۇن';
$labels['vacation.start'] = 'باشلاش ۋاقتى';
$labels['vacation.end'] = 'ئاخىرلىشىش ۋاقتى';
$labels['vacation.status'] = 'ھالەت';
$labels['vacation.on'] = 'بار';
$labels['vacation.off'] = 'يوق';
$labels['vacation.addresses'] = 'مېنىڭ ئېلىخەت ئادىرسىم';
$labels['vacation.interval'] = 'جاۋاپ قايتۇرۇش ئارلىقى';
$labels['vacation.after'] = 'ئارقىدىن ئىشخانا-سىرتىدا قائىدىسىنى قۇيۇش';
$labels['vacation.saving'] = 'ئۇچۇرنى ساقلاۋاتىدۇ...';
$labels['vacation.action'] = 'كەلگەن خەت ھەركىتى';
$labels['vacation.keep'] = 'ساقلاش';
$labels['vacation.discard'] = 'تاشلاش';
$labels['vacation.redirect'] = 'يەتكۈزۈش';
$labels['vacation.copy'] = 'بىر نۇسخىسىنى ئەۋەتىش';
$labels['forward'] = 'يەتكۈزۈش';
$labels['forward.redirect'] = 'يەتكۈزۈش';
$labels['forward.copy'] = 'بىر نۇسخىسىنى ئەۋەتىش';
$labels['forward.on'] = 'بار';
$labels['forward.off'] = 'يوق';
$labels['forward.status'] = 'ھالەت:';
$labels['forward.action'] = 'كەلگەن خەتلەرگە تۆۋەندىكى ھەركەتنى ئورۇنداڭ:';
$labels['forward.saving'] = 'ئۇچۇرنى ساقلاۋاتىدۇ...';
$labels['filladdresses'] = 'مېنىڭ بارلىق ئادىرسلىرىم بىلەن تولدۇرۇڭ';
$labels['arialabelfiltersetactions'] = 'سۈزگۈچ يۈرۈشى ھەركىتى';
$labels['arialabelfilteractions'] = 'سۈزگۈچ ھەركەتلىرى';
$labels['arialabelfilterform'] = 'سۈزگۈچ خاسلىقى';
$labels['ariasummaryfilterslist'] = 'سۈزگۈچلەرنى تىزىش';
$labels['ariasummaryfiltersetslist'] = 'سۈزگۈچ يۈرۈشى تىزىملىكى';
$labels['filterstitle'] = 'كەلگەن خەت سۈزگۈچلىرىنى تەھرىرلەش';
$labels['vacationtitle'] = 'ئىشخانا-سىرتىدا قائىدىسىنى تەھرىرلەش';
$labels['forwardtitle'] = 'خەت يەتكۈزۈش قائىدىسىنى تەھرىرلەش';
$labels['message'] = 'ئۇچۇر';
$labels['duplicate'] = 'تەكرارلانغان';
$labels['notduplicate'] = 'تەكرارلانمىغان';
$labels['duplicate.handle'] = 'بىر-تەرەپ قىلىش:';
$labels['duplicate.header'] = 'باشلانما:';
$labels['duplicate.uniqueid'] = 'بەلگە:';
$labels['duplicate.seconds'] = 'قالغان ۋاقىت(سىكۇنتلار):';
$labels['duplicate.last'] = 'ئاخىرقى ئىجراغا نىسپىي';
$messages['filterunknownerror'] = 'نامەلۇم مۇلازىمېتىر خاتالىقى.';
$messages['filterconnerror'] = 'مۇلازىمېتىرغا ئۇلىغىلى بولمىدى.';
$messages['filterdeleteerror'] = 'سۈزگۈچنى ئۆچۈرگىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['filterdeleted'] = 'سۈزگۈچ مۇۋاپىقىيەتلىك ئۆچۈرۈلدى.';
$messages['filtersaved'] = 'سۈزگۈچ مۇۋاپىقىيەتلىك ساقلاندى.';
$messages['filtersaveerror'] = 'سۈزگۈچنى ساقلىغىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['filterformerror'] = 'سۈزگۈچ جەدىۋېلىدە خاتالىق بار.';
$messages['filterdeleteconfirm'] = 'سىز تاللانغان سۈزگۈچنى راستىنلا ئۆچۈرەمسىز؟';
$messages['ruledeleteconfirm'] = 'سىز تاللانغان قائىدىنى راستىنلا ئۆچۈرەمسىز؟';
$messages['actiondeleteconfirm'] = 'سىز تاللانغان ھەركەتنى راستىنلا ئۆچۈرەمسىز؟';
$messages['forbiddenchars'] = 'ئارلىقتا مەنئىي قىلىنغان بەلگىلەر بار.';
$messages['cannotbeempty'] = 'بۇ ئورۇن بوش قالسا بولمايدۇ.';
$messages['ruleexist'] = 'بۇ ئىسىمدىكى سۈزگۈچ مەۋجۇت.';
$messages['setactivateerror'] = 'تاللانغان سۈزگۈچ يۈرۈشىنى قوزغاتقىلى بولمىدى. مۇلازىمىتىر خاتالىقى كۆرۈلدى.';
$messages['setdeactivateerror'] = 'تاللانغان سۈزگۈچ يۈرۈشىنى توختاتقىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['setdeleteerror'] = 'تاللانغان سۈزگۈچ يۈرۈشىنى ئۆچۈرگىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['setactivated'] = 'سۈزگۈچ يۈرۈشى مۇۋاپىقىيەتلىك قوزغىتىلدى.';
$messages['setdeactivated'] = 'سۈزگۈچ يۈرۈشى مۇۋاپىقىيەتلىك توختىتىلدى.';
$messages['setdeleted'] = 'سۈزگۈچ يۈرۈشى مۇۋاپىقىيەتلىك ئۆچۈرۈلدى.';
$messages['setupdated'] = 'سۈزگۈچ يۈرۈشى مۇۋاپىقىيەتلىك يېڭىلاندى.';
$messages['setdeleteconfirm'] = 'سىز تاللانغان سۈزگۈچ يۈرۈشىنى ئۆچۈرۈشنى جەزىملەشتۈرەمسىز؟';
$messages['setcreateerror'] = 'سۈزگۈچ يۈرۈشىنى قۇرۇشقا بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['setcreated'] = 'سۈزگۈچ يۈرۈشى مۇۋاپىقىيەتلىك قۇرۇلدى.';
$messages['activateerror'] = 'تاللانغان سۈزگۈچ(لەر)نى قوزغاتقىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['deactivateerror'] = 'تاللانغان سۈزگۈچ(لەر)نى توختاتقىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['deactivated'] = 'سۈزگۈچ(لەر) مۇۋاپىقىيەتلىك توختىدى.';
$messages['activated'] = 'سۈزگۈچ(لەر) مۇۋاپىقىيەتلىك قوزغالدى.';
$messages['moved'] = 'سۈزگۈچ مۇۋاپىقىيەتلىك يۆتكەلدى.';
$messages['moveerror'] = 'تاللانغان سۈزگۈچنى يۆتكىگىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['nametoolong'] = 'ئىسىم بەك ئۇزۇن.';
$messages['namereserved'] = 'ئالاھىدە ھوقوقلۇق ئىسىم.';
$messages['setexist'] = 'يۈرۈش ئاللىبۇرۇن مەۋجۇت.';
$messages['nodata'] = 'ئەڭ كەمدە بىر ئورۇن تاللىنىشى كېرەك!';
$messages['invaliddateformat'] = 'ئىناۋەتسىز چېسلا ياكى چېسلا شەكلى';
$messages['saveerror'] = 'ئۇچۇرنى ساقلىغىلى بولمىدى. مۇلازىمېتىر خاتالىقى كۆرۈلدى.';
$messages['vacationsaved'] = 'ئىشخانا-سىرتىدا ئۇچۇرى مۇۋاپىقىيەتلىك ساقلاندى.';
$messages['forwardsaved'] = 'يەتكۈزۈش ئۇچۇرى مۇۋاپىقىيەتلىك ساقلاندى.';
$messages['emptyvacationbody'] = 'تەتىل خېتىنىڭ مەزمۇنى تەلەپ قىلىندى!';
$messages['duplicate.conflict.err'] = 'باشلانما ھەمدە ئۆزگىچە بەلگىنىڭ ھەر ئىككىلىسىگە يول قۇيۇلمايدۇ.';
$messages['disabledaction'] = 'ھەركەتكە يول قۇيۇلمايدۇ.';
$messages['lastindexempty'] = 'ئاخىردىن سانىغاندا ئىندىكىس تەلەپ قىلىنىدۇ';
$messages['noflagset'] = 'ئەڭ كەمدە بىر بايراق تاللىنىشى كېرەك.';
PK{c�\�'"�;�;"managesieve/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = '필터';
$labels['managefilters'] = '수신 메일 필터 관리';
$labels['filtername'] = '필터 이름';
$labels['newfilter'] = '새 필터';
$labels['filteradd'] = '필터 추가';
$labels['filterdel'] = '필터 삭제';
$labels['rules'] = '규칙';
$labels['actions'] = '동작';
$labels['scope'] = '범위';
$labels['moveup'] = '위로 이동';
$labels['movedown'] = '아래로 이동';
$labels['filterallof'] = '다음 규칙과 모두 일치함';
$labels['filteranyof'] = '다음 규칙 중 하나라도 일치함';
$labels['filterany'] = '모든 메시지';
$labels['filtercontains'] = '다음을 포함함';
$labels['filternotcontains'] = '다음을 포함하지 않음';
$labels['filteris'] = '다음과 일치함';
$labels['filterisnot'] = '다음과 일치하지 않음';
$labels['filterexists'] = '다음이 존재함';
$labels['filternotexists'] = '다음이 존재하지 않음';
$labels['filtermatches'] = '다음 표현식과 일치함';
$labels['filternotmatches'] = '다음 표현식과 일치하지 않음';
$labels['filterregex'] = '다음 정규 표현식과 일치함';
$labels['filternotregex'] = '다음 정규 표현식과 일치하지 않음';
$labels['filterunder'] = '다음보다 아래임';
$labels['filterover'] = '다음보다 위임';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME 일부:';
$labels['mime-message'] = '메시지';
$labels['mime-anychild'] = '모두';
$labels['mime-type'] = '유형';
$labels['mime-subtype'] = '하위 유형';
$labels['mime-contenttype'] = '내용 유형';
$labels['mime-param'] = '매개변수';
$labels['addrule'] = '규칙 추가';
$labels['delrule'] = '규칙 삭제';
$labels['messagemoveto'] = '메시지를 다음 위치로 이동';
$labels['messageredirect'] = '메시지를 다음 주소로 재전송';
$labels['messagecopyto'] = '메시지를 다음 위치로 복사';
$labels['messagesendcopy'] = '메시지 사본을 다음 대상에게 보내기';
$labels['messagereply'] = '다음 메시지로 회신';
$labels['messagedelete'] = '메시지 삭제';
$labels['messagediscard'] = '다음 메시지와 함께 폐기';
$labels['messagekeep'] = '메시지를 받은 편지함에 보관';
$labels['messagesrules'] = '해당 받은 메일:';
$labels['messagesactions'] = '...다음 동작을 실행:';
$labels['add'] = '추가';
$labels['del'] = '삭제';
$labels['sender'] = '발송자';
$labels['recipient'] = '수신자';
$labels['vacationaddr'] = '내 이메일 주소:';
$labels['vacationdays'] = '메시지 발신 주기 (일):';
$labels['vacationinterval'] = '메시지 발신 주기:';
$labels['vacationreason'] = '메시지 본문 (휴가 사유):';
$labels['vacationfrom'] = '회신 시 보내는 사람 주소:';
$labels['vacationsubject'] = '메시지 제목:';
$labels['days'] = '일';
$labels['seconds'] = '초';
$labels['rulestop'] = '규칙 평가를 중단';
$labels['enable'] = '활성화/비활성화';
$labels['filterset'] = '필터 세트';
$labels['filtersets'] = '필터 세트';
$labels['filtersetadd'] = '필터 세트 추가';
$labels['filtersetdel'] = '필터 세트 삭제';
$labels['filtersetact'] = '현재 필터 세트 활성화';
$labels['filtersetdeact'] = '현재 필터 세트 비활성화';
$labels['filterseteditraw'] = '필터 세트 편집';
$labels['filtersetswitch'] = '필터 세트 활성화/비활성화';
$labels['filterdef'] = '필터 정의';
$labels['filtersetname'] = '필터 세트 이름';
$labels['newfilterset'] = '새 필터 세트';
$labels['active'] = '활성화됨';
$labels['none'] = '없음';
$labels['fromset'] = '세트로부터';
$labels['fromfile'] = '파일로부터';
$labels['filterdisabled'] = '필터가 비활성화됨';
$labels['filterenabled'] = '필터 활성화됨';
$labels['countisgreaterthan'] = '개수가 다음보다 큼';
$labels['countisgreaterthanequal'] = '개수가 다음보다 크거나 같음';
$labels['countislessthan'] = '개수가 다음보다 작음';
$labels['countislessthanequal'] = '개수가 작거나 같음';
$labels['countequals'] = '개수가 다음과 같음';
$labels['countnotequals'] = '개수가 다음과 일치하지 않음';
$labels['valueisgreaterthan'] = '값이 다음보다 큼';
$labels['valueisgreaterthanequal'] = '값이 다음보다 크거나 같음';
$labels['valueislessthan'] = '값이 다음보다 작음';
$labels['valueislessthanequal'] = '값이 다음보다 작거나 같음';
$labels['valueequals'] = '값이 다음과 같음';
$labels['valuenotequals'] = '값이 다음과 일치하지 않음';
$labels['setflags'] = '메시지를 깃발로 표시';
$labels['addflags'] = '메시지에 깃발을 추가';
$labels['removeflags'] = '메시지에서 깃발을 제거';
$labels['flagread'] = '읽음';
$labels['flagdeleted'] = '삭제됨';
$labels['flaganswered'] = '응답함';
$labels['flagflagged'] = '깃발로 표시함';
$labels['flagdraft'] = '임시 보관함';
$labels['addheader'] = '메시지에 머리글 추가';
$labels['deleteheader'] = '메시지에서 머리글 제거';
$labels['headername'] = '머리글 이름';
$labels['headervalue'] = '머리글 값';
$labels['headerpos'] = '머리글 위치';
$labels['headeratstart'] = '시작 지점에';
$labels['headeratend'] = '끝 지점에';
$labels['headeroccurrence'] = '머리글 존재/위치';
$labels['headerfromstart'] = '시작부터';
$labels['headerfromend'] = '끝부터';
$labels['headerpatterns'] = '머리글 값 패턴';
$labels['headermatchtype'] = '일치 유형:';
$labels['setvariable'] = '변수 설정';
$labels['setvarname'] = '변수명:';
$labels['setvarvalue'] = '변수 값:';
$labels['setvarmodifiers'] = '수식자:';
$labels['varlower'] = '소문자';
$labels['varupper'] = '대문자';
$labels['varlowerfirst'] = '첫 문자를 소문자로';
$labels['varupperfirst'] = '첫 문자를 대문자로';
$labels['varquotewildcard'] = '특수 기호를 인용';
$labels['varlength'] = '길이';
$labels['notify'] = '알림 메시지 보내기';
$labels['notifytarget'] = '알림 대상:';
$labels['notifymessage'] = '알림 메시지(옵션):';
$labels['notifyoptions'] = '알림 옵션(옵션):';
$labels['notifyfrom'] = '알림 발송자(옵션):';
$labels['notifyimportance'] = '중요도:';
$labels['notifyimportancelow'] = '낮음';
$labels['notifyimportancenormal'] = '보통';
$labels['notifyimportancehigh'] = '높음';
$labels['notifymethodmailto'] = '이메일';
$labels['notifymethodtel'] = '전화';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = '필터 생성';
$labels['usedata'] = '필터에서 다음 데이터를 사용:';
$labels['nextstep'] = '다음 단계';
$labels['...'] = '...';
$labels['string'] = '스티링';
$labels['currdate'] = '오늘 날짜';
$labels['datetest'] = '날짜';
$labels['dateheader'] = '머리글:';
$labels['year'] = '년';
$labels['month'] = '월';
$labels['day'] = '일';
$labels['date'] = '날짜 (yyyy-mm-dd)';
$labels['julian'] = '날짜 (율리우스력)';
$labels['hour'] = '시';
$labels['minute'] = '분';
$labels['second'] = '초';
$labels['time'] = '시간 (hh:mm:ss)';
$labels['iso8601'] = '날짜 (ISO8601)';
$labels['std11'] = '날짜 (RFC2822)';
$labels['zone'] = '시간대';
$labels['weekday'] = '주중 (0-6)';
$labels['advancedopts'] = '고급 설정';
$labels['body'] = '본문';
$labels['address'] = '주소';
$labels['envelope'] = '봉투';
$labels['modifier'] = '수식자:';
$labels['text'] = '텍스트';
$labels['undecoded'] = '암호화되지 않음(원상태)';
$labels['contenttype'] = '내용 유형';
$labels['modtype'] = '유형:';
$labels['allparts'] = '모두';
$labels['domain'] = '도메인';
$labels['localpart'] = '로컬 부분';
$labels['user'] = '사용자';
$labels['detail'] = '세부사항';
$labels['comparator'] = '비교기:';
$labels['default'] = '기본';
$labels['octet'] = '엄격 (8진수)';
$labels['asciicasemap'] = '대/소문자 구분 (ascii-casemap)';
$labels['asciinumeric'] = '숫자 (ascii-numeric)';
$labels['index'] = '색인:';
$labels['indexlast'] = '역방향';
$labels['spamtest'] = '스팸 수준';
$labels['spamtestisgreaterthan'] = '다음보다 큼';
$labels['spamtestisgreaterthanequal'] = '다음보다 크거나 같음';
$labels['spamtestislessthan'] = '다음보다 작음';
$labels['spamtestislessthanequal'] = '다음보다 작거나 같음';
$labels['spamtestequals'] = '다음과 일치함';
$labels['spamtestnotequals'] = '다음과 일치하지 않음';
$labels['spamtestisunknown'] = '알 수 없음';
$labels['vacation'] = '자리비움';
$labels['vacation.reply'] = '메시지 회신';
$labels['vacation.advanced'] = '고급 설정';
$labels['vacation.from'] = '회신 시 보내는 사람 주소';
$labels['vacation.subject'] = '제목';
$labels['vacation.body'] = '본문';
$labels['vacation.start'] = '시작 시간';
$labels['vacation.end'] = '종료 시간';
$labels['vacation.status'] = '상태';
$labels['vacation.on'] = '켬';
$labels['vacation.off'] = '끔';
$labels['vacation.addresses'] = '내 이메일 주소';
$labels['vacation.interval'] = '회신 주기';
$labels['vacation.after'] = '다음 이후에 자리비움 규칙 두기';
$labels['vacation.saving'] = '데이터를 저장하는 중...';
$labels['vacation.action'] = '수신 메시지 동작';
$labels['vacation.keep'] = '보관';
$labels['vacation.discard'] = '폐기';
$labels['vacation.redirect'] = '재전송';
$labels['vacation.copy'] = '사본을 다음 대상에게 전송';
$labels['forward'] = '전달';
$labels['forward.redirect'] = '재전송';
$labels['forward.copy'] = '사본을 다음 대상에게 전송';
$labels['forward.on'] = '켬';
$labels['forward.off'] = '끔';
$labels['forward.status'] = '상태:';
$labels['forward.action'] = '받은 메일에 대해 다음 동작을 실행:';
$labels['forward.saving'] = '데이터를 저장하는 중...';
$labels['filladdresses'] = '내 이메일 주소로 모두 채우기';
$labels['arialabelfiltersetactions'] = '필터 세트 동작';
$labels['arialabelfilteractions'] = '필터 동작';
$labels['arialabelfilterform'] = '필터 속성';
$labels['ariasummaryfilterslist'] = '필터 목록';
$labels['ariasummaryfiltersetslist'] = '필터 세트 목록';
$labels['filterstitle'] = '수신 메일 필터 편집';
$labels['vacationtitle'] = '자리비움 규칙 편집';
$labels['forwardtitle'] = '메일 전달 규칙 편집';
$labels['message'] = '메시지';
$labels['duplicate'] = '중복임';
$labels['notduplicate'] = '중복 아님';
$labels['duplicate.handle'] = '취급';
$labels['duplicate.header'] = '머리글:';
$labels['duplicate.uniqueid'] = '식별자:';
$labels['duplicate.seconds'] = '타임아웃 (초):';
$labels['duplicate.last'] = '마지막 실행과 관련';
$messages['filterunknownerror'] = '알수 없는 서버 오류.';
$messages['filterconnerror'] = '서버에 연결할 수 없습니다.';
$messages['filterdeleteerror'] = '필터를 삭제할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['filterdeleted'] = '필터가 성공적으로 삭제되었습니다.';
$messages['filtersaved'] = '필터가 성공적으로 저장되었습니다.';
$messages['filtersaveerror'] = '필터를 저장할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['filterformerror'] = '필터 양식에 오류가 포함되어 있음.';
$messages['filterdeleteconfirm'] = '정말로 선택한 필터를 삭제하시겠습니까?';
$messages['ruledeleteconfirm'] = '정말로 선택한 규칙을 삭제하시겠습니까?';
$messages['actiondeleteconfirm'] = '정말로 선택한 동작을 삭제하시겠습니까?';
$messages['forbiddenchars'] = '필드에 금지된 문자가 존재합니다.';
$messages['cannotbeempty'] = '필드는 비어둘 수 없습니다.';
$messages['ruleexist'] = '지정한 이름의 필터가 이미 존재합니다.';
$messages['setactivateerror'] = '선택한 필터 세트를 활성화할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['setdeactivateerror'] = '선택한 필터 세트를 비활성화할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['setdeleteerror'] = '선택한 필터 세트를 삭제할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['setactivated'] = '필터 세트가 성공적으로 활성화되었습니다.';
$messages['setdeactivated'] = '필터 세트가 성공적으로 비활성화되었습니다.';
$messages['setdeleted'] = '필터 세트가 성공적으로 삭제되었습니다.';
$messages['setupdated'] = '필터 세트가 성공적으로 업데이트되었습니다.';
$messages['setdeleteconfirm'] = '정말 선택한 필터 세트를 삭제하시겠습니까?';
$messages['setcreateerror'] = '필터 세트를 생성하지 못했습니다. 서버 오류가 발생했습니다.';
$messages['setcreated'] = '필터 세트를 성공적으로 생성했습니다.';
$messages['activateerror'] = '선택한 필터를 활성화할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['deactivateerror'] = '선택한 필터를 비활성화할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['deactivated'] = '필터가 성공적으로 비활성화되었습니다.';
$messages['activated'] = '필터가 성공적으로 활성화되었습니다.';
$messages['moved'] = '필터가 성공적으로 이동되었습니다.';
$messages['moveerror'] = '선택한 필터를 이동할 수 없습니다. 서버 오류가 발생했습니다.';
$messages['nametoolong'] = '이름이 너무 깁니다.';
$messages['namereserved'] = '예약된 이름입니다.';
$messages['setexist'] = '세트가 이미 존재합니다.';
$messages['nodata'] = '최소 하나의 위치가 선택되어야 합니다!';
$messages['invaliddateformat'] = '유효하지 않은 날짜 또는 날짜 일부 형식';
$messages['saveerror'] = '데이터를 저장할 수 없습니다.. 서버 오류가 발생했습니다.';
$messages['vacationsaved'] = '자리비움 데이터를 성공적으로 저장했습니다.';
$messages['forwardsaved'] = '전달 데이터를 성공적으로 저장했습니다.';
$messages['emptyvacationbody'] = '휴가 메시지의 본문이 필요합니다!';
$messages['duplicate.conflict.err'] = '머리글 및 유일 식별자가 허용되지 않음.';
$messages['disabledaction'] = '동작이 허용되지 않았습니다.';
$messages['lastindexempty'] = '끝에서부터 세려면 인덱스 숫자가 필요합니다';
$messages['noflagset'] = '최소 하나의 깃발이 선택되어야 합니다.';
PK{c�\��15%5%"managesieve/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Xestionar os filtros de correo entrante';
$labels['filtername'] = 'Nome do filtro';
$labels['newfilter'] = 'Novo filtro';
$labels['filteradd'] = 'Engadir filtro';
$labels['filterdel'] = 'Eliminar filtro';
$labels['scope'] = 'Alcance';
$labels['moveup'] = 'Mover arriba';
$labels['movedown'] = 'Mover abaixo';
$labels['filterallof'] = 'coincidir con todas as regras seguintes';
$labels['filteranyof'] = 'coincidir con algunha das regras seguintes';
$labels['filterany'] = 'todas as mensaxes';
$labels['filtercontains'] = 'contén';
$labels['filternotcontains'] = 'non contén';
$labels['filteris'] = 'é igual a';
$labels['filterisnot'] = 'non é igual a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'non existe';
$labels['filtermatches'] = 'casa coa expresión';
$labels['filternotmatches'] = 'non casa coa expresión';
$labels['filterregex'] = 'casa coa expresión regular';
$labels['filternotregex'] = 'non casa coa expresión regular';
$labels['filterunder'] = 'baixo';
$labels['filterover'] = 'sobre';
$labels['addrule'] = 'Engadir regra';
$labels['delrule'] = 'Eliminar regra';
$labels['messagemoveto'] = 'Mover a mensaxe a';
$labels['messageredirect'] = 'Redirixir a mensaxe a';
$labels['messagecopyto'] = 'Copiar a mensaxe a';
$labels['messagesendcopy'] = 'Enviar copia da mensaxe a';
$labels['messagereply'] = 'Respostar con unha mensaxe';
$labels['messagedelete'] = 'Eliminar a mensaxe';
$labels['messagediscard'] = 'Descartar con unha mensaxe';
$labels['messagekeep'] = 'Manter mensaxe na caixa de entrada';
$labels['messagesrules'] = 'Para o correo entrante:';
$labels['messagesactions'] = '... executar as seguintes accións:';
$labels['add'] = 'Engadir';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remite';
$labels['recipient'] = 'Persoa destinataria';
$labels['vacationdays'] = 'Cada canto enviar mensaxes (en días):';
$labels['vacationinterval'] = 'Con que frecuencia se van enviar mensaxes:';
$labels['vacationreason'] = 'Corpo da mensaxe (por vacacións):';
$labels['vacationsubject'] = 'Asunto da mensaxe:';
$labels['days'] = 'días';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de avaliar regras';
$labels['enable'] = 'Activar/Desactivar';
$labels['filtersets'] = 'Conxunto de filtros';
$labels['filterdef'] = 'Definición de filtros';
$labels['active'] = 'activo';
$labels['none'] = 'ningún';
$labels['fromset'] = 'de conxunto';
$labels['fromfile'] = 'de arquivo';
$labels['filterdisabled'] = 'Filtro desactivado';
$labels['countisgreaterthan'] = 'a conta é maior que';
$labels['countisgreaterthanequal'] = 'a conta é maior ou igual a';
$labels['countislessthan'] = 'a conta é menor que';
$labels['countislessthanequal'] = 'a conta é menor ou igual a';
$labels['countequals'] = 'a conta é igual a';
$labels['countnotequals'] = 'a conta non é igual a';
$labels['valueisgreaterthan'] = 'o valor é meirande que ';
$labels['valueisgreaterthanequal'] = 'o valor é maior ou igual a';
$labels['valueislessthan'] = 'o valor é menor que';
$labels['valueislessthanequal'] = 'o valor é menor ou igual a';
$labels['valueequals'] = 'o valor é igual a';
$labels['valuenotequals'] = 'o valor non é igual a';
$labels['setflags'] = 'Marcar a mensaxe';
$labels['addflags'] = 'Engadir marcas á mensaxe';
$labels['removeflags'] = 'Desmarcar as mensaxes';
$labels['flagread'] = 'Lidas';
$labels['flagdeleted'] = 'Eliminadas';
$labels['flaganswered'] = 'Respostadas';
$labels['flagflagged'] = 'Marcadas';
$labels['flagdraft'] = 'Borrador';
$labels['setvariable'] = 'Estabelecer variábel';
$labels['setvarname'] = 'Nome da variábel:';
$labels['setvarvalue'] = 'Valor da variábel:';
$labels['setvarmodifiers'] = 'Modificadores:';
$labels['varlower'] = 'minúscula';
$labels['varupper'] = 'maiúscula';
$labels['varlowerfirst'] = 'primeira letra minúscula';
$labels['varupperfirst'] = 'primeira letra maiúscula';
$labels['varquotewildcard'] = 'poñer entre aspas caracteres especiais';
$labels['varlength'] = 'lonxitude';
$labels['notify'] = 'Enviar notificación';
$labels['notifyimportance'] = 'Importancia:';
$labels['notifyimportancelow'] = 'baixa';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Correo electrónico';
$labels['notifymethodtel'] = 'Teléfono';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar os seguintes datos no filtro:';
$labels['nextstep'] = 'Seguinte paso';
$labels['...'] = '...';
$labels['currdate'] = 'Data actual';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'cabeceira:';
$labels['year'] = 'ano';
$labels['month'] = 'mes';
$labels['day'] = 'día';
$labels['date'] = 'data (aaaa-mm-dd)';
$labels['julian'] = 'data (xuliano)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'tempo (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fuso-horario';
$labels['weekday'] = 'día da semana (0-6)';
$labels['advancedopts'] = 'Opcións avanzadas';
$labels['body'] = 'Corpo';
$labels['address'] = 'enderezo';
$labels['envelope'] = 'sobre';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'sen codificar (en bruto)';
$labels['contenttype'] = 'tipo de contido';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todos';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'utente';
$labels['detail'] = 'detalle';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'predeterminado';
$labels['octet'] = 'estricto (octeto)';
$labels['asciicasemap'] = 'non sensíbel a maiúsculas/minúsculas (ascii-casemap)';
$labels['asciinumeric'] = 'numérico (ascii-numerico)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'atrás';
$labels['spamtestequals'] = 'é igual a';
$labels['spamtestnotequals'] = 'non é igual a';
$labels['vacation.reply'] = 'Respostar á mensaxe';
$labels['vacation.advanced'] = 'Opcións avanzadas';
$labels['vacation.subject'] = 'Asunto';
$labels['vacation.body'] = 'Corpo';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Activar';
$labels['vacation.off'] = 'Desactivar';
$labels['vacation.saving'] = 'Gardando datos...';
$labels['vacation.keep'] = 'Manter';
$labels['vacation.discard'] = 'Descartar';
$labels['vacation.redirect'] = 'Redirixir a';
$labels['vacation.copy'] = 'Enviar copia a';
$labels['forward.redirect'] = 'Redirixir a';
$labels['forward.copy'] = 'Enviar copia a';
$labels['forward.on'] = 'Activar';
$labels['forward.off'] = 'Desactivar';
$labels['forward.saving'] = 'Gardando datos...';
$labels['arialabelfilteractions'] = 'Accións de filtrado';
$labels['arialabelfilterform'] = 'Propiedades dos filtros';
$labels['ariasummaryfilterslist'] = 'Lista de filtros';
$labels['duplicate.header'] = 'cabeceira:';
$messages['filterunknownerror'] = 'Erro descoñecido do servidor';
$messages['filterconnerror'] = 'Imposíbel conectar co servidor.';
$messages['filterdeleteerror'] = 'Non se pode eliminar filtro. Produciuse un erro de servidor.';
$messages['filterdeleted'] = 'Filtro borrado con éxito';
$messages['filtersaved'] = 'Filtro gardado con éxito';
$messages['filtersaveerror'] = 'Non se puido gardar filtro. Produciuse un erro de servidor.';
$messages['filterdeleteconfirm'] = 'Realmente queres eliminar o filtro seleccionado?';
$messages['ruledeleteconfirm'] = 'Seguro que queres eliminar a regra seleccionada?';
$messages['actiondeleteconfirm'] = 'Seguro que queres eliminar a acción seleccionada?';
$messages['forbiddenchars'] = 'Caracteres non permitidos no campo';
$messages['cannotbeempty'] = 'O campo non pode estar baleiro';
$messages['ruleexist'] = 'Xa existe un filtro co nome especificado.';
$messages['activateerror'] = 'Non é posíbel activar o(s) filtro(s) seleccionado(s). Produciuse un erro de servidor.';
$messages['deactivateerror'] = 'Incapaz de desactivar filtro(s) seleccionado(s). Produciuse un erro de servidor.';
$messages['deactivated'] = 'Desactiváronse os filtros correctamente.';
$messages['activated'] = 'Activáronse os filtros correctamente';
$messages['moved'] = 'Moveuse correctamente o filtro.';
$messages['moveerror'] = 'Non se pode mover o filtro seleccionado. Produciuse un erro de servidor.';
$messages['nametoolong'] = 'Imposíbel crear o conxunto de filtros. O nome é longo de máis';
$messages['namereserved'] = 'Nome reservado';
$messages['setexist'] = 'Xa existe o conxunto';
$messages['nodata'] = 'É preciso seleccionar polo menos unha posición!';
$messages['invaliddateformat'] = 'Formato de data ou parte dos datos non válidos';
PK{c�\��U9U9"managesieve/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtri';
$labels['managefilters'] = 'Gestione dei filtri per la posta in arrivo';
$labels['filtername'] = 'Nome del filtro';
$labels['newfilter'] = 'Nuovo filtro';
$labels['filteradd'] = 'Aggiungi filtro';
$labels['filterdel'] = 'Elimina filtro';
$labels['rules'] = 'Regole';
$labels['actions'] = 'Azioni';
$labels['scope'] = 'Contesto';
$labels['moveup'] = 'Sposta sopra';
$labels['movedown'] = 'Sposta sotto';
$labels['filterallof'] = 'che soddisfa tutte le regole seguenti';
$labels['filteranyof'] = 'che soddisfa una qualsiasi delle regole seguenti';
$labels['filterany'] = 'tutti i messaggi';
$labels['filtercontains'] = 'contiene';
$labels['filternotcontains'] = 'non contiene';
$labels['filteris'] = 'è uguale a';
$labels['filterisnot'] = 'è diverso da';
$labels['filterexists'] = 'esiste';
$labels['filternotexists'] = 'non esiste';
$labels['filtermatches'] = 'corrisponde all\'espressione';
$labels['filternotmatches'] = 'non corrisponde all\'espressione';
$labels['filterregex'] = 'corrisponde all\'espressione regolare';
$labels['filternotregex'] = 'non corrisponde all\'espressione regolare';
$labels['filterunder'] = 'sotto';
$labels['filterover'] = 'sopra';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Parte MIME:';
$labels['mime-message'] = 'messaggio';
$labels['mime-anychild'] = 'qualsiasi';
$labels['mime-type'] = 'tipo';
$labels['mime-subtype'] = 'sottotipo';
$labels['mime-contenttype'] = 'tipo contenuto';
$labels['mime-param'] = 'parametro';
$labels['addrule'] = 'Aggiungi regola';
$labels['delrule'] = 'Elimina regola';
$labels['messagemoveto'] = 'Sposta il messaggio in';
$labels['messageredirect'] = 'Inoltra il messaggio a';
$labels['messagecopyto'] = 'Copia messaggio in';
$labels['messagesendcopy'] = 'Invia copia a';
$labels['messagereply'] = 'Rispondi con messaggio';
$labels['messagedelete'] = 'Elimina il messaggio';
$labels['messagediscard'] = 'Rifiuta con messaggio';
$labels['messagekeep'] = 'Mantieni messaggio nella posta in arrivo';
$labels['messagesrules'] = 'Per la posta in arrivo';
$labels['messagesactions'] = '...esegui le seguenti azioni:';
$labels['add'] = 'Aggiungi';
$labels['del'] = 'Elimina';
$labels['sender'] = 'Mittente';
$labels['recipient'] = 'Destinatario';
$labels['vacationaddr'] = 'I miei indirizzi di posta:';
$labels['vacationdays'] = 'Ogni quanti giorni ribadire il messaggio allo stesso mittente';
$labels['vacationinterval'] = 'Ogni quanto tempo inviare i messaggi:';
$labels['vacationreason'] = 'Corpo del messaggio (dettagli relativi all\'assenza):';
$labels['vacationfrom'] = 'Indirizzo di risposta del mittente:';
$labels['vacationsubject'] = 'Oggetto del messaggio';
$labels['days'] = 'giorni';
$labels['seconds'] = 'secondi';
$labels['rulestop'] = 'Non valutare le regole successive';
$labels['enable'] = 'Abilita/disabilita';
$labels['filterset'] = 'Gruppo di filtri';
$labels['filtersets'] = 'Gruppi di filtri';
$labels['filtersetadd'] = 'Aggiungi gruppo di filtri';
$labels['filtersetdel'] = 'Elimina gruppo di filtri';
$labels['filtersetact'] = 'Attiva il gruppo di filtri corrente';
$labels['filtersetdeact'] = 'Disattiva il gruppo di filtri corrente';
$labels['filterseteditraw'] = 'Modifica gruppo di filtri';
$labels['filtersetswitch'] = 'Abilita/disabilita gruppo di filtri';
$labels['filterdef'] = 'Definizione del filtro';
$labels['filtersetname'] = 'Nome del gruppo di filtri';
$labels['newfilterset'] = 'Nuovo gruppo di filtri';
$labels['active'] = 'attivo';
$labels['none'] = 'nessuno';
$labels['fromset'] = 'dal gruppo';
$labels['fromfile'] = 'dal file';
$labels['filterdisabled'] = 'Filtro disabilitato';
$labels['filterenabled'] = 'Filtro abilitato';
$labels['countisgreaterthan'] = 'somma maggiore di';
$labels['countisgreaterthanequal'] = 'somma maggiore uguale  a';
$labels['countislessthan'] = 'somma minore di';
$labels['countislessthanequal'] = 'somma minore o uguale a';
$labels['countequals'] = 'somma uguale a';
$labels['countnotequals'] = 'il conteggio non è uguale a';
$labels['valueisgreaterthan'] = 'valore maggiore di';
$labels['valueisgreaterthanequal'] = 'valore maggiore uguale a';
$labels['valueislessthan'] = 'valore minore di';
$labels['valueislessthanequal'] = 'valore minore uguale di';
$labels['valueequals'] = 'valore uguale a';
$labels['valuenotequals'] = 'il valore non è uguale a';
$labels['setflags'] = 'Contrassegna il messaggio';
$labels['addflags'] = 'Aggiungi contrassegni al messaggio';
$labels['removeflags'] = 'Rimuovi contrassegni dal messaggio';
$labels['flagread'] = 'Letto';
$labels['flagdeleted'] = 'Eliminato';
$labels['flaganswered'] = 'Risposto';
$labels['flagflagged'] = 'Contrassegnato';
$labels['flagdraft'] = 'Bozza';
$labels['addheader'] = 'Aggiungi intestazioni al messaggio';
$labels['deleteheader'] = 'Rimuovi intestazioni al messaggio';
$labels['headername'] = 'Nome dell\'intestazione';
$labels['headervalue'] = 'Valore dell\'intestazione';
$labels['headerpos'] = 'Posizione dell\'intestazione';
$labels['headeratstart'] = 'all\'inizio';
$labels['headeratend'] = 'alla fine';
$labels['headeroccurrence'] = 'Intestazione occorrenza/posizione';
$labels['headerfromstart'] = 'dall\'inizio';
$labels['headerfromend'] = 'dalla fine';
$labels['headerpatterns'] = 'Modelli di valore dell\'intestazione';
$labels['headermatchtype'] = 'tipo di corrispondenza:';
$labels['setvariable'] = 'Imposta variabile';
$labels['setvarname'] = 'Nome variabile:';
$labels['setvarvalue'] = 'Valore variabile:';
$labels['setvarmodifiers'] = 'Modificatori:';
$labels['varlower'] = 'minuscole';
$labels['varupper'] = 'maiuscole';
$labels['varlowerfirst'] = 'primo carattere minuscolo';
$labels['varupperfirst'] = 'primo carattere maiuscolo';
$labels['varquotewildcard'] = 'caratteri speciali di quoting';
$labels['varlength'] = 'lunghezza';
$labels['notify'] = 'Invia notifica';
$labels['notifytarget'] = 'Destinatario della notifica:';
$labels['notifymessage'] = 'Messaggio di notifica (opzionale):';
$labels['notifyoptions'] = 'Opzioni di notifica (opzionale):';
$labels['notifyfrom'] = 'Mittente della notifica (opzionale):';
$labels['notifyimportance'] = 'Importanza:';
$labels['notifyimportancelow'] = 'bassa';
$labels['notifyimportancenormal'] = 'normale';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefono';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crea filtro';
$labels['usedata'] = 'Utilizza i seguenti dati nel filtro';
$labels['nextstep'] = 'Passo successivo';
$labels['...'] = '...';
$labels['string'] = 'Stringa';
$labels['currdate'] = 'Data attuale';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'intestazione:';
$labels['year'] = 'anno';
$labels['month'] = 'mese';
$labels['day'] = 'giorno';
$labels['date'] = 'data (aaaa-mm-gg)';
$labels['julian'] = 'data (giuliana)';
$labels['hour'] = 'ora';
$labels['minute'] = 'minuto';
$labels['second'] = 'secondo';
$labels['time'] = 'ora (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fuso orario';
$labels['weekday'] = 'giorno della settimana (0-6)';
$labels['advancedopts'] = 'Opzioni avanzate';
$labels['body'] = 'Corpo';
$labels['address'] = 'indirizzo';
$labels['envelope'] = 'busta';
$labels['modifier'] = 'modificatore:';
$labels['text'] = 'testo';
$labels['undecoded'] = 'non decodificato (raw)';
$labels['contenttype'] = 'tipo di contenuto';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'tutto';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte locale';
$labels['user'] = 'user';
$labels['detail'] = 'dettaglio';
$labels['comparator'] = 'comparatore:';
$labels['default'] = 'predefinito';
$labels['octet'] = 'esatto (octet)';
$labels['asciicasemap'] = 'non differenziare maiuscole/minuscole (ascii-casemap)';
$labels['asciinumeric'] = 'numerico (ascii-numeric)';
$labels['index'] = 'indice:';
$labels['indexlast'] = 'indietro';
$labels['spamtest'] = 'Livello spam';
$labels['spamtestisgreaterthan'] = 'è più grande di';
$labels['spamtestisgreaterthanequal'] = 'è maggiore o uguale a';
$labels['spamtestislessthan'] = 'è meno di';
$labels['spamtestislessthanequal'] = 'è minore o uguale a';
$labels['spamtestequals'] = 'è uguale a';
$labels['spamtestnotequals'] = 'è diverso da';
$labels['spamtestisunknown'] = 'è sconosciuto';
$labels['vacation'] = 'Fuori ufficio';
$labels['vacation.reply'] = 'Messaggio di risposta';
$labels['vacation.advanced'] = 'Impostazioni avanzate';
$labels['vacation.from'] = 'Indirizzo di risposta del mittente:';
$labels['vacation.subject'] = 'Oggetto';
$labels['vacation.body'] = 'Testo';
$labels['vacation.start'] = 'Data di inizio';
$labels['vacation.end'] = 'Data di fine';
$labels['vacation.status'] = 'Stato';
$labels['vacation.on'] = 'Attivato';
$labels['vacation.off'] = 'Disattivato';
$labels['vacation.addresses'] = 'I miei indirizzi di posta';
$labels['vacation.interval'] = 'Intervallo di risposta';
$labels['vacation.after'] = 'Inserisci la regola di vacanza dopo';
$labels['vacation.saving'] = 'Salvataggio...';
$labels['vacation.action'] = 'Azione messaggio in arrivo';
$labels['vacation.keep'] = 'Mantieni';
$labels['vacation.discard'] = 'Scarta';
$labels['vacation.redirect'] = 'Ridireziona a';
$labels['vacation.copy'] = 'Invia copia a';
$labels['forward'] = 'Inoltro';
$labels['forward.redirect'] = 'Ridireziona a';
$labels['forward.copy'] = 'Invia copia a';
$labels['forward.on'] = 'Attivato';
$labels['forward.off'] = 'Disattivato';
$labels['forward.status'] = 'Stato:';
$labels['forward.action'] = 'Esegui le seguenti azioni all\'arrivo di messaggi di posta:';
$labels['forward.saving'] = 'Salvataggio...';
$labels['filladdresses'] = 'Riempire con tutti i miei indirizzi';
$labels['arialabelfiltersetactions'] = 'Azione gruppi di filtri ';
$labels['arialabelfilteractions'] = 'Azione filtri';
$labels['arialabelfilterform'] = 'Proprietà filtri';
$labels['ariasummaryfilterslist'] = 'Lista dei filtri';
$labels['ariasummaryfiltersetslist'] = 'Lista di grippi di filtri';
$labels['filterstitle'] = 'Modifica filtri dei messaggio in arrivo';
$labels['vacationtitle'] = 'Modifica le regole del Risponditore automatico';
$labels['forwardtitle'] = 'Modifica le regole di inoltro della posta';
$labels['message'] = 'Messaggio';
$labels['duplicate'] = 'è duplicato';
$labels['notduplicate'] = 'non è duplicato';
$labels['duplicate.handle'] = 'gestore:';
$labels['duplicate.header'] = 'intestazione:';
$labels['duplicate.uniqueid'] = 'identificatore:';
$labels['duplicate.seconds'] = 'timeout (secondi):';
$labels['duplicate.last'] = 'rispetto all\'ultima esecuzione';
$messages['filterunknownerror'] = 'Errore sconosciuto del server.';
$messages['filterconnerror'] = 'Collegamento non riuscito al server.';
$messages['filterdeleteerror'] = 'Eliminazione del filtro non riuscita. Si è verificato un errore nel server.';
$messages['filterdeleted'] = 'Filtro eliminato correttamente.';
$messages['filtersaved'] = 'Filtro salvato correttamente.';
$messages['filtersaveerror'] = 'Salvataggio del filtro non riuscito. Si è verificato un errore nel server.';
$messages['filterformerror'] = 'Il modulo del filtro contiene errori.';
$messages['filterdeleteconfirm'] = 'Vuoi veramente eliminare il filtro selezionato?';
$messages['ruledeleteconfirm'] = 'Sei sicuro di voler eliminare la regola selezionata?';
$messages['actiondeleteconfirm'] = 'Sei sicuro di voler eliminare l\'azione selezionata?';
$messages['forbiddenchars'] = 'Caratteri non consentiti nel campo.';
$messages['cannotbeempty'] = 'Il campo non può essere vuoto.';
$messages['ruleexist'] = 'Esiste già un filtro con questo nome.';
$messages['setactivateerror'] = 'Impossibile attivare il gruppo di filtri selezionato. Errore del server.';
$messages['setdeactivateerror'] = 'Impossibile disattivare il gruppo di filtri selezionato. Errore del server.';
$messages['setdeleteerror'] = 'Impossibile eliminare il gruppo di filtri selezionato. Errore del server.';
$messages['setactivated'] = 'Gruppo di filtri attivato correttamente.';
$messages['setdeactivated'] = 'Gruppo di filtri disattivato correttamente.';
$messages['setdeleted'] = 'Gruppo di filtri eliminato correttamente.';
$messages['setupdated'] = 'Gruppo di filtri aggiornato correttamente.';
$messages['setdeleteconfirm'] = 'Sei sicuro di voler eliminare il gruppo di filtri selezionato?';
$messages['setcreateerror'] = 'Impossibile creare il gruppo di filtri. Errore del server.';
$messages['setcreated'] = 'Gruppo di filtri creato correttamente.';
$messages['activateerror'] = 'Impossibile abilitare i filtri selezionati. Errore del server.';
$messages['deactivateerror'] = 'Impossibile disabilitare i filtri selezionati. Errore del server.';
$messages['deactivated'] = 'Filtro/i disabilitato/i correttamente.';
$messages['activated'] = 'Filtro/i abilitato/i correttamente.';
$messages['moved'] = 'Filtro/i spostato/i correttamente.';
$messages['moveerror'] = 'Impossibile spostare il filtro selezionato. Errore del server.';
$messages['nametoolong'] = 'Nome troppo lungo.';
$messages['namereserved'] = 'Nome riservato.';
$messages['setexist'] = 'Il gruppo esiste già.';
$messages['nodata'] = 'Selezionare almeno una posizione.';
$messages['invaliddateformat'] = 'Formato della data non valido';
$messages['saveerror'] = 'Impossibile salvare i dati. Errore del server.';
$messages['vacationsaved'] = 'Dati di vacanza salvati correttamente.';
$messages['forwardsaved'] = 'Dati di inoltro salvati correttamente.';
$messages['emptyvacationbody'] = 'Il testo del messaggio non può essere vuoto!';
$messages['duplicate.conflict.err'] = 'Sia l\'intestazione che l\'identificatore univoco non sono consentiti.';
$messages['disabledaction'] = 'Azione non permessa.';
$messages['lastindexempty'] = 'L\'indice è richiesto quando si conta dalla fine';
$messages['noflagset'] = 'Deve essere selezionato almeno un flag.';
PK{c�\�9��+;+;"managesieve/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Administrar filtros de correo entrante';
$labels['filtername'] = 'Nombre del filtro';
$labels['newfilter'] = 'Nuevo filtro';
$labels['filteradd'] = 'Añadir filtro';
$labels['filterdel'] = 'Eliminar filtro';
$labels['rules'] = 'Reglas';
$labels['actions'] = 'Acciones';
$labels['scope'] = 'Ámbito';
$labels['moveup'] = 'Mover arriba';
$labels['movedown'] = 'Mover abajo';
$labels['filterallof'] = 'que coincida con todas las reglas siguientes';
$labels['filteranyof'] = 'que coincida con cualquiera de las reglas siguientes';
$labels['filterany'] = 'todos los mensajes';
$labels['filtercontains'] = 'contiene';
$labels['filternotcontains'] = 'no contiene';
$labels['filteris'] = 'es igual a';
$labels['filterisnot'] = 'no es igual a';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'no existe';
$labels['filtermatches'] = 'coincide con la expresión';
$labels['filternotmatches'] = 'no coincide con la expresión';
$labels['filterregex'] = 'coincide con la expresión regular';
$labels['filternotregex'] = 'no coincide con la expresión regular';
$labels['filterunder'] = 'bajo';
$labels['filterover'] = 'sobre';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Parte MIME:';
$labels['mime-message'] = 'mensaje';
$labels['mime-anychild'] = 'cualquiera';
$labels['mime-type'] = 'tipo';
$labels['mime-subtype'] = 'subtipo';
$labels['mime-contenttype'] = 'tipo de contenido';
$labels['mime-param'] = 'parámetro';
$labels['addrule'] = 'Añadir regla';
$labels['delrule'] = 'Eliminar regla';
$labels['messagemoveto'] = 'Mover mensaje a';
$labels['messageredirect'] = 'Redirigir mensaje a';
$labels['messagecopyto'] = 'Copiar mensaje a';
$labels['messagesendcopy'] = 'Enviar copia del mensaje a';
$labels['messagereply'] = 'Responder con un mensaje';
$labels['messagedelete'] = 'Eliminar mensaje';
$labels['messagediscard'] = 'Descartar con un mensaje';
$labels['messagekeep'] = 'Mantener el mensaje en la bandeja de entrada';
$labels['messagesrules'] = 'Para el correo entrante:';
$labels['messagesactions'] = '... ejecutar las siguientes acciones:';
$labels['add'] = 'Añadir';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remitente';
$labels['recipient'] = 'Destinatario';
$labels['vacationaddr'] = 'Mis direcciones de correo electrónico:';
$labels['vacationdays'] = 'Cada cuánto enviar mensajes (en días):';
$labels['vacationinterval'] = 'Cada cuánto enviar mensajes:';
$labels['vacationreason'] = 'Cuerpo del mensaje (razón de vacaciones):';
$labels['vacationfrom'] = 'Responder a la dirección del remitente:';
$labels['vacationsubject'] = 'Asunto del mensaje:';
$labels['days'] = 'días';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de evaluar reglas';
$labels['enable'] = 'Habilitar/Deshabilitar';
$labels['filterset'] = 'Conjunto de filtros';
$labels['filtersets'] = 'Conjuntos de filtros';
$labels['filtersetadd'] = 'Agregar conjunto de filtros';
$labels['filtersetdel'] = 'Eliminar conjunto de filtros';
$labels['filtersetact'] = 'Activar este conjunto de filtros';
$labels['filtersetdeact'] = 'Desactivar este conjunto de filtros';
$labels['filterseteditraw'] = 'Editar conjunto de filtros';
$labels['filtersetswitch'] = 'Habilitar/deshabilitar conjunto de filtros';
$labels['filterdef'] = 'Creación de filtros';
$labels['filtersetname'] = 'Nombre del conjunto de filtros';
$labels['newfilterset'] = 'Nuevo conjunto de filtros';
$labels['active'] = 'Activar';
$labels['none'] = 'ninguno';
$labels['fromset'] = 'desde conjunto';
$labels['fromfile'] = 'desde archivo';
$labels['filterdisabled'] = 'Filtro desactivado';
$labels['filterenabled'] = 'Filtro activado';
$labels['countisgreaterthan'] = 'contiene más que';
$labels['countisgreaterthanequal'] = 'contiene más o igual que';
$labels['countislessthan'] = 'contiene menos que';
$labels['countislessthanequal'] = 'contiene menos o igual que';
$labels['countequals'] = 'contiene igual que';
$labels['countnotequals'] = 'la longitud no es igual a';
$labels['valueisgreaterthan'] = 'el valor es mayor que';
$labels['valueisgreaterthanequal'] = 'el valor es mayor o igual que';
$labels['valueislessthan'] = 'el valor es menor que';
$labels['valueislessthanequal'] = 'el valor es menor o igual que';
$labels['valueequals'] = 'el valor es igual que';
$labels['valuenotequals'] = 'el valor no es igual a';
$labels['setflags'] = 'Etiquetar el mensaje';
$labels['addflags'] = 'Agregar etiquetas al mensaje';
$labels['removeflags'] = 'Eliminar etiquetas del mensaje';
$labels['flagread'] = 'Leído';
$labels['flagdeleted'] = 'Eliminado';
$labels['flaganswered'] = 'Respondido';
$labels['flagflagged'] = 'Marcado';
$labels['flagdraft'] = 'Borrador';
$labels['addheader'] = 'Agregar encabezado al mensaje';
$labels['deleteheader'] = 'Eliminar encabezado del mensaje';
$labels['headername'] = 'Nombre del encabezado';
$labels['headervalue'] = 'Valor del encabezado';
$labels['headerpos'] = 'Posición del encabezado';
$labels['headeratstart'] = 'al principio';
$labels['headeratend'] = 'al final';
$labels['headeroccurrence'] = 'Posición/aparición del encabezado';
$labels['headerfromstart'] = 'desde el principio';
$labels['headerfromend'] = 'desde el final';
$labels['headerpatterns'] = 'Patrones del valor del encabezado';
$labels['headermatchtype'] = 'tipo de coincidencia:';
$labels['setvariable'] = 'Establecer variable';
$labels['setvarname'] = 'Nombre de la variable:';
$labels['setvarvalue'] = 'Valor de la variable:';
$labels['setvarmodifiers'] = 'Modificadores';
$labels['varlower'] = 'minúsculas';
$labels['varupper'] = 'mayúsculas';
$labels['varlowerfirst'] = 'primer caracter en minúsculas';
$labels['varupperfirst'] = 'primer caracter en mayúsculas';
$labels['varquotewildcard'] = 'entrecomillar caracteres especiales';
$labels['varlength'] = 'longitud';
$labels['notify'] = 'Enviar notificación';
$labels['notifytarget'] = 'Destino de la notificación:';
$labels['notifymessage'] = 'Mensaje de notificación (opcional):';
$labels['notifyoptions'] = 'Opciones de notificación (opcional):';
$labels['notifyfrom'] = 'Remitente de la notificación (opcional):';
$labels['notifyimportance'] = 'Importancia:';
$labels['notifyimportancelow'] = 'baja';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Correo electrónico';
$labels['notifymethodtel'] = 'Teléfono';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar los siguientes datos en el filtro:';
$labels['nextstep'] = 'Siguiente paso';
$labels['...'] = '...';
$labels['string'] = 'Secuencia';
$labels['currdate'] = 'Fecha actual';
$labels['datetest'] = 'Fecha';
$labels['dateheader'] = 'cabecera:';
$labels['year'] = 'año';
$labels['month'] = 'mes';
$labels['day'] = 'día';
$labels['date'] = 'fecha (aaaa-mm-dd)';
$labels['julian'] = 'fecha (juliano)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'fecha (ISO8601)';
$labels['std11'] = 'fecha (RFC2822)';
$labels['zone'] = 'zona horaria';
$labels['weekday'] = 'día de la semana (0-6)';
$labels['advancedopts'] = 'Opciones avanzadas';
$labels['body'] = 'Cuerpo del mensaje';
$labels['address'] = 'dirección';
$labels['envelope'] = 'envoltura';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'texto';
$labels['undecoded'] = 'decodificar (en bruto)';
$labels['contenttype'] = 'tipo de contenido';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todo';
$labels['domain'] = 'dominio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'usuario';
$labels['detail'] = 'detalle';
$labels['comparator'] = 'comparador:';
$labels['default'] = 'predeterminado';
$labels['octet'] = 'estricto (octeto)';
$labels['asciicasemap'] = 'no sensible a mayúsculas (ascii-casemap)';
$labels['asciinumeric'] = 'numerico (ascii-numeric)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'hacia atrás';
$labels['spamtest'] = 'Nivel de Spam';
$labels['spamtestisgreaterthan'] = 'es mayor que';
$labels['spamtestisgreaterthanequal'] = 'es mayor o igual que';
$labels['spamtestislessthan'] = 'es menor que';
$labels['spamtestislessthanequal'] = 'es menor o igual que';
$labels['spamtestequals'] = 'es igual a';
$labels['spamtestnotequals'] = 'no es igual a';
$labels['spamtestisunknown'] = 'es desconocido';
$labels['vacation'] = 'Aviso de ausencia';
$labels['vacation.reply'] = 'Mensaje de respuesta';
$labels['vacation.advanced'] = 'Configuración avanzada';
$labels['vacation.from'] = 'Responder a la dirección del remitente';
$labels['vacation.subject'] = 'Asunto';
$labels['vacation.body'] = 'Cuerpo';
$labels['vacation.start'] = 'Fecha y hora de incio de ausencia';
$labels['vacation.end'] = 'Fecha y hora de regreso a la oficina';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Activado';
$labels['vacation.off'] = 'Desactivado';
$labels['vacation.addresses'] = 'Mis direcciones de correo electrónico';
$labels['vacation.interval'] = 'Intervalo de respuesta';
$labels['vacation.after'] = 'Poner la regla de ausencia después';
$labels['vacation.saving'] = 'Guardando datos...';
$labels['vacation.action'] = 'Acción para mensaje entrante';
$labels['vacation.keep'] = 'Mantener';
$labels['vacation.discard'] = 'Descartar';
$labels['vacation.redirect'] = 'Reenviar a';
$labels['vacation.copy'] = 'Enviar copia a';
$labels['forward'] = 'Reenvío';
$labels['forward.redirect'] = 'Reenviar a';
$labels['forward.copy'] = 'Enviar copia a';
$labels['forward.on'] = 'Activado';
$labels['forward.off'] = 'Desactivado';
$labels['forward.status'] = 'Estado:';
$labels['forward.action'] = 'Para mensajes entrantes ejecutar la siguiente acción:';
$labels['forward.saving'] = 'Guardando información...';
$labels['filladdresses'] = 'Rellenar con todas mis direcciones';
$labels['arialabelfiltersetactions'] = 'Acciones de conjunto de filtros';
$labels['arialabelfilteractions'] = 'Filtrar acciones';
$labels['arialabelfilterform'] = 'Filtrar propiedades';
$labels['ariasummaryfilterslist'] = 'Lista de filtros';
$labels['ariasummaryfiltersetslist'] = 'Lista de conjunto de filtros';
$labels['filterstitle'] = 'Editar filtros para mensajes entrantes';
$labels['vacationtitle'] = 'Editar reglas de ausencia';
$labels['forwardtitle'] = 'Editar regla de reenvío de correo';
$labels['message'] = 'Mensaje';
$labels['duplicate'] = 'está duplicado';
$labels['notduplicate'] = 'no está duplicado';
$labels['duplicate.handle'] = 'manejar:';
$labels['duplicate.header'] = 'encabezamiento:';
$labels['duplicate.uniqueid'] = 'identificador:';
$labels['duplicate.seconds'] = 'límite de tiempo (en segundos):';
$labels['duplicate.last'] = 'relativo a la última ejecución';
$messages['filterunknownerror'] = 'Error desconocido en el servidor.';
$messages['filterconnerror'] = 'No se pudo conectar con el servidor managesieve.';
$messages['filterdeleteerror'] = 'No se pudo borrar el filtro. Ha ocurrido un error en el servidor.';
$messages['filterdeleted'] = 'Filtro borrado correctamente.';
$messages['filtersaved'] = 'Filtro guardado correctamente.';
$messages['filtersaveerror'] = 'No se pudo guardar el filtro. Ha ocurrido un error en el servidor.';
$messages['filterformerror'] = 'El formulario de filtrado contiene errores.';
$messages['filterdeleteconfirm'] = '¿Realmente desea borrar el filtro seleccionado?';
$messages['ruledeleteconfirm'] = '¿Está seguro de que desea borrar la regla seleccionada?';
$messages['actiondeleteconfirm'] = '¿Está seguro de que desea borrar la acción seleccionada?';
$messages['forbiddenchars'] = 'Caracteres prohibidos en el campo.';
$messages['cannotbeempty'] = 'El campo no puede estar vacío.';
$messages['ruleexist'] = 'Ya existe un filtro con el nombre especificado.';
$messages['setactivateerror'] = 'Imposible activar el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setdeactivateerror'] = 'Imposible desactivar el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setdeleteerror'] = 'Imposible borrar el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setactivated'] = 'Conjunto de filtros activados satisfactoriamente.';
$messages['setdeactivated'] = 'Conjunto de filtros desactivados satisfactoriamente.';
$messages['setdeleted'] = 'Conjunto de filtros eliminados satisfactoriamente.';
$messages['setupdated'] = 'Conjunto de filtros actualizados satisfactoriamente.';
$messages['setdeleteconfirm'] = '¿Estás seguro de que deseas eliminar el conjunto de filtros seleccionado?';
$messages['setcreateerror'] = 'Imposible crear el conjunto de filtros seleccionado. Ocurrió un error en el servidor.';
$messages['setcreated'] = 'Conjunto de filtros creado satisfactoriamente.';
$messages['activateerror'] = 'No se pudo habilitar filtro(s) seleccionado(s). Ha ocurrido un error en el servidor.';
$messages['deactivateerror'] = 'No se pudo deshabilitar filtro(s) seleccionado(s). Ha ocurrido un error en el servidor.';
$messages['deactivated'] = 'Filtro(s) deshabilitado(s) correctamente.';
$messages['activated'] = 'Filtro(s) habilitado(s) correctamente.';
$messages['moved'] = 'Filtro movido correctamente.';
$messages['moveerror'] = 'No se pudo mover el filtro seleccionado. Ha ocurrido un error en el servidor.';
$messages['nametoolong'] = 'Nombre demasiado largo.';
$messages['namereserved'] = 'Nombre reservado.';
$messages['setexist'] = 'El conjunto ya existe.';
$messages['nodata'] = '¡Al menos una posición debe ser seleccionada!';
$messages['invaliddateformat'] = 'Fecha o formato de fecha inválido';
$messages['saveerror'] = 'No se pudo guardar los datos. Ha ocurrido un error en el servidor.';
$messages['vacationsaved'] = 'Datos de ausencia guardados satisfactoriamente.';
$messages['forwardsaved'] = 'Datos de reenvío guardados satisfactoriamente.';
$messages['emptyvacationbody'] = '¡Hace falta un texto en el mensaje de ausencia!';
$messages['duplicate.conflict.err'] = 'Tanto el encabezamiento, como el identificador único, no están permitidos.';
$messages['disabledaction'] = 'Acción no permitida.';
$messages['lastindexempty'] = 'Se necesita un índice cuando se cuenta desde el final';
$messages['noflagset'] = 'Al menos una etiqueta debe estar seleccionada';
PK{c�\�����.�."managesieve/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'അരിപ്പകള്‍';
$labels['managefilters'] = 'അകത്തോട്ടുള്ള ഇമെയില്‍ അരിപ്പകള്‍ ക്രമീകരിക്കുക';
$labels['filtername'] = 'അരിപ്പയുടെ പേര്';
$labels['newfilter'] = 'പുതിയ അരിപ്പ';
$labels['filteradd'] = 'അരിപ്പ ചേര്‍ക്കുക';
$labels['filterdel'] = 'അരിപ്പ നീക്കംചെയ്യുക';
$labels['moveup'] = 'മുകളിലേക്ക് നീക്കുക';
$labels['movedown'] = 'താഴേക്ക് നീക്കുക';
$labels['filterallof'] = 'കീഴ്പറഞ്ഞ എല്ലാ നിയമങ്ങളും പാലിക്കുന്നവ';
$labels['filteranyof'] = 'കീഴ്പറഞ്ഞ ഏതെങ്കിലും നിയമം പാലിക്കുന്നവ';
$labels['filterany'] = 'എല്ലാ സന്ദേശങ്ങളും';
$labels['filtercontains'] = 'അടങ്ങുന്നത്';
$labels['filternotcontains'] = 'ല്‍ അടങ്ങുന്നില്ല';
$labels['filteris'] = 'ന് തുല്യം';
$labels['filterisnot'] = 'ന് തുല്യമല്ല';
$labels['filterexists'] = 'നിലവിലുണ്ട്';
$labels['filternotexists'] = 'നിലവിലില്ല';
$labels['filtermatches'] = 'എക്സ്പ്രഷന്‍ ചേരുന്നുണ്ട്';
$labels['filternotmatches'] = 'എക്സ്പ്രഷന്‍ ചേരുന്നില്ല';
$labels['filterregex'] = 'റെഗുലര്‍ എക്സ്പ്രഷന്‍ ചേരുന്നുണ്ട്';
$labels['filternotregex'] = 'റെഗുലര്‍ എക്സ്പ്രഷന്‍ ചേരുന്നില്ല';
$labels['filterunder'] = 'കീഴില്‍';
$labels['filterover'] = 'മുകളില്‍';
$labels['addrule'] = 'നിയമം ചേര്‍ക്കുക';
$labels['delrule'] = 'നിയമം നീക്കം ചെയ്യുക';
$labels['messagemoveto'] = 'സന്ദേശം നിക്കു :';
$labels['messageredirect'] = 'സന്ദേശം മാറ്റിവിടു :';
$labels['messagecopyto'] = 'സന്ദേശം പകര്‍ത്തു :';
$labels['messagesendcopy'] = 'സന്ദേശത്തിന്റെ പകര്‍പ്പ് അയക്കു :';
$labels['messagereply'] = 'സന്ദേശം വെച്ച് മറുപടി അയക്കു';
$labels['messagedelete'] = 'സന്ദേശം മായ്ക്കു';
$labels['messagediscard'] = 'സന്ദേശത്തോടെ നിരാകരിക്കുക';
$labels['messagekeep'] = 'സന്ദേശം ഇൻബോക്സിൽ സൂക്ഷിക്കുക';
$labels['messagesrules'] = 'ആഗമന സന്ദേശങ്ങള്‍ക്ക്:';
$labels['messagesactions'] = '...ഈ പ്രവര്‍ത്തനങ്ങള്‍ ചെയ്യുക:';
$labels['add'] = 'ചേര്‍ക്കു';
$labels['del'] = 'നീക്കം ചെയ്യുക';
$labels['sender'] = 'അയചയാള്‍';
$labels['recipient'] = 'സ്വീകര്‍ത്താവ്';
$labels['vacationdays'] = 'എത്ര ഭിവസം കൂടുമ്പോള്‍ സന്ദേശം അയക്കണം:';
$labels['vacationinterval'] = 'എത്ര സമയം കൂടുമ്പോൾ സന്ദേശങ്ങൾ അയയ്ക്കണം:';
$labels['vacationreason'] = 'സന്ദേശത്തിന്റെ ഉള്ളടക്കം (അവധിയുടെ കാരണം):';
$labels['vacationsubject'] = 'സന്ദേശത്തിന്റെ വിഷയം:';
$labels['days'] = 'ദിവസങ്ങൾ';
$labels['seconds'] = 'സെക്കന്റുകൾ';
$labels['rulestop'] = 'നിയമങ്ങള്‍ വിലയിരുത്തുന്നത് നിര്‍ത്തുക';
$labels['enable'] = 'പ്രവര്‍ത്തനസജ്ജം/രഹിതം';
$labels['filtersets'] = 'അരിപ്പകളുടെ കൂട്ടങ്ങള്‍';
$labels['filterdef'] = 'അരിപ്പയുടെ നിര്‍വ്വചനം';
$labels['active'] = 'സജീവം';
$labels['none'] = 'ഒന്നുമില്ല';
$labels['fromset'] = 'സെറ്റില്‍ നിന്ന്';
$labels['fromfile'] = 'ഫയലില്‍ നിന്ന്';
$labels['filterdisabled'] = 'അരിപ്പ പ്രവര്‍ത്തനരഹിതമാക്കി';
$labels['countisgreaterthan'] = 'എണ്ണം ഇതിനെക്കാള്‍ കുടുതല്‍';
$labels['countisgreaterthanequal'] = 'എണ്ണം ഇതിനെക്കാള്‍ കൂടുതല്‍ ഇല്ലെങ്കില്‍ സമം';
$labels['countislessthan'] = 'എണ്ണം ഇതിനെക്കാള്‍ കുറവ്';
$labels['countislessthanequal'] = 'എണ്ണം ഇതിനെക്കാള്‍ കൂറവ് ഇല്ലെങ്കില്‍ സമം';
$labels['countequals'] = 'എണ്ണം ഇതിനോട് സമം';
$labels['countnotequals'] = 'എണ്ണം ഇതിനോട് തുല്യമല്ല';
$labels['valueisgreaterthan'] = 'മൂല്യം ഇതിനെക്കാള്‍ കുടുതല്‍';
$labels['valueisgreaterthanequal'] = 'മുല്യം ഇതിനെക്കാള്‍ കൂടുതല്‍ ഇല്ലെങ്കില്‍ സമം';
$labels['valueislessthan'] = 'മൂല്യം ഇതിനെക്കാള്‍ കുറവ്';
$labels['valueislessthanequal'] = 'മൂല്യം ഇതിനെക്കാള്‍ കൂറവ് ഇല്ലെങ്കില്‍ തുല്യം';
$labels['valueequals'] = 'മൂല്യം ഇതിനോട് സമം';
$labels['valuenotequals'] = 'മൂല്യം ഇതിനോട് തുല്യമല്ല';
$labels['setflags'] = 'സന്ദേശത്തില്‍ അടയാളമിടുക';
$labels['addflags'] = 'സന്ദേശത്തില്‍ അടയാളം ചേര്‍ക്കുക';
$labels['removeflags'] = 'സന്ദേശത്തില്‍ നിന്നും അടയാളം മാറ്റുക';
$labels['flagread'] = 'വായിച്ചവ';
$labels['flagdeleted'] = 'നീക്കം ചെയ്തവ';
$labels['flaganswered'] = 'മറുപടി നല്‍കിയവ';
$labels['flagflagged'] = 'അടയാളപ്പെടുത്തിയവ';
$labels['flagdraft'] = 'കരട്';
$labels['setvariable'] = 'വേരിയബിൾ സ്ഥിരപ്പെടുത്തുക';
$labels['setvarname'] = 'വേരിയബിളിന്റെ പേര്';
$labels['setvarvalue'] = 'വേരിയബിളിന്റെ മൂല്യം';
$labels['notifymethodmailto'] = 'ഇമെയില്‍';
$labels['notifymethodtel'] = 'ഫോണ്‍';
$labels['filtercreate'] = 'അരിപ്പ ഉണ്ടാക്കുക';
$labels['usedata'] = 'ഈ വിവരങ്ങള്‍ അരിപ്പയില്‍ ഉപയോഗിക്കുക:';
$labels['nextstep'] = 'അടുത്ത പടി';
$labels['...'] = '...';
$labels['datetest'] = 'തീയതി';
$labels['advancedopts'] = 'വിപുലീക്രിതമായ ക്രമീകരണങ്ങള്‍';
$labels['body'] = 'ഉള്ളടക്കം';
$labels['address'] = 'മേല്‍വിലാസം';
$labels['envelope'] = 'എന്‍വലപ്പ്';
$labels['modifier'] = 'മോഡിഫയര്‍:';
$labels['text'] = 'വാചകം';
$labels['undecoded'] = 'ഡീക്കോഡ് ചെയ്യാത്തത് (റോ)';
$labels['contenttype'] = 'ഉള്ളടക്കത്തിന്റെ തരം';
$labels['modtype'] = 'തരം:';
$labels['allparts'] = 'എല്ലാം';
$labels['domain'] = 'ഡൊമൈന്‍';
$labels['localpart'] = 'പ്രാദേശിക ഭാഗം';
$labels['user'] = 'ഉപയോക്താവു്';
$labels['detail'] = 'വിശദാംശം';
$labels['comparator'] = 'താരതമ്യകന്‍:';
$labels['default'] = 'സഹജമായ';
$labels['octet'] = 'കര്‍ശനം (octet)';
$labels['asciicasemap'] = 'വലിയ-ചെറിയക്ഷരങ്ങള്‍ തമ്മില്‍ വ്യത്യാസമില്ലാത്ത (ascii-casemap)';
$labels['asciinumeric'] = 'സംഖ്യകള്‍ (ascii-numeric)';
$labels['spamtestequals'] = 'ന് തുല്യം';
$labels['spamtestnotequals'] = 'ന് തുല്യമല്ല';
$labels['vacation.subject'] = 'വിഷയം';
$labels['vacation.body'] = 'ഉള്ളടക്കം';
$messages['filterunknownerror'] = 'അജ്ഞാതമായ സെര്‍വ്വര്‍ പിശക്.';
$messages['filterconnerror'] = 'സെര്‍വ്വറുമായി ബന്ധപ്പെടാന്‍ സാധിക്കുന്നില്ല.';
$messages['filterdeleted'] = 'അരിപ്പ വിജകരമായി മായ്ച്ചു.';
$messages['filtersaved'] = 'അരിപ്പ വിജകരമായി സൂക്ഷിച്ചു.';
$messages['filterdeleteconfirm'] = 'തെരഞ്ഞെടുത്ത അരിപ്പ നീക്കം ചെയ്യണമെന്ന് ഉറപ്പാണോ?';
$messages['ruledeleteconfirm'] = 'തെരഞ്ഞെടുത്ത നിയമം നീക്കം ചെയ്യണമെന്ന് ഉറപ്പാണോ?';
$messages['actiondeleteconfirm'] = 'തെരഞ്ഞെടുത്ത പ്രവര്‍ത്തി നീക്കം ചെയ്യണമെന്ന് ഉറപ്പാണോ?';
$messages['forbiddenchars'] = 'ഫില്‍ഡില്‍ സാധുവല്ലാത്ത അക്ഷരങ്ങള്‍.';
$messages['cannotbeempty'] = 'ഫീല്‍ഡ് ശൂന്യമാകാന്‍ പാടില്ല.';
$messages['ruleexist'] = 'ഈ പേരിലുള്ള അരിപ്പ ഇപ്പോള്‍ തന്നെ ഉണ്ട്.';
$messages['deactivated'] = 'അരിപ്പ വിജകരമായി പ്രവര്‍ത്തനസജ്ജമാക്കി.';
$messages['activated'] = 'അരിപ്പകള്‍ നിര്‍വീര്യം ആക്കപ്പെട്ടിരിക്കുന്നു';
$messages['moved'] = 'അരിപ്പ വിജകരമായി മാറ്റി.';
$messages['nametoolong'] = 'പേരിന് നീളം കൂടുതല്‍.';
$messages['namereserved'] = 'നീക്കിവെച്ച വാക്ക്.';
$messages['setexist'] = 'കൂട്ടം നേരത്തെ തന്നെ ഉണ്ട്.';
$messages['nodata'] = 'ഒരു സ്ഥാനമെങ്കിലും തെരഞ്ഞെടുക്കണം!';
PK{c�\u�� 8 8"managesieve/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filters';
$labels['managefilters'] = 'Beheer filters voor inkomende e-mail';
$labels['filtername'] = 'Filternaam';
$labels['newfilter'] = 'Nieuw filter';
$labels['filteradd'] = 'Filter toevoegen';
$labels['filterdel'] = 'Verwijder filter';
$labels['rules'] = 'Regels';
$labels['actions'] = 'Acties';
$labels['scope'] = 'Zoekbereik';
$labels['moveup'] = 'Verplaats omhoog';
$labels['movedown'] = 'Verplaats omlaag';
$labels['filterallof'] = 'die voldoet aan alle volgende regels';
$labels['filteranyof'] = 'die voldoet aan één van de volgende regels';
$labels['filterany'] = 'alle berichten';
$labels['filtercontains'] = 'bevat';
$labels['filternotcontains'] = 'bevat niet';
$labels['filteris'] = 'is gelijk aan';
$labels['filterisnot'] = 'is niet gelijk aan';
$labels['filterexists'] = 'bestaat';
$labels['filternotexists'] = 'bestaat niet';
$labels['filtermatches'] = 'komt overeen met expressie';
$labels['filternotmatches'] = 'komt niet overeen met expressie';
$labels['filterregex'] = 'komt overeen met de reguliere expressie';
$labels['filternotregex'] = 'komt niet overeen met de reguliere expressie';
$labels['filterunder'] = 'onder';
$labels['filterover'] = 'over';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME gedeelte:';
$labels['mime-message'] = 'bericht';
$labels['mime-anychild'] = 'elke';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'subtype';
$labels['mime-contenttype'] = 'inhoudstype';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Regel toevoegen';
$labels['delrule'] = 'Regel verwijderen';
$labels['messagemoveto'] = 'Verplaats bericht naar';
$labels['messageredirect'] = 'Bericht doorsturen naar';
$labels['messagecopyto'] = 'Kopieer bericht naar';
$labels['messagesendcopy'] = 'Verstuur een kopie naar';
$labels['messagereply'] = 'Beantwoord met bericht';
$labels['messagedelete'] = 'Verwijder bericht';
$labels['messagediscard'] = 'Met bericht negeren';
$labels['messagekeep'] = 'Bewaar bericht in Postvak IN';
$labels['messagesrules'] = 'Voor binnenkomende e-mail:';
$labels['messagesactions'] = '...voer de volgende acties uit';
$labels['add'] = 'Toevoegen';
$labels['del'] = 'Verwijderen';
$labels['sender'] = 'Afzender';
$labels['recipient'] = 'Ontvanger';
$labels['vacationaddr'] = 'Mijn e-mailadressen:';
$labels['vacationdays'] = 'Hoe vaak moet een bericht verstuurd worden (in dagen):';
$labels['vacationinterval'] = 'Hoe vaak moet een bericht verstuurd worden:';
$labels['vacationreason'] = 'Bericht (vakantiereden):';
$labels['vacationfrom'] = 'Antwoord-afzender adres:';
$labels['vacationsubject'] = 'Onderwerp:';
$labels['days'] = 'dagen';
$labels['seconds'] = 'seconden';
$labels['rulestop'] = 'Stop met regels uitvoeren';
$labels['enable'] = 'In-/uitschakelen';
$labels['filterset'] = 'Filterset';
$labels['filtersets'] = 'Filtersets';
$labels['filtersetadd'] = 'Filterset toevoegen';
$labels['filtersetdel'] = 'Filterset verwijderen';
$labels['filtersetact'] = 'Huidige filterset activeren';
$labels['filtersetdeact'] = 'Huidige filterset uitschakelen';
$labels['filterseteditraw'] = 'Filterset bewerken';
$labels['filtersetswitch'] = 'Filterset in/uitschakelen';
$labels['filterdef'] = 'Filterdefinitie';
$labels['filtersetname'] = 'Filtersetnaam';
$labels['newfilterset'] = 'Nieuwe filterset';
$labels['active'] = 'actief';
$labels['none'] = 'geen';
$labels['fromset'] = 'van set';
$labels['fromfile'] = 'van bestand';
$labels['filterdisabled'] = 'Filter uitgeschakeld';
$labels['filterenabled'] = 'Filter ingeschakeld';
$labels['countisgreaterthan'] = 'aantal is groter dan';
$labels['countisgreaterthanequal'] = 'aantal is groter dan of gelijk aan';
$labels['countislessthan'] = 'aantal is kleiner dan';
$labels['countislessthanequal'] = 'aantal is kleiner dan of gelijk aan';
$labels['countequals'] = 'aantal is gelijk aan';
$labels['countnotequals'] = 'aantal is niet gelijk aan';
$labels['valueisgreaterthan'] = 'waarde is groter dan';
$labels['valueisgreaterthanequal'] = 'waarde is groter dan of gelijk aan';
$labels['valueislessthan'] = 'waarde is minder dan';
$labels['valueislessthanequal'] = 'waarde is minder dan of gelijk aan';
$labels['valueequals'] = 'waarde is gelijk aan';
$labels['valuenotequals'] = 'waarde is niet gelijk aan';
$labels['setflags'] = 'Stel markeringen in op bericht';
$labels['addflags'] = 'Voeg markeringen toe aan bericht';
$labels['removeflags'] = 'Verwijder markeringen van bericht';
$labels['flagread'] = 'Lezen';
$labels['flagdeleted'] = 'Verwijderd';
$labels['flaganswered'] = 'Beantwoord';
$labels['flagflagged'] = 'Gemarkeerd';
$labels['flagdraft'] = 'Concept';
$labels['addheader'] = 'Voeg header toe aan bericht';
$labels['deleteheader'] = 'Verwijder header van bericht';
$labels['headername'] = 'Header naam';
$labels['headervalue'] = 'Header waarde';
$labels['headerpos'] = 'Header positie';
$labels['headeratstart'] = 'in het begin';
$labels['headeratend'] = 'op het einde';
$labels['headeroccurrence'] = 'Header weergave/positie';
$labels['headerfromstart'] = 'vanaf begin';
$labels['headerfromend'] = 'vanaf einde';
$labels['headerpatterns'] = 'Header gegevenspatroon';
$labels['headermatchtype'] = 'match op type:';
$labels['setvariable'] = 'Variabele instellen';
$labels['setvarname'] = 'Naam variabele:';
$labels['setvarvalue'] = 'Waarde:';
$labels['setvarmodifiers'] = 'Waarde wijzigen:';
$labels['varlower'] = 'kleine letters';
$labels['varupper'] = 'hoofdletters';
$labels['varlowerfirst'] = 'eerste karakter als kleine letter';
$labels['varupperfirst'] = 'eerste karakter als hoofdletter';
$labels['varquotewildcard'] = 'speciale karakters quoten';
$labels['varlength'] = 'lengte';
$labels['notify'] = 'Stuur melding';
$labels['notifytarget'] = 'Meldingsdoel:';
$labels['notifymessage'] = 'Meldingsbericht (optioneel):';
$labels['notifyoptions'] = 'Meldingsopties (optioneel):';
$labels['notifyfrom'] = 'Meldingsafzender (optioneel):';
$labels['notifyimportance'] = 'Prioriteit:';
$labels['notifyimportancelow'] = 'laag';
$labels['notifyimportancenormal'] = 'normaal';
$labels['notifyimportancehigh'] = 'hoog';
$labels['notifymethodmailto'] = 'E-mail';
$labels['notifymethodtel'] = 'Telefoon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Filter aanmaken';
$labels['usedata'] = 'Gebruik de volgende gegevens in het filter:';
$labels['nextstep'] = 'Volgende stap';
$labels['...'] = '...';
$labels['string'] = 'Karakterreeks';
$labels['currdate'] = 'Huidige datum';
$labels['datetest'] = 'Datum';
$labels['dateheader'] = 'header:';
$labels['year'] = 'jaar';
$labels['month'] = 'maand';
$labels['day'] = 'dag';
$labels['date'] = 'datum (jjjj-mm-dd)';
$labels['julian'] = 'datum (juliaanse kalender)';
$labels['hour'] = 'uur';
$labels['minute'] = 'minuut';
$labels['second'] = 'seconde';
$labels['time'] = 'tijd (uu:mm:ss)';
$labels['iso8601'] = 'datum (ISO-8601)';
$labels['std11'] = 'datum (RFC 2822)';
$labels['zone'] = 'tijdzone';
$labels['weekday'] = 'weekdag (0-6)';
$labels['advancedopts'] = 'Geavanceerde opties';
$labels['body'] = 'Inhoud';
$labels['address'] = 'adres';
$labels['envelope'] = 'envelope';
$labels['modifier'] = 'toets op:';
$labels['text'] = 'tekst';
$labels['undecoded'] = 'undecoded (raw)';
$labels['contenttype'] = 'content type';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'Alle';
$labels['domain'] = 'domein';
$labels['localpart'] = 'lokaal gedeelte';
$labels['user'] = 'gebruiker';
$labels['detail'] = 'detail';
$labels['comparator'] = 'vergelijkingswijze:';
$labels['default'] = 'standaard';
$labels['octet'] = 'strikt (octet)';
$labels['asciicasemap'] = 'hoofdletterongevoelig (ascii-casemap)';
$labels['asciinumeric'] = 'numeriek (ascii-numeriek)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'terugwaarts';
$labels['spamtestisgreaterthan'] = 'is groter dan';
$labels['spamtestisgreaterthanequal'] = 'is groter dan of gelijk aan';
$labels['spamtestislessthan'] = 'is minder dan';
$labels['spamtestislessthanequal'] = 'is minder dan of gelijk aan';
$labels['spamtestequals'] = 'is gelijk aan';
$labels['spamtestnotequals'] = 'is niet gelijk aan';
$labels['spamtestisunknown'] = 'is onbekend';
$labels['vacation'] = 'Afwezigheidsbericht';
$labels['vacation.reply'] = 'Antwoordbericht';
$labels['vacation.advanced'] = 'Geavanceerde instellingen';
$labels['vacation.from'] = 'Antwoord-afzender adres';
$labels['vacation.subject'] = 'Onderwerp';
$labels['vacation.body'] = 'Inhoud';
$labels['vacation.start'] = 'Start tijdstip';
$labels['vacation.end'] = 'Eind tijdstip';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Aan';
$labels['vacation.off'] = 'Uit';
$labels['vacation.addresses'] = 'Mijn e-mailadressen';
$labels['vacation.interval'] = 'Antwoordinterval';
$labels['vacation.after'] = 'Plaats de afwezigheidsregel achter';
$labels['vacation.saving'] = 'Gegevens worden opgeslagen...';
$labels['vacation.action'] = 'Actie voor inkomend bericht';
$labels['vacation.keep'] = 'Bewaren';
$labels['vacation.discard'] = 'Weggooien';
$labels['vacation.redirect'] = 'Doorsturen naar';
$labels['vacation.copy'] = 'Kopie sturen naar';
$labels['forward'] = 'Doorsturen';
$labels['forward.redirect'] = 'Doorsturen naar';
$labels['forward.copy'] = 'Kopie sturen naar';
$labels['forward.on'] = 'Aan';
$labels['forward.off'] = 'Uit';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'Voer de volgende actie uit voor binnenkomende berichten:';
$labels['forward.saving'] = 'Gegevens worden opgeslagen...';
$labels['filladdresses'] = 'Vullen met al mijn adressen';
$labels['arialabelfiltersetactions'] = 'Filtersetacties';
$labels['arialabelfilteractions'] = 'Filteracties';
$labels['arialabelfilterform'] = 'Filtereigenschappen';
$labels['ariasummaryfilterslist'] = 'Filterlijst';
$labels['ariasummaryfiltersetslist'] = 'Lijst met filtersets';
$labels['filterstitle'] = 'Bewerk filters voor inkomende berichten';
$labels['vacationtitle'] = 'Bewerk vakantieregel';
$labels['forwardtitle'] = 'Bewerk regel voor doorsturen van mail';
$labels['message'] = 'Bericht';
$labels['duplicate'] = 'is duplicaat';
$labels['notduplicate'] = 'is geen duplicaat';
$labels['duplicate.handle'] = 'handle:';
$labels['duplicate.header'] = 'header:';
$labels['duplicate.uniqueid'] = 'identificatie:';
$labels['duplicate.seconds'] = 'timeout (seconden):';
$labels['duplicate.last'] = 'relatief aan de laatste uitvoering';
$messages['filterunknownerror'] = 'Onbekende fout';
$messages['filterconnerror'] = 'Kan geen verbinding maken met de managesieve server';
$messages['filterdeleteerror'] = 'Kan filter niet verwijderen. Er trad een serverfout op.';
$messages['filterdeleted'] = 'Filter succesvol verwijderd';
$messages['filtersaved'] = 'Filter succesvol opgeslagen';
$messages['filtersaveerror'] = 'Kan filter niet opslaan. Er trad een serverfout op.';
$messages['filterformerror'] = 'Filterformulier bevat fouten.';
$messages['filterdeleteconfirm'] = 'Weet je zeker dat je het geselecteerde filter wilt verwijderen?';
$messages['ruledeleteconfirm'] = 'Weet je zeker dat je de geselecteerde regel wilt verwijderen?';
$messages['actiondeleteconfirm'] = 'Weet je zeker dat je de geselecteerde actie wilt verwijderen?';
$messages['forbiddenchars'] = 'Verboden karakters in het veld';
$messages['cannotbeempty'] = 'Veld mag niet leeg zijn';
$messages['ruleexist'] = 'Er bestaat al een filter met deze naam.';
$messages['setactivateerror'] = 'Filterset kon niet geactiveerd worden. Er trad een serverfout op.';
$messages['setdeactivateerror'] = 'Filterset kon niet gedeactiveerd worden. Er trad een serverfout op.';
$messages['setdeleteerror'] = 'Filterset kon niet verwijderd worden. Er trad een serverfout op.';
$messages['setactivated'] = 'Filterset succesvol geactiveerd.';
$messages['setdeactivated'] = 'Filterset succesvol gedeactiveerd.';
$messages['setdeleted'] = 'Filterset succesvol verwijderd.';
$messages['setupdated'] = 'Filterset succesvol bijgewerkt.';
$messages['setdeleteconfirm'] = 'Weet u zeker dat u de geselecteerde filterset wilt verwijderen?';
$messages['setcreateerror'] = 'Filterset kon niet aangemaakt worden. Er trad een serverfout op.';
$messages['setcreated'] = 'Filterset succesvol aangemaakt.';
$messages['activateerror'] = 'Geselecteerde filter(s) konden niet ingeschakeld worden. Er trad een serverfout op.';
$messages['deactivateerror'] = 'Geselecteerde filter(s) konden niet uitgeschakeld worden. Er trad een serverfout op.';
$messages['deactivated'] = 'Filter(s) succesvol ingeschakeld.';
$messages['activated'] = 'Filter(s) succesvol uitgeschakeld.';
$messages['moved'] = 'Filter succesvol verplaatst.';
$messages['moveerror'] = 'Het geselecteerde filter kon niet verplaatst worden. Er trad een serverfout op.';
$messages['nametoolong'] = 'Naam is te lang.';
$messages['namereserved'] = 'Gereserveerde naam.';
$messages['setexist'] = 'Filterset bestaat al.';
$messages['nodata'] = 'Tenminste één positie moet geselecteerd worden!';
$messages['invaliddateformat'] = 'Ongeldige datum of datumformaat';
$messages['saveerror'] = 'Opslaan van de gegevens is mislukt. Er trad een serverfout op.';
$messages['vacationsaved'] = 'Afwezigheidsbericht correct bewaard.';
$messages['forwardsaved'] = 'Doorstuur data succesvol opgeslagen.';
$messages['emptyvacationbody'] = 'Inhoud van vakantiebericht is verplicht!';
$messages['duplicate.conflict.err'] = 'Zowel header en unieke identificatie opgeven is niet toegestaan.';
$messages['disabledaction'] = 'Actie is niet toegestaan.';
$messages['lastindexempty'] = 'Gelieve een index op te geven.';
$messages['noflagset'] = 'Er moet ten minste één optie worden geselecteerd.';
PK{c�\�6Ơ"7"7"managesieve/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Hidlyddion';
$labels['managefilters'] = 'Rheoli hidlyddion ebost i fewn';
$labels['filtername'] = 'Enw hidlydd';
$labels['newfilter'] = 'Hidlydd newydd';
$labels['filteradd'] = 'Ychwanegu hidlydd';
$labels['filterdel'] = 'Dileu hidlydd';
$labels['rules'] = 'Rheolau';
$labels['actions'] = 'Gweithredoedd';
$labels['scope'] = 'Amrediad';
$labels['moveup'] = 'Symud i fyny';
$labels['movedown'] = 'Symud i lawr';
$labels['filterallof'] = 'sy\'n cyfateb i\'r holl reolau canlynol';
$labels['filteranyof'] = 'sy\'n cyfateb i unrhyw un i\'r rheolau canlynol';
$labels['filterany'] = 'pob neges';
$labels['filtercontains'] = 'yn cynnwys';
$labels['filternotcontains'] = 'ddim yn cynnwys';
$labels['filteris'] = 'yn hafal i';
$labels['filterisnot'] = 'ddim yn hafal i';
$labels['filterexists'] = 'yn bodoli';
$labels['filternotexists'] = 'ddim yn bodoli';
$labels['filtermatches'] = 'yn cyfateb i\'r mynegiant';
$labels['filternotmatches'] = 'ddim yn cyfateb i\'r mynegiant';
$labels['filterregex'] = 'yn cyfateb i\'r mynegiant rheolaidd';
$labels['filternotregex'] = 'ddim yn cyfateb i\'r mynegiant rheolaidd';
$labels['filterunder'] = 'o dan';
$labels['filterover'] = 'dros';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Rhan MIME:';
$labels['mime-message'] = 'neges';
$labels['mime-anychild'] = 'unrhywun';
$labels['mime-type'] = 'math';
$labels['mime-subtype'] = 'is-fath';
$labels['mime-contenttype'] = 'content-type';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Ychwanegu rheol';
$labels['delrule'] = 'Dileu rheol';
$labels['messagemoveto'] = 'Symud neges i';
$labels['messageredirect'] = 'Ail-gyfeirio neges i';
$labels['messagecopyto'] = 'Copio neges i';
$labels['messagesendcopy'] = 'Danfon copi o\'r neges i';
$labels['messagereply'] = 'Ymateb gyda\'r neges';
$labels['messagedelete'] = 'Dileu neges';
$labels['messagediscard'] = 'Gwaredu gyda neges';
$labels['messagekeep'] = 'Cadw\'r neges yn y Mewnflwch';
$labels['messagesrules'] = 'Ar gyfer ebost i fewn:';
$labels['messagesactions'] = '...rhedeg y gweithredoedd canlynol:';
$labels['add'] = 'Ychwanegu';
$labels['del'] = 'Dileu';
$labels['sender'] = 'Anfonwr';
$labels['recipient'] = 'Derbynnwr';
$labels['vacationaddr'] = 'Fy nghyfeiriadau ebost:';
$labels['vacationdays'] = 'Pa mor aml i ddanfon negeseuon (mewn dyddiau):';
$labels['vacationinterval'] = 'Pa mor aml i ddanfon negeseuon:';
$labels['vacationreason'] = 'Corff neges (rheswm ar wyliau):';
$labels['vacationfrom'] = 'Cyfeiriad ymateb anfonwr:';
$labels['vacationsubject'] = 'Pwnc neges:';
$labels['days'] = 'dyddiau';
$labels['seconds'] = 'eiliadau';
$labels['rulestop'] = 'Stopio gwerthuso rheolau';
$labels['enable'] = 'Galluogi/Analluogi';
$labels['filterset'] = 'Set hidlo';
$labels['filtersets'] = 'Setiau hidlyddion';
$labels['filtersetadd'] = 'Ychwanegu set hidlo';
$labels['filtersetdel'] = 'Dileu set hidlo';
$labels['filtersetact'] = 'Gweithredu set hidlo presennol';
$labels['filtersetdeact'] = 'Dadweithredu set hidlo presennol';
$labels['filterseteditraw'] = 'Golygu set hidlo';
$labels['filtersetswitch'] = 'Galluogi/analluogi set hidlo';
$labels['filterdef'] = 'Diffiniad hidlydd';
$labels['filtersetname'] = 'Enw set hidlo';
$labels['newfilterset'] = 'Set hidlo newydd';
$labels['active'] = 'gweithredol';
$labels['none'] = 'dim';
$labels['fromset'] = 'o set';
$labels['fromfile'] = 'o ffeil';
$labels['filterdisabled'] = 'Analluogwyd hidlydd';
$labels['filterenabled'] = 'Galluogwyd yr hidlydd';
$labels['countisgreaterthan'] = 'rhif yn fwy na';
$labels['countisgreaterthanequal'] = 'rhif yn fwy na neu hafal i';
$labels['countislessthan'] = 'rhif yn llai na';
$labels['countislessthanequal'] = 'rhif yn llai na neu hafal i';
$labels['countequals'] = 'rhif yn hafal i';
$labels['countnotequals'] = 'rhif ddim yn hafal i';
$labels['valueisgreaterthan'] = 'gwerth yn fwy na';
$labels['valueisgreaterthanequal'] = 'gwerth yn fwy na neu hafal i';
$labels['valueislessthan'] = 'gwerth yn llai na';
$labels['valueislessthanequal'] = 'gwerth yn llai neu hafal i';
$labels['valueequals'] = 'gwerth yn hafal i';
$labels['valuenotequals'] = 'gwerth ddim yn hafal i';
$labels['setflags'] = 'Rhoi fflag ar y neges';
$labels['addflags'] = 'Ychwanegu fflag i\'r neges';
$labels['removeflags'] = 'Dileu fflag o\'r neges';
$labels['flagread'] = 'Darllen';
$labels['flagdeleted'] = 'Dilewyd';
$labels['flaganswered'] = 'Atebwyd';
$labels['flagflagged'] = 'Nodwyd';
$labels['flagdraft'] = 'Drafft';
$labels['addheader'] = 'Ychwanegu pennawd i\'r neges';
$labels['deleteheader'] = 'Tynnu pennawd o\'r neges';
$labels['headername'] = 'Enw pennawd';
$labels['headervalue'] = 'Gwerth y pennawd';
$labels['headerpos'] = 'Safle\'r pennawd';
$labels['headeratstart'] = 'ar y dechrau';
$labels['headeratend'] = 'ar y diwedd';
$labels['headeroccurrence'] = 'Safle\'r pennawd';
$labels['headerfromstart'] = 'o\'r dechrau';
$labels['headerfromend'] = 'o\'r diwedd';
$labels['headerpatterns'] = 'Patrwm gwerth pennawd';
$labels['headermatchtype'] = 'cymharu math:';
$labels['setvariable'] = 'Gosod newidyn';
$labels['setvarname'] = 'Enw newidyn:';
$labels['setvarvalue'] = 'Gwerth newidyn:';
$labels['setvarmodifiers'] = 'Addasydd:';
$labels['varlower'] = 'llythrennau bychain';
$labels['varupper'] = 'priflythrennau';
$labels['varlowerfirst'] = 'llythyren gyntaf yn fach';
$labels['varupperfirst'] = 'llythyren gyntaf yn briflythyren';
$labels['varquotewildcard'] = 'dyfynnu nodau arbennig';
$labels['varlength'] = 'hyd';
$labels['notify'] = 'Anfon hysbysiad';
$labels['notifytarget'] = 'Target hysbysu:';
$labels['notifymessage'] = 'Neges hysbysu (dewisol):';
$labels['notifyoptions'] = 'Dewisiadau hysbysu (dewisol):';
$labels['notifyfrom'] = 'Anfonwr hysbysiad (dewisol):';
$labels['notifyimportance'] = 'Pwysigrwydd:';
$labels['notifyimportancelow'] = 'isel';
$labels['notifyimportancenormal'] = 'arferol';
$labels['notifyimportancehigh'] = 'uchel';
$labels['notifymethodmailto'] = 'Ebost';
$labels['notifymethodtel'] = 'Ffôn';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Creu hidlydd';
$labels['usedata'] = 'Defnyddio\'r wybodaeth ganlynol yn yr hidlydd:';
$labels['nextstep'] = 'Cam nesaf';
$labels['...'] = '...';
$labels['string'] = 'Llinyn';
$labels['currdate'] = 'Dyddiad cyfredol';
$labels['datetest'] = 'Dyddiad';
$labels['dateheader'] = 'pennawd:';
$labels['year'] = 'blwyddyn';
$labels['month'] = 'mis';
$labels['day'] = 'dydd';
$labels['date'] = 'dyddiad (bbbb-mm-dd)';
$labels['julian'] = 'dyddiad (julian)';
$labels['hour'] = 'awr';
$labels['minute'] = 'munud';
$labels['second'] = 'eiliad';
$labels['time'] = 'amser (aa:mm:ee)';
$labels['iso8601'] = 'dyddiad (ISO8601)';
$labels['std11'] = 'dyddiad (RFC2822)';
$labels['zone'] = 'parth-amser';
$labels['weekday'] = 'dydd yr wythnos (0-6)';
$labels['advancedopts'] = 'Dewisiadau uwch';
$labels['body'] = 'Corff';
$labels['address'] = 'cyfeiriad';
$labels['envelope'] = 'amlen';
$labels['modifier'] = 'newidydd:';
$labels['text'] = 'testun';
$labels['undecoded'] = 'heb ei ddatgodi (amrwd)';
$labels['contenttype'] = 'math cynnwys';
$labels['modtype'] = 'math:';
$labels['allparts'] = 'popeth';
$labels['domain'] = 'parth';
$labels['localpart'] = 'darn lleol';
$labels['user'] = 'defnyddiwr';
$labels['detail'] = 'manylion';
$labels['comparator'] = 'cymharydd';
$labels['default'] = 'rhagosodiad';
$labels['octet'] = 'llym (octet)';
$labels['asciicasemap'] = 'maint llythrennau (ascii-casemap)';
$labels['asciinumeric'] = 'rhifau (ascii-numeric)';
$labels['index'] = 'mynegai:';
$labels['indexlast'] = 'o chwith';
$labels['spamtest'] = 'Lefel sbam';
$labels['spamtestisgreaterthan'] = 'yn fwy na';
$labels['spamtestisgreaterthanequal'] = 'yn fwy na neu hafal i';
$labels['spamtestislessthan'] = 'yn llai na';
$labels['spamtestislessthanequal'] = 'yn llai na neu hafal i';
$labels['spamtestequals'] = 'yn hafal i';
$labels['spamtestnotequals'] = 'ddim yn hafal i';
$labels['spamtestisunknown'] = 'yn anhysbys';
$labels['vacation'] = 'Allan o\'r Swyddfa';
$labels['vacation.reply'] = 'Neges ymateb';
$labels['vacation.advanced'] = 'Gosodiadau uwch';
$labels['vacation.from'] = 'Cyfeiriad ymateb anfonwr';
$labels['vacation.subject'] = 'Pwnc';
$labels['vacation.body'] = 'Corff';
$labels['vacation.start'] = 'Amser cychwyn';
$labels['vacation.end'] = 'Amser gorffen';
$labels['vacation.status'] = 'Statws';
$labels['vacation.on'] = 'Ymlaen';
$labels['vacation.off'] = 'I ffwrdd';
$labels['vacation.addresses'] = 'Fy nghyfeiriadau ebost:';
$labels['vacation.interval'] = 'Cyfnod ymateb';
$labels['vacation.after'] = 'Rhoi\'r rheol allan-o\'r-swyddfa wedyn';
$labels['vacation.saving'] = 'Yn cadw\'r data...';
$labels['vacation.action'] = 'Gweithred neges i fewn';
$labels['vacation.keep'] = 'Cadw';
$labels['vacation.discard'] = 'Gwaredu';
$labels['vacation.redirect'] = 'Ailgyfeirio i';
$labels['vacation.copy'] = 'Danfon copi i';
$labels['forward'] = 'Danfon ymlaen';
$labels['forward.redirect'] = 'Ailgyfeirio i';
$labels['forward.copy'] = 'Danfon copi i';
$labels['forward.on'] = 'Ymlaen';
$labels['forward.off'] = 'I ffwrdd';
$labels['forward.status'] = 'Statws:';
$labels['forward.action'] = 'Am negeseuon sy\'n dod i fewn, gwneud y weithred ganlynol:';
$labels['forward.saving'] = 'Yn cadw\'r data...';
$labels['filladdresses'] = 'Llenwi gyda fy nghyfeiriadau ychwanegol';
$labels['arialabelfiltersetactions'] = 'Gweithrediadau set hidlydd';
$labels['arialabelfilteractions'] = 'Gweithrediadau hidlydd';
$labels['arialabelfilterform'] = 'Nodweddion hidlydd';
$labels['ariasummaryfilterslist'] = 'Rhestr o hidlyddion';
$labels['ariasummaryfiltersetslist'] = 'Rhestr o setiau hidlyddion';
$labels['filterstitle'] = 'Golygu hidlyddion ebost i fewn';
$labels['vacationtitle'] = 'Golygu rheol allan-o\'r-swyddfa';
$labels['forwardtitle'] = 'Golygu rheol danfon negeseuon ymlaen';
$labels['message'] = 'Neges';
$labels['duplicate'] = 'wedi dyblygu';
$labels['notduplicate'] = 'ddim wedi dyblygu';
$labels['duplicate.handle'] = 'dolen:';
$labels['duplicate.header'] = 'pennawd:';
$labels['duplicate.uniqueid'] = 'dynodwr:';
$labels['duplicate.seconds'] = 'terfyn amser (eiliadau):';
$labels['duplicate.last'] = 'yn berthnol i\'r gweithrediad diwethaf';
$messages['filterunknownerror'] = 'Gwall gweinydd anhysbys.';
$messages['filterconnerror'] = 'Methwyd cysylltu a\'r gweinydd.';
$messages['filterdeleteerror'] = 'Methwyd dileu hidlydd. Cafwydd gwall gweinydd.';
$messages['filterdeleted'] = 'Dilëuwyd hidlydd yn llwyddiannus.';
$messages['filtersaved'] = 'Cadwyd hidlydd yn llwyddiannus.';
$messages['filtersaveerror'] = 'Methwyd cadw hidlydd. Cafwyd gwall gweinydd.';
$messages['filterformerror'] = 'Mae gwallau yn y ffurflen hidlo.';
$messages['filterdeleteconfirm'] = 'Ydych chi wir am ddileu yr hidlydd ddewiswyd?';
$messages['ruledeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r rheol ddewiswyd?';
$messages['actiondeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r weithred ddewiswyd?';
$messages['forbiddenchars'] = 'Llythrennau gwaharddedig yn y maes.';
$messages['cannotbeempty'] = 'Ni all y maes fod yn wag.';
$messages['ruleexist'] = 'Mae hidlydd gyda\'r enw yma yn bodoli\'n barod.';
$messages['setactivateerror'] = 'Methwyd gweithredu y set hidlo ddewiswyd. Cafwyd gwall gweinydd.';
$messages['setdeactivateerror'] = 'Methwyd dadweithredu y set hidlo ddewiswyd. Cafwyd gwall gweinydd.';
$messages['setdeleteerror'] = 'Methwyd dileu y set hidlo ddewiswyd. Cafwyd gwall gweinydd.';
$messages['setactivated'] = 'Gweithredwyd y set hidlo yn llwyddiannus.';
$messages['setdeactivated'] = 'Anweithredwyd y set hidlo yn llwyddiannus.';
$messages['setdeleted'] = 'Dileuwyd y set hidlo yn llwyddiannus.';
$messages['setupdated'] = 'Diweddarwyd y set hidlo yn llwyddiannus.';
$messages['setdeleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu\'r set hidlo ddewiswyd?';
$messages['setcreateerror'] = 'Methwyd creu set hidlo. Cafwyd gwall gweinydd.';
$messages['setcreated'] = 'Creuwyd y set hidlo yn llwyddiannus.';
$messages['activateerror'] = 'Methwyd galluogi y hidlydd(ion) dewiswyd. Cafwyd gwall gweinydd.';
$messages['deactivateerror'] = 'Methwyd analluogi y hidlydd(ion) dewiswyd. Cafwyd gwall gweinydd.';
$messages['deactivated'] = 'Galluogwyd y hidlydd(ion) yn llwyddiannus.';
$messages['activated'] = 'Analluogwyd y hidlydd(ion) yn llwyddiannus.';
$messages['moved'] = 'Symudwyd y hidlydd yn llwyddiannus.';
$messages['moveerror'] = 'Methwyd symud y hidlydd dewiswyd. Cafwyd gwall gweinydd.';
$messages['nametoolong'] = 'Enw yn rhy hir.';
$messages['namereserved'] = 'Enw neilltuedig.';
$messages['setexist'] = 'Mae\'r set yn bodoli\'n barod.';
$messages['nodata'] = 'Rhaid dewis o leia un safle!';
$messages['invaliddateformat'] = 'Dyddiad neu fformat dyddiad annilys';
$messages['saveerror'] = 'Methwyd cadw\'r data. Cafwyd gwall gweinydd.';
$messages['vacationsaved'] = 'Cadwyd y data allan-o\'r-swyddfa yn llwyddiannus.';
$messages['forwardsaved'] = 'Cadwyd y data danfon yn llwyddiannus.';
$messages['emptyvacationbody'] = 'Mae angen rhoi corff y neges wyliau!';
$messages['duplicate.conflict.err'] = 'Ni ganiateir defnyddio pennawd a dynodwr unigryw.';
$messages['disabledaction'] = 'Ni ganiateir y weithred.';
$messages['lastindexempty'] = 'Mae angen mynegai wrth gyfri o\'r diwedd';
$messages['noflagset'] = 'Rhaid dewis o leia un fflag';
PK{c�\[��Vb5b5"managesieve/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filters';
$labels['managefilters'] = 'Manage incoming mail filters';
$labels['filtername'] = 'Filter name';
$labels['newfilter'] = 'New filter';
$labels['filteradd'] = 'Add filter';
$labels['filterdel'] = 'Delete filter';
$labels['rules'] = 'Rules';
$labels['actions'] = 'Actions';
$labels['scope'] = 'Scope';
$labels['moveup'] = 'Move up';
$labels['movedown'] = 'Move down';
$labels['filterallof'] = 'matching all of the following rules';
$labels['filteranyof'] = 'matching any of the following rules';
$labels['filterany'] = 'all messages';
$labels['filtercontains'] = 'contains';
$labels['filternotcontains'] = 'not contains';
$labels['filteris'] = 'is equal to';
$labels['filterisnot'] = 'is not equal to';
$labels['filterexists'] = 'exists';
$labels['filternotexists'] = 'not exists';
$labels['filtermatches'] = 'matches expression';
$labels['filternotmatches'] = 'not matches expression';
$labels['filterregex'] = 'matches regular expression';
$labels['filternotregex'] = 'not matches regular expression';
$labels['filterunder'] = 'under';
$labels['filterover'] = 'over';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME part:';
$labels['mime-message'] = 'message';
$labels['mime-anychild'] = 'any';
$labels['mime-type'] = 'type';
$labels['mime-subtype'] = 'subtype';
$labels['mime-contenttype'] = 'content-type';
$labels['mime-param'] = 'parameter';
$labels['addrule'] = 'Add rule';
$labels['delrule'] = 'Delete rule';
$labels['messagemoveto'] = 'Move message to';
$labels['messageredirect'] = 'Redirect message to';
$labels['messagecopyto'] = 'Copy message to';
$labels['messagesendcopy'] = 'Send message copy to';
$labels['messagereply'] = 'Reply with message';
$labels['messagedelete'] = 'Delete message';
$labels['messagediscard'] = 'Discard with message';
$labels['messagekeep'] = 'Keep message in Inbox';
$labels['messagesrules'] = 'For incoming mail:';
$labels['messagesactions'] = '...execute the following actions:';
$labels['add'] = 'Add';
$labels['del'] = 'Delete';
$labels['sender'] = 'Sender';
$labels['recipient'] = 'Recipient';
$labels['vacationaddr'] = 'My e-mail addresses:';
$labels['vacationdays'] = 'How often send messages (in days):';
$labels['vacationinterval'] = 'How often send messages:';
$labels['vacationreason'] = 'Message body (vacation reason):';
$labels['vacationfrom'] = 'Reply sender address:';
$labels['vacationsubject'] = 'Message subject:';
$labels['days'] = 'days';
$labels['seconds'] = 'seconds';
$labels['rulestop'] = 'Stop evaluating rules';
$labels['enable'] = 'Enable/Disable';
$labels['filterset'] = 'Filter set';
$labels['filtersets'] = 'Filter sets';
$labels['filtersetadd'] = 'Add filter set';
$labels['filtersetdel'] = 'Delete filter set';
$labels['filtersetact'] = 'Activate current filter set';
$labels['filtersetdeact'] = 'Deactivate current filter set';
$labels['filterseteditraw'] = 'Edit filter set';
$labels['filtersetswitch'] = 'Enable/disable filter set';
$labels['filterdef'] = 'Filter definition';
$labels['filtersetname'] = 'Filter set name';
$labels['newfilterset'] = 'New filter set';
$labels['active'] = 'active';
$labels['none'] = 'none';
$labels['fromset'] = 'from set';
$labels['fromfile'] = 'from file';
$labels['filterdisabled'] = 'Filter disabled';
$labels['filterenabled'] = 'Filter enabled';
$labels['countisgreaterthan'] = 'count is greater than';
$labels['countisgreaterthanequal'] = 'count is greater than or equal to';
$labels['countislessthan'] = 'count is less than';
$labels['countislessthanequal'] = 'count is less than or equal to';
$labels['countequals'] = 'count is equal to';
$labels['countnotequals'] = 'count is not equal to';
$labels['valueisgreaterthan'] = 'value is greater than';
$labels['valueisgreaterthanequal'] = 'value is greater than or equal to';
$labels['valueislessthan'] = 'value is less than';
$labels['valueislessthanequal'] = 'value is less than or equal to';
$labels['valueequals'] = 'value is equal to';
$labels['valuenotequals'] = 'value is not equal to';
$labels['setflags'] = 'Set flags to the message';
$labels['addflags'] = 'Add flags to the message';
$labels['removeflags'] = 'Remove flags from the message';
$labels['flagread'] = 'Read';
$labels['flagdeleted'] = 'Deleted';
$labels['flaganswered'] = 'Answered';
$labels['flagflagged'] = 'Flagged';
$labels['flagdraft'] = 'Draft';
$labels['addheader'] = 'Add header to the message';
$labels['deleteheader'] = 'Remove header from the message';
$labels['headername'] = 'Header name';
$labels['headervalue'] = 'Header value';
$labels['headerpos'] = 'Header position';
$labels['headeratstart'] = 'at the beginning';
$labels['headeratend'] = 'at the end';
$labels['headeroccurrence'] = 'Header occurrence/position';
$labels['headerfromstart'] = 'from start';
$labels['headerfromend'] = 'from end';
$labels['headerpatterns'] = 'Header value patterns';
$labels['headermatchtype'] = 'match type:';
$labels['setvariable'] = 'Set variable';
$labels['setvarname'] = 'Variable name:';
$labels['setvarvalue'] = 'Variable value:';
$labels['setvarmodifiers'] = 'Modifiers:';
$labels['varlower'] = 'lower-case';
$labels['varupper'] = 'upper-case';
$labels['varlowerfirst'] = 'first character lower-case';
$labels['varupperfirst'] = 'first character upper-case';
$labels['varquotewildcard'] = 'quote special characters';
$labels['varlength'] = 'length';
$labels['notify'] = 'Send notification';
$labels['notifytarget'] = 'Notification target:';
$labels['notifymessage'] = 'Notification message (optional):';
$labels['notifyoptions'] = 'Notification options (optional):';
$labels['notifyfrom'] = 'Notification sender (optional):';
$labels['notifyimportance'] = 'Importance:';
$labels['notifyimportancelow'] = 'low';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'high';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Phone';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Create filter';
$labels['usedata'] = 'Use following data in the filter:';
$labels['nextstep'] = 'Next Step';
$labels['...'] = '...';
$labels['string'] = 'String';
$labels['currdate'] = 'Current date';
$labels['datetest'] = 'Date';
$labels['dateheader'] = 'header:';
$labels['year'] = 'year';
$labels['month'] = 'month';
$labels['day'] = 'day';
$labels['date'] = 'date (yyyy-mm-dd)';
$labels['julian'] = 'date (julian)';
$labels['hour'] = 'hour';
$labels['minute'] = 'minute';
$labels['second'] = 'second';
$labels['time'] = 'time (hh:mm:ss)';
$labels['iso8601'] = 'date (ISO8601)';
$labels['std11'] = 'date (RFC2822)';
$labels['zone'] = 'time-zone';
$labels['weekday'] = 'weekday (0-6)';
$labels['advancedopts'] = 'Advanced options';
$labels['body'] = 'Body';
$labels['address'] = 'address';
$labels['envelope'] = 'envelope';
$labels['modifier'] = 'modifier:';
$labels['text'] = 'text';
$labels['undecoded'] = 'undecoded (raw)';
$labels['contenttype'] = 'content type';
$labels['modtype'] = 'type:';
$labels['allparts'] = 'all';
$labels['domain'] = 'domain';
$labels['localpart'] = 'local part';
$labels['user'] = 'user';
$labels['detail'] = 'detail';
$labels['comparator'] = 'comparator:';
$labels['default'] = 'default';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'backwards';
$labels['spamtest'] = 'Spam score';
$labels['spamtestisgreaterthan'] = 'is greater than';
$labels['spamtestisgreaterthanequal'] = 'is greater than or equal to';
$labels['spamtestislessthan'] = 'is less than';
$labels['spamtestislessthanequal'] = 'is less than or equal to';
$labels['spamtestequals'] = 'is equal to';
$labels['spamtestnotequals'] = 'is not equal to';
$labels['spamtestisunknown'] = 'is unknown';
$labels['vacation'] = 'Out of Office';
$labels['vacation.reply'] = 'Reply message';
$labels['vacation.advanced'] = 'Advanced settings';
$labels['vacation.from'] = 'Reply sender address';
$labels['vacation.subject'] = 'Subject';
$labels['vacation.body'] = 'Body';
$labels['vacation.start'] = 'Start time';
$labels['vacation.end'] = 'End time';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'On';
$labels['vacation.off'] = 'Off';
$labels['vacation.addresses'] = 'My e-mail addresses';
$labels['vacation.interval'] = 'Reply interval';
$labels['vacation.after'] = 'Put the out-of-office rule after';
$labels['vacation.saving'] = 'Saving data...';
$labels['vacation.action'] = 'Incoming message action';
$labels['vacation.keep'] = 'Keep';
$labels['vacation.discard'] = 'Discard';
$labels['vacation.redirect'] = 'Redirect to';
$labels['vacation.copy'] = 'Send copy to';
$labels['forward'] = 'Forwarding';
$labels['forward.redirect'] = 'Redirect to';
$labels['forward.copy'] = 'Send copy to';
$labels['forward.on'] = 'On';
$labels['forward.off'] = 'Off';
$labels['forward.status'] = 'Status:';
$labels['forward.action'] = 'For incoming mails execute the following action:';
$labels['forward.saving'] = 'Saving data...';
$labels['filladdresses'] = 'Fill with all my addresses';
$labels['arialabelfiltersetactions'] = 'Filter set actions';
$labels['arialabelfilteractions'] = 'Filter actions';
$labels['arialabelfilterform'] = 'Filter properties';
$labels['ariasummaryfilterslist'] = 'List of filters';
$labels['ariasummaryfiltersetslist'] = 'List of filter sets';
$labels['filterstitle'] = 'Edit incoming mail filters';
$labels['vacationtitle'] = 'Edit out-of-office rule';
$labels['forwardtitle'] = 'Edit mail forwarding rule';
$labels['message'] = 'Message';
$labels['duplicate'] = 'is duplicate';
$labels['notduplicate'] = 'is not duplicate';
$labels['duplicate.handle'] = 'handle:';
$labels['duplicate.header'] = 'header:';
$labels['duplicate.uniqueid'] = 'identifier:';
$labels['duplicate.seconds'] = 'timeout (seconds):';
$labels['duplicate.last'] = 'relative to the last execution';
$messages['filterunknownerror'] = 'Unknown server error';
$messages['filterconnerror'] = 'Unable to connect to managesieve server';
$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occurred.';
$messages['filterdeleted'] = 'Filter deleted successfully';
$messages['filtersaved'] = 'Filter saved successfully';
$messages['filtersaveerror'] = 'Unable to save filter. Server error occurred.';
$messages['filterformerror'] = 'Filter form contains errors.';
$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?';
$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?';
$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?';
$messages['forbiddenchars'] = 'Forbidden characters in field';
$messages['cannotbeempty'] = 'Field cannot be empty';
$messages['ruleexist'] = 'Filter with specified name already exists.';
$messages['setactivateerror'] = 'Unable to activate selected filter set. Server error occurred.';
$messages['setdeactivateerror'] = 'Unable to deactivate selected filter set. Server error occurred.';
$messages['setdeleteerror'] = 'Unable to delete selected filter set. Server error occurred.';
$messages['setactivated'] = 'Filter set activated successfully.';
$messages['setdeactivated'] = 'Filter set deactivated successfully.';
$messages['setdeleted'] = 'Filter set deleted successfully.';
$messages['setupdated'] = 'Filter set updated successfully.';
$messages['setdeleteconfirm'] = 'Are you sure, you want to delete the selected filter set?';
$messages['setcreateerror'] = 'Unable to create filter set. Server error occurred.';
$messages['setcreated'] = 'Filter set created successfully.';
$messages['activateerror'] = 'Unable to enable selected filter(s). Server error occurred.';
$messages['deactivateerror'] = 'Unable to disable selected filter(s). Server error occurred.';
$messages['deactivated'] = 'Filter(s) disabled successfully.';
$messages['activated'] = 'Filter(s) enabled successfully.';
$messages['moved'] = 'Filter moved successfully.';
$messages['moveerror'] = 'Unable to move selected filter. Server error occurred.';
$messages['nametoolong'] = 'Name too long.';
$messages['namereserved'] = 'Reserved name.';
$messages['setexist'] = 'Set already exists.';
$messages['nodata'] = 'At least one position must be selected!';
$messages['invaliddateformat'] = 'Invalid date or date part format';
$messages['saveerror'] = 'Unable to save data. Server error occurred.';
$messages['vacationsaved'] = 'Out-of-office data saved successfully.';
$messages['forwardsaved'] = 'Forward data saved successfully.';
$messages['emptyvacationbody'] = 'Body of vacation message is required!';
$messages['duplicate.conflict.err'] = 'Both header and unique identifier are not allowed.';
$messages['disabledaction'] = 'Action not permitted.';
$messages['lastindexempty'] = 'Index is required when counting from end';
$messages['noflagset'] = 'At least one flag must be selected.';
PK{c�\��'('("managesieve/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtur';
$labels['managefilters'] = 'Umsit mótakandi teldupost filtur';
$labels['filtername'] = 'Navn á filtri';
$labels['newfilter'] = 'Nýtt filtur';
$labels['filteradd'] = 'Nýtt filtur';
$labels['filterdel'] = 'Strika filtur';
$labels['actions'] = 'Gerðir';
$labels['scope'] = 'Leita frá';
$labels['moveup'] = 'Flyt upp';
$labels['movedown'] = 'Flyt niður';
$labels['filterallof'] = 'samsvarar allar fylgjandi reglur';
$labels['filteranyof'] = 'samsvarar onkrar av fylgjandi reglum';
$labels['filterany'] = 'øll boð';
$labels['filtercontains'] = 'inniheldur';
$labels['filternotcontains'] = 'inniheldur ikki';
$labels['filteris'] = 'er tað sama sum';
$labels['filterisnot'] = 'er ikki tað sama sum';
$labels['filterexists'] = 'er til';
$labels['filternotexists'] = 'er ikki til';
$labels['filtermatches'] = 'samsvarar við orðafelli';
$labels['filternotmatches'] = 'Samsvarar ikki við orðafelli';
$labels['filterregex'] = 'Samsvarar við "regular expression"';
$labels['filternotregex'] = 'Samsvarar ikki við "regular expression"';
$labels['filterunder'] = 'undur';
$labels['filterover'] = 'yvir';
$labels['addrule'] = 'Stovna regul';
$labels['delrule'] = 'Strika regul';
$labels['messagemoveto'] = 'Flyt boð til';
$labels['messageredirect'] = 'Leið boð til';
$labels['messagecopyto'] = 'Tvítak boð til';
$labels['messagesendcopy'] = 'Send boð avrit til';
$labels['messagereply'] = 'Svara við boðum';
$labels['messagedelete'] = 'Strika boð';
$labels['messagediscard'] = 'Strika boð við boðum';
$labels['messagekeep'] = 'Goym boð í postkassa';
$labels['messagesrules'] = 'Fyri móttiknan post:';
$labels['messagesactions'] = '...koyr fylgjandi gerðir';
$labels['add'] = 'Legg aftrat';
$labels['del'] = 'Strika';
$labels['sender'] = 'Avsendari';
$labels['recipient'] = 'Móttakari';
$labels['vacationaddr'] = 'Mínir teldupost bústaðir:';
$labels['vacationdays'] = 'Hvussu ofta skal sendast (í døgum):';
$labels['vacationinterval'] = 'Hvussu ofta skulu boðini sendast:';
$labels['vacationreason'] = 'Boð innihald (feriu orsøk):';
$labels['vacationfrom'] = 'Svara sendara bústaði:';
$labels['vacationsubject'] = 'Evni á boðum:';
$labels['days'] = 'dagar';
$labels['seconds'] = 'sekund';
$labels['rulestop'] = 'Steðga við at eftirmeta reglur';
$labels['enable'] = 'Tendra/Sløkk';
$labels['filtersets'] = 'Sílu sett';
$labels['filterdef'] = 'Sílu avmarking ';
$labels['active'] = 'tendra';
$labels['none'] = 'einki';
$labels['fromset'] = 'frá sett';
$labels['fromfile'] = 'frá fílu';
$labels['filterdisabled'] = 'Síla óvirkin';
$labels['countisgreaterthan'] = 'talið er hægri enn';
$labels['countisgreaterthanequal'] = 'talið er stórri ella tað sama sum';
$labels['countislessthan'] = 'talið er minni enn';
$labels['countislessthanequal'] = 'talið er minni enn ella tað sama sum';
$labels['countequals'] = 'talið er tað sama sum';
$labels['countnotequals'] = 'talið er ikki tað sama sum';
$labels['valueisgreaterthan'] = 'virði er hægri enn';
$labels['valueisgreaterthanequal'] = 'virði er hægri enn ella tað sama sum';
$labels['valueislessthan'] = 'virði er minnni enn';
$labels['valueislessthanequal'] = 'virði er minni enn ella tað sama sum';
$labels['valueequals'] = 'virði er tað sama sum';
$labels['valuenotequals'] = 'virði er ikki tað sama sum';
$labels['setflags'] = 'Set mørk á boðini';
$labels['addflags'] = 'Legg mørk á boðini';
$labels['removeflags'] = 'Strika mørk frá boðunum';
$labels['flagread'] = 'Les';
$labels['flagdeleted'] = 'Strika';
$labels['flaganswered'] = 'Svara';
$labels['flagflagged'] = 'Markera';
$labels['flagdraft'] = 'Kladda';
$labels['setvariable'] = 'Set variabu';
$labels['setvarname'] = 'Navn á variabli';
$labels['setvarvalue'] = 'Virði á variabli';
$labels['setvarmodifiers'] = 'Avmarkari:';
$labels['varlower'] = 'við lítlum';
$labels['varupper'] = 'við stórum';
$labels['varlowerfirst'] = 'fyrsti bókstavur við lítlum';
$labels['varupperfirst'] = 'fyrsti bókstavur við stórum';
$labels['varquotewildcard'] = 'kvota fyri serlig tekin';
$labels['varlength'] = 'longd';
$labels['notify'] = 'send kunngerð';
$labels['notifytarget'] = 'Kunngerð mál:';
$labels['notifymessage'] = 'Boð í kunngerð (ikki oblikatorist):';
$labels['notifyoptions'] = 'Kunngerðis møguleikar (valmøguligt):';
$labels['notifyfrom'] = 'Sendari av kunngerð (valfríur):';
$labels['notifyimportance'] = 'Týdningur:';
$labels['notifyimportancelow'] = 'lágt';
$labels['notifyimportancenormal'] = 'vanligt';
$labels['notifyimportancehigh'] = 'høgt';
$labels['notifymethodmailto'] = 'Teldupost';
$labels['notifymethodtel'] = 'Telefon';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Stovna sílu';
$labels['usedata'] = 'Brúka fylgjandi dátu í sílu';
$labels['nextstep'] = 'Næsta stig';
$labels['...'] = '...';
$labels['currdate'] = 'dagsins dato';
$labels['datetest'] = 'Dato';
$labels['dateheader'] = 'Teksthøvd ';
$labels['year'] = 'ár';
$labels['month'] = 'mánið';
$labels['day'] = 'dagur';
$labels['date'] = 'dato (yyyy-mm-dd)';
$labels['julian'] = 'dato (julianskur)';
$labels['hour'] = 'tími';
$labels['minute'] = 'minuttur';
$labels['second'] = 'sekund';
$labels['time'] = 'klokkan (tt:mm:ss)';
$labels['iso8601'] = 'dato (ISO8601)';
$labels['std11'] = 'dato (RFC2822)';
$labels['zone'] = 'tíðarøki';
$labels['weekday'] = 'vikudagur (0-6)';
$labels['advancedopts'] = 'Víðkaðir valmøguleikar';
$labels['body'] = 'Innihald';
$labels['address'] = 'Bústaður';
$labels['envelope'] = 'brævbjálvi ';
$labels['modifier'] = 'Broytari:';
$labels['text'] = 'tekstur';
$labels['undecoded'] = 'umskriva (raw)';
$labels['contenttype'] = 'innihalds slag';
$labels['modtype'] = 'slag:';
$labels['allparts'] = 'alt';
$labels['domain'] = 'økisnavn';
$labels['localpart'] = 'heima partur';
$labels['user'] = 'brúkari';
$labels['detail'] = 'detaljur';
$labels['comparator'] = 'Comparator:';
$labels['default'] = 'vanligt';
$labels['octet'] = 'strangt (octet)';
$labels['asciicasemap'] = 'stavbundin (asciii-casemap)';
$labels['asciinumeric'] = 'tøl (ascii-numeric)';
$labels['index'] = 'skrá:';
$labels['indexlast'] = 'aftureftir';
$labels['spamtestequals'] = 'er tað sama sum';
$labels['spamtestnotequals'] = 'er ikki tað sama sum';
$labels['vacation.reply'] = 'Svar innihald';
$labels['vacation.advanced'] = 'Víðkaðir valmøguleikar';
$labels['vacation.from'] = 'Svara sendara bústaði';
$labels['vacation.subject'] = 'Evni';
$labels['vacation.body'] = 'Innihald';
$labels['vacation.status'] = 'Støða';
$labels['vacation.on'] = 'Tendra';
$labels['vacation.off'] = 'Sløkt';
$labels['vacation.addresses'] = 'Mín teldupost bústaður';
$labels['vacation.interval'] = 'Svar millumbil';
$labels['vacation.saving'] = 'Goymur dáta...';
$labels['vacation.action'] = 'Ger fyri móttikin boð';
$labels['vacation.keep'] = 'Goym';
$labels['vacation.discard'] = 'Strika';
$labels['vacation.redirect'] = 'Leið ti';
$labels['vacation.copy'] = 'Send avrit ti';
$labels['forward.redirect'] = 'Leið ti';
$labels['forward.copy'] = 'Send avrit ti';
$labels['forward.on'] = 'Tendra';
$labels['forward.off'] = 'Sløkt';
$labels['forward.saving'] = 'Goymur dáta...';
$labels['filladdresses'] = 'Fyll við øllum mínum bústaðum';
$labels['arialabelfiltersetactions'] = 'Sílu sett gerðir';
$labels['arialabelfilteractions'] = 'Sílu gerðir';
$labels['arialabelfilterform'] = 'Sílu skilvísi';
$labels['ariasummaryfilterslist'] = 'Listi yvir sílur';
$labels['ariasummaryfiltersetslist'] = 'Skrá av sílu sett';
$labels['filterstitle'] = 'Broyt mótakandi sílur fyri móttiknan post';
$labels['vacationtitle'] = 'Broyt out-of-office regul';
$labels['duplicate.header'] = 'Teksthøvd ';
$messages['filterunknownerror'] = 'Ókendur ambætara feilur';
$messages['filterconnerror'] = 'Einki samband við ambætara.';
$messages['filterdeleteerror'] = 'Tað bar ikki til at strika sílu. Ambætara feilur kom fyri';
$messages['filterdeleted'] = 'Sílan var strika';
$messages['filtersaved'] = 'Sílan var goymd';
$messages['filtersaveerror'] = 'Tað ber ikki til at goyma valdu sílur. Ambætara feilur kom fyri.';
$messages['filterdeleteconfirm'] = 'Ert tú vísur í at tú vilt strika valdu sílu?';
$messages['ruledeleteconfirm'] = 'Ert tú vísur í, at tú vilt strika valda regul?';
$messages['actiondeleteconfirm'] = 'Ert tú vísur í, at tú vilt strika valdu gerð?';
$messages['forbiddenchars'] = 'Óloyvd tekin í feltinum.';
$messages['cannotbeempty'] = 'Felt kann ikki verða tómt';
$messages['ruleexist'] = 'Síla við givna navni er longu til';
$messages['activateerror'] = 'Tað ber ikki til at tendra valdu sílur. Ambætara feilur kom fyri.';
$messages['deactivateerror'] = 'Tað ber ikki til at sløkkja valdu sílur. Ambætara feilur kom fyri.';
$messages['deactivated'] = 'Filtur sløkt';
$messages['activated'] = 'Filtur tendra.';
$messages['moved'] = 'Síla flutt.';
$messages['moveerror'] = 'Tað ber ikki til at flyta valdu sílur. Ambætara feilur kom fyri.';
$messages['nametoolong'] = 'Navni er ov langt';
$messages['namereserved'] = 'Reservera navn.';
$messages['setexist'] = 'Sett er longu til';
$messages['nodata'] = 'Minst eitt stað má verða valt!';
$messages['invaliddateformat'] = 'Ógildugt dato ella formulering av dato';
$messages['saveerror'] = 'Tað bar ikki til at goyma dáta. Ambætara feilur kom fyri.';
$messages['emptyvacationbody'] = 'Innihaldi í feriu boðinum er kraft!';
PK{c�\)�a�`9`9"managesieve/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtrai';
$labels['managefilters'] = 'Tvarkyti gaunamų laiškų filtrus';
$labels['filtername'] = 'Filtro pavadinimas';
$labels['newfilter'] = 'Naujas filtras';
$labels['filteradd'] = 'Pridėti filtrą';
$labels['filterdel'] = 'Pašalinti filtrą';
$labels['rules'] = 'Taisyklės';
$labels['actions'] = 'Veiksmai';
$labels['scope'] = 'Sritis';
$labels['moveup'] = 'Pakelti aukštyn';
$labels['movedown'] = 'Nuleisti žemyn';
$labels['filterallof'] = 'atitinka visas šias taisykles';
$labels['filteranyof'] = 'atitinka bet kurią šių taisyklių';
$labels['filterany'] = 'visi laiškai';
$labels['filtercontains'] = 'savyje turi';
$labels['filternotcontains'] = 'savyje neturi';
$labels['filteris'] = 'yra lygus';
$labels['filterisnot'] = 'nėra lygus';
$labels['filterexists'] = 'egzistuoja';
$labels['filternotexists'] = 'neegzistuoja';
$labels['filtermatches'] = 'atitinka šabloną';
$labels['filternotmatches'] = 'neatitinka šablono';
$labels['filterregex'] = 'atitinka reguliarųjį reiškinį';
$labels['filternotregex'] = 'neatitinka reguliariojo reiškinio';
$labels['filterunder'] = 'nesiekia';
$labels['filterover'] = 'viršija';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME dalis:';
$labels['mime-message'] = 'laiškas';
$labels['mime-anychild'] = 'bet kokia';
$labels['mime-type'] = 'tipas';
$labels['mime-subtype'] = 'potipis';
$labels['mime-contenttype'] = 'turinio tipas';
$labels['mime-param'] = 'parametras';
$labels['addrule'] = 'Pridėti taisyklę';
$labels['delrule'] = 'Pašalinti taisyklę';
$labels['messagemoveto'] = 'Perkelti laišką į';
$labels['messageredirect'] = 'Peradresuoti laišką';
$labels['messagecopyto'] = 'Kopijuoti laišką į';
$labels['messagesendcopy'] = 'Nusiųsti laiško kopiją';
$labels['messagereply'] = 'Atsakyti laišku';
$labels['messagedelete'] = 'Pašalinti laišką';
$labels['messagediscard'] = 'Panaikinti su laišku';
$labels['messagekeep'] = 'Palikti laišką gautųjų aplanke';
$labels['messagesrules'] = 'Gaunamiems laiškams:';
$labels['messagesactions'] = '…vykdyti šiuos veiksmus:';
$labels['add'] = 'Pridėti';
$labels['del'] = 'Pašalinti';
$labels['sender'] = 'Siuntėjas';
$labels['recipient'] = 'Gavėjas';
$labels['vacationaddr'] = 'Mano el. pašto adresai:';
$labels['vacationdays'] = 'Kaip dažnai išsiųsti laiškus (dienomis):';
$labels['vacationinterval'] = 'Kaip dažnai siųsti laiškus:';
$labels['vacationreason'] = 'Laiško tekstas';
$labels['vacationfrom'] = 'Atsakymo siuntėjo adresas:';
$labels['vacationsubject'] = 'Laiško tema:';
$labels['days'] = 'd.';
$labels['seconds'] = 'sek.';
$labels['rulestop'] = 'Nutraukti taisyklių vykdymą';
$labels['enable'] = 'Įjungti / išjungti';
$labels['filterset'] = 'Filtrų rinkinys';
$labels['filtersets'] = 'Filtrų rinkiniai';
$labels['filtersetadd'] = 'Pridėti filtrų rinkinį';
$labels['filtersetdel'] = 'Ištrinti filtrų rinkinį';
$labels['filtersetact'] = 'Aktyvuoti dabartinį filtrų rinkinį';
$labels['filtersetdeact'] = 'Pasyvinti dabartinį filtrų rinkinį';
$labels['filterseteditraw'] = 'Taisyti filtrų rinkinį';
$labels['filtersetswitch'] = 'Įjungti/išjungti filtrų rinkinį';
$labels['filterdef'] = 'Filtro aprašas';
$labels['filtersetname'] = 'Filtrų rinkinio pavadinimas';
$labels['newfilterset'] = 'Naujas filtrų rinkinys';
$labels['active'] = 'aktyvus';
$labels['none'] = 'joks';
$labels['fromset'] = 'iš rinkinio';
$labels['fromfile'] = 'iš failo';
$labels['filterdisabled'] = 'Filtras išjungtas';
$labels['filterenabled'] = 'Filtras įjungtas';
$labels['countisgreaterthan'] = 'kiekis didesnis nei';
$labels['countisgreaterthanequal'] = 'kiekis didesnis arba lygus';
$labels['countislessthan'] = 'kiekis mažesnis nei';
$labels['countislessthanequal'] = 'kiekis mažesnis arba lygus';
$labels['countequals'] = 'kiekis lygus';
$labels['countnotequals'] = 'kiekis nėra lygus';
$labels['valueisgreaterthan'] = 'reikšmė didesnė nei';
$labels['valueisgreaterthanequal'] = 'reikšmė didesnė arba lygi';
$labels['valueislessthan'] = 'reikšmė mažesnė nei';
$labels['valueislessthanequal'] = 'reikšmė mažesnė arba lygi';
$labels['valueequals'] = 'reikšmė lygi';
$labels['valuenotequals'] = 'reikšmė nėra lygi';
$labels['setflags'] = 'Nustatyti laiško požymius';
$labels['addflags'] = 'Pridėti laiško požymius';
$labels['removeflags'] = 'Pašalinti laiško požymius';
$labels['flagread'] = 'Skaitytas';
$labels['flagdeleted'] = 'Pašalintas';
$labels['flaganswered'] = 'Atsakytas';
$labels['flagflagged'] = 'Pažymėtas gairele';
$labels['flagdraft'] = 'Juodraštis';
$labels['addheader'] = 'Pridėti antraštę į laišką';
$labels['deleteheader'] = 'Šalinti antraštę iš laiško';
$labels['headername'] = 'Antraštės pavadinimas';
$labels['headervalue'] = 'Antraštės reikšmė';
$labels['headerpos'] = 'Antraštės vieta';
$labels['headeratstart'] = 'pradžioje';
$labels['headeratend'] = 'pabaigoje';
$labels['headeroccurrence'] = 'Antraštės atsiradimas/vieta';
$labels['headerfromstart'] = 'nuo pradžios';
$labels['headerfromend'] = 'nuo pabaigos';
$labels['headerpatterns'] = 'Antraštės reikšmės šablonai';
$labels['headermatchtype'] = 'atitikimo tipas:';
$labels['setvariable'] = 'Nustatyti kintamąjį';
$labels['setvarname'] = 'Kintamojo vardas:';
$labels['setvarvalue'] = 'Kintamojo vertė:';
$labels['setvarmodifiers'] = 'Modifikatoriai:';
$labels['varlower'] = 'mažosios raidės';
$labels['varupper'] = 'didžiosios raidės';
$labels['varlowerfirst'] = 'pirmoji raidė mažoji';
$labels['varupperfirst'] = 'pirmoji raidė didžioji';
$labels['varquotewildcard'] = 'cituoti specialius simbolius';
$labels['varlength'] = 'ilgis';
$labels['notify'] = 'Siųsti priminimą';
$labels['notifytarget'] = 'Priminimo gavėjas:';
$labels['notifymessage'] = 'Priminimo laiškas (nebūtina):';
$labels['notifyoptions'] = 'Priminimo nustatymai (nebūtina):';
$labels['notifyfrom'] = 'Priminimo siuntėjas (nebūtina):';
$labels['notifyimportance'] = 'Svarbumas';
$labels['notifyimportancelow'] = 'žemas';
$labels['notifyimportancenormal'] = 'normalus';
$labels['notifyimportancehigh'] = 'aukštas';
$labels['notifymethodmailto'] = 'El. paštas';
$labels['notifymethodtel'] = 'Telefono numeris';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Kurti filtrą';
$labels['usedata'] = 'Filtrui naudoti šiuos duomenis:';
$labels['nextstep'] = 'Kitas žingsnis';
$labels['...'] = '…';
$labels['string'] = 'Eilutė';
$labels['currdate'] = 'Šiandienos data';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'antraštė:';
$labels['year'] = 'metai';
$labels['month'] = 'mėnuo';
$labels['day'] = 'diena';
$labels['date'] = 'data (yyyy-mm-dd)';
$labels['julian'] = 'data (Julijaus)';
$labels['hour'] = 'valanda';
$labels['minute'] = 'minutė';
$labels['second'] = 'sekundė';
$labels['time'] = 'laikas (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'laiko-zona';
$labels['weekday'] = 'savaitės diena (0-6)';
$labels['advancedopts'] = 'Papildomi nustatymai';
$labels['body'] = 'Laiško tekstas';
$labels['address'] = 'adresas';
$labels['envelope'] = 'vokas';
$labels['modifier'] = 'midifikatorius:';
$labels['text'] = 'tekstas';
$labels['undecoded'] = 'neiškoduotas (pirminis) tekstas';
$labels['contenttype'] = 'turinio tipas';
$labels['modtype'] = 'tipas:';
$labels['allparts'] = 'visi';
$labels['domain'] = 'sritis';
$labels['localpart'] = 'vietinė adreso dalis';
$labels['user'] = 'naudotojas';
$labels['detail'] = 'detalė';
$labels['comparator'] = 'palyginimo algoritmas:';
$labels['default'] = 'numatytasis';
$labels['octet'] = 'griežtas („octet“)';
$labels['asciicasemap'] = 'nepaisantis raidžių registro („ascii-casemap“)';
$labels['asciinumeric'] = 'skaitinis („ascii-numeric“)';
$labels['index'] = 'turinys:';
$labels['indexlast'] = 'atbulai';
$labels['spamtest'] = 'Brukalo lygis';
$labels['spamtestisgreaterthan'] = 'yra didesnis nei';
$labels['spamtestisgreaterthanequal'] = 'yra didesnis nei arba lygus';
$labels['spamtestislessthan'] = 'yra mažesnis nei';
$labels['spamtestislessthanequal'] = 'yra mažesnis nei arba lygus';
$labels['spamtestequals'] = 'yra lygus';
$labels['spamtestnotequals'] = 'nėra lygus';
$labels['spamtestisunknown'] = 'yra nežinomas';
$labels['vacation'] = 'Ne biure';
$labels['vacation.reply'] = 'Atsakyti laišku';
$labels['vacation.advanced'] = 'Papildomos nuostatos';
$labels['vacation.from'] = 'Atsakymo siuntėjo adresas';
$labels['vacation.subject'] = 'Tema';
$labels['vacation.body'] = 'Laiško tekstas';
$labels['vacation.start'] = 'Pradžios laikas';
$labels['vacation.end'] = 'Pabaigos laikas';
$labels['vacation.status'] = 'Būsena';
$labels['vacation.on'] = 'Įjungta';
$labels['vacation.off'] = 'Išjungta';
$labels['vacation.addresses'] = 'Mano el. pašto adresai';
$labels['vacation.interval'] = 'Atsakymo intervalas';
$labels['vacation.after'] = 'Išdėstyti ne-biure taisyklę po';
$labels['vacation.saving'] = 'Išsaugomi duomenys...';
$labels['vacation.action'] = 'Veiksmas su gaunamais laiškais';
$labels['vacation.keep'] = 'Palikti';
$labels['vacation.discard'] = 'Panaikinti';
$labels['vacation.redirect'] = 'Peradresuoti kam';
$labels['vacation.copy'] = 'Siųsti kopiją kam';
$labels['forward'] = 'Persiuntimas';
$labels['forward.redirect'] = 'Peradresuoti kam';
$labels['forward.copy'] = 'Siųsti kopiją kam';
$labels['forward.on'] = 'Įjungta';
$labels['forward.off'] = 'Išjungta';
$labels['forward.status'] = 'Būsena:';
$labels['forward.action'] = 'Gaunamiems laiškams vykdyti šį veiksmą:';
$labels['forward.saving'] = 'Išsaugomi duomenys...';
$labels['filladdresses'] = 'Įterpti visus mano el. pašto adresus';
$labels['arialabelfiltersetactions'] = 'Filtrų rinkinio veiksmai';
$labels['arialabelfilteractions'] = 'Filtro veiksmai';
$labels['arialabelfilterform'] = 'Filtro nustatymai';
$labels['ariasummaryfilterslist'] = 'Filtrų sąrašas';
$labels['ariasummaryfiltersetslist'] = 'Filtrų rinkinių sąrašas';
$labels['filterstitle'] = 'Tvarkyti gaunamų laiškų filtrus';
$labels['vacationtitle'] = 'Redaguoti ne-biure taisyklę';
$labels['forwardtitle'] = 'Taisyti laiškų persiuntimo taisyklę';
$labels['message'] = 'Laiškas';
$labels['duplicate'] = 'yra dubliuojamas';
$labels['notduplicate'] = 'nėra dubliuojamas';
$labels['duplicate.handle'] = 'doroklė:';
$labels['duplicate.header'] = 'antraštė:';
$labels['duplicate.uniqueid'] = 'identifikatorius:';
$labels['duplicate.seconds'] = 'laiko limitas (sekundžių):';
$labels['duplicate.last'] = 'santykinai paskutinio vykdymo';
$messages['filterunknownerror'] = 'Nežinoma serverio klaida.';
$messages['filterconnerror'] = 'Neįmanoma užmegzti ryšio su serveriu.';
$messages['filterdeleteerror'] = 'Nepavyksta ištrinti filtro. Įvyko serverio klaida.';
$messages['filterdeleted'] = 'Filtras panaikintas sėkmingai.';
$messages['filtersaved'] = 'Filtras sėkmingai išsaugotas';
$messages['filtersaveerror'] = 'Nepavyksta išsaugoti filtro. Įvyko serverio klaida.';
$messages['filterformerror'] = 'Filtrų formoje yra klaidų.';
$messages['filterdeleteconfirm'] = 'Ar jūs esate įsitikinęs, jog norite panaikinti pasirinktus filtrus(-ą)?';
$messages['ruledeleteconfirm'] = 'Ar jūs įsitikinęs, jog norite panaikinti pasirinktą taisyklę?';
$messages['actiondeleteconfirm'] = 'Ar jūs įsitikinęs, jog norite panaikinti pasirinktą veiksmą?';
$messages['forbiddenchars'] = 'Laukelyje yra draudžiamų simbolių.';
$messages['cannotbeempty'] = 'Laukelis negali būti tuščias';
$messages['ruleexist'] = 'Filtras tokiu vardu jau yra.';
$messages['setactivateerror'] = 'Nepavyko aktyvuoti pasirinkto filtrų rinkinio. Įvyko serverio klaida.';
$messages['setdeactivateerror'] = 'Nepavyko pasyvinti pasirinkto filtrų rinkinio. Įvyko serverio klaida.';
$messages['setdeleteerror'] = 'Nepavyko ištrinti pasirinkto filtrų rinkinio. Įvyko serverio klaida.';
$messages['setactivated'] = 'Filtrų rinkinys sėkmingai aktyvuotas.';
$messages['setdeactivated'] = 'Filtrų rinkinys sėkmingai pasyvintas.';
$messages['setdeleted'] = 'Filtrų rinkinys sėkmingai ištrintas.';
$messages['setupdated'] = 'Filtrų rinkinys sėkmingai atnaujintas.';
$messages['setdeleteconfirm'] = 'Ar tikrai norite ištrinti pasirinktą filtrų rinkinį?';
$messages['setcreateerror'] = 'Nepavyko sukurti filtrų rinkinio. Įvyko serverio klaida.';
$messages['setcreated'] = 'Filtrų rinkinys sėkmingai sukurtas.';
$messages['activateerror'] = 'Neįmanoma įjungti pasirinktų filtrų(-o). Įvyko serverio klaida.';
$messages['deactivateerror'] = 'Neįmanoma išjungti pasirinktų filtrų(-o). Įvyko serverio klaida.';
$messages['deactivated'] = 'Filtras(-as) sėkmingai išjungti.';
$messages['activated'] = 'Filtras(-as) sėkmingai įjungti.';
$messages['moved'] = 'Filtrai perkelti sėkmingai.';
$messages['moveerror'] = 'Pasirinkto filtro perkelti neįmanoma. Įvyko serverio klaida.';
$messages['nametoolong'] = 'Vardas per ilgas.';
$messages['namereserved'] = 'Rezervuotas vardas.';
$messages['setexist'] = 'Rinkinys jau yra sukurtas.';
$messages['nodata'] = 'Būtina pasirinkti bent vieną poziciją!';
$messages['invaliddateformat'] = 'Neteisingas datos ar jos dalies formatas';
$messages['saveerror'] = 'Nepavyksta išsaugoti duomenų. Įvyko serverio klaida.';
$messages['vacationsaved'] = 'Ne-biure duomenys sėkmingai įrašyti.';
$messages['forwardsaved'] = 'Persiuntimo duomenys sėkmingai įrašyti.';
$messages['emptyvacationbody'] = 'Atostogų pranešimui turinys būtinas!';
$messages['duplicate.conflict.err'] = 'Naudojimas antraštės ir identifikatoriaus kartu yra draudžiamas, negalimas.';
$messages['disabledaction'] = 'Veiksmas neleistinas.';
$messages['lastindexempty'] = 'Skaičiuojant nuo pabaigos yra reikalingas turinys';
$messages['noflagset'] = 'Privalo būti pasirinktas bent vienas požymis.';
PK{c�\���og:g:"managesieve/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Filtros';
$labels['managefilters'] = 'Gerir filtros';
$labels['filtername'] = 'Nome do filtro';
$labels['newfilter'] = 'Novo filtro';
$labels['filteradd'] = 'Adicionar filtro';
$labels['filterdel'] = 'Eliminar filtro';
$labels['rules'] = 'Regras';
$labels['actions'] = 'Ações';
$labels['scope'] = 'Âmbito';
$labels['moveup'] = 'Mover para cima';
$labels['movedown'] = 'Mover para baixo';
$labels['filterallof'] = 'corresponde a todas as seguintes regras';
$labels['filteranyof'] = 'corresponde a uma das seguintes regras';
$labels['filterany'] = 'todas as mensagens';
$labels['filtercontains'] = 'contém';
$labels['filternotcontains'] = 'não contém';
$labels['filteris'] = 'é igual a';
$labels['filterisnot'] = 'é diferente de';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'não existe';
$labels['filtermatches'] = 'expressão corresponde';
$labels['filternotmatches'] = 'expressão não corresponde';
$labels['filterregex'] = 'corresponde à expressão';
$labels['filternotregex'] = 'não corresponde à expressão';
$labels['filterunder'] = 'é inferior a';
$labels['filterover'] = 'é superior a';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'Parte MIME:';
$labels['mime-message'] = 'mensagem';
$labels['mime-anychild'] = 'qualquer';
$labels['mime-type'] = 'tipo';
$labels['mime-subtype'] = 'subtipo';
$labels['mime-contenttype'] = 'tipo de conteúdo';
$labels['mime-param'] = 'parâmetro';
$labels['addrule'] = 'Adicionar regra';
$labels['delrule'] = 'Eliminar regra';
$labels['messagemoveto'] = 'Mover mensagem para';
$labels['messageredirect'] = 'Redirecionar mensagem para';
$labels['messagecopyto'] = 'Copiar mensagem para';
$labels['messagesendcopy'] = 'Enviar cópia da mensagem para';
$labels['messagereply'] = 'Responder com a mensagem';
$labels['messagedelete'] = 'Eliminar mensagem';
$labels['messagediscard'] = 'Rejeitar mensagem';
$labels['messagekeep'] = 'Manter mensagem na Caixa de entrada';
$labels['messagesrules'] = 'Regras para Filtros';
$labels['messagesactions'] = 'Acções para Filtros';
$labels['add'] = 'Adicionar';
$labels['del'] = 'Eliminar';
$labels['sender'] = 'Remetente';
$labels['recipient'] = 'Destinatário';
$labels['vacationaddr'] = 'Os meus endereços de email:';
$labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):';
$labels['vacationinterval'] = 'Com que frequência envia mensagens:';
$labels['vacationreason'] = 'Conteúdo da mensagem (motivo da ausência):';
$labels['vacationfrom'] = 'Endereço de resposta do remetente:';
$labels['vacationsubject'] = 'Assunto da mensagem:';
$labels['days'] = 'dias';
$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de avaliar regras';
$labels['enable'] = 'Activar/Desactivar';
$labels['filterset'] = 'Conjunto de filtros';
$labels['filtersets'] = 'Filtros definidos';
$labels['filtersetadd'] = 'Adicionar conjunto de filtros';
$labels['filtersetdel'] = 'Eliminar conjunto de filtros';
$labels['filtersetact'] = 'Ativar conjunto de filtros atuais';
$labels['filtersetdeact'] = 'Desativar conjunto de filtros atuais';
$labels['filterseteditraw'] = 'Editar conjunto de filtros';
$labels['filtersetswitch'] = 'Ativar/desativar conjunto de filtros';
$labels['filterdef'] = 'Definição de filtros';
$labels['filtersetname'] = 'Nome do conjunto de filtros';
$labels['newfilterset'] = 'Novo conjunto de filtros';
$labels['active'] = 'ativo';
$labels['none'] = 'nehnum';
$labels['fromset'] = 'a partir do conjunto';
$labels['fromfile'] = 'a partir do ficheiro';
$labels['filterdisabled'] = 'Filtro desactivado';
$labels['filterenabled'] = 'Filtro activado';
$labels['countisgreaterthan'] = 'contagem é maior que';
$labels['countisgreaterthanequal'] = 'contagem é maior ou igual a';
$labels['countislessthan'] = 'contagem é menor que';
$labels['countislessthanequal'] = 'contagem é menor ou igual a';
$labels['countequals'] = 'contagem é igual a';
$labels['countnotequals'] = 'a contagem não é igual a';
$labels['valueisgreaterthan'] = 'valor é maior que';
$labels['valueisgreaterthanequal'] = 'valor é maior ou igual a';
$labels['valueislessthan'] = 'valor é menor que';
$labels['valueislessthanequal'] = 'valor é menor ou igual a';
$labels['valueequals'] = 'valor é igual a';
$labels['valuenotequals'] = 'o valor não é igual a';
$labels['setflags'] = 'Definir sinalizadores para a mensagem';
$labels['addflags'] = 'Adicionar sinalizadores à mensagem';
$labels['removeflags'] = 'Eliminar sinalizadores da mensagem';
$labels['flagread'] = 'Lida';
$labels['flagdeleted'] = 'Eliminada';
$labels['flaganswered'] = 'Respondida';
$labels['flagflagged'] = 'Sinalizada';
$labels['flagdraft'] = 'Rascunho';
$labels['addheader'] = 'Adicionar cabeçalho à mensagem';
$labels['deleteheader'] = 'Remover cabeçalho da mensagem';
$labels['headername'] = 'Nome do cabeçalho';
$labels['headervalue'] = 'Valor do cabeçalho';
$labels['headerpos'] = 'Posição do cabeçalho';
$labels['headeratstart'] = 'no início';
$labels['headeratend'] = 'no fim';
$labels['headeroccurrence'] = 'Ocorrência/posição do cabeçalho';
$labels['headerfromstart'] = 'do início';
$labels['headerfromend'] = 'do fim';
$labels['headerpatterns'] = 'Padrões de valor de cabeçalho';
$labels['headermatchtype'] = 'tipo de correspondência:';
$labels['setvariable'] = 'Definir variável';
$labels['setvarname'] = 'Nome da variável:';
$labels['setvarvalue'] = 'Valor da variável:';
$labels['setvarmodifiers'] = 'Modificadores:';
$labels['varlower'] = 'minúscula';
$labels['varupper'] = 'maiúscula';
$labels['varlowerfirst'] = 'primeira letra em minúscula';
$labels['varupperfirst'] = 'primeira letra em maiúscula';
$labels['varquotewildcard'] = 'citar caracteres especiais';
$labels['varlength'] = 'tamanho';
$labels['varencodeurl'] = 'codificado por percentagem (para URLs)';
$labels['notify'] = 'Enviar notificação';
$labels['notifytarget'] = 'Destino da notificação:';
$labels['notifymessage'] = 'Mensagem de notificação (opcional):';
$labels['notifyoptions'] = 'Opções de notificação (opcional):';
$labels['notifyfrom'] = 'Remetente da notificação (opcional):';
$labels['notifyimportance'] = 'Importância:';
$labels['notifyimportancelow'] = 'baixa';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Telefone';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Criar filtro';
$labels['usedata'] = 'Usar os seguintes dados no filtro:';
$labels['nextstep'] = 'Passo seguinte';
$labels['...'] = '...';
$labels['string'] = 'Cadeia';
$labels['currdate'] = 'Data atual';
$labels['datetest'] = 'Data';
$labels['dateheader'] = 'cabeçalho:';
$labels['year'] = 'ano';
$labels['month'] = 'mês';
$labels['day'] = 'dia';
$labels['date'] = 'data (yyyy-mm-dd)';
$labels['julian'] = 'data (juliano)';
$labels['hour'] = 'hora';
$labels['minute'] = 'minuto';
$labels['second'] = 'segundo';
$labels['time'] = 'hora (hh:mm:ss)';
$labels['iso8601'] = 'data (ISO8601)';
$labels['std11'] = 'data (RFC2822)';
$labels['zone'] = 'fuso horário';
$labels['weekday'] = 'dia da semana (0-6)';
$labels['advancedopts'] = 'Opções avançadas';
$labels['body'] = 'Corpo';
$labels['address'] = 'endereço';
$labels['envelope'] = 'envelope';
$labels['modifier'] = 'modificador:';
$labels['text'] = 'Texto';
$labels['undecoded'] = 'não descodificado (raw)';
$labels['contenttype'] = 'tipo de conteúdo';
$labels['modtype'] = 'tipo:';
$labels['allparts'] = 'todos';
$labels['domain'] = 'domínio';
$labels['localpart'] = 'parte local';
$labels['user'] = 'utilizador';
$labels['detail'] = 'detalhe';
$labels['comparator'] = 'Comparador';
$labels['default'] = 'predefinido';
$labels['octet'] = 'estrito (octeto)';
$labels['asciicasemap'] = 'não sensível a maiúsculas/minúsculas (caracteres ascii)';
$labels['asciinumeric'] = 'numérico (numérico ascii)';
$labels['index'] = 'índice:';
$labels['indexlast'] = 'retroceder';
$labels['spamtest'] = 'Nível de spam';
$labels['spamtestisgreaterthan'] = 'é maior que';
$labels['spamtestisgreaterthanequal'] = 'é maior ou igual a';
$labels['spamtestislessthan'] = 'é menor que';
$labels['spamtestislessthanequal'] = 'é menor ou igual a';
$labels['spamtestequals'] = 'é igual a';
$labels['spamtestnotequals'] = 'é diferente de';
$labels['spamtestisunknown'] = 'é desconhecido';
$labels['vacation'] = 'Ausente do Escritório';
$labels['vacation.reply'] = 'Mensagem de resposta';
$labels['vacation.advanced'] = 'Definições avançadas';
$labels['vacation.from'] = 'Endereço de resposta do remetente';
$labels['vacation.subject'] = 'Assunto';
$labels['vacation.body'] = 'Corpo da mensagem';
$labels['vacation.start'] = 'Hora de início';
$labels['vacation.end'] = 'Hora de fim';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Ligar';
$labels['vacation.off'] = 'Desligar';
$labels['vacation.addresses'] = 'Os meus endereços de email';
$labels['vacation.interval'] = 'Intervalo de resposta';
$labels['vacation.after'] = 'Colocar a regra Ausente-do-Escritório depois';
$labels['vacation.saving'] = 'A guardar dados...';
$labels['vacation.action'] = 'Acção para mensagem recebida';
$labels['vacation.keep'] = 'Manter';
$labels['vacation.discard'] = 'Rejeitar';
$labels['vacation.redirect'] = 'Redireccionar para';
$labels['vacation.copy'] = 'Enviar cópia para';
$labels['forward'] = 'Reencaminhamento';
$labels['forward.redirect'] = 'Redireccionar para';
$labels['forward.copy'] = 'Enviar cópia para';
$labels['forward.on'] = 'Ligar';
$labels['forward.off'] = 'Desligar';
$labels['forward.status'] = 'Estado:';
$labels['forward.action'] = 'Executar a seguinte ação para os mails recebidos:';
$labels['forward.saving'] = 'A guardar dados...';
$labels['filladdresses'] = 'Preencher com todos os meus endereços';
$labels['arialabelfiltersetactions'] = 'Acções do conjunto de filtros';
$labels['arialabelfilteractions'] = 'Acções dos filtros';
$labels['arialabelfilterform'] = 'Propriedades dos filtro';
$labels['ariasummaryfilterslist'] = 'Lista de filtros';
$labels['ariasummaryfiltersetslist'] = 'Lista de conjuntos de filtros';
$labels['filterstitle'] = 'Editar filtros de mensagens recebidas';
$labels['vacationtitle'] = 'Editar regra de ausência do escritório';
$labels['forwardtitle'] = 'Editar regra de reencaminhamento de mail';
$labels['message'] = 'Mensagem';
$labels['duplicate'] = 'é duplicado';
$labels['notduplicate'] = 'não é duplicado';
$labels['duplicate.handle'] = 'identificador:';
$labels['duplicate.header'] = 'cabeçalho:';
$labels['duplicate.uniqueid'] = 'identificador:';
$labels['duplicate.seconds'] = 'tempo esgotado (segundos):';
$labels['duplicate.last'] = 'relativamente à última execução';
$messages['filterunknownerror'] = 'Erro de servidor desconhecido';
$messages['filterconnerror'] = 'Não é possível ligar ao servidor Sieve';
$messages['filterdeleteerror'] = 'Não foi possível eliminar o filtro.  Ocorreu um erro no servidor.';
$messages['filterdeleted'] = 'Filtro eliminado com sucesso';
$messages['filtersaved'] = 'Filtro guardado com sucesso';
$messages['filtersaveerror'] = 'Não foi possível guardar o filtro.  Ocorreu um erro no servidor.';
$messages['filterformerror'] = 'O formulário de filtro contém erros.';
$messages['filterdeleteconfirm'] = 'Tem a certeza que pretende eliminar este filtro?';
$messages['ruledeleteconfirm'] = 'Tem a certeza que pretende eliminar esta regra?';
$messages['actiondeleteconfirm'] = 'Tem a certeza que pretende eliminar esta acção?';
$messages['forbiddenchars'] = 'Caracteres inválidos no campo.';
$messages['cannotbeempty'] = 'Este campo não pode estar vazio.';
$messages['ruleexist'] = 'Já existe um Filtro com o nome especificado.';
$messages['setactivateerror'] = 'Não foi possível ativar o conjunto de filtros selecionado. Erro do servidor.';
$messages['setdeactivateerror'] = 'Não foi possível desativar o conjunto de filtros selecionado. Erro do servidor.';
$messages['setdeleteerror'] = 'Não foi possível eliminar o conjunto de filtros selecionado. Erro do servidor.';
$messages['setactivated'] = 'Conjunto de filtros ativado com sucesso.';
$messages['setdeactivated'] = 'Conjunto de filtros desativado com sucesso.';
$messages['setdeleted'] = 'Conjunto de filtros eliminado com sucesso.';
$messages['setupdated'] = 'Conjunto de filtros atualizado com sucesso.';
$messages['setdeleteconfirm'] = 'Tem a certeza que pretende eliminar o conjunto de filtros selecionado?';
$messages['setcreateerror'] = 'Não foi possível criar o conjunto de filtros selecionado. Erro do servidor.';
$messages['setcreated'] = 'Conjunto de filtros criado com sucesso.';
$messages['activateerror'] = 'Não foi possível ativar os filtros selecionados. Ocorreu um erro no servidor.';
$messages['deactivateerror'] = 'Não foi possível desativar os filtros selecionados. Ocorreu um erro no servidor.';
$messages['deactivated'] = 'Filtro(s) ativado(s) com sucesso.';
$messages['activated'] = 'Filtro(s) desativado(s) com sucesso.';
$messages['moved'] = 'Filtro movido com sucesso.';
$messages['moveerror'] = 'Não foi possível mover o filtro selecionado. Ocorreu um erro no servidor.';
$messages['nametoolong'] = 'Nome demasiado longo.';
$messages['namereserved'] = 'Nome invertido.';
$messages['setexist'] = 'O conjunto já existe.';
$messages['nodata'] = 'Deve selecionar pelo menos uma posição.';
$messages['invaliddateformat'] = 'Data ou formato de data inválido.';
$messages['saveerror'] = 'Não foi possível guardar os dados. Ocorreu um erro no servidor.';
$messages['vacationsaved'] = 'Regra Ausente-do-Escritório guardada com sucesso.';
$messages['forwardsaved'] = 'Dados de reencaminhamento guardados com sucesso.';
$messages['emptyvacationbody'] = 'É necessário o corpo da mensagem de férias!';
$messages['duplicate.conflict.err'] = 'Ambos, cabeçalho e identificador único, não são permitidos.';
$messages['disabledaction'] = 'Ação não permitida.';
$messages['lastindexempty'] = 'É necessário o índice quando se conta a partir do fim';
$messages['noflagset'] = 'Deve seleccionar pelo menos um sinalizador.';
PK{c�\y�cޑO�O"managesieve/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Managesieve plugin         |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/


$labels['filters'] = 'Φίλτρα';
$labels['managefilters'] = 'Διαχείριση φίλτρων εισερχόμενων';
$labels['filtername'] = 'Ονομασία φίλτρου';
$labels['newfilter'] = 'Δημιουργία φίλτρου';
$labels['filteradd'] = 'Προσθήκη φίλτρου';
$labels['filterdel'] = 'Διαγραφή φίλτρου';
$labels['rules'] = 'Κανόνες';
$labels['actions'] = 'Ενέργειες';
$labels['scope'] = 'Εύρος';
$labels['moveup'] = 'Μετακίνηση πάνω';
$labels['movedown'] = 'Μετακίνηση κάτω';
$labels['filterallof'] = 'ταιριάζουν με όλους τους παρακάτω κανόνες';
$labels['filteranyof'] = 'ταιριάζουν με οποιονδήποτε από τους παρακάτω κανόνες';
$labels['filterany'] = 'όλα τα μηνύματα';
$labels['filtercontains'] = 'περιέχει';
$labels['filternotcontains'] = 'δεν περιέχει';
$labels['filteris'] = 'είναι ίσο με';
$labels['filterisnot'] = 'δεν είναι ίσο με';
$labels['filterexists'] = 'υπάρχει';
$labels['filternotexists'] = 'δεν υπάρχει';
$labels['filtermatches'] = 'ταιριάζει με την έκφραση ';
$labels['filternotmatches'] = 'Δεν ταιριάζει με την έκφραση';
$labels['filterregex'] = 'ταιριάζει με κανονική έκφραση';
$labels['filternotregex'] = 'δεν ταιριάζει με κανονική έκφραση';
$labels['filterunder'] = 'κάτω';
$labels['filterover'] = 'πάνω';
$labels['mime'] = 'MIME:';
$labels['mimepart'] = 'MIME part:';
$labels['mime-message'] = 'μήνυμα';
$labels['mime-anychild'] = 'όλα';
$labels['mime-type'] = 'τύπος';
$labels['mime-subtype'] = 'υποκατηγορία';
$labels['mime-contenttype'] = 'content-type';
$labels['mime-param'] = 'παράμετρος';
$labels['addrule'] = 'Προσθήκη κανόνα';
$labels['delrule'] = 'Διαγραφή κανόνα';
$labels['messagemoveto'] = 'Μετακίνηση μηνύματος στο';
$labels['messageredirect'] = 'Προώθηση μηνύματος στο';
$labels['messagecopyto'] = 'Αντιγραφη μυνηματος σε';
$labels['messagesendcopy'] = 'Αποστολη της αντιγραφης μυνηματος σε';
$labels['messagereply'] = 'Απάντηση με μήνυμα';
$labels['messagedelete'] = 'Διαγραφή μηνύματος';
$labels['messagediscard'] = 'Απόρριψη με μήνυμα';
$labels['messagekeep'] = 'Διατήρηση μηνύματος στα Εισερχόμενα';
$labels['messagesrules'] = 'Για εισερχόμενα μηνύματα που:';
$labels['messagesactions'] = '...εκτέλεση των παρακάτω ενεργειών:';
$labels['add'] = 'Προσθήκη';
$labels['del'] = 'Διαγραφή';
$labels['sender'] = 'Αποστολέας';
$labels['recipient'] = 'Παραλήπτης';
$labels['vacationaddr'] = 'Οι e-mail διευθύνσεις μου:';
$labels['vacationdays'] = 'Συχνότητα αποστολής μηνυμάτων (σε ημέρες):';
$labels['vacationinterval'] = 'Συχνότητα αποστολής μηνυμάτων:';
$labels['vacationreason'] = 'Σώμα μηνύματος (λόγος απουσίας):';
$labels['vacationfrom'] = 'Διεύθυνση απάντησης στον αποστολέα:';
$labels['vacationsubject'] = 'Θέμα μηνύματος: ';
$labels['days'] = 'ημέρες';
$labels['seconds'] = 'δευτερόλεπτα';
$labels['rulestop'] = 'Παύση επαλήθευσης κανόνων';
$labels['enable'] = 'Ενεργοποίηση/Απενεργοποίηση';
$labels['filterset'] = 'Σετ φίλτρων';
$labels['filtersets'] = 'Φίλτρο';
$labels['filtersetadd'] = 'Προσθήκη ομάδας φίλτρων';
$labels['filtersetdel'] = 'Διαγραφή ομάδας φίλτρων';
$labels['filtersetact'] = 'Ενεργοποίηση τρέχουσας ομάδας φίλτρων';
$labels['filtersetdeact'] = 'Απενεργοποίηση τρέχουσας ομάδας φίλτρων';
$labels['filterseteditraw'] = 'Επεξεργασία ομάδας φίλτρων';
$labels['filtersetswitch'] = '(Απ-)ενεργοποίηση ομάδας φίλτρων';
$labels['filterdef'] = 'Ορισμος φιλτρου';
$labels['filtersetname'] = 'Ονομασία ομάδας φίλτρων';
$labels['newfilterset'] = 'Νέα ομάδα φίλτρων';
$labels['active'] = 'ενεργο';
$labels['none'] = 'κανένα';
$labels['fromset'] = 'από το σύνολο ';
$labels['fromfile'] = 'απο αρχειο';
$labels['filterdisabled'] = 'Απενεργοποιημένο φίλτρο';
$labels['filterenabled'] = 'Ενεργό φίλτρο';
$labels['countisgreaterthan'] = 'αρίθμηση είναι μεγαλύτερη από';
$labels['countisgreaterthanequal'] = 'η μετρηση είναι μεγαλύτερη ή ίση προς';
$labels['countislessthan'] = 'η μετρηση είναι μικρότερη απο';
$labels['countislessthanequal'] = 'η μετρηση είναι μικρότερη ή ίση προς';
$labels['countequals'] = 'η μέτρηση είναι ίση προς ';
$labels['countnotequals'] = 'η μέτρηση δεν είναι ίση προς ';
$labels['valueisgreaterthan'] = 'η τιμη είναι μεγαλύτερη από';
$labels['valueisgreaterthanequal'] = 'η τιμη είναι μεγαλύτερη ή ίση προς';
$labels['valueislessthan'] = 'η τιμη είναι μικρότερη απο';
$labels['valueislessthanequal'] = 'η τιμη είναι μικρότερη ή ίση προς';
$labels['valueequals'] = 'η τιμη είναι ίση με';
$labels['valuenotequals'] = 'η τιμη δεν είναι ίση με';
$labels['setflags'] = 'Ορισμός σημαίων στο μήνυμα';
$labels['addflags'] = 'Προσθήκη σημαίων στο μήνυμα';
$labels['removeflags'] = 'Αφαιρέση σημαίων από το μήνυμα';
$labels['flagread'] = 'Αναγνωση';
$labels['flagdeleted'] = 'Διεγραμμένο';
$labels['flaganswered'] = 'Απαντήθηκε ';
$labels['flagflagged'] = 'Σημειωμένο';
$labels['flagdraft'] = 'Πρόχειρα';
$labels['addheader'] = 'Προσθήκη κεφαλίδας στο μήνυμα';
$labels['deleteheader'] = 'Αφαίρεση κεφαλίδας από το μήνυμα';
$labels['headername'] = 'Όνομα κεφαλίδας';
$labels['headervalue'] = 'Τιμή κεφαλίδας';
$labels['headerpos'] = 'Θέση κεφαλίδας';
$labels['headeratstart'] = 'στην αρχή';
$labels['headeratend'] = 'στο τέλος';
$labels['headeroccurrence'] = 'Εμφανίσεις/θέση της κεφαλίδας';
$labels['headerfromstart'] = 'από την αρχή';
$labels['headerfromend'] = 'από το τέλος';
$labels['headerpatterns'] = 'Μοτίβα τιμών κεφαλίδας';
$labels['headermatchtype'] = 'τύπος αντιστοιχίας:';
$labels['setvariable'] = 'Ορισμός μεταβλητής';
$labels['setvarname'] = 'Όνομα μεταβλητης:';
$labels['setvarvalue'] = 'Τιμη μεταβλητης:';
$labels['setvarmodifiers'] = 'Τροποποιητές: ';
$labels['varlower'] = 'Μικρογράμματη γραφή';
$labels['varupper'] = 'κεφαλαία γράμματα ';
$labels['varlowerfirst'] = 'πρώτος χαρακτήρας πεζός ';
$labels['varupperfirst'] = 'πρώτος χαρακτήρας κεφαλαία γράμματα';
$labels['varquotewildcard'] = 'παραθέση ειδικων χαρακτήρων';
$labels['varlength'] = 'Μήκος';
$labels['varencodeurl'] = 'τοις-εκατό κωδικοποίηση (για URL)';
$labels['notify'] = 'Αποστολή ειδοποίησης ';
$labels['notifytarget'] = 'Παραλήπτης ειδοποίησης:';
$labels['notifymessage'] = 'Μήνυμα ειδοποίησης (προαιρετικά):';
$labels['notifyoptions'] = 'Επιλογές ειδοποίησης (προαιρετικά):';
$labels['notifyfrom'] = 'Αποστολέας ειδοποίησης (προαιρετικά):';
$labels['notifyimportance'] = 'Σημασία: ';
$labels['notifyimportancelow'] = 'Χαμηλή';
$labels['notifyimportancenormal'] = 'Κανονική';
$labels['notifyimportancehigh'] = 'Υψηλή';
$labels['notifymethodmailto'] = 'Email';
$labels['notifymethodtel'] = 'Τηλέφωνο';
$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Δημιουργία φίλτρου';
$labels['usedata'] = 'Χρησιμοποιηση ακολουθων δεδομενων στο φιλτρο:';
$labels['nextstep'] = 'Επομενο βημα';
$labels['...'] = '...';
$labels['string'] = 'Συμβολοσειρά';
$labels['currdate'] = 'Τρέχουσα ημερομηνία';
$labels['datetest'] = 'Ημερομηνία';
$labels['dateheader'] = 'επικεφαλίδα:';
$labels['year'] = 'χρονος';
$labels['month'] = 'μηνας';
$labels['day'] = 'ημερα';
$labels['date'] = 'ημερομηνία (yyyy-mm-dd)';
$labels['julian'] = 'ημερομηνία (Ιουλιανό ημ/γιο)';
$labels['hour'] = 'ωρα';
$labels['minute'] = 'λεπτο';
$labels['second'] = 'δευτερόλεπτο';
$labels['time'] = 'ωρα (hh:mm:ss)';
$labels['iso8601'] = 'ημερομηνία (ISO8601)';
$labels['std11'] = 'ημερομηνία (RFC2822)';
$labels['zone'] = 'Ζώνη Ώρας';
$labels['weekday'] = 'ημέρα της εβδομάδας (0-6)';
$labels['advancedopts'] = 'Προχωρημένες ρυθμίσεις';
$labels['body'] = 'Κείμενο';
$labels['address'] = 'Διεύθυνση';
$labels['envelope'] = 'φάκελος';
$labels['modifier'] = 'Τροποποιηση: ';
$labels['text'] = 'κειμενο';
$labels['undecoded'] = 'αποκωδικοποιημένο (raw)';
$labels['contenttype'] = 'Τύπος περιεχομένου ';
$labels['modtype'] = 'τυπος:';
$labels['allparts'] = 'Όλα';
$labels['domain'] = 'τομέας';
$labels['localpart'] = 'τοπικό τμήμα ';
$labels['user'] = 'χρηστης';
$labels['detail'] = 'λεπτομερειες';
$labels['comparator'] = 'σύγκριση:';
$labels['default'] = 'προεπιλογή';
$labels['octet'] = 'αυστηρή (οκτάδα) ';
$labels['asciicasemap'] = 'πεζά ή κεφαλαία (ascii-casemap)';
$labels['asciinumeric'] = 'αριθμητικό (ascii-αριθμητικο)';
$labels['index'] = 'ευρετήριο:';
$labels['indexlast'] = 'προς τα πίσω';
$labels['spamtest'] = 'Επίπεδο spam';
$labels['spamtestisgreaterthan'] = 'είναι μεγαλύτερο από';
$labels['spamtestisgreaterthanequal'] = 'είναι μεγαλύτερο ή μικρότερο από';
$labels['spamtestislessthan'] = 'είναι μικρότερο από';
$labels['spamtestislessthanequal'] = 'είναι μικρότερο ή μεγαλύτερο από';
$labels['spamtestequals'] = 'είναι ίσο με';
$labels['spamtestnotequals'] = 'δεν είναι ίσο με';
$labels['spamtestisunknown'] = 'είναι άγνωστο';
$labels['vacation'] = 'Εκτός γραφείου';
$labels['vacation.reply'] = 'Μήνυμα απάντησης';
$labels['vacation.advanced'] = 'Προηγμένες ρυθμίσεις';
$labels['vacation.from'] = 'Διεύθυνση απάντησης αποστολέα';
$labels['vacation.subject'] = 'Θέμα';
$labels['vacation.body'] = 'Σώμα';
$labels['vacation.start'] = 'Ώρα έναρξης';
$labels['vacation.end'] = 'Ώρα λήξης';
$labels['vacation.status'] = 'Κατάσταση';
$labels['vacation.on'] = 'Ενεργό';
$labels['vacation.off'] = 'Ανενεργό';
$labels['vacation.addresses'] = 'Οι e-mail διευθύνσεις μου';
$labels['vacation.interval'] = 'Διάστημα απάντησης';
$labels['vacation.after'] = 'Τοποθέτηση του κανόνα «εκτός-γραφείου» μετά από';
$labels['vacation.saving'] = 'Αποθήκευση δεδομένων...';
$labels['vacation.action'] = 'Ενέργεια εισερχόμενου μηνύματος';
$labels['vacation.keep'] = 'Διατήρηση';
$labels['vacation.discard'] = 'Διαγραφή';
$labels['vacation.redirect'] = 'Ανακατεύθυνση σε';
$labels['vacation.copy'] = 'Αποστολή αντιγράφου σε';
$labels['forward'] = 'Προώθηση';
$labels['forward.redirect'] = 'Ανακατεύθυνση σε';
$labels['forward.copy'] = 'Αποστολή αντιγράφου σε';
$labels['forward.on'] = 'Ενεργό';
$labels['forward.off'] = 'Ανενεργό';
$labels['forward.status'] = 'Κατάσταση:';
$labels['forward.action'] = 'Για τα εισερχόμενα μηνύματα να εκτελείται η ακόλουθη ενέργεια:';
$labels['forward.saving'] = 'Αποθήκευση δεδομένων...';
$labels['filladdresses'] = 'Συμπλήρωση με όλες τις email διευθύνσεις μου';
$labels['arialabelfiltersetactions'] = 'Ενέργειες ομάδας φίλτρων';
$labels['arialabelfilteractions'] = 'Ενέργειες φίλτρων';
$labels['arialabelfilterform'] = 'Ιδιότητες φίλτρων';
$labels['ariasummaryfilterslist'] = 'Λίστα φίλτρων';
$labels['ariasummaryfiltersetslist'] = 'Λίστα ομάδων φίλτρων';
$labels['filterstitle'] = 'Επεξεργασία φίλτρων εισερχόμενης αλληλογραφίας';
$labels['vacationtitle'] = 'Επεξεργασία κανόνα εκτός-γραφείου';
$labels['forwardtitle'] = 'Επεξεργασία κανόνα προώθησης';
$labels['message'] = 'Μήνυμα';
$labels['duplicate'] = 'είναι διπλότυπο';
$labels['notduplicate'] = 'δεν είναι διπλότυπο';
$labels['duplicate.handle'] = 'λαβή:';
$labels['duplicate.header'] = 'κεφαλίδα:';
$labels['duplicate.uniqueid'] = 'αναγνωριστικό:';
$labels['duplicate.seconds'] = 'λήξη χρόνου (δευτερόλεπτα):';
$labels['duplicate.last'] = 'σχετικό με την τελευταία εκτέλεση';
$messages['filterunknownerror'] = 'Άγνωστο σφάλμα διακομιστή';
$messages['filterconnerror'] = 'Αδυναμία σύνδεσης στον διακομιστή.';
$messages['filterdeleteerror'] = 'Αδυναμία διαγραφής φίλτρου. Προέκυψε σφάλμα στον διακομιστή.';
$messages['filterdeleted'] = 'Το φίλτρο διαγράφηκε επιτυχώς.';
$messages['filtersaved'] = 'Το φίλτρο αποθηκεύτηκε επιτυχώς.';
$messages['filtersaveerror'] = 'Αδυναμία αποθήκευσης φίλτρου. Προέκυψε σφάλμα στον διακομιστή.';
$messages['filterformerror'] = 'Η φόρμα των φίλτρων περιέχει σφάλματα.';
$messages['filterdeleteconfirm'] = 'Είστε σίγουροι ότι θέλετε να διαγράψετε το επιλεγμένο φίλτρο? ';
$messages['ruledeleteconfirm'] = 'Θέλετε όντως να διαγράψετε τον επιλεγμένο κανόνα;';
$messages['actiondeleteconfirm'] = 'Θέλετε όντως να διαγράψετε την επιλεγμένη ενέργεια;';
$messages['forbiddenchars'] = 'Μη επιτρεπτοί χαρακτήρες στο πεδίο.';
$messages['cannotbeempty'] = 'Το πεδίο δεν μπορεί να είναι κενό.';
$messages['ruleexist'] = 'Φιλτρο με αυτο το όνομα υπάρχει ήδη. ';
$messages['setactivateerror'] = 'Αδυναμία ενεργοποίησης της επιλεγμένης ομάδας φίλτρων. Προέκυψε σφάλμα στο διακομιστή.';
$messages['setdeactivateerror'] = 'Αδυναμία απενεργοποίησης της επιλεγμένης ομάδας φίλτρων. Προέκυψε σφάλμα στο διακομιστή.';
$messages['setdeleteerror'] = 'Αδυναμία διαγραφής της επιλεγμένης ομάδας φίλτρων. Προέκυψε σφάλμα στο διακομιστή.';
$messages['setactivated'] = 'Η ομάδα φίλτρων ενεργοποιήθηκε επιτυχώς.';
$messages['setdeactivated'] = 'Η ομάδα φίλτρων απενεργοποιήθηκε επιτυχώς.';
$messages['setdeleted'] = 'Η ομάδα φίλτρων διαγράφηκε επιτυχώς.';
$messages['setupdated'] = 'Η ομάδα φίλτρων ενημερώθηκε επιτυχώς.';
$messages['setdeleteconfirm'] = 'Θέλετε σίγουρα να διαγράψετε την επιλεγμένη ομάδα φίλτρων φίλτρων;';
$messages['setcreateerror'] = 'Αδυναμία δημιουργίας ομάδας φίλτρων. Προέκυψε σφάλμα στο διακομιστή.';
$messages['setcreated'] = 'Η ομάδα φίλτρων δημιουργήθηκε επιτυχώς.';
$messages['activateerror'] = 'Αδυναμία ενεργοποίησης επιλεγμένου φίλτρου(ων). Προέκυψε σφάλμα στον διακομιστή.';
$messages['deactivateerror'] = 'Αδυναμία απενεργοποίησης επιλεγμένου φίλτρου(ων). Προέκυψε σφάλμα στον διακομιστή.';
$messages['deactivated'] = 'Το φιλτρο(α) απενεργοποιηθηκαν επιτυχως.';
$messages['activated'] = 'Το φίλτρο(α) ενεργοποιηθηκαν επιτυχώς.';
$messages['moved'] = 'Το φίλτρο μετακινηθηκε επιτυχώς.';
$messages['moveerror'] = 'Αδυναμία μετακίνησης επιλεγμένου φίλτρου. Προέκυψε σφάλμα στον διακομιστή.';
$messages['nametoolong'] = 'Το όνομα είναι πολύ μεγάλο.';
$messages['namereserved'] = 'Δεσμευμένο όνομα. ';
$messages['setexist'] = 'Η ομάδα υπάρχει ήδη. ';
$messages['nodata'] = 'Πρέπει να επιλεγεί τουλάχιστον μία θέση!';
$messages['invaliddateformat'] = 'Μη έγκυρη ημερομηνία ή η ημερομηνία μορφής τμήμα';
$messages['saveerror'] = 'Αδύνατη η αποθήκευση δεδομένων. Προέκυψε σφάλμα στον διακομιστή';
$messages['vacationsaved'] = 'Τα δεδομένα «εκτός-γραφείου» αποθηκεύτηκαν επιτυχώς.';
$messages['forwardsaved'] = 'Τα δεδομένα προώθησης αποθηκεύτηκαν επιτυχώς';
$messages['emptyvacationbody'] = 'Απαιτείται κείμενο για το μήνυμα διακοπών!';
$messages['duplicate.conflict.err'] = 'Το μοναδικό αναγνωριστικό και το αναγνωριστικό κεφαλίδας δεν επιτρέπονται.';
$messages['disabledaction'] = 'Μη επιτρεπόμενη ενέργεια.';
$messages['lastindexempty'] = 'Ο δείκτης απαιτείται κατά την αρίθμηση από το τέλος';
$messages['noflagset'] = 'Πρέπει να επιλεγεί τουλάχιστον μία «σημαία»!';
PK{c�\SU.v&'&'managesieve/managesieve.phpnu�[���<?php

/**
 * Managesieve (Sieve Filters)
 *
 * Plugin that adds a possibility to manage Sieve filters in Thunderbird's style.
 * It's clickable interface which operates on text scripts and communicates
 * with server using managesieve protocol. Adds Filters tab in Settings.
 *
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * Configuration (see config.inc.php.dist)
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class managesieve extends rcube_plugin
{
    public $task = 'mail|settings';

    private $rc;
    private $engine;
    private $ui_initialized    = false;
    private $mail_headers_done = false;

    /**
     * Plugin initialization
     */
    function init()
    {
        $this->rc = rcube::get_instance();

        $this->load_config();

        $allowed_hosts = $this->rc->config->get('managesieve_allowed_hosts');
        if (!empty($allowed_hosts) && !in_array($_SESSION['storage_host'], (array) $allowed_hosts)) {
            return;
        }

        // register actions
        $this->register_action('plugin.managesieve', [$this, 'managesieve_actions']);
        $this->register_action('plugin.managesieve-action', [$this, 'managesieve_actions']);
        $this->register_action('plugin.managesieve-vacation', [$this, 'managesieve_actions']);
        $this->register_action('plugin.managesieve-forward', [$this, 'managesieve_actions']);
        $this->register_action('plugin.managesieve-save', [$this, 'managesieve_save']);
        $this->register_action('plugin.managesieve-saveraw', [$this, 'managesieve_saveraw']);

        if ($this->rc->task == 'settings') {
            $this->add_hook('settings_actions', [$this, 'settings_actions']);
            $this->init_ui();
        }
        else if ($this->rc->task == 'mail') {
            // register message hook
            if ($this->rc->action == 'show') {
                $this->add_hook('message_headers_output', [$this, 'mail_headers']);
            }

            // inject Create Filter popup stuff
            if (empty($this->rc->action) || $this->rc->action == 'show'
                || strpos($this->rc->action, 'plugin.managesieve') === 0
            ) {
                $this->mail_task_handler();
            }
        }
    }

    /**
     * Initializes plugin's UI (localization, js script)
     */
    function init_ui()
    {
        if (!empty($this->ui_initialized)) {
            return;
        }

        // load localization
        $this->add_texts('localization/');

        $sieve_action = strpos($this->rc->action, 'plugin.managesieve') === 0;

        if ($this->rc->task == 'mail' || $sieve_action) {
            $this->include_script('managesieve.js');
        }

        // include styles
        $skin_path = $this->local_skin_path();
        if ($sieve_action || ($this->rc->task == 'settings' && empty($_REQUEST['_framed']))) {
            $this->include_stylesheet("$skin_path/managesieve.css");
        }
        else if ($this->rc->task == 'mail') {
            $this->include_stylesheet("$skin_path/managesieve_mail.css");
        }

        $this->ui_initialized = true;
    }

    /**
     * Adds Filters section in Settings
     */
    function settings_actions($args)
    {
        $vacation_mode = (int) $this->rc->config->get('managesieve_vacation');
        $forward_mode  = (int) $this->rc->config->get('managesieve_forward');

        // register Filters action
        if ($vacation_mode != 2 && $forward_mode != 2) {
            $args['actions'][] = [
                'action' => 'plugin.managesieve',
                'class'  => 'filter',
                'label'  => 'filters',
                'domain' => 'managesieve',
                'title'  => 'filterstitle',
            ];
        }

        // register Vacation action
        if ($vacation_mode > 0) {
            $args['actions'][] = [
                'action' => 'plugin.managesieve-vacation',
                'class'  => 'vacation',
                'label'  => 'vacation',
                'domain' => 'managesieve',
                'title'  => 'vacationtitle',
            ];
        }

        // register Forward action
        if ($forward_mode > 0) {
            $args['actions'][] = [
                'action' => 'plugin.managesieve-forward',
                'class'  => 'forward',
                'label'  => 'forward',
                'domain' => 'managesieve',
                'title'  => 'forwardtitle',
            ];
        }

        return $args;
    }

    /**
     * Add UI elements to the 'mailbox view' and 'show message' UI.
     */
    function mail_task_handler()
    {
        // make sure we're not in ajax request
        if ($this->rc->output->type != 'html') {
            return;
        }

        $vacation_mode = (int) $this->rc->config->get('managesieve_vacation');
        $forward_mode  = (int) $this->rc->config->get('managesieve_forward');

        if ($vacation_mode == 2 || $forward_mode == 2) {
            return;
        }

        // include js script and localization
        $this->init_ui();

        // add 'Create filter' item to message menu
        $this->add_button([
                'command'  => 'managesieve-create',
                'label'    => 'managesieve.filtercreate',
                'type'     => 'link-menuitem',
                'classact' => 'icon filterlink active',
                'class'    => 'icon filterlink disabled',
                'innerclass' => 'icon filterlink',
            ], 'messagemenu'
        );

        // register some labels/messages
        $this->rc->output->add_label('managesieve.newfilter', 'managesieve.usedata',
            'managesieve.nodata', 'managesieve.nextstep', 'save');

        $this->rc->session->remove('managesieve_current');
    }

    /**
     * Get message headers for popup window
     */
    function mail_headers($args)
    {
        // this hook can be executed many times
        if (!empty($this->mail_headers_done)) {
            return $args;
        }

        $this->mail_headers_done = true;

        $headers = $this->parse_headers($args['headers']);

        if ($this->rc->action == 'preview') {
            $this->rc->output->command('parent.set_env', ['sieve_headers' => $headers]);
        }
        else {
            $this->rc->output->set_env('sieve_headers', $headers);
        }

        return $args;
    }

    /**
     * Plugin action handler
     */
    function managesieve_actions()
    {
        $uids = rcmail::get_uids(null, null, $multifolder, rcube_utils::INPUT_POST);

        // handle fetching email headers for the new filter form
        if (!empty($uids)) {
            $mailbox = key($uids);
            $message = new rcube_message($uids[$mailbox][0], $mailbox);
            $headers = $this->parse_headers($message->headers);

            $this->rc->output->set_env('sieve_headers', $headers);
            $this->rc->output->command('managesieve_create', true);
            $this->rc->output->send();
        }

        // handle other actions
        $engine_type = $this->rc->action == 'plugin.managesieve-vacation' ? 'vacation' : '';
        $engine_type = $this->rc->action == 'plugin.managesieve-forward' ? 'forward' : $engine_type;
        $engine      = $this->get_engine($engine_type);

        $this->init_ui();

        $engine->actions();
    }

    /**
     * Forms save action handler
     */
    function managesieve_save()
    {
        // load localization
        $this->add_texts('localization/', ['filters', 'managefilters']);

        // include main js script
        if ($this->api->output->type == 'html') {
            $this->include_script('managesieve.js');
        }

        $engine = $this->get_engine();
        $engine->save();
    }

    /**
     * Raw form save action handler
     */
    function managesieve_saveraw()
    {
        $engine = $this->get_engine();

        if (!$this->rc->config->get('managesieve_raw_editor', true)) {
            return;
        }

        // load localization
        $this->add_texts('localization/', ['filters','managefilters']);

        $engine->saveraw();
    }

    /**
     * Initializes engine object
     */
    public function get_engine($type = null)
    {
        if (!$this->engine) {
            // Add include path for internal classes
            $include_path = $this->home . '/lib' . PATH_SEPARATOR;
            $include_path .= ini_get('include_path');
            set_include_path($include_path);

            $class_name   = 'rcube_sieve_' . ($type ?: 'engine');
            $this->engine = new $class_name($this);
        }

        return $this->engine;
    }

    /**
     * Extract mail headers for new filter form
     */
    private function parse_headers($headers)
    {
        $result = [];

        if ($headers->subject) {
            $result[] = ['Subject', rcube_mime::decode_header($headers->subject)];
        }

        // @TODO: List-Id, others?
        foreach (['From', 'To'] as $h) {
            $hl = strtolower($h);
            if (!empty($headers->$hl)) {
                $list = rcube_mime::decode_address_list($headers->$hl);
                foreach ($list as $item) {
                    if (!empty($item['mailto'])) {
                        $result[] = [$h, $item['mailto']];
                    }
                }
            }
        }

        return $result;
    }
}
PK{c�\�����managesieve/config.inc.php.distnu�[���<?php

// Managesieve server host (and optional port). Default: localhost.
// Replacement variables supported in host name:
// %h - user's IMAP hostname
// %n - http hostname ($_SERVER['SERVER_NAME'])
// %d - domain (http hostname without the first part)
// For example %n = mail.domain.tld, %d = domain.tld
// If port is omitted it will be determined automatically using getservbyname()
// function, with 4190 as a fallback.
// Note: Add tls:// prefix to enable explicit STARTTLS
// or add ssl:// prefix to enable implicit SSL.
$config['managesieve_host'] = 'localhost';

// authentication method. Can be CRAM-MD5, DIGEST-MD5, PLAIN, LOGIN, EXTERNAL
// or none. Optional, defaults to best method supported by server.
$config['managesieve_auth_type'] = null;

// Optional managesieve authentication identifier to be used as authorization proxy.
// Authenticate as a different user but act on behalf of the logged in user.
// Works with PLAIN and DIGEST-MD5 auth.
$config['managesieve_auth_cid'] = null;

// Optional managesieve authentication password to be used for imap_auth_cid
$config['managesieve_auth_pw'] = null;

// Connection socket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation
//$config['managesieve_conn_options'] = [
//  'ssl'         => [
//     'verify_peer'  => true,
//     'verify_depth' => 3,
//     'cafile'       => '/etc/openssl/certs/ca.crt',
//   ],
// ];
// Note: These can be also specified as an array of options indexed by hostname
$config['managesieve_conn_options'] = null;

// A file with default script content (e.g. spam filter)
$config['managesieve_default'] = '/etc/dovecot/sieve/global';

// The name of the script which will be used when there's no user script
$config['managesieve_script_name'] = 'managesieve';

// Sieve RFC says that we should use UTF-8 encoding for mailbox names,
// but some implementations work with UTF7-IMAP encoding only.
// Defaults to UTF7-IMAP
$config['managesieve_mbox_encoding'] = 'UTF-8';

// I need this because my dovecot (with listescape plugin) uses
// ':' delimiter, but creates folders with dot delimiter
$config['managesieve_replace_delimiter'] = '';

// disabled sieve extensions (body, copy, date, editheader, encoded-character,
// envelope, environment, ereject, fileinto, ihave, imap4flags, index,
// mailbox, mboxmetadata, regex, reject, relational, servermetadata,
// spamtest, spamtestplus, subaddress, vacation, variables, virustest, etc.
// Note: not all extensions are implemented
$config['managesieve_disabled_extensions'] = [];

// Enables debugging of conversation with sieve server. Logs it into <log_dir>/sieve
$config['managesieve_debug'] = false;

// Enables features described in http://wiki.kolab.org/KEP:14
$config['managesieve_kolab_master'] = false;

// Script name extension used for scripts including. Dovecot uses '.sieve',
// Cyrus uses '.siv'. Doesn't matter if you have managesieve_kolab_master disabled.
$config['managesieve_filename_extension'] = '.sieve';

// List of reserved script names (without extension).
// Scripts listed here will be not presented to the user.
$config['managesieve_filename_exceptions'] = [];

// List of domains limiting destination emails in redirect action
// If not empty, user will need to select domain from a list
$config['managesieve_domains'] = [];

// Default list of entries in header selector
$config['managesieve_default_headers'] = ['Subject', 'From', 'To'];

// Enables separate management interface for vacation responses (out-of-office)
// 0 - no separate section (default),
// 1 - add Vacation section,
// 2 - add Vacation section, but hide Filters section
$config['managesieve_vacation'] = 0;

// Enables separate management interface for setting forwards (redirect to and copy to)
// 0 - no separate section (default),
// 1 - add Forward section,
// 2 - add Forward section, but hide Filters section
$config['managesieve_forward'] = 0;

// Default vacation interval (in days).
// Note: If server supports vacation-seconds extension it is possible
// to define interval in seconds here (as a string), e.g. "3600s".
$config['managesieve_vacation_interval'] = 0;

// Some servers require vacation :addresses to be filled with all
// user addresses (aliases). This option enables automatic filling
// of these on initial vacation form creation.
$config['managesieve_vacation_addresses_init'] = false;

// Sometimes you want to always reply with mail email address
// This option enables automatic filling of :from field on initial vacation form creation.
$config['managesieve_vacation_from_init'] = false;

// Supported methods of notify extension. Default: 'mailto'
$config['managesieve_notify_methods'] = ['mailto'];

// Enables scripts RAW editor feature
$config['managesieve_raw_editor'] = true;

// Disabled actions. Prevents user from performing specific actions by disabling
// the UI elements:
// - list_sets,
//   Note: disabling list_sets removes the Filter sets widget from the UI and means
//   the set defined in managesieve_script_name will always be used (and activated)
// - enable_disable_set,
// - delete_set,
// - new_set,
// - download_set,
// - new_filter,
// - delete_filter,
// - redirect: This one will remove 'redirect' option from the filter actions selector
//   Note: This will not remove it for redirect actions already existing in the script.
//   Note: This has no impact on the Forwarding UI
$config['managesieve_disabled_actions'] = [];

// List of hosts that support managesieve.
// Activate managesieve for selected hosts only. If this is not set all hosts are allowed.
// Example: $config['managesieve_allowed_hosts'] = ['host1.mydomain.com', 'host2.mydomain.com'];
$config['managesieve_allowed_hosts'] = null;
PK{c�\�~��H�Hmanagesieve/Changelognu�[���- Fix javascript error when relational or spamtest extension is not enabled (#9139)
- Removed managesieve_usetls option (in favor of the scheme prefix in managesieve_host)
- Plugin API: Removed `port` parameter in `managesieve_connect` hook
- Plugin API: Removed `usetls` parameter in `managesieve_connect` hook

* version 9.4 [2021-06-06]
-----------------------------------------------------------
- Add ability to remove 'redirect' option from UI (#7922)
- Add support for 'spamtest' extension - RFC3685 (#6950)
- Improve UX on custom header input (#7207)
- Allow display name with email address in vacation :from field (#6760)
- Replace "Filter disabled" with "Filter enabled" (#7028)
- Allow angle brackets in out-of-office message body (#7518)
- Fix so modifier type select wasn't hidden after hiding modifier select on header change
- Fix filter selection after removing a first filter (#7079)
- Fix bug where it wasn't possible to save flag actions (#7188)
- Fix bug where activation of forward/vacation rule could activate a wrong script (#7423)
- Fix bug where forward/vacation rule could end up being duplicated (#7349)
- Fix removing nested rules in scripts (#8011)

* version 9.3 [2019-04-21]
-----------------------------------------------------------
- Use RFC-compliant line endings, CRLF instead of LF (#6686)
- Fix bug where global includes were requested for vacation (#6716)
- Fix so "Create filter" option does not show up when Filters menu is disabled (#6723)

* version 9.2 [2018-11-08]
-----------------------------------------------------------
- Added support for 'editheader' extension - RFC5293 (#5954)
- Fix bug where show_real_foldernames setting wasn't respected (#6422)
- Fix bug where custom header or variable could be lost on form submission (#6594)

* version 9.1 [2018-05-19]
-----------------------------------------------------------
- Added GSSAPI support (#5779)
- Added option managesieve_default_headers
- Added option managesieve_forward to enable settings dialog for simple forwarding (#6021)
- Support filter action with custom IMAP flags (#6011)
- Support 'mime' extension tests - RFC5703 (#5832)
- Support enabling the plugin for specified hosts only (#6292)
- Support Elastic skin
- Fix bug where text: syntax was forced for strings longer than 1024 characters (#6143)
- Fix missing Save button in Edit Filter Set page of Classic skin (#6154)
- Rename "Vacation" to "Out of Office"

* version 9.0 [2017-10-02]
-----------------------------------------------------------
- Fix parsing dot-staffed lines in multiline text (#5838)
- Fix AM/PM suffix in vacation time selectors
- Fix bug where 'exists' operator was reset to 'contains' (#5899)
- Add ability to disable filter sets and other actions (#5496, #5898)

* version 8.9 [2017-05-22]
-----------------------------------------------------------
- Fix handling of scripts with nested rules (#5540)
- Fix possible defect in handling \r\n in scripts (#5685)
- Performance: Skip redundant LISTSCRIPTS command

* version 8.8 [2016-11-27]
-----------------------------------------------------------
- Fix parsing of vacation date-time with non-default date_format (#5372)
- Fix regression where js error is thrown if server does not support 'duplicate' extension
- Add option to automatically set vacation :from address (#5428)
- Support per-host managesieve_conn_options (#5136)
- Added (optional) RAW script editor (#5414)

* version 8.7 [2016-07-19]
-----------------------------------------------------------
- Support 'string' test from variables extension [RFC 5229] (#5248)
- Support 'duplicate' extension [RFC 7352]
- Unhide advanced rule controls if there are inputs with errors
- Display warning message when filter form contains errors

* version 8.6 [2016-04-06]
-----------------------------------------------------------
- Refactored script parser to be 100x faster (on big scripts)

* version 8.5 [2015-11-15]
-----------------------------------------------------------
- Add support for :from parameter in vacation action (patch from Michele Locati)

* version 8.4 [2015-04-20]
-----------------------------------------------------------
- Add option to prepopulate vacation addresses on form init (#1490030)
- Add option to define default vacation interval
- Fix missing position indicator in Larry skin when dragging a filter
- Fix incorrect filter data after filter delete (#1490356)

* version 8.3 [2015-03-12]
-----------------------------------------------------------
- Fix PHP fatal error when visiting Vacation interface and there's no sieve script yet
- Fix handling of header test with one-element array as header name
- Fix missing host:port in connection error message

* version 8.2 [2015-01-14]
-----------------------------------------------------------
- Fix bug where actions without if/elseif/else in sieve scripts were skipped
- Support "not allof" test as a negation of all sub-tests
- Fix bug where vacation rule was saved to wrong script if managesieve_kolab_master=true
- Improve procedure of script selection to write a vacation rule

* version 8.1 [2014-12-09]
-----------------------------------------------------------
- Added simple API to manage vacation rule
- Fix missing css/js scripts in filter form in mail task
- Fix default vacation status (#1490019)
- Make possible to set vacation start/end date and time
- Fix compatibility with contextmenu plugin

* version 8.0 [2014-07-16]
-----------------------------------------------------------
- Fix bug where non-existing (or unsubscribed) folder wasn't listed in folder selector (#1489956)
- Added optional separate interface for out-of-office management (#1488266)
- Fix disabled "create filter" action
- Fix enotify/notify extension handling
- Improved UI accessibility
- Added option to specify connection socket parameters - managesieve_conn_options
- Support vacation date rules without date extension (#1489978)

* version 7.2 [2014-02-14]
-----------------------------------------------------------
- Nicely handle server-side modification of script names (#1489412)
- Add Filters tab/section using plugin API hook
- Fix issue where folder selector wasn't visible on new filter form
- Fix issue where multi-select fields were not visible in new filter action rows (#1489600)
- Fix issue in displaying filter form when managesieve_kolab_master=true
  and sieve variables extension is supported by the server (#1489599)
- Fix wrong action folder selection if managesieve_domains is not empty (#1489617)
- Fix filter creation from an email when preview frame is disabled (#1489647)

* version 7.1 [2013-11-22]
-----------------------------------------------------------
- lib/Net_Sieve.php moved to Roundcube /lib directory
- Added managesieve_domains option to limit redirect destinations
- Fix bug where at least one additional address of vacation message was required (#1489345)
- Fix so i;ascii-numeric comparator is not forced as default for :count and :value operators
- Fix date/currentdate related form issues and comparators handling (#1489346)
- Fix a bug where deleted filter was not removed from the list

* version 7.0 [2013-09-09]
-----------------------------------------------------------
- Add vacation-seconds extension support (RFC 6131)
- Several script parser code improvements
- Support string list arguments in filter form (#1489018)
- Support date, currentdate and index tests - RFC5260 (#1488120)
- Split plugin file into two files
- Fix handling of &, <, > characters in scripts/filter names (#1489208)
- Support 'keep' action (#1489226)
- Add common headers to header selector (#1489271)

* version 6.2 [2013-02-17]
-----------------------------------------------------------
- Support tls:// prefix in managesieve_host option
- Removed deprecated functions usage
- Don't trim whitespace in folder names (#1488955)

* version 6.1 [2012-12-21]
-----------------------------------------------------------
- Fixed filter activation/deactivation confirmation message (#1488765)
- Moved rcube_* classes to <plugin>/lib/Roundcube for compat. with Roundcube Framework autoloader
- Fixed filter selection after filter deletion (#1488832)
- Fixed compatibility with jQueryUI-1.9
- Don't force 'stop' action on last rule in a script

* version 6.0 [2012-10-03]
-----------------------------------------------------------
- Fixed issue with DBMail bug [http://pear.php.net/bugs/bug.php?id=19077] (#1488594)
- Added support for enotify/notify (RFC5435, RFC5436, draft-ietf-sieve-notify-00)
- Change default port to 4190 (IANA-allocated), add port auto-detection (#1488713)
- Added request size limits detection and script corruption prevention (#1488648)
- Fix so scripts listed in managesieve_filename_exceptions aren't displayed on the list (#1488724)

* version 5.2 [2012-07-24]
-----------------------------------------------------------
- Added GUI for variables setting - RFC5229 (patch from Paweł Słowik)
- Fixed scrollbars in Larry's iframes
- Fix performance issue in message_headers_output hook handling

* version 5.1 [2012-06-21]
-----------------------------------------------------------
- Fixed filter popup width (for non-english localizations)
- Fixed tokenizer infinite loop on invalid script content
- Larry skin support
- Fixed custom header name validity check, made RFC2822-compliant

* version 5.0 [2012-01-05]
-----------------------------------------------------------
- Fixed setting test type to :is when none is specified
- Fixed javascript error in IE8
- Fixed possible ID duplication when adding filter rules very fast (#1488288)
- Fixed bug where drag layer wasn't removed when dragging was ended over sets list

* version 5.0-rc1 [2011-11-17]
-----------------------------------------------------------
- Fixed sorting of scripts, scripts including aware of the sort order
- Fixed import of rules with unsupported tests
- Added 'address' and 'envelope' tests support
- Added 'body' extension support (RFC5173)
- Added 'subaddress' extension support (RFC5233)
- Added comparators support
- Changed Sender/Recipient labels to From/To
- Fixed importing rule names from Ingo
- Fixed handling of extensions disabled in config

* version 5.0-beta [2011-10-17]
-----------------------------------------------------------
- Added possibility to create a filter based on selected message "in-place"
- Fixed import from Horde-INGO (#1488064)
- Add managesieve_script_name option for default name of the script (#1487956)
- Fixed handling of enabled magic_quotes_gpc setting
- Fixed PHP warning on connection error when submitting filter form
- Fixed bug where new action row with flags wasn't handled properly
- Added managesieve_connect hook for plugins
- Fixed doubled Filter tab on page refresh
- Added filters set selector in filter form when invoked in mail task
- Improved script parser, added support for include and variables extensions
- Added Kolab's KEP:14 support (http://wiki.kolab.org/User:Greve/Drafts/KEP:14)
- Use smaller action/rule buttons
- UI redesign: added possibility to move filter to any place using drag&drop
  (instead of up/down buttons), added filter sets list object, added more
  'loading' messages
- Added option to hide some scripts (managesieve_filename_exceptions)

* version 4.3 [2011-07-28]
-----------------------------------------------------------
- Fixed handling of error in Net_Sieve::listScripts()
- Fixed handling of REFERRAL responses (http://pear.php.net/bugs/bug.php?id=17107)
- Fixed bug where wrong folders hierarchy was displayed on folders listing

* version 4.2 [2011-05-24]
-----------------------------------------------------------
- Moved elsif replacement code to handle only imports from other formats
- Fixed mod_mailbox() usage for newer Roundcube versions
- Fixed regex extension (error: regex require missing)

* version 4.1 [2011-03-07]
-----------------------------------------------------------
- Fix fileinto target is always INBOX (#1487776)
- Fix escaping of backslash character in quoted strings (#1487780)
- Fix handling of non-safe characters (double-quote, backslash)
  or UTF-8 characters (dovecot's implementation bug workaround)
  in script names
- Fix saving of a script using flags extension on servers with imap4flags support (#1487825)

* version 4.0 [2011-02-10]
-----------------------------------------------------------
- Fix STARTTLS for timsieved < 2.3.10
- Added :regex and :matches support (#1487746)
- Added setflag/addflag/removeflag support (#1487449)
- Added support for vacation :subject field (#1487120)
- rcube_sieve_script class moved to separate file
- Moved javascript code from skin templates into managesieve.js file

* version 3.0 [2011-02-01]
-----------------------------------------------------------
- Added support for SASL proxy authentication (#1486691)
- Fixed parsing of scripts with \r\n line separator
- Apply forgotten changes for form errors handling
- Fix multi-line strings parsing (#1487685)
- Added tests for script parser
- Rewritten script parser
- Fix double request when clicking on Filters tab using Firefox

* version 2.10 [2010-10-10]
-----------------------------------------------------------
- Fixed import from Avelsieve
- Use localized size units (#1486976)
- Added support for relational operators and i;ascii-numeric comparator
- Added popups with form errors

* version 2.9 [2010-08-02]
-----------------------------------------------------------
- Fixed vacation parameters parsing (#1486883)

* version 2.8 [2010-07-08]
-----------------------------------------------------------
- Added managesieve_auth_type option (#1486731)

* version 2.7 [2010-07-06]
-----------------------------------------------------------
- Update Net_Sieve to version 1.3.0 (fixes LOGIN authentication)
- Added support for copying and copy sending of messages (COPY extension)

* version 2.6 [2010-06-03]
-----------------------------------------------------------
- Support %n and %d variables in managesieve_host option

* version 2.5 [2010-05-04]
-----------------------------------------------------------
- Fix filters set label after activation
- Fix filters set activation, add possibility to deactivate sets (#1486699)
- Fix download button state when sets list is empty
- Fix errors when sets list is empty

* version 2.4 [2010-04-01]
-----------------------------------------------------------
- Fixed bug in DIGEST-MD5 authentication (http://pear.php.net/bugs/bug.php?id=17285)
- Fixed disabling rules with many tests
- Small css unification with core
- Scripts import/export

* version 2.3 [2010-03-18]
-----------------------------------------------------------
- Added import from Horde-INGO
- Support for more than one match using if+stop instead of if+elsif structures (#1486078)
- Support for selectively disabling rules within a single sieve script (#1485882)
- Added vertical splitter

* version 2.2 [2010-02-06]
-----------------------------------------------------------
- Fix handling of "<>" characters in filter names (#1486477)

* version 2.1 [2010-01-12]
-----------------------------------------------------------
- Fix "require" structure generation when many modules are used
- Fix problem with '<' and '>' characters in header tests

* version 2.0 [2009-11-02]
-----------------------------------------------------------
- Added 'managesieve_debug' option
- Added multi-script support
- Small css improvements + sprite image buttons
- PEAR::NetSieve 1.2.0b1

* version 1.7 [2009-09-20]
-----------------------------------------------------------
- Support multiple managesieve hosts using %h variable
  in managesieve_host option
- Fix first rule deleting (#1486140) 

* version 1.6 [2009-09-08]
-----------------------------------------------------------
- Fix warning when importing squirrelmail rules
- Fix handling of "true" as "anyof (true)" test

* version 1.5 [2009-09-04]
-----------------------------------------------------------
- Added es_ES, ua_UA localizations
- Added 'managesieve_mbox_encoding' option

* version 1.4 [2009-07-29]
-----------------------------------------------------------
- Updated PEAR::Net_Sieve to 1.1.7

* version 1.3 [2009-07-24]
-----------------------------------------------------------
- support more languages
- support config.inc.php file

* version 1.2 [2009-06-28]
-----------------------------------------------------------
- Support IMAP namespaces in fileinto (#1485943)
- Added it_IT localization

* version 1.1 [2009-05-27]
-----------------------------------------------------------
- Added new icons
- Added support for headers lists (coma-separated) in rules
- Added de_CH localization

* version 1.0 [2009-05-21]
-----------------------------------------------------------
- Rewritten using plugin API
- Added hu_HU localization (Tamas Tevesz)

* version beta7 (svn-r2300) [2009-03-01]
-----------------------------------------------------------
- Added SquirrelMail script auto-import (Jonathan Ernst)
- Added 'vacation' support (Jonathan Ernst & alec)
- Added 'stop' support (Jonathan Ernst)
- Added option for extensions disabling (Jonathan Ernst & alec)
- Added fi_FI, nl_NL, bg_BG localization
- Small style fixes

* version 0.2-stable1 (svn-r2205) [2009-01-03]
-----------------------------------------------------------
- Fix moving down filter row
- Fixes for compressed js files in stable release package
- Created patch for svn version r2205

* version 0.2-stable [2008-12-31]
-----------------------------------------------------------
- Added ru_RU, fr_FR, zh_CN translation
- Fixes for Roundcube 0.2-stable

* version 0.2-beta [2008-09-21]
-----------------------------------------------------------
- Small css fixes for IE
- Fixes for Roundcube 0.2-beta

* version beta6 [2008-08-08]
-----------------------------------------------------------
- Added de_DE translation
- Fix for Roundcube r1634

* version beta5 [2008-06-10]
-----------------------------------------------------------
- Fixed 'exists' operators
- Fixed 'not*' operators for custom headers
- Fixed filters deleting

* version beta4 [2008-06-09]
-----------------------------------------------------------
- Fix for Roundcube r1490

* version beta3 [2008-05-22]
-----------------------------------------------------------
- Fixed textarea error class setting
- Added pagetitle setting
- Added option 'managesieve_replace_delimiter'
- Fixed errors on IE (still need some css fixes)

* version beta2 [2008-05-20]
-----------------------------------------------------------
- Use 'if' only for first filter and 'elsif' for the rest

* version beta1 [2008-05-15]
-----------------------------------------------------------
- Initial version for Roundcube r1388.
PK{c�\�fW8managesieve/codemirror/addon/selection/mark-selection.jsnu�[���// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE

// Because sometimes you need to mark the selected *text*.
//
// Adds an option 'styleSelectedText' which, when enabled, gives
// selected text the CSS class given as option value, or
// "CodeMirror-selectedtext" when the value is not a string.

(function(mod) {
  if (typeof exports == "object" && typeof module == "object") // CommonJS
    mod(require("../../lib/codemirror"));
  else if (typeof define == "function" && define.amd) // AMD
    define(["../../lib/codemirror"], mod);
  else // Plain browser env
    mod(CodeMirror);
})(function(CodeMirror) {
  "use strict";

  CodeMirror.defineOption("styleSelectedText", false, function(cm, val, old) {
    var prev = old && old != CodeMirror.Init;
    if (val && !prev) {
      cm.state.markedSelection = [];
      cm.state.markedSelectionStyle = typeof val == "string" ? val : "CodeMirror-selectedtext";
      reset(cm);
      cm.on("cursorActivity", onCursorActivity);
      cm.on("change", onChange);
    } else if (!val && prev) {
      cm.off("cursorActivity", onCursorActivity);
      cm.off("change", onChange);
      clear(cm);
      cm.state.markedSelection = cm.state.markedSelectionStyle = null;
    }
  });

  function onCursorActivity(cm) {
    if (cm.state.markedSelection)
      cm.operation(function() { update(cm); });
  }

  function onChange(cm) {
    if (cm.state.markedSelection && cm.state.markedSelection.length)
      cm.operation(function() { clear(cm); });
  }

  var CHUNK_SIZE = 8;
  var Pos = CodeMirror.Pos;
  var cmp = CodeMirror.cmpPos;

  function coverRange(cm, from, to, addAt) {
    if (cmp(from, to) == 0) return;
    var array = cm.state.markedSelection;
    var cls = cm.state.markedSelectionStyle;
    for (var line = from.line;;) {
      var start = line == from.line ? from : Pos(line, 0);
      var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line;
      var end = atEnd ? to : Pos(endLine, 0);
      var mark = cm.markText(start, end, {className: cls});
      if (addAt == null) array.push(mark);
      else array.splice(addAt++, 0, mark);
      if (atEnd) break;
      line = endLine;
    }
  }

  function clear(cm) {
    var array = cm.state.markedSelection;
    for (var i = 0; i < array.length; ++i) array[i].clear();
    array.length = 0;
  }

  function reset(cm) {
    clear(cm);
    var ranges = cm.listSelections();
    for (var i = 0; i < ranges.length; i++)
      coverRange(cm, ranges[i].from(), ranges[i].to());
  }

  function update(cm) {
    if (!cm.somethingSelected()) return clear(cm);
    if (cm.listSelections().length > 1) return reset(cm);

    var from = cm.getCursor("start"), to = cm.getCursor("end");

    var array = cm.state.markedSelection;
    if (!array.length) return coverRange(cm, from, to);

    var coverStart = array[0].find(), coverEnd = array[array.length - 1].find();
    if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE ||
        cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0)
      return reset(cm);

    while (cmp(from, coverStart.from) > 0) {
      array.shift().clear();
      coverStart = array[0].find();
    }
    if (cmp(from, coverStart.from) < 0) {
      if (coverStart.to.line - from.line < CHUNK_SIZE) {
        array.shift().clear();
        coverRange(cm, from, coverStart.to, 0);
      } else {
        coverRange(cm, from, coverStart.from, 0);
      }
    }

    while (cmp(to, coverEnd.to) < 0) {
      array.pop().clear();
      coverEnd = array[array.length - 1].find();
    }
    if (cmp(to, coverEnd.to) > 0) {
      if (to.line - coverEnd.from.line < CHUNK_SIZE) {
        array.pop().clear();
        coverRange(cm, coverEnd.from, to);
      } else {
        coverRange(cm, coverEnd.to, to);
      }
    }
  }
});
PK{c�\�9���	�	5managesieve/codemirror/addon/selection/active-line.jsnu�[���// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE

(function(mod) {
  if (typeof exports == "object" && typeof module == "object") // CommonJS
    mod(require("../../lib/codemirror"));
  else if (typeof define == "function" && define.amd) // AMD
    define(["../../lib/codemirror"], mod);
  else // Plain browser env
    mod(CodeMirror);
})(function(CodeMirror) {
  "use strict";
  var WRAP_CLASS = "CodeMirror-activeline";
  var BACK_CLASS = "CodeMirror-activeline-background";
  var GUTT_CLASS = "CodeMirror-activeline-gutter";

  CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) {
    var prev = old == CodeMirror.Init ? false : old;
    if (val == prev) return
    if (prev) {
      cm.off("beforeSelectionChange", selectionChange);
      clearActiveLines(cm);
      delete cm.state.activeLines;
    }
    if (val) {
      cm.state.activeLines = [];
      updateActiveLines(cm, cm.listSelections());
      cm.on("beforeSelectionChange", selectionChange);
    }
  });

  function clearActiveLines(cm) {
    for (var i = 0; i < cm.state.activeLines.length; i++) {
      cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS);
      cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS);
      cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS);
    }
  }

  function sameArray(a, b) {
    if (a.length != b.length) return false;
    for (var i = 0; i < a.length; i++)
      if (a[i] != b[i]) return false;
    return true;
  }

  function updateActiveLines(cm, ranges) {
    var active = [];
    for (var i = 0; i < ranges.length; i++) {
      var range = ranges[i];
      var option = cm.getOption("styleActiveLine");
      if (typeof option == "object" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty())
        continue
      var line = cm.getLineHandleVisualStart(range.head.line);
      if (active[active.length - 1] != line) active.push(line);
    }
    if (sameArray(cm.state.activeLines, active)) return;
    cm.operation(function() {
      clearActiveLines(cm);
      for (var i = 0; i < active.length; i++) {
        cm.addLineClass(active[i], "wrap", WRAP_CLASS);
        cm.addLineClass(active[i], "background", BACK_CLASS);
        cm.addLineClass(active[i], "gutter", GUTT_CLASS);
      }
      cm.state.activeLines = active;
    });
  }

  function selectionChange(cm, sel) {
    updateActiveLines(cm, sel.ranges);
  }
});
PK{c�\����;managesieve/codemirror/addon/selection/selection-pointer.jsnu�[���// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE

(function(mod) {
  if (typeof exports == "object" && typeof module == "object") // CommonJS
    mod(require("../../lib/codemirror"));
  else if (typeof define == "function" && define.amd) // AMD
    define(["../../lib/codemirror"], mod);
  else // Plain browser env
    mod(CodeMirror);
})(function(CodeMirror) {
  "use strict";

  CodeMirror.defineOption("selectionPointer", false, function(cm, val) {
    var data = cm.state.selectionPointer;
    if (data) {
      CodeMirror.off(cm.getWrapperElement(), "mousemove", data.mousemove);
      CodeMirror.off(cm.getWrapperElement(), "mouseout", data.mouseout);
      CodeMirror.off(window, "scroll", data.windowScroll);
      cm.off("cursorActivity", reset);
      cm.off("scroll", reset);
      cm.state.selectionPointer = null;
      cm.display.lineDiv.style.cursor = "";
    }
    if (val) {
      data = cm.state.selectionPointer = {
        value: typeof val == "string" ? val : "default",
        mousemove: function(event) { mousemove(cm, event); },
        mouseout: function(event) { mouseout(cm, event); },
        windowScroll: function() { reset(cm); },
        rects: null,
        mouseX: null, mouseY: null,
        willUpdate: false
      };
      CodeMirror.on(cm.getWrapperElement(), "mousemove", data.mousemove);
      CodeMirror.on(cm.getWrapperElement(), "mouseout", data.mouseout);
      CodeMirror.on(window, "scroll", data.windowScroll);
      cm.on("cursorActivity", reset);
      cm.on("scroll", reset);
    }
  });

  function mousemove(cm, event) {
    var data = cm.state.selectionPointer;
    if (event.buttons == null ? event.which : event.buttons) {
      data.mouseX = data.mouseY = null;
    } else {
      data.mouseX = event.clientX;
      data.mouseY = event.clientY;
    }
    scheduleUpdate(cm);
  }

  function mouseout(cm, event) {
    if (!cm.getWrapperElement().contains(event.relatedTarget)) {
      var data = cm.state.selectionPointer;
      data.mouseX = data.mouseY = null;
      scheduleUpdate(cm);
    }
  }

  function reset(cm) {
    cm.state.selectionPointer.rects = null;
    scheduleUpdate(cm);
  }

  function scheduleUpdate(cm) {
    if (!cm.state.selectionPointer.willUpdate) {
      cm.state.selectionPointer.willUpdate = true;
      setTimeout(function() {
        update(cm);
        cm.state.selectionPointer.willUpdate = false;
      }, 50);
    }
  }

  function update(cm) {
    var data = cm.state.selectionPointer;
    if (!data) return;
    if (data.rects == null && data.mouseX != null) {
      data.rects = [];
      if (cm.somethingSelected()) {
        for (var sel = cm.display.selectionDiv.firstChild; sel; sel = sel.nextSibling)
          data.rects.push(sel.getBoundingClientRect());
      }
    }
    var inside = false;
    if (data.mouseX != null) for (var i = 0; i < data.rects.length; i++) {
      var rect = data.rects[i];
      if (rect.left <= data.mouseX && rect.right >= data.mouseX &&
          rect.top <= data.mouseY && rect.bottom >= data.mouseY)
        inside = true;
    }
    var cursor = inside ? data.value : "";
    if (cm.display.lineDiv.style.cursor != cursor)
      cm.display.lineDiv.style.cursor = cursor;
  }
});
PK|c�\ŰK�"")managesieve/codemirror/lib/codemirror.cssnu�[���/* BASICS */

.CodeMirror {
  /* Set height, width, borders, and global font properties here */
  font-family: monospace;
  height: 300px;
  color: black;
  direction: ltr;
}

/* PADDING */

.CodeMirror-lines {
  padding: 4px 0; /* Vertical padding around content */
}
.CodeMirror pre.CodeMirror-line,
.CodeMirror pre.CodeMirror-line-like {
  padding: 0 4px; /* Horizontal padding of content */
}

.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
  background-color: white; /* The little square between H and V scrollbars */
}

/* GUTTER */

.CodeMirror-gutters {
  border-right: 1px solid #ddd;
  background-color: #f7f7f7;
  white-space: nowrap;
}
.CodeMirror-linenumbers {}
.CodeMirror-linenumber {
  padding: 0 3px 0 5px;
  min-width: 20px;
  text-align: right;
  color: #999;
  white-space: nowrap;
}

.CodeMirror-guttermarker { color: black; }
.CodeMirror-guttermarker-subtle { color: #999; }

/* CURSOR */

.CodeMirror-cursor {
  border-left: 1px solid black;
  border-right: none;
  width: 0;
}
/* Shown when moving in bi-directional text */
.CodeMirror div.CodeMirror-secondarycursor {
  border-left: 1px solid silver;
}
.cm-fat-cursor .CodeMirror-cursor {
  width: auto;
  border: 0 !important;
  background: #7e7;
}
.cm-fat-cursor div.CodeMirror-cursors {
  z-index: 1;
}
.cm-fat-cursor-mark {
  background-color: rgba(20, 255, 20, 0.5);
  -webkit-animation: blink 1.06s steps(1) infinite;
  -moz-animation: blink 1.06s steps(1) infinite;
  animation: blink 1.06s steps(1) infinite;
}
.cm-animate-fat-cursor {
  width: auto;
  border: 0;
  -webkit-animation: blink 1.06s steps(1) infinite;
  -moz-animation: blink 1.06s steps(1) infinite;
  animation: blink 1.06s steps(1) infinite;
  background-color: #7e7;
}
@-moz-keyframes blink {
  0% {}
  50% { background-color: transparent; }
  100% {}
}
@-webkit-keyframes blink {
  0% {}
  50% { background-color: transparent; }
  100% {}
}
@keyframes blink {
  0% {}
  50% { background-color: transparent; }
  100% {}
}

/* Can style cursor different in overwrite (non-insert) mode */
.CodeMirror-overwrite .CodeMirror-cursor {}

.cm-tab { display: inline-block; text-decoration: inherit; }

.CodeMirror-rulers {
  position: absolute;
  left: 0; right: 0; top: -50px; bottom: 0;
  overflow: hidden;
}
.CodeMirror-ruler {
  border-left: 1px solid #ccc;
  top: 0; bottom: 0;
  position: absolute;
}

/* DEFAULT THEME */

.cm-s-default .cm-header {color: blue;}
.cm-s-default .cm-quote {color: #090;}
.cm-negative {color: #d44;}
.cm-positive {color: #292;}
.cm-header, .cm-strong {font-weight: bold;}
.cm-em {font-style: italic;}
.cm-link {text-decoration: underline;}
.cm-strikethrough {text-decoration: line-through;}

.cm-s-default .cm-keyword {color: #708;}
.cm-s-default .cm-atom {color: #219;}
.cm-s-default .cm-number {color: #164;}
.cm-s-default .cm-def {color: #00f;}
.cm-s-default .cm-variable,
.cm-s-default .cm-punctuation,
.cm-s-default .cm-property,
.cm-s-default .cm-operator {}
.cm-s-default .cm-variable-2 {color: #05a;}
.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}
.cm-s-default .cm-comment {color: #a50;}
.cm-s-default .cm-string {color: #a11;}
.cm-s-default .cm-string-2 {color: #f50;}
.cm-s-default .cm-meta {color: #555;}
.cm-s-default .cm-qualifier {color: #555;}
.cm-s-default .cm-builtin {color: #30a;}
.cm-s-default .cm-bracket {color: #997;}
.cm-s-default .cm-tag {color: #170;}
.cm-s-default .cm-attribute {color: #00c;}
.cm-s-default .cm-hr {color: #999;}
.cm-s-default .cm-link {color: #00c;}

.cm-s-default .cm-error {color: #f00;}
.cm-invalidchar {color: #f00;}

.CodeMirror-composing { border-bottom: 2px solid; }

/* Default styles for common addons */

div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}
.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
.CodeMirror-activeline-background {background: #e8f2ff;}

/* STOP */

/* The rest of this file contains styles related to the mechanics of
   the editor. You probably shouldn't touch them. */

.CodeMirror {
  position: relative;
  overflow: hidden;
  background: white;
}

.CodeMirror-scroll {
  overflow: scroll !important; /* Things will break if this is overridden */
  /* 50px is the magic margin used to hide the element's real scrollbars */
  /* See overflow: hidden in .CodeMirror */
  margin-bottom: -50px; margin-right: -50px;
  padding-bottom: 50px;
  height: 100%;
  outline: none; /* Prevent dragging from highlighting the element */
  position: relative;
}
.CodeMirror-sizer {
  position: relative;
  border-right: 50px solid transparent;
}

/* The fake, visible scrollbars. Used to force redraw during scrolling
   before actual scrolling happens, thus preventing shaking and
   flickering artifacts. */
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
  position: absolute;
  z-index: 6;
  display: none;
  outline: none;
}
.CodeMirror-vscrollbar {
  right: 0; top: 0;
  overflow-x: hidden;
  overflow-y: scroll;
}
.CodeMirror-hscrollbar {
  bottom: 0; left: 0;
  overflow-y: hidden;
  overflow-x: scroll;
}
.CodeMirror-scrollbar-filler {
  right: 0; bottom: 0;
}
.CodeMirror-gutter-filler {
  left: 0; bottom: 0;
}

.CodeMirror-gutters {
  position: absolute; left: 0; top: 0;
  min-height: 100%;
  z-index: 3;
}
.CodeMirror-gutter {
  white-space: normal;
  height: 100%;
  display: inline-block;
  vertical-align: top;
  margin-bottom: -50px;
}
.CodeMirror-gutter-wrapper {
  position: absolute;
  z-index: 4;
  background: none !important;
  border: none !important;
}
.CodeMirror-gutter-background {
  position: absolute;
  top: 0; bottom: 0;
  z-index: 4;
}
.CodeMirror-gutter-elt {
  position: absolute;
  cursor: default;
  z-index: 4;
}
.CodeMirror-gutter-wrapper ::selection { background-color: transparent }
.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }

.CodeMirror-lines {
  cursor: text;
  min-height: 1px; /* prevents collapsing before first draw */
}
.CodeMirror pre.CodeMirror-line,
.CodeMirror pre.CodeMirror-line-like {
  /* Reset some styles that the rest of the page might have set */
  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
  border-width: 0;
  background: transparent;
  font-family: inherit;
  font-size: inherit;
  margin: 0;
  white-space: pre;
  word-wrap: normal;
  line-height: inherit;
  color: inherit;
  z-index: 2;
  position: relative;
  overflow: visible;
  -webkit-tap-highlight-color: transparent;
  -webkit-font-variant-ligatures: contextual;
  font-variant-ligatures: contextual;
}
.CodeMirror-wrap pre.CodeMirror-line,
.CodeMirror-wrap pre.CodeMirror-line-like {
  word-wrap: break-word;
  white-space: pre-wrap;
  word-break: normal;
}

.CodeMirror-linebackground {
  position: absolute;
  left: 0; right: 0; top: 0; bottom: 0;
  z-index: 0;
}

.CodeMirror-linewidget {
  position: relative;
  z-index: 2;
  padding: 0.1px; /* Force widget margins to stay inside of the container */
}

.CodeMirror-widget {}

.CodeMirror-rtl pre { direction: rtl; }

.CodeMirror-code {
  outline: none;
}

/* Force content-box sizing for the elements where we expect it */
.CodeMirror-scroll,
.CodeMirror-sizer,
.CodeMirror-gutter,
.CodeMirror-gutters,
.CodeMirror-linenumber {
  -moz-box-sizing: content-box;
  box-sizing: content-box;
}

.CodeMirror-measure {
  position: absolute;
  width: 100%;
  height: 0;
  overflow: hidden;
  visibility: hidden;
}

.CodeMirror-cursor {
  position: absolute;
  pointer-events: none;
}
.CodeMirror-measure pre { position: static; }

div.CodeMirror-cursors {
  visibility: hidden;
  position: relative;
  z-index: 3;
}
div.CodeMirror-dragcursors {
  visibility: visible;
}

.CodeMirror-focused div.CodeMirror-cursors {
  visibility: visible;
}

.CodeMirror-selected { background: #d9d9d9; }
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
.CodeMirror-crosshair { cursor: crosshair; }
.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }

.cm-searching {
  background-color: #ffa;
  background-color: rgba(255, 255, 0, .4);
}

/* Used to force a border model for a node */
.cm-force-border { padding-right: .1px; }

@media print {
  /* Hide the cursor when printing */
  .CodeMirror div.CodeMirror-cursors {
    visibility: hidden;
  }
}

/* See issue #2901 */
.cm-tab-wrap-hack:after { content: ''; }

/* Help users use markselection to safely style text background */
span.CodeMirror-selectedtext { background: none; }
PK|c�\X���,managesieve/codemirror/lib/codemirror.min.jsnu�[���!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).CodeMirror=t()}(this,function(){"use strict";var e=navigator.userAgent,s=navigator.platform,G=/gecko\/\d/i.test(e),t=/MSIE \d/.test(e),a=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),u=/Edge\/(\d+)/.exec(e),w=t||a||u,v=w&&(t?document.documentMode||6:+(u||a)[1]),x=!u&&/WebKit\//.test(e),t=x&&/Qt\/\d+\.\d+/.test(e),c=!u&&/Chrome\//.test(e),U=/Opera\//.test(e),V=/Apple Computer/.test(navigator.vendor),d=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),K=/PhantomJS/.test(e),j=!u&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),X=/Android/.test(e),Y=j||X||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),C=j||/Mac/.test(s),_=/\bCrOS\b/.test(e),a=/win/i.test(s),u=U&&e.match(/Version\/(\d*\.\d*)/),$=((u=u&&Number(u[1]))&&15<=u&&(x=!(U=!1)),C&&(t||U&&(null==u||u<12.11))),q=G||w&&9<=v;function Z(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var Q=function(e,t){var n,r=e.className,t=Z(t).exec(r);t&&(n=r.slice(t.index+t[0].length),e.className=r.slice(0,t.index)+(n?t[1]+n:""))};function J(e){for(var t=e.childNodes.length;0<t;--t)e.removeChild(e.firstChild);return e}function y(e,t){return J(e).appendChild(t)}function M(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function ee(e,t,n,r){e=M(e,t,n,r);return e.setAttribute("role","presentation"),e}function te(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if((t=11==t.nodeType?t.host:t)==e)return!0}while(t=t.parentNode)}function ne(){var t;try{t=document.activeElement}catch(e){t=document.body||null}for(;t&&t.shadowRoot&&t.shadowRoot.activeElement;)t=t.shadowRoot.activeElement;return t}function re(e,t){var n=e.className;Z(t).test(n)||(e.className+=(n?" ":"")+t)}function ie(e,t){for(var n=e.split(" "),r=0;r<n.length;r++)n[r]&&!Z(n[r]).test(t)&&(t+=" "+n[r]);return t}var oe=document.createRange?function(e,t,n,r){var i=document.createRange();return i.setEnd(r||e,n),i.setStart(e,t),i}:function(e,t,n){var r=document.body.createTextRange();try{r.moveToElementText(e.parentNode)}catch(e){return r}return r.collapse(!0),r.moveEnd("character",n),r.moveStart("character",t),r},le=function(e){e.select()};function se(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function ae(e,t,n){for(var r in t=t||{},e)!e.hasOwnProperty(r)||!1===n&&t.hasOwnProperty(r)||(t[r]=e[r]);return t}function ue(e,t,n,r,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.length);for(var o=r||0,l=i||0;;){var s=e.indexOf("\t",o);if(s<0||t<=s)return l+(t-o);l=(l+=s-o)+(n-l%n),o=s+1}}j?le=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:w&&(le=function(e){try{e.select()}catch(e){}});function ce(){this.id=null,this.f=null,this.time=0,this.handler=se(this.onTimeout,this)}function S(e,t){for(var n=0;n<e.length;++n)if(e[n]==t)return n;return-1}ce.prototype.onTimeout=function(e){e.id=0,e.time<=+new Date?e.f():setTimeout(e.handler,e.time-+new Date)};var he=50,de={toString:function(){return"CodeMirror.Pass"}},fe={scroll:!(ce.prototype.set=function(e,t){this.f=t;t=+new Date+e;(!this.id||t<this.time)&&(clearTimeout(this.id),this.id=setTimeout(this.handler,e),this.time=t)})},pe={origin:"*mouse"},ge={origin:"+move"};function me(e,t,n){for(var r=0,i=0;;){var o=e.indexOf("\t",r),l=(o=-1==o?e.length:o)-r;if(o==e.length||t<=i+l)return r+Math.min(l,t-i);if(i+=o-r,r=o+1,t<=(i+=n-i%n))return r}}var ve=[""];function ye(e){for(;ve.length<=e;)ve.push(z(ve)+" ");return ve[e]}function z(e){return e[e.length-1]}function be(e,t){for(var n=[],r=0;r<e.length;r++)n[r]=t(e[r],r);return n}function we(){}function xe(e,t){e=Object.create?Object.create(e):(we.prototype=e,new we);return t&&ae(t,e),e}var Ce=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;function Se(e){return/\w/.test(e)||"€"<e&&(e.toUpperCase()!=e.toLowerCase()||Ce.test(e))}function Le(e,t){return t?!!(-1<t.source.indexOf("\\w")&&Se(e))||t.test(e):Se(e)}function ke(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return;return 1}var Te=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function Me(e){return 768<=e.charCodeAt(0)&&Te.test(e)}function Ne(e,t,n){for(;(n<0?0<t:t<e.length)&&Me(e.charAt(t));)t+=n;return t}function Oe(e,t,n){for(var r=n<t?-1:1;;){if(t==n)return t;var i=(t+n)/2,i=r<0?Math.ceil(i):Math.floor(i);if(i==t)return e(i)?t:n;e(i)?n=i:t=i+r}}var Ae=null;function De(e,t,n){var r;Ae=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&"before"==n?r=i:Ae=i),o.from==t&&(o.from!=o.to&&"before"!=n?r=i:Ae=i)}return null!=r?r:Ae}We=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,He=/[stwN]/,Fe=/[LRr]/,Ee=/[Lb1n]/,Pe=/[1n]/;var We,He,Fe,Ee,Pe,Ie=function(e,t){var n="ltr"==t?"L":"R";if(0==e.length||"ltr"==t&&!We.test(e))return!1;for(var r,i=e.length,o=[],l=0;l<i;++l)o.push((r=e.charCodeAt(l))<=247?"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN".charAt(r):1424<=r&&r<=1524?"R":1536<=r&&r<=1785?"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111".charAt(r-1536):1774<=r&&r<=2220?"r":8192<=r&&r<=8203?"w":8204==r?"b":"L");for(var s=0,a=n;s<i;++s){var u=o[s];"m"==u?o[s]=a:a=u}for(var c=0,h=n;c<i;++c){var d=o[c];"1"==d&&"r"==h?o[c]="n":Fe.test(d)&&"r"==(h=d)&&(o[c]="R")}for(var f=1,p=o[0];f<i-1;++f){var g=o[f];"+"==g&&"1"==p&&"1"==o[f+1]?o[f]="1":","!=g||p!=o[f+1]||"1"!=p&&"n"!=p||(o[f]=p),p=g}for(var m=0;m<i;++m){var v=o[m];if(","==v)o[m]="N";else if("%"==v){for(var y=void 0,y=m+1;y<i&&"%"==o[y];++y);for(var b=m&&"!"==o[m-1]||y<i&&"1"==o[y]?"1":"N",w=m;w<y;++w)o[w]=b;m=y-1}}for(var x=0,C=n;x<i;++x){var S=o[x];"L"==C&&"1"==S?o[x]="L":Fe.test(S)&&(C=S)}for(var L=0;L<i;++L)if(He.test(o[L])){for(var k=void 0,k=L+1;k<i&&He.test(o[k]);++k);for(var T="L"==(L?o[L-1]:n),M=T==("L"==(k<i?o[k]:n))?T?"L":"R":n,N=L;N<k;++N)o[N]=M;L=k-1}for(var O,A=[],D=0;D<i;)if(Ee.test(o[D])){var P=D;for(++D;D<i&&Ee.test(o[D]);++D);A.push(new ze(0,P,D))}else{var W=D,H=A.length,F="rtl"==t?1:0;for(++D;D<i&&"L"!=o[D];++D);for(var E=W;E<D;)if(Pe.test(o[E])){W<E&&(A.splice(H,0,new ze(1,W,E)),H+=F);var I=E;for(++E;E<D&&Pe.test(o[E]);++E);A.splice(H,0,new ze(2,I,E)),H+=F,W=E}else++E;W<D&&A.splice(H,0,new ze(1,W,D))}return"ltr"==t&&(1==A[0].level&&(O=e.match(/^\s+/))&&(A[0].from=O[0].length,A.unshift(new ze(0,0,O[0].length))),1==z(A).level)&&(O=e.match(/\s+$/))&&(z(A).to-=O[0].length,A.push(new ze(0,i-O[0].length,i))),"rtl"==t?A.reverse():A};function ze(e,t,n){this.level=e,this.from=t,this.to=n}function Re(e,t){var n=e.order;return n=null==n?e.order=Ie(e.text,t):n}var Be=[],L=function(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent?e.attachEvent("on"+t,n):(e=e._handlers||(e._handlers={}))[t]=(e[t]||Be).concat(n)};function Ge(e,t){return e._handlers&&e._handlers[t]||Be}function k(e,t,n){var r;e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent?e.detachEvent("on"+t,n):(r=(e=e._handlers)&&e[t])&&-1<(n=S(r,n))&&(e[t]=r.slice(0,n).concat(r.slice(n+1)))}function N(e,t){var n=Ge(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i<n.length;++i)n[i].apply(null,r)}function O(e,t,n){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),N(e,n||t.type,e,t),Xe(t)||t.codemirrorIgnore}function Ue(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),r=0;r<t.length;++r)-1==S(n,t[r])&&n.push(t[r])}function Ve(e,t){return 0<Ge(e,t).length}function Ke(e){e.prototype.on=function(e,t){L(this,e,t)},e.prototype.off=function(e,t){k(this,e,t)}}function T(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function je(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Xe(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Ye(e){T(e),je(e)}function _e(e){return e.target||e.srcElement}function $e(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),t=C&&e.ctrlKey&&1==t?3:t}var qe,Ze,Qe=!(w&&v<9)&&("draggable"in(s=M("div"))||"dragDrop"in s);var Je=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf("\n",t),o=(-1==i&&(i=e.length),e.slice(t,"\r"==e.charAt(i-1)?i-1:i)),l=o.indexOf("\r");-1!=l?(n.push(o.slice(0,l)),t+=l+1):(n.push(o),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},et=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},tt="oncopy"in(e=M("div"))||(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy),nt=null;var rt={},it={};function ot(e){if("string"==typeof e&&it.hasOwnProperty(e))e=it[e];else if(e&&"string"==typeof e.name&&it.hasOwnProperty(e.name)){var t=it[e.name];(e=xe(t="string"==typeof t?{name:t}:t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return ot("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return ot("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function lt(e,t){t=ot(t);var n=rt[t.name];if(!n)return lt(e,"text/plain");var r=n(e,t);if(st.hasOwnProperty(t.name)){var i,o=st[t.name];for(i in o)o.hasOwnProperty(i)&&(r.hasOwnProperty(i)&&(r["_"+i]=r[i]),r[i]=o[i])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)r[l]=t.modeProps[l];return r}var st={};function at(e,t){ae(t,st.hasOwnProperty(e)?st[e]:st[e]={})}function ut(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n,r={};for(n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function ct(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function ht(e,t,n){return!e.startState||e.startState(t,n)}var g=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function A(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(t<o){n=i;break}t-=o}return n.lines[t]}function dt(e,t,n){var r=[],i=t.line;return e.iter(t.line,n.line+1,function(e){e=e.text;i==n.line&&(e=e.slice(0,n.ch)),i==t.line&&(e=e.slice(t.ch)),r.push(e),++i}),r}function ft(e,t,n){var r=[];return e.iter(t,n,function(e){r.push(e.text)}),r}function pt(e,t){var n=t-e.height;if(n)for(var r=e;r;r=r.parent)r.height+=n}function D(e){if(null==e.parent)return null;for(var t=e.parent,n=S(t.lines,e),r=t.parent;r;r=(t=r).parent)for(var i=0;r.children[i]!=t;++i)n+=r.children[i].chunkSize();return n+t.first}function gt(e,t){var n=e.first;e:do{for(var r=0;r<e.children.length;++r){var i=e.children[r],o=i.height;if(t<o){e=i;continue e}t-=o,n+=i.chunkSize()}return n}while(!e.lines);for(var l=0;l<e.lines.length;++l){var s=e.lines[l].height;if(t<s)break;t-=s}return n+l}function mt(e,t){return t>=e.first&&t<e.first+e.size}function vt(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function W(e,t,n){if(void 0===n&&(n=null),!(this instanceof W))return new W(e,t,n);this.line=e,this.ch=t,this.sticky=n}function H(e,t){return e.line-t.line||e.ch-t.ch}function yt(e,t){return e.sticky==t.sticky&&0==H(e,t)}function bt(e){return W(e.line,e.ch)}function wt(e,t){return H(e,t)<0?t:e}function xt(e,t){return H(e,t)<0?e:t}function Ct(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function F(e,t){var n;return t.line<e.first?W(e.first,0):(n=e.first+e.size-1,t.line>n?W(n,A(e,n).text.length):(e=A(e,(n=t).line).text.length,null==(t=n.ch)||e<t?W(n.line,e):t<0?W(n.line,0):n))}function St(e,t){for(var n=[],r=0;r<t.length;r++)n[r]=F(e,t[r]);return n}g.prototype.eol=function(){return this.pos>=this.string.length},g.prototype.sol=function(){return this.pos==this.lineStart},g.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},g.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},g.prototype.eat=function(e){var t=this.string.charAt(this.pos),e="string"==typeof e?t==e:t&&(e.test?e.test(t):e(t));if(e)return++this.pos,t},g.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},g.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},g.prototype.skipToEnd=function(){this.pos=this.string.length},g.prototype.skipTo=function(e){e=this.string.indexOf(e,this.pos);if(-1<e)return this.pos=e,!0},g.prototype.backUp=function(e){this.pos-=e},g.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=ue(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?ue(this.string,this.lineStart,this.tabSize):0)},g.prototype.indentation=function(){return ue(this.string,null,this.tabSize)-(this.lineStart?ue(this.string,this.lineStart,this.tabSize):0)},g.prototype.match=function(e,t,n){var r;return"string"!=typeof e?(r=this.string.slice(this.pos).match(e))&&0<r.index?null:(r&&!1!==t&&(this.pos+=r[0].length),r):(r=function(e){return n?e.toLowerCase():e})(this.string.substr(this.pos,e.length))==r(e)?(!1!==t&&(this.pos+=e.length),!0):void 0},g.prototype.current=function(){return this.string.slice(this.start,this.pos)},g.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},g.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},g.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};function Lt(e,t){this.state=e,this.lookAhead=t}var kt=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};function Tt(t,n,r,e){for(var a=[t.state.modeGen],i={},u=(Et(t,n.text,t.doc.mode,r,function(e,t){a.push(e,t)},i,e),r.state),o=0;o<t.state.overlays.length;++o)!function(e){r.baseTokens=a;var o=t.state.overlays[e],l=1,s=0;r.state=!0,Et(t,n.text,o.mode,r,function(e,t){for(var n=l;s<e;){var r=a[l];e<r&&a.splice(l,1,e,a[l+1],r),l+=2,s=Math.min(e,r)}if(t)if(o.opaque)a.splice(n,l-n,e,"overlay "+t),l=n+2;else for(;n<l;n+=2){var i=a[n+1];a[n+1]=(i?i+" ":"")+"overlay "+t}},i),r.state=u,r.baseTokens=null,r.baseTokenPos=1}(o);return{styles:a,classes:i.bgClass||i.textClass?i:null}}function Mt(e,t,n){var r,i,o;return t.styles&&t.styles[0]==e.state.modeGen||(r=Nt(e,D(t)),i=t.text.length>e.options.maxHighlightLength&&ut(e.doc.mode,r.state),o=Tt(e,t,r),i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))),t.styles}function Nt(n,r,e){var t,i,o,l=n.doc,s=n.display;return l.mode.startState?(i=(t=function(e,t,n){for(var r,i,o=e.doc,l=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;l<s;--s){if(s<=o.first)return o.first;var a=A(o,s-1),u=a.stateAfter;if(u&&(!n||s+(u instanceof Lt?u.lookAhead:0)<=o.modeFrontier))return s;u=ue(a.text,null,e.options.tabSize);(null==i||u<r)&&(i=s-1,r=u)}return i}(n,r,e))>l.first&&A(l,t-1).stateAfter,o=i?kt.fromSaved(l,i,t):new kt(l,ht(l.mode),t),l.iter(t,r,function(e){Ot(n,e.text,o);var t=o.line;e.stateAfter=t==r-1||t%5==0||t>=s.viewFrom&&t<s.viewTo?o.save():null,o.nextLine()}),e&&(l.modeFrontier=o.line),o):new kt(l,!0,r)}function Ot(e,t,n,r){var i=e.doc.mode,o=new g(t,e.options.tabSize,n);for(o.start=o.pos=r||0,""==t&&At(i,n.state);!o.eol();)Dt(i,o,n.state),o.start=o.pos}function At(e,t){return e.blankLine?e.blankLine(t):e.innerMode&&(e=ct(e,t)).mode.blankLine?e.mode.blankLine(e.state):void 0}function Dt(e,t,n,r){for(var i=0;i<10;i++){r&&(r[0]=ct(e,n).mode);var o=e.token(t,n);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}kt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},kt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},kt.prototype.nextLine=function(){this.line++,0<this.maxLookAhead&&this.maxLookAhead--},kt.fromSaved=function(e,t,n){return t instanceof Lt?new kt(e,ut(e.mode,t.state),n,t.lookAhead):new kt(e,ut(e.mode,t),n)},kt.prototype.save=function(e){e=!1!==e?ut(this.doc.mode,this.state):this.state;return 0<this.maxLookAhead?new Lt(e,this.maxLookAhead):e};var Wt=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function Ht(e,t,n,r){var i,o,l=e.doc,s=l.mode,a=A(l,(t=F(l,t)).line),u=Nt(e,t.line,n),c=new g(a.text,e.options.tabSize,u);for(r&&(o=[]);(r||c.pos<t.ch)&&!c.eol();)c.start=c.pos,i=Dt(s,c,u.state),r&&o.push(new Wt(c,i,ut(l.mode,u.state)));return r?o:new Wt(c,i,u.state)}function Ft(e,t){if(e)for(;;){var n=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!n)break;e=e.slice(0,n.index)+e.slice(n.index+n[0].length);var r=n[1]?"bgClass":"textClass";null==t[r]?t[r]=n[2]:new RegExp("(?:^|\\s)"+n[2]+"(?:$|\\s)").test(t[r])||(t[r]+=" "+n[2])}return e}function Et(e,t,n,r,i,o,l){var s=n.flattenSpans,a=(null==s&&(s=e.options.flattenSpans),0),u=null,c=new g(t,e.options.tabSize,r),h=e.options.addModeClass&&[null];for(""==t&&Ft(At(n,r.state),o);!c.eol();){var d,f=c.pos>e.options.maxHighlightLength?(s=!1,l&&Ot(e,t,r,c.pos),c.pos=t.length,null):Ft(Dt(n,c,r.state,h),o);if(h&&(d=h[0].name)&&(f="m-"+(f?d+" "+f:d)),!s||u!=f){for(;a<c.start;)i(a=Math.min(c.start,a+5e3),u);u=f}c.start=c.pos}for(;a<c.pos;){var p=Math.min(c.pos,a+5e3);i(p,u),a=p}}var Pt=!1,It=!1;function zt(e,t,n){this.marker=e,this.from=t,this.to=n}function Rt(e,t){if(e)for(var n=0;n<e.length;++n){var r=e[n];if(r.marker==t)return r}}function Bt(e,t){if(t.full)return null;var n=mt(e,t.from.line)&&A(e,t.from.line).markedSpans,e=mt(e,t.to.line)&&A(e,t.to.line).markedSpans;if(!n&&!e)return null;var r=t.from.ch,i=t.to.ch,o=0==H(t.from,t.to),l=function(e,t,n){var r;if(e)for(var i=0;i<e.length;++i){var o,l=e[i],s=l.marker;!(null==l.from||(s.inclusiveLeft?l.from<=t:l.from<t))&&(l.from!=t||"bookmark"!=s.type||n&&l.marker.insertLeft)||(o=null==l.to||(s.inclusiveRight?l.to>=t:l.to>t),(r=r||[]).push(new zt(s,l.from,o?null:l.to)))}return r}(n,r,o),s=function(e,t,n){var r;if(e)for(var i=0;i<e.length;++i){var o,l=e[i],s=l.marker;!(null==l.to||(s.inclusiveRight?l.to>=t:l.to>t))&&(l.from!=t||"bookmark"!=s.type||n&&!l.marker.insertLeft)||(o=null==l.from||(s.inclusiveLeft?l.from<=t:l.from<t),(r=r||[]).push(new zt(s,o?null:l.from-t,null==l.to?null:l.to-t)))}return r}(e,i,o),a=1==t.text.length,u=z(t.text).length+(a?r:0);if(l)for(var c=0;c<l.length;++c){var h,d=l[c];null==d.to&&((h=Rt(s,d.marker))?a&&(d.to=null==h.to?null:h.to+u):d.to=r)}if(s)for(var f=0;f<s.length;++f){var p=s[f];null!=p.to&&(p.to+=u),null==p.from?Rt(l,p.marker)||(p.from=u,a&&(l=l||[]).push(p)):(p.from+=u,a&&(l=l||[]).push(p))}l=l&&Gt(l),s&&s!=l&&(s=Gt(s));var g=[l];if(!a){var m,v=t.text.length-2;if(0<v&&l)for(var y=0;y<l.length;++y)null==l[y].to&&(m=m||[]).push(new zt(l[y].marker,null,null));for(var b=0;b<v;++b)g.push(m);g.push(s)}return g}function Gt(e){for(var t=0;t<e.length;++t){var n=e[t];null!=n.from&&n.from==n.to&&!1!==n.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function Ut(e){var t=e.markedSpans;if(t){for(var n=0;n<t.length;++n)t[n].marker.detachLine(e);e.markedSpans=null}}function Vt(e,t){if(t){for(var n=0;n<t.length;++n)t[n].marker.attachLine(e);e.markedSpans=t}}function Kt(e){return e.inclusiveLeft?-1:0}function jt(e){return e.inclusiveRight?1:0}function Xt(e,t){var n,r,i=e.lines.length-t.lines.length;return 0!=i?i:(i=e.find(),n=t.find(),(r=H(i.from,n.from)||Kt(e)-Kt(t))?-r:H(i.to,n.to)||jt(e)-jt(t)||t.id-e.id)}function Yt(e,t){var n,r=It&&e.markedSpans;if(r)for(var i,o=0;o<r.length;++o)(i=r[o]).marker.collapsed&&null==(t?i.from:i.to)&&(!n||Xt(n,i.marker)<0)&&(n=i.marker);return n}function _t(e){return Yt(e,!0)}function $t(e){return Yt(e,!1)}function qt(e,t,n,r,i){var e=A(e,t),o=It&&e.markedSpans;if(o)for(var l=0;l<o.length;++l){var s=o[l];if(s.marker.collapsed){var a=s.marker.find(0),u=H(a.from,n)||Kt(s.marker)-Kt(i),c=H(a.to,r)||jt(s.marker)-jt(i);if(!(0<=u&&c<=0||u<=0&&0<=c)&&(u<=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?0<=H(a.to,n):0<H(a.to,n))||0<=u&&(s.marker.inclusiveRight&&i.inclusiveLeft?H(a.from,r)<=0:H(a.from,r)<0)))return 1}}}function Zt(e){for(var t;t=_t(e);)e=t.find(-1,!0).line;return e}function Qt(e,t){var e=A(e,t),n=Zt(e);return e==n?t:D(n)}function Jt(e,t){if(t>e.lastLine())return t;var n,r=A(e,t);if(!en(e,r))return t;for(;n=$t(r);)r=n.find(1,!0).line;return D(r)+1}function en(e,t){var n=It&&t.markedSpans;if(n)for(var r,i=0;i<n.length;++i)if((r=n[i]).marker.collapsed){if(null==r.from)return!0;if(!r.marker.widgetNode&&0==r.from&&r.marker.inclusiveLeft&&function e(t,n,r){{var i;if(null==r.to)return i=r.marker.find(1,!0),e(t,i.line,Rt(i.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.to==n.text.length)return!0;for(var o=void 0,l=0;l<n.markedSpans.length;++l)if((o=n.markedSpans[l]).marker.collapsed&&!o.marker.widgetNode&&o.from==r.to&&(null==o.to||o.to!=r.from)&&(o.marker.inclusiveLeft||r.marker.inclusiveRight)&&e(t,n,o))return!0}(e,t,r))return!0}}function tn(e){for(var t=0,n=(e=Zt(e)).parent,r=0;r<n.lines.length;++r){var i=n.lines[r];if(i==e)break;t+=i.height}for(var o=n.parent;o;o=(n=o).parent)for(var l=0;l<o.children.length;++l){var s=o.children[l];if(s==n)break;t+=s.height}return t}function nn(e){if(0==e.height)return 0;for(var t,n=e.text.length,r=e;t=_t(r);){var i=t.find(0,!0),r=i.from.line;n+=i.from.ch-i.to.ch}for(r=e;t=$t(r);)var o=t.find(0,!0),n=(n-=r.text.length-o.from.ch)+((r=o.to.line).text.length-o.to.ch);return n}function rn(e){var n=e.display,e=e.doc;n.maxLine=A(e,e.first),n.maxLineLength=nn(n.maxLine),n.maxLineChanged=!0,e.iter(function(e){var t=nn(e);t>n.maxLineLength&&(n.maxLineLength=t,n.maxLine=e)})}var on=function(e,t,n){this.text=e,Vt(this,t),this.height=n?n(this):1};on.prototype.lineNo=function(){return D(this)},Ke(on);var ln={},sn={};function an(e,t){return!e||/^\s*$/.test(e)?null:(t=t.addModeClass?sn:ln)[e]||(t[e]=e.replace(/\S+/g,"cm-$&"))}function un(e,t){var n=ee("span",null,null,x?"padding-right: .1px":null),r={pre:ee("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i,o,l=0;l<=(t.rest?t.rest.length:0);l++){var s=l?t.rest[l-1]:t.line,a=void 0,u=(r.pos=0,r.addToken=hn,u=e.display.measure,o=i=void 0,(null!=Ze?Ze:(o=y(u,document.createTextNode("AخA")),i=oe(o,0,1).getBoundingClientRect(),o=oe(o,1,2).getBoundingClientRect(),J(u),i&&i.left!=i.right&&(Ze=o.right-i.right<3)))&&(a=Re(s,e.doc.direction))&&(r.addToken=function(h,d){return function(e,t,n,r,i,o,l){n=n?n+" cm-force-border":"cm-force-border";for(var s=e.pos,a=s+t.length;;){for(var u=void 0,c=0;c<d.length&&!((u=d[c]).to>s&&u.from<=s);c++);if(u.to>=a)return h(e,t,n,r,i,o,l);h(e,t.slice(0,u.to-s),n,r,null,o,l),r=null,t=t.slice(u.to-s),s=u.to}}}(r.addToken,a)),r.map=[],t!=e.display.externalMeasured&&D(s));!function(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var l,s,a,u,c,h,d,f=i.length,p=0,g=1,m="",v=0;;){if(v==p){a=u=c=s="",h=d=null,v=1/0;for(var y=[],b=void 0,w=0;w<r.length;++w){var x=r[w],C=x.marker;if("bookmark"==C.type&&x.from==p&&C.widgetNode)y.push(C);else if(x.from<=p&&(null==x.to||x.to>p||C.collapsed&&x.to==p&&x.from==p)){if(null!=x.to&&x.to!=p&&v>x.to&&(v=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==v&&(b=b||[]).push(C.endStyle,x.to),C.title&&((d=d||{}).title=C.title),C.attributes)for(var S in C.attributes)(d=d||{})[S]=C.attributes[S];C.collapsed&&(!h||Xt(h.marker,C)<0)&&(h=x)}else x.from>p&&v>x.from&&(v=x.from)}if(b)for(var L=0;L<b.length;L+=2)b[L+1]==v&&(u+=" "+b[L]);if(!h||h.from==p)for(var k=0;k<y.length;++k)dn(t,0,y[k]);if(h&&(h.from||0)==p){if(dn(t,(null==h.to?f+1:h.to)-p,h.marker,null==h.from),null==h.to)return;h.to==p&&(h=!1)}}if(f<=p)break;for(var T=Math.min(f,v);;){if(m){var M,N=p+m.length;if(h||(M=T<N?m.slice(0,T-p):m,t.addToken(t,M,l?l+a:a,c,p+M.length==v?u:"",s,d)),T<=N){m=m.slice(T-p),p=T;break}p=N,c=""}m=i.slice(o,o=n[g++]),l=an(n[g++],t.cm.options)}}else for(var O=1;O<n.length;O+=2)t.addToken(t,i.slice(o,o=n[O]),an(n[O+1],t.cm.options))}(s,r,Mt(e,s,u)),s.styleClasses&&(s.styleClasses.bgClass&&(r.bgClass=ie(s.styleClasses.bgClass,r.bgClass||"")),s.styleClasses.textClass)&&(r.textClass=ie(s.styleClasses.textClass,r.textClass||"")),0==r.map.length&&r.map.push(0,0,r.content.appendChild((o=e.display.measure,i=void 0,(o=(qe=null==qe&&(i=M("span","​"),y(o,M("span",[i,document.createTextNode("x")])),0!=o.firstChild.offsetHeight)?i.offsetWidth<=1&&2<i.offsetHeight&&!(w&&v<8):qe)?M("span","​"):M("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px")).setAttribute("cm-text",""),o))),0==l?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}return x&&(n=r.content.lastChild,/\bcm-tab\b/.test(n.className)||n.querySelector&&n.querySelector(".cm-tab"))&&(r.content.className="cm-tab-wrap-hack"),N(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=ie(r.pre.className,r.textClass||"")),r}function cn(e){var t=M("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function hn(e,t,n,r,i,o,l){if(t){var s=e.splitSpaces?function(e,t){if(1<e.length&&!/  /.test(e))return e;for(var n=t,r="",i=0;i<e.length;i++){var o=e.charAt(i);" "!=o||!n||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o=" "),r+=o,n=" "==o}return r}(t,e.trailingSpace):t,a=e.cm.state.specialChars,u=!1;if(a.test(t))for(var c=document.createDocumentFragment(),h=0;;){a.lastIndex=h;var d=a.exec(t),f=d?d.index-h:t.length-h;if(f&&(p=document.createTextNode(s.slice(h,h+f)),w&&v<9?c.appendChild(M("span",[p])):c.appendChild(p),e.map.push(e.pos,e.pos+f,p),e.col+=f,e.pos+=f),!d)break;h+=1+f;var p=void 0;"\t"==d[0]?(f=(f=e.cm.options.tabSize)-e.col%f,(p=c.appendChild(M("span",ye(f),"cm-tab"))).setAttribute("role","presentation"),p.setAttribute("cm-text","\t"),e.col+=f):("\r"==d[0]||"\n"==d[0]?(p=c.appendChild(M("span","\r"==d[0]?"␍":"␤","cm-invalidchar"))).setAttribute("cm-text",d[0]):((p=e.cm.options.specialCharPlaceholder(d[0])).setAttribute("cm-text",d[0]),w&&v<9?c.appendChild(M("span",[p])):c.appendChild(p)),e.col+=1),e.map.push(e.pos,e.pos+1,p),e.pos++}else e.col+=t.length,c=document.createTextNode(s),e.map.push(e.pos,e.pos+t.length,c),w&&v<9&&(u=!0),e.pos+=t.length;if(e.trailingSpace=32==s.charCodeAt(t.length-1),n||r||i||u||o||l){var u=n||"",g=(r&&(u+=r),i&&(u+=i),M("span",[c],u,o));if(l)for(var m in l)l.hasOwnProperty(m)&&"style"!=m&&"class"!=m&&g.setAttribute(m,l[m]);return e.content.appendChild(g)}e.content.appendChild(c)}}function dn(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i=i||e.content.appendChild(document.createElement("span"))).setAttribute("cm-marker",n.id),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function fn(e,t,n){this.line=t,this.rest=function(e){for(var t,n;t=$t(e);)e=t.find(1,!0).line,(n=n||[]).push(e);return n}(t),this.size=this.rest?D(z(this.rest))-n+1:1,this.node=this.text=null,this.hidden=en(e,t)}function pn(e,t,n){for(var r=[],i=t;i<n;i=l){var o=new fn(e.doc,A(e.doc,i),i),l=i+o.size;r.push(o)}return r}var gn=null;var mn=null;function b(e,t){var n=Ge(e,t);if(n.length)for(var r,i=Array.prototype.slice.call(arguments,2),o=(gn?r=gn.delayedCallbacks:mn?r=mn:(r=mn=[],setTimeout(vn,0)),0);o<n.length;++o)!function(e){r.push(function(){return n[e].apply(null,i)})}(o)}function vn(){var e=mn;mn=null;for(var t=0;t<e.length;++t)e[t]()}function yn(e,t,n,r){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];if("text"==o){u=a=s=l=void 0;var l=e,s=t,a=s.text.className,u=wn(l,s);s.text==s.node&&(s.node=u.pre),s.text.parentNode.replaceChild(u.pre,s.text),s.text=u.pre,u.bgClass!=s.bgClass||u.textClass!=s.textClass?(s.bgClass=u.bgClass,s.textClass=u.textClass,xn(l,s)):a&&(s.text.className=a)}else if("gutter"==o)Cn(e,t,n,r);else if("class"==o)xn(e,t);else if("widget"==o){f=d=h=l=c=u=void 0;var u=e,c=t,l=r;c.alignable&&(c.alignable=null);for(var h=Z("CodeMirror-linewidget"),d=c.node.firstChild,f=void 0;d;d=f)f=d.nextSibling,h.test(d.className)&&c.node.removeChild(d);Sn(u,c,l)}}t.changes=null}function bn(e){return e.node==e.text&&(e.node=M("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),w)&&v<8&&(e.node.style.zIndex=2),e.node}function wn(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):un(e,t)}function xn(e,t){e=e,(i=(n=t).bgClass?n.bgClass+" "+(n.line.bgClass||""):n.line.bgClass)&&(i+=" CodeMirror-linebackground"),n.background?i?n.background.className=i:(n.background.parentNode.removeChild(n.background),n.background=null):i&&(r=bn(n),n.background=r.insertBefore(M("div",null,i),r.firstChild),e.display.input.setUneditable(n.background)),t.line.wrapClass?bn(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className="");var n,r,i=t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass;t.text.className=i||""}function Cn(e,t,n,r){t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass&&(o=bn(t),t.gutterBackground=M("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px; width: "+r.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),o.insertBefore(t.gutterBackground,t.text));var i=t.line.gutterMarkers;if(e.options.lineNumbers||i){var o=bn(t),l=t.gutter=M("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?r.fixedPos:-r.gutterTotalWidth)+"px");if(e.display.input.setUneditable(l),o.insertBefore(l,t.text),t.line.gutterClass&&(l.className+=" "+t.line.gutterClass),!e.options.lineNumbers||i&&i["CodeMirror-linenumbers"]||(t.lineNumber=l.appendChild(M("div",vt(e.options,n),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+r.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),i)for(var s=0;s<e.display.gutterSpecs.length;++s){var a=e.display.gutterSpecs[s].className,u=i.hasOwnProperty(a)&&i[a];u&&l.appendChild(M("div",[u],"CodeMirror-gutter-elt","left: "+r.gutterLeft[a]+"px; width: "+r.gutterWidth[a]+"px"))}}}function Sn(e,t,n){if(Ln(e,t.line,t,n,!0),t.rest)for(var r=0;r<t.rest.length;r++)Ln(e,t.rest[r],t,n,!1)}function Ln(e,t,n,r,i){if(t.widgets)for(var o=bn(n),l=0,s=t.widgets;l<s.length;++l){var a=s[l],u=M("div",[a.node],"CodeMirror-linewidget"+(a.className?" "+a.className:"")),c=(a.handleMouseEvents||u.setAttribute("cm-ignore-events","true"),f=d=h=c=void 0,a),h=u,d=n,f=r;c.noHScroll&&((d.alignable||(d.alignable=[])).push(h),d=f.wrapperWidth,h.style.left=f.fixedPos+"px",c.coverGutter||(d-=f.gutterTotalWidth,h.style.paddingLeft=f.gutterTotalWidth+"px"),h.style.width=d+"px"),c.coverGutter&&(h.style.zIndex=5,h.style.position="relative",c.noHScroll||(h.style.marginLeft=-f.gutterTotalWidth+"px")),e.display.input.setUneditable(u),i&&a.above?o.insertBefore(u,n.gutter||n.text):o.appendChild(u),b(a,"redraw")}}function kn(e){var t,n;return null!=e.height?e.height:(t=e.doc.cm)?(te(document.body,e.node)||(n="position: relative;",e.coverGutter&&(n+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(n+="width: "+t.display.wrapper.clientWidth+"px;"),y(t.display.measure,M("div",[e.node],null,n))),e.height=e.node.parentNode.offsetHeight):0}function Tn(e,t){for(var n=_e(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&"true"==n.getAttribute("cm-ignore-events")||n.parentNode==e.sizer&&n!=e.mover)return 1}function Mn(e){return e.lineSpace.offsetTop}function Nn(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function On(e){var t;return e.cachedPaddingH||(t=y(e.measure,M("pre","x","CodeMirror-line-like")),t=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,t={left:parseInt(t.paddingLeft),right:parseInt(t.paddingRight)},isNaN(t.left)||isNaN(t.right)||(e.cachedPaddingH=t),t)}function An(e){return he-e.display.nativeBarWidth}function Dn(e){return e.display.scroller.clientWidth-An(e)-e.display.barWidth}function Wn(e){return e.display.scroller.clientHeight-An(e)-e.display.barHeight}function Hn(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var r=0;r<e.rest.length;r++)if(e.rest[r]==t)return{map:e.measure.maps[r],cache:e.measure.caches[r]};for(var i=0;i<e.rest.length;i++)if(D(e.rest[i])>n)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Fn(e,t,n,r){return In(e,Pn(e,t),n,r)}function En(e,t){return t>=e.display.viewFrom&&t<e.display.viewTo?e.display.view[dr(e,t)]:(e=e.display.externalMeasured)&&t>=e.lineN&&t<e.lineN+e.size?e:void 0}function Pn(e,t){var n,r,i=D(t),o=En(e,i),e=(o&&!o.text?o=null:o&&o.changes&&(yn(e,o,i,sr(e)),e.curOp.forceUpdate=!0),o||(e=e,r=D(n=Zt(n=t)),(n=e.display.externalMeasured=new fn(e.doc,n,r)).lineN=r,r=n.built=un(e,n),n.text=r.pre,y(e.display.lineMeasure,r.pre),o=n),Hn(o,t,i));return{line:t,view:o,rect:null,map:e.map,cache:e.cache,before:e.before,hasHeights:!1}}function In(e,t,n,r,i){var o,l=(n=t.before?-1:n)+(r||"");if(t.cache.hasOwnProperty(l))o=t.cache[l];else{if(t.rect||(t.rect=t.view.text.getBoundingClientRect()),!t.hasHeights){var s=e,a=t.view,u=t.rect,c=s.options.lineWrapping,s=c&&Dn(s);if(!a.measure.heights||c&&a.measure.width!=s){var h=a.measure.heights=[];if(c){a.measure.width=s;for(var d=a.text.firstChild.getClientRects(),f=0;f<d.length-1;f++){var p=d[f],g=d[f+1];2<Math.abs(p.bottom-g.bottom)&&h.push((p.bottom+g.top)/2-u.top)}}h.push(u.bottom-u.top)}t.hasHeights=!0}(o=function(e,t,n,r){var i,o=Bn(t.map,n,r),l=o.node,s=o.start,a=o.end,u=o.collapse;if(3==l.nodeType){for(var c=0;c<4;c++){for(;s&&Me(t.line.text.charAt(o.coverStart+s));)--s;for(;o.coverStart+a<o.coverEnd&&Me(t.line.text.charAt(o.coverStart+a));)++a;if((i=w&&v<9&&0==s&&a==o.coverEnd-o.coverStart?l.parentNode.getBoundingClientRect():function(e,t){var n=Rn;if("left"==t)for(var r=0;r<e.length&&(n=e[r]).left==n.right;r++);else for(var i=e.length-1;0<=i&&(n=e[i]).left==n.right;i--);return n}(oe(l,s,a).getClientRects(),r)).left||i.right||0==s)break;a=s,s-=1,u="right"}w&&v<11&&(i=function(e,t){var n;return window.screen&&null!=screen.logicalXDPI&&screen.logicalXDPI!=screen.deviceXDPI&&function(e){var t;return null!=nt?nt:(t=(e=y(e,M("span","x"))).getBoundingClientRect(),e=oe(e,0,1).getBoundingClientRect(),nt=1<Math.abs(t.left-e.left))}(e)?(e=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI,{left:t.left*e,right:t.right*e,top:t.top*n,bottom:t.bottom*n}):t}(e.display.measure,i))}else 0<s&&(u=r="right"),i=e.options.lineWrapping&&1<(n=l.getClientRects()).length?n["right"==r?n.length-1:0]:l.getBoundingClientRect();!(w&&v<9)||s||i&&(i.left||i.right)||(n=l.parentNode.getClientRects()[0],i=n?{left:n.left,right:n.left+lr(e.display),top:n.top,bottom:n.bottom}:Rn);for(var n=i.top-t.rect.top,h=i.bottom-t.rect.top,d=(n+h)/2,f=t.view.measure.heights,p=0;p<f.length-1&&!(d<f[p]);p++);var g=p?f[p-1]:0,m=f[p],g={left:("right"==u?i.right:i.left)-t.rect.left,right:("left"==u?i.left:i.right)-t.rect.left,top:g,bottom:m};i.left||i.right||(g.bogus=!0);e.options.singleCursorHeightPerLine||(g.rtop=n,g.rbottom=h);return g}(e,t,n,r)).bogus||(t.cache[l]=o)}return{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}var zn,Rn={left:0,right:0,top:0,bottom:0};function Bn(e,t,n){for(var r,i,o,l,s,a,u=0;u<e.length;u+=3)if(s=e[u],a=e[u+1],t<s?(i=0,o=1,l="left"):t<a?o=(i=t-s)+1:(u==e.length-3||t==a&&e[u+3]>t)&&(i=(o=a-s)-1,a<=t)&&(l="right"),null!=i){if(r=e[u+2],s==a&&n==(r.insertLeft?"left":"right")&&(l=n),"left"==n&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)r=e[2+(u-=3)],l="left";if("right"==n&&i==a-s)for(;u<e.length-3&&e[u+3]==e[u+4]&&!e[u+5].insertLeft;)r=e[(u+=3)+2],l="right";break}return{node:r,start:i,end:o,collapse:l,coverStart:s,coverEnd:a}}function Gn(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function Un(e){e.display.externalMeasure=null,J(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)Gn(e.display.view[t])}function Vn(e){Un(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function Kn(){return c&&X?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function jn(){return c&&X?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function Xn(e){var t=0;if(e.widgets)for(var n=0;n<e.widgets.length;++n)e.widgets[n].above&&(t+=kn(e.widgets[n]));return t}function Yn(e,t,n,r,i){return i||(i=Xn(t),n.top+=i,n.bottom+=i),"line"!=r&&(r=r||"local",i=tn(t),"local"==r?i+=Mn(e.display):i-=e.display.viewOffset,"page"!=r&&"window"!=r||(i+=(t=e.display.lineSpace.getBoundingClientRect()).top+("window"==r?0:jn()),e=t.left+("window"==r?0:Kn()),n.left+=e,n.right+=e),n.top+=i,n.bottom+=i),n}function _n(e,t,n){var r;return"div"==n?t:(r=t.left,t=t.top,"page"==n?(r-=Kn(),t-=jn()):"local"!=n&&n||(r+=(n=e.display.sizer.getBoundingClientRect()).left,t+=n.top),{left:r-(n=e.display.lineSpace.getBoundingClientRect()).left,top:t-n.top})}function $n(e,t,n,r,i){return Yn(e,r=r||A(e.doc,t.line),Fn(e,r,t.ch,i),n)}function qn(n,e,r,i,o,l){function s(e,t){e=In(n,o,e,t?"right":"left",l);return t?e.left=e.right:e.right=e.left,Yn(n,i,e,r)}i=i||A(n.doc,e.line),o=o||Pn(n,i);var t,a,u=Re(i,n.doc.direction),c=e.ch,e=e.sticky;return c>=i.text.length?(c=i.text.length,e="before"):c<=0&&(c=0,e="after"),u?(a=De(u,c,e),t=Ae,a=h(c,a,"before"==e),null!=t&&(a.other=h(c,t,"before"!=e)),a):s("before"==e?c-1:c,"before"==e);function h(e,t,n){return s(n?e-1:e,1==u[t].level!=n)}}function Zn(e,t){var n=0,t=(t=F(e.doc,t),e.options.lineWrapping||(n=lr(e.display)*t.ch),A(e.doc,t.line)),e=tn(t)+Mn(e.display);return{left:n,right:n,top:e,bottom:e+t.height}}function Qn(e,t,n,r,i){e=W(e,t,n);return e.xRel=i,r&&(e.outside=r),e}function Jn(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Qn(r.first,0,null,-1,-1);var i=gt(r,n),o=r.first+r.size-1;if(o<i)return Qn(r.first+r.size-1,A(r,o).text.length,null,1,1);t<0&&(t=0);for(var l=A(r,i);;){var s=function(n,e,t,r,i){i-=tn(e);var o=Pn(n,e),l=Xn(e),s=0,a=e.text.length,u=!0,c=Re(e,n.doc.direction);c&&(c=(n.options.lineWrapping?ir:rr)(n,e,t,o,c,r,i),u=1!=c.level,s=u?c.from:c.to-1,a=u?c.to:c.from-1);var h=null,d=null,c=Oe(function(e){var t=In(n,o,e);return t.top+=l,t.bottom+=l,nr(t,r,i,!1)&&(t.top<=i&&t.left<=r&&(h=e,d=t),1)},s,a),f=!1;{var p,g;d?(p=r-d.left<d.right-r,c=h+((g=p==u)?0:1),g=g?"after":"before",p=p?d.left:d.right):(u||c!=a&&c!=s||c++,g=0==c||c!=e.text.length&&In(n,o,c-(u?1:0)).bottom+l<=i==u?"after":"before",a=qn(n,W(t,c,g),"line",e,o),p=a.left,f=i<a.top?-1:i>=a.bottom?1:0)}return c=Ne(e.text,c,1),Qn(t,c,g,f,r-p)}(e,l,i,t,n),a=function(e,t){var n,r=It&&e.markedSpans;if(r)for(var i=0;i<r.length;++i){var o=r[i];o.marker.collapsed&&(null==o.from||o.from<t)&&(null==o.to||o.to>t)&&(!n||Xt(n,o.marker)<0)&&(n=o.marker)}return n}(l,s.ch+(0<s.xRel||0<s.outside?1:0));if(!a)return s;s=a.find(1);if(s.line==i)return s;l=A(r,i=s.line)}}function er(t,e,n,r){r-=Xn(e);var e=e.text.length,i=Oe(function(e){return In(t,n,e-1).bottom<=r},e,0);return{begin:i,end:Oe(function(e){return In(t,n,e).top>r},i,e)}}function tr(e,t,n,r){return er(e,t,n=n||Pn(e,t),Yn(e,t,In(e,n,r),"line").top)}function nr(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function rr(n,r,i,o,l,s,a){var e,t=Oe(function(e){var e=l[e],t=1!=e.level;return nr(qn(n,W(i,t?e.to:e.from,t?"before":"after"),"line",r,o),s,a,!0)},0,l.length-1),u=l[t];return u=0<t&&(e=1!=u.level,nr(e=qn(n,W(i,e?u.from:u.to,e?"after":"before"),"line",r,o),s,a,!0))&&e.top>a?l[t-1]:u}function ir(e,t,n,r,i,o,l){for(var l=er(e,t,r,l),s=l.begin,a=l.end,u=(/\s/.test(t.text.charAt(a-1))&&a--,null),c=null,h=0;h<i.length;h++){var d,f=i[h];f.from>=a||f.to<=s||(d=(d=In(e,r,1!=f.level?Math.min(a,f.to)-1:Math.max(s,f.from)).right)<o?o-d+1e9:d-o,(!u||d<c)&&(u=f,c=d))}return u=(u=(u=u||i[i.length-1]).from<s?{from:s,to:u.to,level:u.level}:u).to>a?{from:u.from,to:a,level:u.level}:u}function or(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==zn){zn=M("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)zn.appendChild(document.createTextNode("x")),zn.appendChild(M("br"));zn.appendChild(document.createTextNode("x"))}y(e.measure,zn);var n=zn.offsetHeight/50;return 3<n&&(e.cachedTextHeight=n),J(e.measure),n||1}function lr(e){var t,n;return null!=e.cachedCharWidth?e.cachedCharWidth:(n=M("span","xxxxxxxxxx"),t=M("pre",[n],"CodeMirror-line-like"),y(e.measure,t),2<(n=((t=n.getBoundingClientRect()).right-t.left)/10)&&(e.cachedCharWidth=n),n||10)}function sr(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l){var s=e.display.gutterSpecs[l].className;n[s]=o.offsetLeft+o.clientLeft+i,r[s]=o.clientWidth}return{fixedPos:ar(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function ar(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function ur(r){var i=or(r.display),o=r.options.lineWrapping,l=o&&Math.max(5,r.display.scroller.clientWidth/lr(r.display)-3);return function(e){if(en(r.doc,e))return 0;var t=0;if(e.widgets)for(var n=0;n<e.widgets.length;n++)e.widgets[n].height&&(t+=e.widgets[n].height);return o?t+(Math.ceil(e.text.length/l)||1)*i:t+i}}function cr(e){var t=e.doc,n=ur(e);t.iter(function(e){var t=n(e);t!=e.height&&pt(e,t)})}function hr(e,t,n,r){var i=e.display;if(!n&&"true"==_e(t).getAttribute("cm-not-content"))return null;var o,l,n=i.lineSpace.getBoundingClientRect();try{o=t.clientX-n.left,l=t.clientY-n.top}catch(e){return null}i=Jn(e,o,l);return r&&0<i.xRel&&(t=A(e.doc,i.line).text).length==i.ch&&(n=ue(t,t.length,e.options.tabSize)-t.length,i=W(i.line,Math.max(0,Math.round((o-On(e.display).left)/lr(e.display))-n))),i}function dr(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;r<n.length;r++)if((t-=n[r].size)<0)return r}function E(e,t,n,r){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size);var i,o=e.display,l=((r=r||0)&&n<o.viewTo&&(null==o.updateLineNumbers||o.updateLineNumbers>t)&&(o.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=o.viewTo?It&&Qt(e.doc,t)<o.viewTo&&pr(e):n<=o.viewFrom?It&&Jt(e.doc,n+r)>o.viewFrom?pr(e):(o.viewFrom+=r,o.viewTo+=r):t<=o.viewFrom&&n>=o.viewTo?pr(e):t<=o.viewFrom?(l=gr(e,n,n+r,1))?(o.view=o.view.slice(l.index),o.viewFrom=l.lineN,o.viewTo+=r):pr(e):n>=o.viewTo?(l=gr(e,t,t,-1))?(o.view=o.view.slice(0,l.index),o.viewTo=l.lineN):pr(e):(l=gr(e,t,t,-1),i=gr(e,n,n+r,1),l&&i?(o.view=o.view.slice(0,l.index).concat(pn(e,l.lineN,i.lineN)).concat(o.view.slice(i.index)),o.viewTo+=r):pr(e)),o.externalMeasured);l&&(n<l.lineN?l.lineN+=r:t<l.lineN+l.size&&(o.externalMeasured=null))}function fr(e,t,n){e.curOp.viewChanged=!0;var r=e.display,i=e.display.externalMeasured;i&&t>=i.lineN&&t<i.lineN+i.size&&(r.externalMeasured=null),t<r.viewFrom||t>=r.viewTo||null!=(i=r.view[dr(e,t)]).node&&-1==S(r=i.changes||(i.changes=[]),n)&&r.push(n)}function pr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function gr(e,t,n,r){var i,o=dr(e,t),l=e.display.view;if(It&&n!=e.doc.first+e.doc.size){for(var s=e.display.viewFrom,a=0;a<o;a++)s+=l[a].size;if(s!=t){if(0<r){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,n+=i}for(;Qt(e.doc,n)!=n;){if(o==(r<0?0:l.length-1))return null;n+=r*l[o-(r<0?1:0)].size,o+=r}}return{index:o,lineN:n}}function mr(e){for(var t=e.display.view,n=0,r=0;r<t.length;r++){var i=t[r];i.hidden||i.node&&!i.changes||++n}return n}function vr(e){e.display.input.showSelection(e.display.input.prepareSelection())}function yr(e,t){void 0===t&&(t=!0);for(var n,r,i=e.doc,o={},l=o.cursors=document.createDocumentFragment(),s=o.selection=document.createDocumentFragment(),a=0;a<i.sel.ranges.length;a++)!t&&a==i.sel.primIndex||(n=i.sel.ranges[a]).from().line>=e.display.viewTo||n.to().line<e.display.viewFrom||(((r=n.empty())||e.options.showCursorWhenSelecting)&&br(e,n.head,l),r)||function(i,e,t){var n=i.display,o=i.doc,l=document.createDocumentFragment(),r=On(i.display),S=r.left,L=Math.max(n.sizerWidth,Dn(i)-n.sizer.offsetLeft)-r.right,k="ltr"==o.direction;function T(e,t,n,r){t<0&&(t=0),t=Math.round(t),r=Math.round(r),l.appendChild(M("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n                             top: "+t+"px; width: "+(null==n?L-e:n)+"px;\n                             height: "+(r-t)+"px"))}function s(n,g,m){var v,y,r=A(o,n),b=r.text.length;function w(e,t){return $n(i,W(n,e),"div",r,t)}function x(e,t,n){e=tr(i,r,null,e),t="ltr"==t==("after"==n)?"left":"right";return w("after"==n?e.begin:e.end-(/\s/.test(r.text.charAt(e.end-1))?2:1),t)[t]}var C=Re(r,o.direction);return function(e,t,n,r){if(!e)return r(t,n,"ltr",0);for(var i=!1,o=0;o<e.length;++o){var l=e[o];(l.from<n&&l.to>t||t==n&&l.to==t)&&(r(Math.max(l.from,t),Math.min(l.to,n),1==l.level?"rtl":"ltr",o),i=!0)}i||r(t,n,"ltr")}(C,g||0,null==m?b:m,function(e,t,n,r){var i,o,l,s,a,u="ltr"==n,c=w(e,u?"left":"right"),h=w(t-1,u?"right":"left"),d=null==g&&0==e,f=null==m&&t==b,p=0==r,r=!C||r==C.length-1;h.top-c.top<=3?(i=(k?d:f)&&p?S:(u?c:h).left,a=(k?f:d)&&r?L:(u?h:c).right,T(i,c.top,a-i,c.bottom)):(a=u?(o=k&&d&&p?S:c.left,l=k?L:x(e,n,"before"),s=k?S:x(t,n,"after"),k&&f&&r?L:h.right):(o=k?x(e,n,"before"):S,l=!k&&d&&p?L:c.right,s=!k&&f&&r?S:h.left,k?x(t,n,"after"):L),T(o,c.top,l-o,c.bottom),c.bottom<h.top&&T(S,c.bottom,null,h.top),T(s,h.top,a-s,h.bottom)),(!v||wr(c,v)<0)&&(v=c),wr(h,v)<0&&(v=h),(!y||wr(c,y)<0)&&(y=c),wr(h,y)<0&&(y=h)}),{start:v,end:y}}n=e.from(),r=e.to();{var a;n.line==r.line?s(n.line,n.ch,r.ch):(e=A(o,n.line),a=A(o,r.line),a=Zt(e)==Zt(a),n=s(n.line,n.ch,a?e.text.length+1:null).end,e=s(r.line,a?0:null,r.ch).start,a&&(n.top<e.top-2?(T(n.right,n.top,null,n.bottom),T(S,e.top,e.left,e.bottom)):T(n.right,n.top,e.left-n.right,n.bottom)),n.bottom<e.top&&T(S,n.bottom,null,e.top))}t.appendChild(l)}(e,n,s);return o}function br(e,t,n){var t=qn(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),r=n.appendChild(M("div"," ","CodeMirror-cursor"));r.style.left=t.left+"px",r.style.top=t.top+"px",r.style.height=Math.max(0,t.bottom-t.top)*e.options.cursorHeight+"px",t.other&&((r=n.appendChild(M("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"))).style.display="",r.style.left=t.other.left+"px",r.style.top=t.other.top+"px",r.style.height=.85*(t.other.bottom-t.other.top)+"px")}function wr(e,t){return e.top-t.top||e.left-t.left}function xr(e){var t,n;e.state.focused&&(t=e.display,clearInterval(t.blinker),n=!0,t.cursorDiv.style.visibility="",0<e.options.cursorBlinkRate?t.blinker=setInterval(function(){e.hasFocus()||kr(e),t.cursorDiv.style.visibility=(n=!n)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden"))}function Cr(e){e.hasFocus()||(e.display.input.focus(),e.state.focused)||Lr(e)}function Sr(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused)&&kr(e)},100)}function Lr(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(N(e,"focus",e,t),e.state.focused=!0,re(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),x&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),xr(e))}function kr(e,t){e.state.delayingBlurEvent||(e.state.focused&&(N(e,"blur",e,t),e.state.focused=!1,Q(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function Tr(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r<t.view.length;r++){var i=t.view[r],o=e.options.lineWrapping,l=void 0,s=0;if(!i.hidden){w&&v<8?(l=(a=i.node.offsetTop+i.node.offsetHeight)-n,n=a):(l=(a=i.node.getBoundingClientRect()).bottom-a.top,!o&&i.text.firstChild&&(s=i.text.firstChild.getBoundingClientRect().right-a.left-1));var a,o=i.line.height-l;if((.005<o||o<-.005)&&(pt(i.line,l),Mr(i.line),i.rest))for(var u=0;u<i.rest.length;u++)Mr(i.rest[u]);s>e.display.sizerWidth&&(o=Math.ceil(s/lr(e.display)))>e.display.maxLineLength&&(e.display.maxLineLength=o,e.display.maxLine=i.line,e.display.maxLineChanged=!0)}}}function Mr(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var n=e.widgets[t],r=n.node.parentNode;r&&(n.height=r.offsetHeight)}}function Nr(e,t,n){var r,i=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop,i=Math.floor(i-Mn(e)),o=n&&null!=n.bottom?n.bottom:i+e.wrapper.clientHeight,i=gt(t,i),o=gt(t,o);return n&&n.ensure&&(r=n.ensure.from.line,n=n.ensure.to.line,r<i?o=gt(t,tn(A(t,i=r))+e.wrapper.clientHeight):Math.min(n,t.lastLine())>=o&&(i=gt(t,tn(A(t,n))-e.wrapper.clientHeight),o=n)),{from:i,to:Math.max(o,i+1)}}function Or(e,t){var n=e.display,r=or(e.display),i=(t.top<0&&(t.top=0),(e.curOp&&null!=e.curOp.scrollTop?e.curOp:n.scroller).scrollTop),o=Wn(e),l={},s=(t.bottom-t.top>o&&(t.bottom=t.top+o),e.doc.height+Nn(n)),a=t.top<r,r=t.bottom>s-r,r=(t.top<i?l.scrollTop=a?0:t.top:t.bottom>i+o&&(a=Math.min(t.top,(r?s:t.bottom)-o))!=i&&(l.scrollTop=a),e.options.fixedGutter?0:n.gutters.offsetWidth),s=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-r,o=Dn(e)-n.gutters.offsetWidth,i=t.right-t.left>o;return i&&(t.right=t.left+o),t.left<10?l.scrollLeft=0:t.left<s?l.scrollLeft=Math.max(0,t.left+r-(i?0:10)):t.right>o+s-3&&(l.scrollLeft=t.right+(i?0:10)-o),l}function Ar(e,t){null!=t&&(Hr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc:e.curOp).scrollTop+t)}function Dr(e){Hr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Wr(e,t,n){null==t&&null==n||Hr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Hr(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Fr(e,Zn(e,t.from),Zn(e,t.to),t.margin))}function Fr(e,t,n,r){t=Or(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});Wr(e,t.scrollLeft,t.scrollTop)}function Er(e,t){Math.abs(e.doc.scrollTop-t)<2||(G||Jr(e,{top:t}),Pr(e,t,!0),G&&Jr(e),_r(e,100))}function Pr(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),e.display.scroller.scrollTop==t&&!n||(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop==t)||(e.display.scroller.scrollTop=t)}function Ir(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,ni(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function zr(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+Nn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+An(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}function Rr(e,t,n){this.cm=n;var r=this.vert=M("div",[M("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=M("div",[M("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),L(r,"scroll",function(){r.clientHeight&&t(r.scrollTop,"vertical")}),L(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,w&&v<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")}function Br(){}Rr.prototype.update=function(e){var t,n=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,i=e.nativeBarWidth;return r?(this.vert.style.display="block",this.vert.style.bottom=n?i+"px":"0",t=e.viewHeight-(n?i:0),this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+t)+"px"):(this.vert.style.display="",this.vert.firstChild.style.height="0"),n?(this.horiz.style.display="block",this.horiz.style.right=r?i+"px":"0",this.horiz.style.left=e.barLeft+"px",t=e.viewWidth-e.barLeft-(r?i:0),this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+t)+"px"):(this.horiz.style.display="",this.horiz.firstChild.style.width="0"),!this.checkedZeroWidth&&0<e.clientHeight&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?i:0,bottom:n?i:0}},Rr.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Rr.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Rr.prototype.zeroWidthHack=function(){this.horiz.style.height=this.vert.style.width=C&&!d?"12px":"18px",this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new ce,this.disableVert=new ce},Rr.prototype.enableZeroWidthBar=function(n,r,i){n.style.pointerEvents="auto",r.set(1e3,function e(){var t=n.getBoundingClientRect();("vert"==i?document.elementFromPoint(t.right-1,(t.top+t.bottom)/2):document.elementFromPoint((t.right+t.left)/2,t.bottom-1))!=n?n.style.pointerEvents="none":r.set(1e3,e)})},Rr.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};function Gr(e,t){t=t||zr(e);var n=e.display.barWidth,r=e.display.barHeight;Ur(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&Tr(e),Ur(e,zr(e)),n=e.display.barWidth,r=e.display.barHeight}function Ur(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}Br.prototype.update=function(){return{bottom:0,right:0}},Br.prototype.setScrollLeft=function(){},Br.prototype.setScrollTop=function(){},Br.prototype.clear=function(){};var Vr={native:Rr,null:Br};function Kr(n){n.display.scrollbars&&(n.display.scrollbars.clear(),n.display.scrollbars.addClass)&&Q(n.display.wrapper,n.display.scrollbars.addClass),n.display.scrollbars=new Vr[n.options.scrollbarStyle](function(e){n.display.wrapper.insertBefore(e,n.display.scrollbarFiller),L(e,"mousedown",function(){n.state.focused&&setTimeout(function(){return n.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,t){("horizontal"==t?Ir:Er)(n,e)},n),n.display.scrollbars.addClass&&re(n.display.wrapper,n.display.scrollbars.addClass)}var jr=0;function Xr(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++jr},e=e.curOp,gn?gn.ops.push(e):e.ownsGroup=gn={ops:[e],delayedCallbacks:[]}}function Yr(e){e=e.curOp;if(e){var t=function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;for(var n=e.ops,r=0;r<n.length;r++){l=o=i=void 0;var i=n[r],o=i.cm,l=o.display;(function(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=An(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=An(e)+"px",t.scrollbarsClipped=!0)})(o),i.updateMaxLine&&rn(o),i.mustUpdate=i.viewChanged||i.forceUpdate||null!=i.scrollTop||i.scrollToPos&&(i.scrollToPos.from.line<l.viewFrom||i.scrollToPos.to.line>=l.viewTo)||l.maxLineChanged&&o.options.lineWrapping,i.update=i.mustUpdate&&new qr(o,i.mustUpdate&&{top:i.scrollTop,ensure:i.scrollToPos},i.forceUpdate)}for(var s=0;s<n.length;s++){a=void 0;var a=n[s];a.updatedDisplay=a.mustUpdate&&Zr(a.cm,a.update)}for(var u=0;u<n.length;u++){c=void 0;h=void 0;d=void 0;var c=n[u];var h=c.cm,d=h.display;c.updatedDisplay&&Tr(h);c.barMeasure=zr(h),d.maxLineChanged&&!h.options.lineWrapping&&(c.adjustWidthTo=Fn(h,d.maxLine,d.maxLine.text.length).left+3,h.display.sizerWidth=c.adjustWidthTo,c.barMeasure.scrollWidth=Math.max(d.scroller.clientWidth,d.sizer.offsetLeft+c.adjustWidthTo+An(h)+h.display.barWidth),c.maxScrollLeft=Math.max(0,d.sizer.offsetLeft+c.adjustWidthTo-Dn(h)));(c.updatedDisplay||c.selectionChanged)&&(c.preparedSelection=d.input.prepareSelection())}for(var f=0;f<n.length;f++){p=void 0;g=void 0;m=void 0;var p=n[f];var g=p.cm;null!=p.adjustWidthTo&&(g.display.sizer.style.minWidth=p.adjustWidthTo+"px",p.maxScrollLeft<g.doc.scrollLeft&&Ir(g,Math.min(g.display.scroller.scrollLeft,p.maxScrollLeft),!0),g.display.maxLineChanged=!1);var m=p.focus&&p.focus==ne();p.preparedSelection&&g.display.input.showSelection(p.preparedSelection,m);!p.updatedDisplay&&p.startHeight==g.doc.height||Gr(g,p.barMeasure);p.updatedDisplay&&ti(g,p.barMeasure);p.selectionChanged&&xr(g);g.state.focused&&p.updateInput&&g.display.input.reset(p.typing);m&&Cr(p.cm)}for(var v,y=0;y<n.length;y++){b=void 0;w=void 0;x=void 0;C=void 0;v=void 0;S=void 0;L=void 0;k=void 0;T=void 0;var b=n[y];var w=b.cm,x=w.display,C=w.doc;b.updatedDisplay&&Qr(w,b.update);null==x.wheelStartX||null==b.scrollTop&&null==b.scrollLeft&&!b.scrollToPos||(x.wheelStartX=x.wheelStartY=null);null!=b.scrollTop&&Pr(w,b.scrollTop,b.forceScroll);null!=b.scrollLeft&&Ir(w,b.scrollLeft,!0,!0);b.scrollToPos&&(v=function(e,t,n,r){null==r&&(r=0),e.options.lineWrapping||t!=n||(n="before"==(t=t.ch?W(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?W(t.line,t.ch+1,"before"):t);for(var i=0;i<5;i++){var o,l=!1,s=qn(e,t),a=n&&n!=t?qn(e,n):s,s=Or(e,o={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-r,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+r}),a=e.doc.scrollTop,u=e.doc.scrollLeft;if(null!=s.scrollTop&&(Er(e,s.scrollTop),1<Math.abs(e.doc.scrollTop-a))&&(l=!0),!(l=null!=s.scrollLeft&&(Ir(e,s.scrollLeft),1<Math.abs(e.doc.scrollLeft-u))?!0:l))break}return o}(w,F(C,b.scrollToPos.from),F(C,b.scrollToPos.to),b.scrollToPos.margin),function(e,t){var n,r,i;O(e,"scrollCursorIntoView")||(i=(n=e.display).sizer.getBoundingClientRect(),r=null,t.top+i.top<0?r=!0:t.bottom+i.top>(window.innerHeight||document.documentElement.clientHeight)&&(r=!1),null==r)||K||(i=M("div","​",null,"position: absolute;\n                         top: "+(t.top-n.viewOffset-Mn(e.display))+"px;\n                         height: "+(t.bottom-t.top+An(e)+n.barHeight)+"px;\n                         left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;"),e.display.lineSpace.appendChild(i),i.scrollIntoView(r),e.display.lineSpace.removeChild(i))}(w,v));var S=b.maybeHiddenMarkers,L=b.maybeUnhiddenMarkers;if(S)for(var k=0;k<S.length;++k)S[k].lines.length||N(S[k],"hide");if(L)for(var T=0;T<L.length;++T)L[T].lines.length&&N(L[T],"unhide");x.wrapper.offsetHeight&&(C.scrollTop=w.display.scroller.scrollTop);b.changeObjs&&N(w,"changes",w,b.changeObjs);b.update&&b.update.finish()}};if(e=e.ownsGroup)try{var n=e,r=n.delayedCallbacks,i=0;do{for(;i<r.length;i++)r[i].call(null);for(var o=0;o<n.ops.length;o++){var l=n.ops[o];if(l.cursorActivityHandlers)for(;l.cursorActivityCalled<l.cursorActivityHandlers.length;)l.cursorActivityHandlers[l.cursorActivityCalled++].call(null,l.cm)}}while(i<r.length)}finally{gn=null,t(e)}}}function h(e,t){if(e.curOp)return t();Xr(e);try{return t()}finally{Yr(e)}}function P(e,t){return function(){if(e.curOp)return t.apply(e,arguments);Xr(e);try{return t.apply(e,arguments)}finally{Yr(e)}}}function n(e){return function(){if(this.curOp)return e.apply(this,arguments);Xr(this);try{return e.apply(this,arguments)}finally{Yr(this)}}}function r(t){return function(){var e=this.cm;if(!e||e.curOp)return t.apply(this,arguments);Xr(e);try{return t.apply(this,arguments)}finally{Yr(e)}}}function _r(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,se($r,e))}function $r(l){var s,a,u,c=l.doc;c.highlightFrontier>=l.display.viewTo||(s=+new Date+l.options.workTime,a=Nt(l,c.highlightFrontier),u=[],c.iter(a.line,Math.min(c.first+c.size,l.display.viewTo+500),function(e){if(a.line>=l.display.viewFrom){for(var t=e.styles,n=e.text.length>l.options.maxHighlightLength?ut(c.mode,a.state):null,r=Tt(l,e,a,!0),n=(n&&(a.state=n),e.styles=r.styles,e.styleClasses),r=r.classes,i=(r?e.styleClasses=r:n&&(e.styleClasses=null),!t||t.length!=e.styles.length||n!=r&&(!n||!r||n.bgClass!=r.bgClass||n.textClass!=r.textClass)),o=0;!i&&o<t.length;++o)i=t[o]!=e.styles[o];i&&u.push(a.line),e.stateAfter=a.save()}else e.text.length<=l.options.maxHighlightLength&&Ot(l,e.text,a),e.stateAfter=a.line%5==0?a.save():null;if(a.nextLine(),+new Date>s)return _r(l,l.options.workDelay),!0}),c.highlightFrontier=a.line,c.modeFrontier=Math.max(c.modeFrontier,a.line),u.length&&h(l,function(){for(var e=0;e<u.length;e++)fr(l,u[e],"text")}))}var qr=function(e,t,n){var r=e.display;this.viewport=t,this.visible=Nr(r,e.doc,t),this.editorIsHidden=!r.wrapper.offsetWidth,this.wrapperHeight=r.wrapper.clientHeight,this.wrapperWidth=r.wrapper.clientWidth,this.oldDisplayWidth=Dn(e),this.force=n,this.dims=sr(e),this.events=[]};function Zr(e,t){var n=e.display,r=e.doc;if(t.editorIsHidden)return pr(e),!1;if(!t.force&&t.visible.from>=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==mr(e))return!1;ri(e)&&(pr(e),t.dims=sr(e));var i=r.first+r.size,o=Math.max(t.visible.from-e.options.viewportMargin,r.first),l=Math.min(i,t.visible.to+e.options.viewportMargin),r=(n.viewFrom<o&&o-n.viewFrom<20&&(o=Math.max(r.first,n.viewFrom)),n.viewTo>l&&n.viewTo-l<20&&(l=Math.min(i,n.viewTo)),It&&(o=Qt(e.doc,o),l=Jt(e.doc,l)),o!=n.viewFrom||l!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth),i=(i=o,o=l,0==(s=(l=e).display).view.length||i>=s.viewTo||o<=s.viewFrom?(s.view=pn(l,i,o),s.viewFrom=i):(s.viewFrom>i?s.view=pn(l,i,s.viewFrom).concat(s.view):s.viewFrom<i&&(s.view=s.view.slice(dr(l,i))),s.viewFrom=i,s.viewTo<o?s.view=s.view.concat(pn(l,s.viewTo,o)):s.viewTo>o&&(s.view=s.view.slice(0,dr(l,o)))),s.viewTo=o,n.viewOffset=tn(A(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px",mr(e));if(!r&&0==i&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var s,l=!(l=e).hasFocus()&&(s=ne())&&te(l.display.lineDiv,s)?(s={activeElt:s},window.getSelection&&(o=window.getSelection()).anchorNode&&o.extend&&te(l.display.lineDiv,o.anchorNode)&&(s.anchorNode=o.anchorNode,s.anchorOffset=o.anchorOffset,s.focusNode=o.focusNode,s.focusOffset=o.focusOffset),s):null,a=(4<i&&(n.lineDiv.style.display="none"),e),u=n.updateLineNumbers,c=t.dims,o=a.display,h=a.options.lineNumbers,d=o.lineDiv,f=d.firstChild;function p(e){var t=e.nextSibling;return x&&C&&a.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),t}for(var g=o.view,m=o.viewFrom,v=0;v<g.length;v++){var y=g[v];if(!y.hidden)if(y.node&&y.node.parentNode==d){for(;f!=y.node;)f=p(f);var b=h&&null!=u&&u<=m&&y.lineNumber;y.changes&&(-1<S(y.changes,"gutter")&&(b=!1),yn(a,y,m,c)),b&&(J(y.lineNumber),y.lineNumber.appendChild(document.createTextNode(vt(a.options,m)))),f=y.node.nextSibling}else{b=function(e,t,n,r){var i=wn(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),xn(e,t),Cn(e,t,n,r),Sn(e,t,r),t.node}(a,y,m,c);d.insertBefore(b,f)}m+=y.size}for(;f;)f=p(f);return 4<i&&(n.lineDiv.style.display=""),n.renderedView=n.view,(s=l)&&s.activeElt&&s.activeElt!=ne()&&(s.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(s.activeElt.nodeName))&&s.anchorNode&&te(document.body,s.anchorNode)&&te(document.body,s.focusNode)&&(o=window.getSelection(),(i=document.createRange()).setEnd(s.anchorNode,s.anchorOffset),i.collapse(!1),o.removeAllRanges(),o.addRange(i),o.extend(s.focusNode,s.focusOffset)),J(n.cursorDiv),J(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,r&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,_r(e,400)),!(n.updateLineNumbers=null)}function Qr(e,t){for(var n=t.viewport,r=!0;;r=!1){if(r&&e.options.lineWrapping&&t.oldDisplayWidth!=Dn(e))r&&(t.visible=Nr(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+Nn(e.display)-Wn(e),n.top)}),t.visible=Nr(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!Zr(e,t))break;Tr(e);var i=zr(e);vr(e),Gr(e,i),ti(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function Jr(e,t){var n,t=new qr(e,t);Zr(e,t)&&(Tr(e),Qr(e,t),n=zr(e),vr(e),Gr(e,n),ti(e,n),t.finish())}function ei(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}function ti(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+An(e)+"px"}function ni(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=ar(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",l=0;l<n.length;l++)if(!n[l].hidden){e.options.fixedGutter&&(n[l].gutter&&(n[l].gutter.style.left=o),n[l].gutterBackground)&&(n[l].gutterBackground.style.left=o);var s=n[l].alignable;if(s)for(var a=0;a<s.length;a++)s[a].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=r+i+"px")}}function ri(e){var t,n,r,i;if(e.options.lineNumbers)return t=e.doc,t=vt(e.options,t.first+t.size-1),n=e.display,t.length!=n.lineNumChars?(r=(i=n.measure.appendChild(M("div",[M("div",t)],"CodeMirror-linenumber CodeMirror-gutter-elt"))).firstChild.offsetWidth,i=i.offsetWidth-r,n.lineGutter.style.width="",n.lineNumInnerWidth=Math.max(r,n.lineGutter.offsetWidth-i)+1,n.lineNumWidth=n.lineNumInnerWidth+i,n.lineNumChars=n.lineNumInnerWidth?t.length:-1,n.lineGutter.style.width=n.lineNumWidth+"px",ei(e.display),1):void 0}function ii(e,t){for(var n=[],r=!1,i=0;i<e.length;i++){var o=e[i],l=null;if("string"!=typeof o&&(l=o.style,o=o.className),"CodeMirror-linenumbers"==o){if(!t)continue;r=!0}n.push({className:o,style:l})}return t&&!r&&n.push({className:"CodeMirror-linenumbers",style:null}),n}function oi(e){var t=e.gutters,n=e.gutterSpecs;J(t),e.lineGutter=null;for(var r=0;r<n.length;++r){var i=n[r],o=i.className,i=i.style,l=t.appendChild(M("div",null,"CodeMirror-gutter "+o));i&&(l.style.cssText=i),"CodeMirror-linenumbers"==o&&((e.lineGutter=l).style.width=(e.lineNumWidth||1)+"px")}t.style.display=n.length?"":"none",ei(e)}function li(e){oi(e.display),E(e),ni(e)}function si(e,t,n,r){var i=this,o=(this.input=n,i.scrollbarFiller=M("div",null,"CodeMirror-scrollbar-filler"),i.scrollbarFiller.setAttribute("cm-not-content","true"),i.gutterFiller=M("div",null,"CodeMirror-gutter-filler"),i.gutterFiller.setAttribute("cm-not-content","true"),i.lineDiv=ee("div",null,"CodeMirror-code"),i.selectionDiv=M("div",null,null,"position: relative; z-index: 1"),i.cursorDiv=M("div",null,"CodeMirror-cursors"),i.measure=M("div",null,"CodeMirror-measure"),i.lineMeasure=M("div",null,"CodeMirror-measure"),i.lineSpace=ee("div",[i.measure,i.lineMeasure,i.selectionDiv,i.cursorDiv,i.lineDiv],null,"position: relative; outline: none"),ee("div",[i.lineSpace],"CodeMirror-lines"));i.mover=M("div",[o],null,"position: relative"),i.sizer=M("div",[i.mover],"CodeMirror-sizer"),i.sizerWidth=null,i.heightForcer=M("div",null,null,"position: absolute; height: "+he+"px; width: 1px;"),i.gutters=M("div",null,"CodeMirror-gutters"),i.lineGutter=null,i.scroller=M("div",[i.sizer,i.heightForcer,i.gutters],"CodeMirror-scroll"),i.scroller.setAttribute("tabIndex","-1"),i.wrapper=M("div",[i.scrollbarFiller,i.gutterFiller,i.scroller],"CodeMirror"),w&&v<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),x||G&&Y||(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,i.gutterSpecs=ii(r.gutters,r.lineNumbers),oi(i),n.init(i)}qr.prototype.signal=function(e,t){Ve(e,t)&&this.events.push(arguments)},qr.prototype.finish=function(){for(var e=0;e<this.events.length;e++)N.apply(null,this.events[e])};var ai=0,f=null;function ui(e){var t=e.wheelDeltaX,n=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==n&&e.detail&&e.axis==e.VERTICAL_AXIS?n=e.detail:null==n&&(n=e.wheelDelta),{x:t,y:n}}function ci(e){e=ui(e);return e.x*=f,e.y*=f,e}function hi(e,t){var n,r,i=ui(t),o=i.x,i=i.y,l=e.display,s=l.scroller,a=s.scrollWidth>s.clientWidth,u=s.scrollHeight>s.clientHeight;if(o&&a||i&&u){if(i&&C&&x)e:for(var c=t.target,h=l.view;c!=s;c=c.parentNode)for(var d=0;d<h.length;d++)if(h[d].node==c){e.display.currentWheelTarget=c;break e}!o||G||U||null==f?(i&&null!=f&&(a=i*f,r=(n=e.doc.scrollTop)+l.wrapper.clientHeight,a<0?n=Math.max(0,n+a-50):r=Math.min(e.doc.height,r+a+50),Jr(e,{top:n,bottom:r})),ai<20&&(null==l.wheelStartX?(l.wheelStartX=s.scrollLeft,l.wheelStartY=s.scrollTop,l.wheelDX=o,l.wheelDY=i,setTimeout(function(){var e,t;null!=l.wheelStartX&&(e=s.scrollLeft-l.wheelStartX,t=(t=s.scrollTop-l.wheelStartY)&&l.wheelDY&&t/l.wheelDY||e&&l.wheelDX&&e/l.wheelDX,l.wheelStartX=l.wheelStartY=null,t)&&(f=(f*ai+t)/(ai+1),++ai)},200)):(l.wheelDX+=o,l.wheelDY+=i))):(i&&u&&Er(e,Math.max(0,s.scrollTop+i*f)),Ir(e,Math.max(0,s.scrollLeft+o*f)),i&&!u||T(t),l.wheelStartX=null)}}w?f=-.53:G?f=15:c?f=-.7:V&&(f=-1/3);var I=function(e,t){this.ranges=e,this.primIndex=t},R=(I.prototype.primary=function(){return this.ranges[this.primIndex]},I.prototype.equals=function(e){if(e!=this){if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],r=e.ranges[t];if(!yt(n.anchor,r.anchor)||!yt(n.head,r.head))return!1}}return!0},I.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new R(bt(this.ranges[t].anchor),bt(this.ranges[t].head));return new I(e,this.primIndex)},I.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},I.prototype.contains=function(e,t){t=t||e;for(var n=0;n<this.ranges.length;n++){var r=this.ranges[n];if(0<=H(t,r.from())&&H(e,r.to())<=0)return n}return-1},function(e,t){this.anchor=e,this.head=t});function di(e,t,n){var r=e&&e.options.selectionsMayTouch,e=t[n];t.sort(function(e,t){return H(e.from(),t.from())}),n=S(t,e);for(var i=1;i<t.length;i++){var o,l=t[i],s=t[i-1],a=H(s.to(),l.from());(r&&!l.empty()?0<a:0<=a)&&(a=xt(s.from(),l.from()),o=wt(s.to(),l.to()),l=s.empty()?l.from()==l.head:s.from()==s.head,i<=n&&--n,t.splice(--i,2,new R(l?o:a,l?a:o)))}return new I(t,n)}function fi(e,t){return new I([new R(e,t||e)],0)}function pi(e){return e.text?W(e.from.line+e.text.length-1,z(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function gi(e,t){var n,r;return H(e,t.from)<0?e:H(e,t.to)<=0?pi(t):(n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch,e.line==t.to.line&&(r+=pi(t).ch-t.to.ch),W(n,r))}function mi(e,t){for(var n=[],r=0;r<e.sel.ranges.length;r++){var i=e.sel.ranges[r];n.push(new R(gi(i.anchor,t),gi(i.head,t)))}return di(e.cm,n,e.sel.primIndex)}function vi(e,t,n){return e.line==t.line?W(n.line,e.ch-t.ch+n.ch):W(n.line+(e.line-t.line),e.ch)}function yi(e){e.doc.mode=lt(e.options,e.doc.modeOption),bi(e)}function bi(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,_r(e,100),e.state.modeGen++,e.curOp&&E(e)}function wi(e,t){return 0==t.from.ch&&0==t.to.ch&&""==z(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function xi(e,o,t,l){function i(e){return t?t[e]:null}function n(e,t,n){var r,i;t=t,n=n,i=l,(r=e).text=t,r.stateAfter&&(r.stateAfter=null),r.styles&&(r.styles=null),null!=r.order&&(r.order=null),Ut(r),Vt(r,n),(t=i?i(r):1)!=r.height&&pt(r,t),b(e,"change",e,o)}function r(e,t){for(var n=[],r=e;r<t;++r)n.push(new on(c[r],i(r),l));return n}var s,a=o.from,u=o.to,c=o.text,h=A(e,a.line),d=A(e,u.line),f=z(c),p=i(c.length-1),g=u.line-a.line;o.full?(e.insert(0,r(0,c.length)),e.remove(c.length,e.size-c.length)):wi(e,o)?(s=r(0,c.length-1),n(d,d.text,p),g&&e.remove(a.line,g),s.length&&e.insert(a.line,s)):h==d?1==c.length?n(h,h.text.slice(0,a.ch)+f+h.text.slice(u.ch),p):((s=r(1,c.length-1)).push(new on(f+h.text.slice(u.ch),p,l)),n(h,h.text.slice(0,a.ch)+c[0],i(0)),e.insert(a.line+1,s)):1==c.length?(n(h,h.text.slice(0,a.ch)+c[0]+d.text.slice(u.ch),i(0)),e.remove(a.line+1,g)):(n(h,h.text.slice(0,a.ch)+c[0],i(0)),n(d,f+d.text.slice(u.ch),p),s=r(1,c.length-1),1<g&&e.remove(a.line+1,g-1),e.insert(a.line+1,s)),b(e,"change",e,o)}function Ci(e,s,a){!function e(t,n,r){if(t.linked)for(var i=0;i<t.linked.length;++i){var o,l=t.linked[i];l.doc!=n&&(o=r&&l.sharedHist,!a||o)&&(s(l.doc,o),e(l.doc,t,o))}}(e,null,!0)}function Si(e,t){if(t.cm)throw new Error("This document is already in use.");cr((e.doc=t).cm=e),yi(e),Li(e),e.options.lineWrapping||rn(e),e.options.mode=t.modeOption,E(e)}function Li(e){("rtl"==e.doc.direction?re:Q)(e.display.lineDiv,"CodeMirror-rtl")}function ki(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function Ti(e,t){var n={from:bt(t.from),to:pi(t),text:dt(e,t.from,t.to)};return Di(e,n,t.from.line,t.to.line+1),Ci(e,function(e){return Di(e,n,t.from.line,t.to.line+1)},!0),n}function Mi(e){for(;e.length;){if(!z(e).ranges)break;e.pop()}}function Ni(e,t,n,r){var i,o,l=e.history,s=(l.undone.length=0,+new Date);if((l.lastOp==r||l.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&l.lastModTime>s-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=(o=l).lastOp==r?(Mi(o.done),z(o.done)):o.done.length&&!z(o.done).ranges?z(o.done):1<o.done.length&&!o.done[o.done.length-2].ranges?(o.done.pop(),z(o.done)):void 0))i=z(o.changes),0==H(t.from,t.to)&&0==H(t.from,i.to)?i.to=pi(t):o.changes.push(Ti(e,t));else{var a=z(l.done);for(a&&a.ranges||Ai(e.sel,l.done),o={changes:[Ti(e,t)],generation:l.generation},l.done.push(o);l.done.length>l.undoDepth;)l.done.shift(),l.done[0].ranges||l.done.shift()}l.done.push(n),l.generation=++l.maxGeneration,l.lastModTime=l.lastSelTime=s,l.lastOp=l.lastSelOp=r,l.lastOrigin=l.lastSelOrigin=t.origin,i||N(e,"historyAdded")}function Oi(e,t,n,r){var i,o,l,s=e.history,a=r&&r.origin;n==s.lastSelOp||a&&s.lastSelOrigin==a&&(s.lastModTime==s.lastSelTime&&s.lastOrigin==a||(e=e,i=a,o=z(s.done),l=t,"*"==(i=i.charAt(0)))||"+"==i&&o.ranges.length==l.ranges.length&&o.somethingSelected()==l.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500))?s.done[s.done.length-1]=t:Ai(t,s.done),s.lastSelTime=+new Date,s.lastSelOrigin=a,s.lastSelOp=n,r&&!1!==r.clearRedo&&Mi(s.undone)}function Ai(e,t){var n=z(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Di(t,n,e,r){var i=n["spans_"+t.id],o=0;t.iter(Math.max(t.first,e),Math.min(t.first+t.size,r),function(e){e.markedSpans&&((i=i||(n["spans_"+t.id]={}))[o]=e.markedSpans),++o})}function Wi(e,t){var n=t["spans_"+e.id];if(!n)return null;for(var r=[],i=0;i<t.text.length;++i)r.push(function(e){if(!e)return null;for(var t,n=0;n<e.length;++n)e[n].marker.explicitlyCleared?t=t||e.slice(0,n):t&&t.push(e[n]);return t?t.length?t:null:e}(n[i]));return r}function Hi(e,t){var n=Wi(e,t),r=Bt(e,t);if(!n)return r;if(r)for(var i=0;i<n.length;++i){var o=n[i],l=r[i];if(o&&l)e:for(var s=0;s<l.length;++s){for(var a=l[s],u=0;u<o.length;++u)if(o[u].marker==a.marker)continue e;o.push(a)}else l&&(n[i]=l)}return n}function Fi(e,t,n){for(var r=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)r.push(n?I.prototype.deepCopy.call(o):o);else{var l=o.changes,s=[];r.push({changes:s});for(var a=0;a<l.length;++a){var u,c=l[a];if(s.push({from:c.from,to:c.to,text:c.text}),t)for(var h in c)(u=h.match(/^spans_(\d+)$/))&&-1<S(t,Number(u[1]))&&(z(s)[h]=c[h],delete c[h])}}}return r}function Ei(e,t,n,r){return r?(r=e.anchor,n&&((e=H(t,r)<0)!=H(n,r)<0?(r=t,t=n):e!=H(t,n)<0&&(t=n)),new R(r,t)):new R(n||t,t)}function Pi(e,t,n,r,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),B(e,new I([Ei(e.sel.primary(),t,n,i)],0),r)}function Ii(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)r[o]=Ei(e.sel.ranges[o],t[o],null,i);B(e,di(e.cm,r,e.sel.primIndex),n)}function zi(e,t,n,r){var i=e.sel.ranges.slice(0);i[t]=n,B(e,di(e.cm,i,e.sel.primIndex),r)}function Ri(e,t,n,r){B(e,fi(t,n),r)}function Bi(e,t,n){var r=e.history.done,i=z(r);i&&i.ranges?Gi(e,r[r.length-1]=t,n):B(e,t,n)}function B(e,t,n){Gi(e,t,n),Oi(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function Gi(e,t,n){(Ve(e,"beforeSelectionChange")||e.cm&&Ve(e.cm,"beforeSelectionChange"))&&(r=e,o=n,o={ranges:(i=t).ranges,update:function(e){this.ranges=[];for(var t=0;t<e.length;t++)this.ranges[t]=new R(F(r,e[t].anchor),F(r,e[t].head))},origin:o&&o.origin},N(r,"beforeSelectionChange",r,o),r.cm&&N(r.cm,"beforeSelectionChange",r.cm,o),t=o.ranges!=i.ranges?di(r.cm,o.ranges,o.ranges.length-1):i);var r,i,o=n&&n.bias||(H(t.primary().head,e.sel.primary().head)<0?-1:1);Ui(e,Ki(e,t,o,!0)),n&&!1===n.scroll||!e.cm||Dr(e.cm)}function Ui(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=1,e.cm.curOp.selectionChanged=!0,Ue(e.cm)),b(e,"cursorActivity",e))}function Vi(e){Ui(e,Ki(e,e.sel,null,!1))}function Ki(e,t,n,r){for(var i,o=0;o<t.ranges.length;o++){var l=t.ranges[o],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],a=Xi(e,l.anchor,s&&s.anchor,n,r),s=Xi(e,l.head,s&&s.head,n,r);!i&&a==l.anchor&&s==l.head||((i=i||t.ranges.slice(0,o))[o]=new R(a,s))}return i?di(e.cm,i,t.primIndex):t}function ji(e,t,n,r,i){var o=A(e,t.line);if(o.markedSpans)for(var l=0;l<o.markedSpans.length;++l){var s=o.markedSpans[l],a=s.marker,u="selectLeft"in a?!a.selectLeft:a.inclusiveLeft,c="selectRight"in a?!a.selectRight:a.inclusiveRight;if((null==s.from||(u?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(c?s.to>=t.ch:s.to>t.ch))){if(i&&(N(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(a.atomic){if(n){var s=a.find(r<0?1:-1),h=void 0;if((s=(r<0?c:u)?Yi(e,s,-r,s&&s.line==t.line?o:null):s)&&s.line==t.line&&(h=H(s,n))&&(r<0?h<0:0<h))return ji(e,s,t,r,i)}h=a.find(r<0?-1:1);return(h=(r<0?u:c)?Yi(e,h,r,h.line==t.line?o:null):h)?ji(e,h,t,r,i):null}}}return t}function Xi(e,t,n,r,i){r=r||1,i=ji(e,t,n,r,i)||!i&&ji(e,t,n,r,!0)||ji(e,t,n,-r,i)||!i&&ji(e,t,n,-r,!0);return i||(e.cantEdit=!0,W(e.first,0))}function Yi(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?F(e,W(t.line-1)):null:0<n&&t.ch==(r||A(e,t.line)).text.length?t.line<e.first+e.size-1?W(t.line+1,0):null:new W(t.line,t.ch+n)}function _i(e){e.setSelection(W(e.firstLine(),0),W(e.lastLine()),fe)}function $i(i,e,t){var o={canceled:!1,from:e.from,to:e.to,text:e.text,origin:e.origin,cancel:function(){return o.canceled=!0}};return t&&(o.update=function(e,t,n,r){e&&(o.from=F(i,e)),t&&(o.to=F(i,t)),n&&(o.text=n),void 0!==r&&(o.origin=r)}),N(i,"beforeChange",i,o),i.cm&&N(i.cm,"beforeChange",i.cm,o),o.canceled?(i.cm&&(i.cm.curOp.updateInput=2),null):{from:o.from,to:o.to,text:o.text,origin:o.origin}}function qi(e,t,n){if(e.cm){if(!e.cm.curOp)return P(e.cm,qi)(e,t,n);if(e.cm.state.suppressEdits)return}if(!(Ve(e,"beforeChange")||e.cm&&Ve(e.cm,"beforeChange"))||(t=$i(e,t,!0))){var r=Pt&&!n&&function(e,t,n){var r=null;if(e.iter(t.line,n.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||r&&-1!=S(r,n)||(r=r||[]).push(n)}}),!r)return null;for(var i=[{from:t,to:n}],o=0;o<r.length;++o)for(var l=r[o],s=l.find(0),a=0;a<i.length;++a){var u,c,h,d=i[a];H(d.to,s.from)<0||0<H(d.from,s.to)||(u=[a,1],c=H(d.from,s.from),h=H(d.to,s.to),(c<0||!l.inclusiveLeft&&!c)&&u.push({from:d.from,to:s.from}),(0<h||!l.inclusiveRight&&!h)&&u.push({from:s.to,to:d.to}),i.splice.apply(i,u),a+=u.length-3)}return i}(e,t.from,t.to);if(r)for(var i=r.length-1;0<=i;--i)Zi(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text,origin:t.origin});else Zi(e,t)}}function Zi(e,n){var t,r;1==n.text.length&&""==n.text[0]&&0==H(n.from,n.to)||(t=mi(e,n),Ni(e,n,t,e.cm?e.cm.curOp.id:NaN),eo(e,n,t,Bt(e,n)),r=[],Ci(e,function(e,t){t||-1!=S(r,e.history)||(io(e.history,n),r.push(e.history)),eo(e,n,null,Bt(e,n))}))}function Qi(i,o,e){var t=i.cm&&i.cm.state.suppressEdits;if(!t||e){for(var l,n=i.history,r=i.sel,s="undo"==o?n.done:n.undone,a="undo"==o?n.undone:n.done,u=0;u<s.length&&(l=s[u],e?!l.ranges||l.equals(i.sel):l.ranges);u++);if(u!=s.length){for(n.lastOrigin=n.lastSelOrigin=null;;){if(!(l=s.pop()).ranges){if(t)return void s.push(l);break}if(Ai(l,a),e&&!l.equals(i.sel))return void B(i,l,{clearRedo:!1});r=l}for(var c=[],h=(Ai(r,a),a.push({changes:c,generation:n.generation}),n.generation=l.generation||++n.maxGeneration,Ve(i,"beforeChange")||i.cm&&Ve(i.cm,"beforeChange")),d=l.changes.length-1;0<=d;--d){var f=function(e){var n=l.changes[e];if(n.origin=o,h&&!$i(i,n,!1))return s.length=0,{};c.push(Ti(i,n));var t=e?mi(i,n):z(s),r=(eo(i,n,t,Hi(i,n)),!e&&i.cm&&i.cm.scrollIntoView({from:n.from,to:pi(n)}),[]);Ci(i,function(e,t){t||-1!=S(r,e.history)||(io(e.history,n),r.push(e.history)),eo(e,n,null,Hi(e,n))})}(d);if(f)return f.v}}}}function Ji(e,t){if(0!=t&&(e.first+=t,e.sel=new I(be(e.sel.ranges,function(e){return new R(W(e.anchor.line+t,e.anchor.ch),W(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){E(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;r<n.viewTo;r++)fr(e.cm,r,"gutter")}}function eo(e,t,n,r){if(e.cm&&!e.cm.curOp)return P(e.cm,eo)(e,t,n,r);if(t.to.line<e.first)Ji(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){t.from.line<e.first&&(Ji(e,i=t.text.length-1-(e.first-t.from.line)),t={from:W(e.first,0),to:W(t.to.line+i,t.to.ch),text:[z(t.text)],origin:t.origin});var i=e.lastLine();if((t=t.to.line>i?{from:t.from,to:W(i,A(e,i).text.length),text:[t.text[0]],origin:t.origin}:t).removed=dt(e,t.from,t.to),n=n||mi(e,t),e.cm){var i=e.cm,o=t,l=r,s=i.doc,a=i.display,u=o.from,c=o.to,h=!1,d=u.line,f=(i.options.lineWrapping||(d=D(Zt(A(s,u.line))),s.iter(d,c.line+1,function(e){if(e==a.maxLine)return h=!0})),-1<s.sel.contains(o.from,o.to)&&Ue(i),xi(s,o,l,ur(i)),i.options.lineWrapping||(s.iter(d,u.line+o.text.length,function(e){var t=nn(e);t>a.maxLineLength&&(a.maxLine=e,a.maxLineLength=t,a.maxLineChanged=!0,h=!1)}),h&&(i.curOp.updateMaxLine=!0)),s),p=u.line;if(f.modeFrontier=Math.min(f.modeFrontier,p),!(f.highlightFrontier<p-10)){for(var g=f.first,m=p-1;g<m;m--){var v=A(f,m).stateAfter;if(v&&(!(v instanceof Lt)||m+v.lookAhead<p)){g=m+1;break}}f.highlightFrontier=Math.min(f.highlightFrontier,g)}_r(i,400),l=o.text.length-(c.line-u.line)-1,o.full?E(i):u.line!=c.line||1!=o.text.length||wi(i.doc,o)?E(i,u.line,c.line+1,l):fr(i,u.line,"text"),d=Ve(i,"changes"),((s=Ve(i,"change"))||d)&&(l={from:u,to:c,text:o.text,removed:o.removed,origin:o.origin},s&&b(i,"change",i,l),d)&&(i.curOp.changeObjs||(i.curOp.changeObjs=[])).push(l),i.display.selForContextMenu=null}else xi(e,t,r);Gi(e,n,fe),e.cantEdit&&Xi(e,W(e.firstLine(),0))&&(e.cantEdit=!1)}}function to(e,t,n,r,i){var o;H(r=r||n,n)<0&&(n=(o=[r,n])[0],r=o[1]),"string"==typeof t&&(t=e.splitLines(t)),qi(e,{from:n,to:r,text:t,origin:i})}function no(e,t,n,r){n<e.line?e.line+=r:t<e.line&&(e.line=t,e.ch=0)}function ro(e,t,n,r){for(var i=0;i<e.length;++i){var o=e[i],l=!0;if(o.ranges){o.copied||((o=e[i]=o.deepCopy()).copied=!0);for(var s=0;s<o.ranges.length;s++)no(o.ranges[s].anchor,t,n,r),no(o.ranges[s].head,t,n,r)}else{for(var a=0;a<o.changes.length;++a){var u=o.changes[a];if(n<u.from.line)u.from=W(u.from.line+r,u.from.ch),u.to=W(u.to.line+r,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}}function io(e,t){var n=t.from.line,r=t.to.line,t=t.text.length-(r-n)-1;ro(e.done,n,r,t),ro(e.undone,n,r,t)}function oo(e,t,n,r){var i=t,o=t;return"number"==typeof t?o=A(e,Ct(e,t)):i=D(t),null==i?null:(r(o,i)&&e.cm&&fr(e.cm,i,n),o)}function lo(e){this.lines=e,this.parent=null;for(var t=0,n=0;n<e.length;++n)e[n].parent=this,t+=e[n].height;this.height=t}function so(e){this.children=e;for(var t=0,n=0,r=0;r<e.length;++r){var i=e[r];t+=i.chunkSize(),n+=i.height,i.parent=this}this.size=t,this.height=n,this.parent=null}R.prototype.from=function(){return xt(this.anchor,this.head)},R.prototype.to=function(){return wt(this.anchor,this.head)},R.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},lo.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var n,r=e,i=e+t;r<i;++r){var o=this.lines[r];this.height-=o.height,(n=o).parent=null,Ut(n),b(o,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var r=0;r<t.length;++r)t[r].parent=this},iterN:function(e,t,n){for(var r=e+t;e<r;++e)if(n(this.lines[e]))return!0}},so.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var n,r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e),s=i.height;if(i.removeInner(e,l),this.height-=s-i.height,o==l&&(this.children.splice(r--,1),i.parent=null),0==(t-=l))break;e=0}else e-=o}this.size-t<25&&(1<this.children.length||!(this.children[0]instanceof lo))&&(this.collapse(n=[]),this.children=[new lo(n)],this.children[0].parent=this)},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,n){this.size+=t.length,this.height+=n;for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<=o){if(i.insertInner(e,t,n),i.lines&&50<i.lines.length){for(var l=i.lines.length%25+25,s=l;s<i.lines.length;){var a=new lo(i.lines.slice(s,s+=25));i.height-=a.height,this.children.splice(++r,0,a),a.parent=this}i.lines=i.lines.slice(0,l),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t,n=new so(e.children.splice(e.children.length-5,5))}while(e.parent?(e.size-=n.size,e.height-=n.height,t=S(e.parent.children,e),e.parent.children.splice(t+1,0,n)):(((t=new so(e.children)).parent=e).children=[t,n],e=t),n.parent=e.parent,10<e.children.length);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r<this.children.length;++r){var i=this.children[r],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e);if(i.iterN(e,l,n))return!0;if(0==(t-=l))break;e=0}else e-=o}}};function ao(e,t,n){if(n)for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.doc=e,this.node=t}function uo(e,t,n){tn(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&Ar(e,n)}ao.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,n=this.line,r=D(n);if(null!=r&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(n.widgets=null);var o=kn(this);pt(n,Math.max(0,n.height-o)),e&&(h(e,function(){uo(e,n,-o),fr(e,r,"widget")}),b(e,"lineWidgetCleared",e,this,r))}},ao.prototype.changed=function(){var e=this,t=this.height,n=this.doc.cm,r=this.line,i=(this.height=null,kn(this)-t);i&&(en(this.doc,r)||pt(r,r.height+i),n)&&h(n,function(){n.curOp.forceUpdate=!0,uo(n,r,i),b(n,"lineWidgetChanged",n,e,D(r))})},Ke(ao);function co(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++ho}var ho=0;function fo(t,n,r,e,i){if(e&&e.shared)return f=t,o=n,l=r,a=i,(s=ae(s=e)).shared=!1,u=[fo(f,o,l,s,a)],c=u[0],h=s.widgetNode,Ci(f,function(e){h&&(s.widgetNode=h.cloneNode(!0)),u.push(fo(e,F(e,o),F(e,l),s,a));for(var t=0;t<e.linked.length;++t)if(e.linked[t].isParent)return;c=z(u)}),new po(u,c);var o,l,s,a,u,c,h;if(t.cm&&!t.cm.curOp)return P(t.cm,fo)(t,n,r,e,i);var d=new co(t,i),f=H(n,r);if(e&&ae(e,d,!1),!(0<f||0==f&&!1!==d.clearWhenEmpty)){if(d.replacedWith&&(d.collapsed=!0,d.widgetNode=ee("span",[d.replacedWith],"CodeMirror-widget"),e.handleMouseEvents||d.widgetNode.setAttribute("cm-ignore-events","true"),e.insertLeft)&&(d.widgetNode.insertLeft=!0),d.collapsed){if(qt(t,n.line,n,r,d)||n.line!=r.line&&qt(t,r.line,n,r,d))throw new Error("Inserting collapsed marker partially overlapping an existing one");It=!0}d.addToHistory&&Ni(t,{from:n,to:r,origin:"markText"},t.sel,NaN);var p,g=n.line,m=t.cm;if(t.iter(g,r.line+1,function(e){var t;m&&d.collapsed&&!m.options.lineWrapping&&Zt(e)==m.display.maxLine&&(p=!0),d.collapsed&&g!=n.line&&pt(e,0),e=e,t=new zt(d,g==n.line?n.ch:null,g==r.line?r.ch:null),e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e),++g}),d.collapsed&&t.iter(n.line,r.line+1,function(e){en(t,e)&&pt(e,0)}),d.clearOnEnter&&L(d,"beforeCursorEnter",function(){return d.clear()}),d.readOnly&&(Pt=!0,t.history.done.length||t.history.undone.length)&&t.clearHistory(),d.collapsed&&(d.id=++ho,d.atomic=!0),m){if(p&&(m.curOp.updateMaxLine=!0),d.collapsed)E(m,n.line,r.line+1);else if(d.className||d.startStyle||d.endStyle||d.css||d.attributes||d.title)for(var v=n.line;v<=r.line;v++)fr(m,v,"text");d.atomic&&Vi(m.doc),b(m,"markerAdded",m,d)}}return d}co.prototype.clear=function(){if(!this.explicitlyCleared){for(var e,t=this.doc.cm,n=t&&!t.curOp,r=(n&&Xr(t),Ve(this,"clear")&&(e=this.find())&&b(this,"clear",e.from,e.to),null),i=null,o=0;o<this.lines.length;++o){var l=this.lines[o],s=Rt(l.markedSpans,this);t&&!this.collapsed?fr(t,D(l),"text"):t&&(null!=s.to&&(i=D(l)),null!=s.from)&&(r=D(l)),l.markedSpans=function(e,t){for(var n,r=0;r<e.length;++r)e[r]!=t&&(n=n||[]).push(e[r]);return n}(l.markedSpans,s),null==s.from&&this.collapsed&&!en(this.doc,l)&&t&&pt(l,or(t.display))}if(t&&this.collapsed&&!t.options.lineWrapping)for(var a=0;a<this.lines.length;++a){var u=Zt(this.lines[a]),c=nn(u);c>t.display.maxLineLength&&(t.display.maxLine=u,t.display.maxLineLength=c,t.display.maxLineChanged=!0)}null!=r&&t&&this.collapsed&&E(t,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t)&&Vi(t.doc),t&&b(t,"markerCleared",t,this,r,i),n&&Yr(t),this.parent&&this.parent.clear()}},co.prototype.find=function(e,t){var n,r;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i<this.lines.length;++i){var o=this.lines[i],l=Rt(o.markedSpans,this);if(null!=l.from&&(n=W(t?o:D(o),l.from),-1==e))return n;if(null!=l.to&&(r=W(t?o:D(o),l.to),1==e))return r}return n&&{from:n,to:r}},co.prototype.changed=function(){var n=this,r=this.find(-1,!0),i=this,o=this.doc.cm;r&&o&&h(o,function(){var e=r.line,t=D(r.line),t=En(o,t);t&&(Gn(t),o.curOp.selectionChanged=o.curOp.forceUpdate=!0),o.curOp.updateMaxLine=!0,!en(i.doc,e)&&null!=i.height&&(t=i.height,i.height=null,t=kn(i)-t)&&pt(e,e.height+t),b(o,"markerChanged",o,n)})},co.prototype.attachLine=function(e){var t;this.lines.length||!this.doc.cm||(t=this.doc.cm.curOp).maybeHiddenMarkers&&-1!=S(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this),this.lines.push(e)},co.prototype.detachLine=function(e){this.lines.splice(S(this.lines,e),1),!this.lines.length&&this.doc.cm&&((e=this.doc.cm.curOp).maybeHiddenMarkers||(e.maybeHiddenMarkers=[])).push(this)},Ke(co);var po=function(e,t){this.markers=e,this.primary=t;for(var n=0;n<e.length;++n)e[n].parent=this};function go(e){return e.findMarks(W(e.first,0),e.clipPos(W(e.lastLine())),function(e){return e.parent})}function mo(o){for(var e=0;e<o.length;e++)!function(e){var t=o[e],n=[t.primary.doc];Ci(t.primary.doc,function(e){return n.push(e)});for(var r=0;r<t.markers.length;r++){var i=t.markers[r];-1==S(n,i.doc)&&(i.parent=null,t.markers.splice(r--,1))}}(e)}po.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();b(this,"clear")}},po.prototype.find=function(e,t){return this.primary.find(e,t)},Ke(po);function p(e,t,n,r,i){if(!(this instanceof p))return new p(e,t,n,r,i);null==n&&(n=0),so.call(this,[new lo([new on("",null)])]),this.first=n,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,n=W(this.modeFrontier=this.highlightFrontier=n,0),this.sel=fi(n),this.history=new ki(null),this.id=++vo,this.modeOption=t,this.lineSep=r,this.direction="rtl"==i?"rtl":"ltr",this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),xi(this,{from:n,to:n,text:e}),B(this,fi(n),fe)}var vo=0,yo=((p.prototype=xe(so.prototype,{constructor:p,iter:function(e,t,n){n?this.iterN(e-this.first,t-e,n):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var n=0,r=0;r<t.length;++r)n+=t[r].height;this.insertInner(e-this.first,t,n)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=ft(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:r(function(e){var t=W(this.first,0),n=this.first+this.size-1;qi(this,{from:t,to:W(n,A(this,n).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),this.cm&&Wr(this.cm,0,0),B(this,fi(t),fe)}),replaceRange:function(e,t,n,r){to(this,e,t=F(this,t),n=n?F(this,n):t,r)},getRange:function(e,t,n){e=dt(this,F(this,e),F(this,t));return!1===n?e:e.join(n||this.lineSeparator())},getLine:function(e){e=this.getLineHandle(e);return e&&e.text},getLineHandle:function(e){if(mt(this,e))return A(this,e)},getLineNumber:D,getLineHandleVisualStart:function(e){return Zt(e="number"==typeof e?A(this,e):e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return F(this,e)},getCursor:function(e){var t=this.sel.primary(),e=null==e||"head"==e?t.head:"anchor"==e?t.anchor:"end"==e||"to"==e||!1===e?t.to():t.from();return e},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:r(function(e,t,n){Ri(this,F(this,"number"==typeof e?W(e,t||0):e),null,n)}),setSelection:r(function(e,t,n){Ri(this,F(this,e),F(this,t||e),n)}),extendSelection:r(function(e,t,n){Pi(this,F(this,e),t&&F(this,t),n)}),extendSelections:r(function(e,t){Ii(this,St(this,e),t)}),extendSelectionsBy:r(function(e,t){Ii(this,St(this,be(this.sel.ranges,e)),t)}),setSelections:r(function(e,t,n){if(e.length){for(var r=[],i=0;i<e.length;i++)r[i]=new R(F(this,e[i].anchor),F(this,e[i].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),B(this,di(this.cm,r,t),n)}}),addSelection:r(function(e,t,n){var r=this.sel.ranges.slice(0);r.push(new R(F(this,e),F(this,t||e))),B(this,di(this.cm,r,r.length-1),n)}),getSelection:function(e){for(var t=this.sel.ranges,n=0;n<t.length;n++)var r=dt(this,t[n].from(),t[n].to()),i=i?i.concat(r):r;return!1===e?i:i.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,r=0;r<n.length;r++){var i=dt(this,n[r].from(),n[r].to());!1!==e&&(i=i.join(e||this.lineSeparator())),t[r]=i}return t},replaceSelection:function(e,t,n){for(var r=[],i=0;i<this.sel.ranges.length;i++)r[i]=e;this.replaceSelections(r,t,n||"+input")},replaceSelections:r(function(e,t,n){for(var r=[],i=this.sel,o=0;o<i.ranges.length;o++){var l=i.ranges[o];r[o]={from:l.from(),to:l.to(),text:this.splitLines(e[o]),origin:n}}for(var t=t&&"end"!=t&&function(e,t,n){for(var r=[],i=u=W(e.first,0),o=0;o<t.length;o++){var l=t[o],s=vi(l.from,u,i),a=vi(pi(l),u,i),u=l.to,i=a;"around"==n?(l=H((l=e.sel.ranges[o]).head,l.anchor)<0,r[o]=new R(l?a:s,l?s:a)):r[o]=new R(s,s)}return new I(r,e.sel.primIndex)}(this,r,t),s=r.length-1;0<=s;s--)qi(this,r[s]);t?Bi(this,t):this.cm&&Dr(this.cm)}),undo:r(function(){Qi(this,"undo")}),redo:r(function(){Qi(this,"redo")}),undoSelection:r(function(){Qi(this,"undo",!0)}),redoSelection:r(function(){Qi(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r<e.done.length;r++)e.done[r].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++n;return{undo:t,redo:n}},clearHistory:function(){var t=this;this.history=new ki(this.history.maxGeneration),Ci(this,function(e){return e.history=t.history},!0)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:Fi(this.history.done),undone:Fi(this.history.undone)}},setHistory:function(e){var t=this.history=new ki(this.history.maxGeneration);t.done=Fi(e.done.slice(0),null,!0),t.undone=Fi(e.undone.slice(0),null,!0)},setGutterMarker:r(function(e,n,r){return oo(this,e,"gutter",function(e){var t=e.gutterMarkers||(e.gutterMarkers={});return!(t[n]=r)&&ke(t)&&(e.gutterMarkers=null),1})}),clearGutter:r(function(t){var n=this;this.iter(function(e){e.gutterMarkers&&e.gutterMarkers[t]&&oo(n,e,"gutter",function(){return e.gutterMarkers[t]=null,ke(e.gutterMarkers)&&(e.gutterMarkers=null),1})})}),lineInfo:function(e){var t;if("number"==typeof e){if(!mt(this,e))return null;if(!(e=A(this,t=e)))return null}else if(null==(t=D(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:r(function(e,n,r){return oo(this,e,"gutter"==n?"gutter":"class",function(e){var t="text"==n?"textClass":"background"==n?"bgClass":"gutter"==n?"gutterClass":"wrapClass";if(e[t]){if(Z(r).test(e[t]))return;e[t]+=" "+r}else e[t]=r;return 1})}),removeLineClass:r(function(e,o,l){return oo(this,e,"gutter"==o?"gutter":"class",function(e){var t="text"==o?"textClass":"background"==o?"bgClass":"gutter"==o?"gutterClass":"wrapClass",n=e[t];if(n){if(null==l)e[t]=null;else{var r=n.match(Z(l));if(!r)return;var i=r.index+r[0].length;e[t]=n.slice(0,r.index)+(r.index&&i!=n.length?" ":"")+n.slice(i)||null}return 1}})}),addLineWidget:r(function(e,t,n){return e=e,i=new ao(r=this,t,n),(o=r.cm)&&i.noHScroll&&(o.display.alignWidgets=!0),oo(r,e,"widget",function(e){var t=e.widgets||(e.widgets=[]);return null==i.insertAt?t.push(i):t.splice(Math.min(t.length,Math.max(0,i.insertAt)),0,i),i.line=e,o&&!en(r,e)&&(t=tn(e)<r.scrollTop,pt(e,e.height+kn(i)),t&&Ar(o,i.height),o.curOp.forceUpdate=!0),1}),o&&b(o,"lineWidgetAdded",o,i,"number"==typeof e?e:D(e)),i;var r,i,o}),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return fo(this,F(this,e),F(this,t),n,n&&n.type||"range")},setBookmark:function(e,t){t={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return fo(this,e=F(this,e),e,t,"bookmark")},findMarksAt:function(e){var t=[],n=A(this,(e=F(this,e)).line).markedSpans;if(n)for(var r=0;r<n.length;++r){var i=n[r];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(i,o,l){i=F(this,i),o=F(this,o);var s=[],a=i.line;return this.iter(i.line,o.line+1,function(e){var t=e.markedSpans;if(t)for(var n=0;n<t.length;n++){var r=t[n];null!=r.to&&a==i.line&&i.ch>=r.to||null==r.from&&a!=i.line||null!=r.from&&a==o.line&&r.from>=o.ch||l&&!l(r.marker)||s.push(r.marker.parent||r.marker)}++a}),s},getAllMarks:function(){var r=[];return this.iter(function(e){var t=e.markedSpans;if(t)for(var n=0;n<t.length;++n)null!=t[n].from&&r.push(t[n].marker)}),r},posFromIndex:function(t){var n,r=this.first,i=this.lineSeparator().length;return this.iter(function(e){e=e.text.length+i;if(t<e)return n=t,!0;t-=e,++r}),F(this,W(r,n))},indexFromPos:function(e){var t,n=(e=F(this,e)).ch;return e.line<this.first||e.ch<0?0:(t=this.lineSeparator().length,this.iter(this.first,e.line,function(e){n+=e.text.length+t}),n)},copy:function(e){var t=new p(ft(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){for(var t=this.first,n=this.first+this.size,n=(null!=(e=e||{}).from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to),new p(ft(this,t,n),e.mode||this.modeOption,t,this.lineSep,this.direction)),r=(e.sharedHist&&(n.history=this.history),(this.linked||(this.linked=[])).push({doc:n,sharedHist:e.sharedHist}),n.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],n),i=go(this),o=0;o<i.length;o++){var l=i[o],s=l.find(),a=r.clipPos(s.from),s=r.clipPos(s.to);H(a,s)&&(a=fo(r,a,s,l.primary,l.primary.type),l.markers.push(a),a.parent=l)}return n},unlinkDoc:function(e){if(e instanceof m&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){var n=this.linked[t];if(n.doc==e){this.linked.splice(t,1),e.unlinkDoc(this),mo(go(this));break}}var r;e.history==this.history&&(r=[e.id],Ci(e,function(e){return r.push(e.id)},!0),e.history=new ki(null),e.history.done=Fi(this.history.done,r),e.history.undone=Fi(this.history.undone,r))},iterLinkedDocs:function(e){Ci(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):Je(e)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:r(function(e){var t;(e="rtl"!=e?"ltr":e)!=this.direction&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm)&&h(t=this.cm,function(){Li(t),E(t)})})})).eachLine=p.prototype.iter,0);function bo(e){var r=this;if(wo(r),!O(r,e)&&!Tn(r.display,e)){T(e),w&&(yo=+new Date);var t=hr(r,e,!0),n=e.dataTransfer.files;if(t&&!r.isReadOnly())if(n&&n.length&&window.FileReader&&window.File)for(var i=n.length,o=Array(i),l=0,s=function(){++l==i&&P(r,function(){var e={from:t=F(r.doc,t),to:t,text:r.doc.splitLines(o.filter(function(e){return null!=e}).join(r.doc.lineSeparator())),origin:"paste"};qi(r.doc,e),Bi(r.doc,fi(F(r.doc,t),F(r.doc,pi(e))))})()},a=0;a<n.length;a++)!function(e,t){var n;r.options.allowDropFileTypes&&-1==S(r.options.allowDropFileTypes,e.type)?s():((n=new FileReader).onerror=function(){return s()},n.onload=function(){var e=n.result;/[\x00-\x08\x0e-\x1f]{2}/.test(e)||(o[t]=e),s()},n.readAsText(e))}(n[a],a);else if(r.state.draggingText&&-1<r.doc.sel.contains(t))r.state.draggingText(e),setTimeout(function(){return r.display.input.focus()},20);else try{var u,c=e.dataTransfer.getData("Text");if(c){if(r.state.draggingText&&!r.state.draggingText.copy&&(u=r.listSelections()),Gi(r.doc,fi(t,t)),u)for(var h=0;h<u.length;++h)to(r.doc,"",u[h].anchor,u[h].head,"drag");r.replaceSelection(c,"around","paste"),r.display.input.focus()}}catch(e){}}}function wo(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function xo(t){if(document.getElementsByClassName){for(var e=document.getElementsByClassName("CodeMirror"),n=[],r=0;r<e.length;r++){var i=e[r].CodeMirror;i&&n.push(i)}n.length&&n[0].operation(function(){for(var e=0;e<n.length;e++)t(n[e])})}}var Co=!1;function So(){var e;Co||(L(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,xo(Lo)},100))}),L(window,"blur",function(){return xo(kr)}),Co=!0)}function Lo(e){var t=e.display;t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize()}for(var ko={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",224:"Mod",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},To=0;To<10;To++)ko[To+48]=ko[To+96]=String(To);for(var Mo=65;Mo<=90;Mo++)ko[Mo]=String.fromCharCode(Mo);for(var No=1;No<=12;No++)ko[No+111]=ko[No+63235]="F"+No;var Oo={};function Ao(e){var t,n,r,i,o=e.split(/-(?!$)/);e=o[o.length-1];for(var l=0;l<o.length-1;l++){var s=o[l];if(/^(cmd|meta|m)$/i.test(s))i=!0;else if(/^a(lt)?$/i.test(s))t=!0;else if(/^(c|ctrl|control)$/i.test(s))n=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error("Unrecognized modifier name: "+s);r=!0}}return t&&(e="Alt-"+e),n&&(e="Ctrl-"+e),i&&(e="Cmd-"+e),e=r?"Shift-"+e:e}function Do(e){var t,n,r={};for(t in e)if(e.hasOwnProperty(t)){var i=e[t];if(!/^(name|fallthrough|(de|at)tach)$/.test(t)){if("..."!=i)for(var o=be(t.split(" "),Ao),l=0;l<o.length;l++){var s=void 0,a=void 0,s=l==o.length-1?(a=o.join(" "),i):(a=o.slice(0,l+1).join(" "),"..."),u=r[a];if(u){if(u!=s)throw new Error("Inconsistent bindings for "+a)}else r[a]=s}delete e[t]}}for(n in r)e[n]=r[n];return e}function Wo(e,t,n,r){var i=(t=Po(t)).call?t.call(e,r):t[e];if(!1===i)return"nothing";if("..."===i)return"multi";if(null!=i&&n(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return Wo(e,t.fallthrough,n,r);for(var o=0;o<t.fallthrough.length;o++){var l=Wo(e,t.fallthrough[o],n,r);if(l)return l}}}function Ho(e){e="string"==typeof e?e:ko[e.keyCode];return"Ctrl"==e||"Alt"==e||"Shift"==e||"Mod"==e}function Fo(e,t,n){var r=e;return t.altKey&&"Alt"!=r&&(e="Alt-"+e),($?t.metaKey:t.ctrlKey)&&"Ctrl"!=r&&(e="Ctrl-"+e),($?t.ctrlKey:t.metaKey)&&"Mod"!=r&&(e="Cmd-"+e),e=!n&&t.shiftKey&&"Shift"!=r?"Shift-"+e:e}function Eo(e,t){var n;return!(U&&34==e.keyCode&&e.char||null==(n=ko[e.keyCode])||e.altGraphKey)&&Fo(n=3==e.keyCode&&e.code?e.code:n,e,t)}function Po(e){return"string"==typeof e?Oo[e]:e}function Io(t,e){for(var n=t.doc.sel.ranges,r=[],i=0;i<n.length;i++){for(var o=e(n[i]);r.length&&H(o.from,z(r).to)<=0;){var l=r.pop();if(H(l.from,o.from)<0){o.from=l.from;break}}r.push(o)}h(t,function(){for(var e=r.length-1;0<=e;e--)to(t.doc,"",r[e].from,r[e].to,"+delete");Dr(t)})}function zo(e,t,n){t=Ne(e.text,t+n,n);return t<0||t>e.text.length?null:t}function Ro(e,t,n){e=zo(e,t.ch,n);return null==e?null:new W(t.line,e,n<0?"after":"before")}function Bo(e,t,n,r,i){if(e){"rtl"==t.doc.direction&&(i=-i);var o,l,s,a,e=Re(n,t.doc.direction);if(e)return o=i<0==(1==(e=i<0?z(e):e[0]).level)?"after":"before",0<e.level||"rtl"==t.doc.direction?(l=Pn(t,n),s=i<0?n.text.length-1:0,a=In(t,l,s).top,s=Oe(function(e){return In(t,l,e).top==a},i<0==(1==e.level)?e.from:e.to-1,s),"before"==o&&(s=zo(n,s,1))):s=i<0?e.to:e.from,new W(r,s,o)}return new W(r,i<0?n.text.length:0,i<0?"before":"after")}function Go(t,n,s,e){var a=Re(n,t.doc.direction);if(!a)return Ro(n,s,e);s.ch>=n.text.length?(s.ch=n.text.length,s.sticky="before"):s.ch<=0&&(s.ch=0,s.sticky="after");var r=De(a,s.ch,s.sticky),i=a[r];if("ltr"==t.doc.direction&&i.level%2==0&&(0<e?i.to>s.ch:i.from<s.ch))return Ro(n,s,e);function u(e,t){return zo(n,e instanceof W?e.ch:e,t)}function o(e){return t.options.lineWrapping?(l=l||Pn(t,n),tr(t,n,l,e)):{begin:0,end:n.text.length}}var l,c=o("before"==s.sticky?u(s,-1):s.ch);if("rtl"==t.doc.direction||1==i.level){var h=1==i.level==e<0,d=u(s,h?1:-1);if(null!=d&&(h?d<=i.to&&d<=c.end:d>=i.from&&d>=c.begin))return new W(s.line,d,h?"before":"after")}function f(e,t,n){for(var r=function(e,t){return t?new W(s.line,u(e,1),"before"):new W(s.line,e,"after")};0<=e&&e<a.length;e+=t){var i=a[e],o=0<t==(1!=i.level),l=o?n.begin:u(n.end,-1);if(i.from<=l&&l<i.to)return r(l,o);if(l=o?i.from:u(i.to,-1),n.begin<=l&&l<n.end)return r(l,o)}}i=f(r+e,e,c);return i||(null==(d=0<e?c.end:u(c.begin,-1))||0<e&&d==n.text.length||!(i=f(0<e?0:a.length-1,e,o(d)))?null:i)}Oo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Oo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Oo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Oo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Oo.default=C?Oo.macDefault:Oo.pcDefault;var Uo={selectAll:_i,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),fe)},killLine:function(n){return Io(n,function(e){var t;return e.empty()?(t=A(n.doc,e.head.line).text.length,e.head.ch==t&&e.head.line<n.lastLine()?{from:e.head,to:W(e.head.line+1,0)}:{from:e.head,to:W(e.head.line,t)}):{from:e.from(),to:e.to()}})},deleteLine:function(t){return Io(t,function(e){return{from:W(e.from().line,0),to:F(t.doc,W(e.to().line+1,0))}})},delLineLeft:function(e){return Io(e,function(e){return{from:W(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(n){return Io(n,function(e){var t=n.charCoords(e.head,"div").top+5;return{from:n.coordsChar({left:0,top:t},"div"),to:e.from()}})},delWrappedLineRight:function(n){return Io(n,function(e){var t=n.charCoords(e.head,"div").top+5,t=n.coordsChar({left:n.display.lineDiv.offsetWidth+100,top:t},"div");return{from:e.from(),to:t}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(W(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(W(e.lastLine()))},goLineStart:function(t){return t.extendSelectionsBy(function(e){return Vo(t,e.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(t){return t.extendSelectionsBy(function(e){return Ko(t,e.head)},{origin:"+move",bias:1})},goLineEnd:function(i){return i.extendSelectionsBy(function(e){var t=i,e=e.head.line,n=A(t.doc,e),r=function(e){for(var t;t=$t(e);)e=t.find(1,!0).line;return e}(n);return r!=n&&(e=D(r)),Bo(!0,t,n,e,-1)},{origin:"+move",bias:-1})},goLineRight:function(t){return t.extendSelectionsBy(function(e){e=t.cursorCoords(e.head,"div").top+5;return t.coordsChar({left:t.display.lineDiv.offsetWidth+100,top:e},"div")},ge)},goLineLeft:function(t){return t.extendSelectionsBy(function(e){e=t.cursorCoords(e.head,"div").top+5;return t.coordsChar({left:0,top:e},"div")},ge)},goLineLeftSmart:function(n){return n.extendSelectionsBy(function(e){var t=n.cursorCoords(e.head,"div").top+5,t=n.coordsChar({left:0,top:t},"div");return t.ch<n.getLine(t.line).search(/\S/)?Ko(n,e.head):t},ge)},goLineUp:function(e){return e.moveV(-1,"line")},goLineDown:function(e){return e.moveV(1,"line")},goPageUp:function(e){return e.moveV(-1,"page")},goPageDown:function(e){return e.moveV(1,"page")},goCharLeft:function(e){return e.moveH(-1,"char")},goCharRight:function(e){return e.moveH(1,"char")},goColumnLeft:function(e){return e.moveH(-1,"column")},goColumnRight:function(e){return e.moveH(1,"column")},goWordLeft:function(e){return e.moveH(-1,"word")},goGroupRight:function(e){return e.moveH(1,"group")},goGroupLeft:function(e){return e.moveH(-1,"group")},goWordRight:function(e){return e.moveH(1,"word")},delCharBefore:function(e){return e.deleteH(-1,"codepoint")},delCharAfter:function(e){return e.deleteH(1,"char")},delWordBefore:function(e){return e.deleteH(-1,"word")},delWordAfter:function(e){return e.deleteH(1,"word")},delGroupBefore:function(e){return e.deleteH(-1,"group")},delGroupAfter:function(e){return e.deleteH(1,"group")},indentAuto:function(e){return e.indentSelection("smart")},indentMore:function(e){return e.indentSelection("add")},indentLess:function(e){return e.indentSelection("subtract")},insertTab:function(e){return e.replaceSelection("\t")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),r=e.options.tabSize,i=0;i<n.length;i++){var o=n[i].from(),o=ue(e.getLine(o.line),o.ch,r);t.push(ye(r-o%r))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(l){return h(l,function(){for(var e,t,n,r=l.listSelections(),i=[],o=0;o<r.length;o++)r[o].empty()&&(e=r[o].head,(t=A(l.doc,e.line).text)&&(0<(e=e.ch==t.length?new W(e.line,e.ch-1):e).ch?(e=new W(e.line,e.ch+1),l.replaceRange(t.charAt(e.ch-1)+t.charAt(e.ch-2),W(e.line,e.ch-2),e,"+transpose")):e.line>l.doc.first&&(n=A(l.doc,e.line-1).text)&&(e=new W(e.line,1),l.replaceRange(t.charAt(0)+l.doc.lineSeparator()+n.charAt(n.length-1),W(e.line-1,n.length-1),e,"+transpose"))),i.push(new R(e,e)));l.setSelections(i)})},newlineAndIndent:function(r){return h(r,function(){for(var e=(t=r.listSelections()).length-1;0<=e;e--)r.replaceRange(r.doc.lineSeparator(),t[e].anchor,t[e].head,"+input");for(var t=r.listSelections(),n=0;n<t.length;n++)r.indentLine(t[n].from().line,null,!0);Dr(r)})},openLine:function(e){return e.replaceSelection("\n","start")},toggleOverwrite:function(e){return e.toggleOverwrite()}};function Vo(e,t){var n=A(e.doc,t),r=Zt(n);return Bo(!0,e,r,t=r!=n?D(r):t,1)}function Ko(e,t){var n=Vo(e,t.line),r=A(e.doc,n.line),e=Re(r,e.doc.direction);return e&&0!=e[0].level?n:(e=Math.max(n.ch,r.text.search(/\S/)),r=t.line==n.line&&t.ch<=e&&t.ch,W(n.line,r?0:e,n.sticky))}function jo(e,t,n){if("string"==typeof t&&!(t=Uo[t]))return!1;e.display.input.ensurePolled();var r=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n&&(e.display.shift=!1),i=t(e)!=de}finally{e.display.shift=r,e.state.suppressEdits=!1}return i}var Xo=new ce;function Yo(e,t,n,r){var i=e.state.keySeq;if(i){if(Ho(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:Xo.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),_o(e,i+" "+t,n,r))return!0}return _o(e,t,n,r)}function _o(e,t,n,r){r=function(e,t,n){for(var r=0;r<e.state.keyMaps.length;r++){var i=Wo(t,e.state.keyMaps[r],n,e);if(i)return i}return e.options.extraKeys&&Wo(t,e.options.extraKeys,n,e)||Wo(t,e.options.keyMap,n,e)}(e,t,r);return"multi"==r&&(e.state.keySeq=t),"handled"==r&&b(e,"keyHandled",e,t,n),"handled"!=r&&"multi"!=r||(T(n),xr(e)),!!r}function $o(t,e){var n=Eo(e,!0);return!!n&&(e.shiftKey&&!t.state.keySeq?Yo(t,"Shift-"+n,e,function(e){return jo(t,e,!0)})||Yo(t,n,e,function(e){if("string"==typeof e?/^go[A-Z]/.test(e):e.motion)return jo(t,e)}):Yo(t,n,e,function(e){return jo(t,e)}))}var qo=null;function Zo(e){var t,n,r,i=this;function o(e){18!=e.keyCode&&e.altKey||(Q(r,"CodeMirror-crosshair"),k(document,"keyup",o),k(document,"mouseover",o))}e.target&&e.target!=i.display.input.getField()||(i.curOp.focus=ne(),O(i,e))||(w&&v<11&&27==e.keyCode&&(e.returnValue=!1),t=e.keyCode,i.display.shift=16==t||e.shiftKey,n=$o(i,e),U&&(qo=n?t:null,!n)&&88==t&&!tt&&(C?e.metaKey:e.ctrlKey)&&i.replaceSelection("",null,"cut"),G&&!C&&!n&&46==t&&e.shiftKey&&!e.ctrlKey&&document.execCommand&&document.execCommand("cut"),18!=t)||/\bCodeMirror-crosshair\b/.test(i.display.lineDiv.className)||(re(r=i.display.lineDiv,"CodeMirror-crosshair"),L(document,"keyup",o),L(document,"mouseover",o))}function Qo(e){16==e.keyCode&&(this.doc.sel.shift=!1),O(this,e)}function Jo(e){var t,n,r,i=this;e.target&&e.target!=i.display.input.getField()||Tn(i.display,e)||O(i,e)||e.ctrlKey&&!e.altKey||C&&e.metaKey||(n=e.keyCode,t=e.charCode,U&&n==qo?(qo=null,T(e)):U&&(!e.which||e.which<10)&&$o(i,e)||"\b"==(n=String.fromCharCode(null==t?n:t))||Yo(r=i,"'"+n+"'",e,function(e){return jo(r,e,!0)})||i.display.input.onKeyPress(e))}function el(e,t,n){this.time=e,this.pos=t,this.button=n}var tl,nl;function rl(e){var t,n,r,i,o,l,s,a,u,c=this,h=c.display;O(c,e)||h.activeTouch&&h.input.supportsTouch()||(h.input.ensurePolled(),h.shift=e.shiftKey,Tn(h,e)?x||(h.scroller.draggable=!1,setTimeout(function(){return h.scroller.draggable=!0},100)):ll(c,e)||(t=hr(c,e),n=$e(e),r=t?(i=t,o=n,r=+new Date,nl&&nl.compare(r,i,o)?(tl=nl=null,"triple"):tl&&tl.compare(r,i,o)?(nl=new el(r,i,o),tl=null,"double"):(tl=new el(r,i,o),nl=null,"single")):"single",window.focus(),1==n&&c.state.selectingText&&c.state.selectingText(e),t&&function(n,e,r,t,i){var o="Click";"double"==t?o="Double"+o:"triple"==t&&(o="Triple"+o);return Yo(n,Fo(o=(1==e?"Left":2==e?"Middle":"Right")+o,i),i,function(e){if(!(e="string"==typeof e?Uo[e]:e))return!1;var t=!1;try{n.isReadOnly()&&(n.state.suppressEdits=!0),t=e(n,r)!=de}finally{n.state.suppressEdits=!1}return t})}(c,n,t,r,e))||(1==n?t?(i=c,o=t,l=r,s=e,w?setTimeout(se(Cr,i),0):i.curOp.focus=ne(),a=function(e,t,n){var r=e.getOption("configureMouse"),r=r?r(e,t,n):{};{var i;null==r.unit&&(i=_?n.shiftKey&&n.metaKey:n.altKey,r.unit=i?"rectangle":"single"==t?"char":"double"==t?"word":"line")}null!=r.extend&&!e.doc.extend||(r.extend=e.doc.extend||n.shiftKey);null==r.addNew&&(r.addNew=C?n.metaKey:n.ctrlKey);null==r.moveOnDrag&&(r.moveOnDrag=!(C?n.altKey:n.ctrlKey));return r}(i,l,s),u=i.doc.sel,(i.options.dragDrop&&Qe&&!i.isReadOnly()&&"single"==l&&-1<(l=u.contains(o))&&(H((l=u.ranges[l]).from(),o)<0||0<o.xRel)&&(0<H(l.to(),o)||o.xRel<0)?function(t,n,r,i){var o=t.display,l=!1,s=P(t,function(e){x&&(o.scroller.draggable=!1),t.state.draggingText=!1,t.state.delayingBlurEvent&&(t.hasFocus()?t.state.delayingBlurEvent=!1:Sr(t)),k(o.wrapper.ownerDocument,"mouseup",s),k(o.wrapper.ownerDocument,"mousemove",a),k(o.scroller,"dragstart",u),k(o.scroller,"drop",s),l||(T(e),i.addNew||Pi(t.doc,r,null,null,i.extend),x&&!V||w&&9==v?setTimeout(function(){o.wrapper.ownerDocument.body.focus({preventScroll:!0}),o.input.focus()},20):o.input.focus())}),a=function(e){l=l||10<=Math.abs(n.clientX-e.clientX)+Math.abs(n.clientY-e.clientY)},u=function(){return l=!0};x&&(o.scroller.draggable=!0);(t.state.draggingText=s).copy=!i.moveOnDrag,L(o.wrapper.ownerDocument,"mouseup",s),L(o.wrapper.ownerDocument,"mousemove",a),L(o.scroller,"dragstart",u),L(o.scroller,"drop",s),t.state.delayingBlurEvent=!0,setTimeout(function(){return o.input.focus()},20),o.scroller.dragDrop&&o.scroller.dragDrop()}:function(d,e,f,p){w&&Sr(d);var l=d.display,g=d.doc;T(e);var m,v,y=g.sel,t=y.ranges;p.addNew&&!p.extend?(v=g.sel.contains(f),m=-1<v?t[v]:new R(f,f)):(m=g.sel.primary(),v=g.sel.primIndex);"rectangle"==p.unit?(p.addNew||(m=new R(f,f)),f=hr(d,e,!0,!0),v=-1):(e=il(d,f,p.unit),m=p.extend?Ei(m,e.anchor,e.head,p.extend):e);p.addNew?-1==v?(v=t.length,B(g,di(d,t.concat([m]),v),{scroll:!1,origin:"*mouse"})):1<t.length&&t[v].empty()&&"char"==p.unit&&!p.extend?(B(g,di(d,t.slice(0,v).concat(t.slice(v+1)),0),{scroll:!1,origin:"*mouse"}),y=g.sel):zi(g,v,m,pe):(B(g,new I([m],v=0),pe),y=g.sel);var b=f;function s(e){if(0!=H(b,e))if(b=e,"rectangle"==p.unit){for(var t=[],n=d.options.tabSize,r=ue(A(g,f.line).text,f.ch,n),i=ue(A(g,e.line).text,e.ch,n),o=Math.min(r,i),l=Math.max(r,i),s=Math.min(f.line,e.line),a=Math.min(d.lastLine(),Math.max(f.line,e.line));s<=a;s++){var u=A(g,s).text,c=me(u,o,n);o==l?t.push(new R(W(s,c),W(s,c))):u.length>c&&t.push(new R(W(s,c),W(s,me(u,l,n))))}t.length||t.push(new R(f,f)),B(g,di(d,y.ranges.slice(0,v).concat(t),v),{origin:"*mouse",scroll:!1}),d.scrollIntoView(e)}else{var h,r=m,i=il(d,e,p.unit),e=r.anchor,e=0<H(i.anchor,e)?(h=i.head,xt(r.from(),i.anchor)):(h=i.anchor,wt(r.to(),i.head)),r=y.ranges.slice(0);r[v]=function(e,t){var n=t.anchor,r=t.head,i=A(e.doc,n.line);if(0==H(n,r)&&n.sticky==r.sticky)return t;i=Re(i);if(!i)return t;var o=De(i,n.ch,n.sticky),l=i[o];if(l.from!=n.ch&&l.to!=n.ch)return t;var s=o+(l.from==n.ch==(1!=l.level)?0:1);if(0==s||s==i.length)return t;l=r.line!=n.line?0<(r.line-n.line)*("ltr"==e.doc.direction?1:-1):(e=De(i,r.ch,r.sticky),o=e-o||(r.ch-n.ch)*(1==l.level?-1:1),e==s-1||e==s?o<0:0<o);e=i[s+(l?-1:0)],o=l==(1==e.level),i=o?e.from:e.to,s=o?"after":"before";return n.ch==i&&n.sticky==s?t:new R(new W(n.line,i,s),r)}(d,new R(F(g,e),h)),B(g,di(d,r,v),pe)}}var a=l.wrapper.getBoundingClientRect(),u=0;function n(e){d.state.selectingText=!1,u=1/0,e&&(T(e),l.input.focus()),k(l.wrapper.ownerDocument,"mousemove",r),k(l.wrapper.ownerDocument,"mouseup",i),g.history.lastSelOrigin=null}var r=P(d,function(e){(0!==e.buttons&&$e(e)?function e(t){var n,r,i=++u,o=hr(d,t,!0,"rectangle"==p.unit);o&&(0!=H(o,b)?(d.curOp.focus=ne(),s(o),n=Nr(l,g),(o.line>=n.to||o.line<n.from)&&setTimeout(P(d,function(){u==i&&e(t)}),150)):(r=t.clientY<a.top?-20:t.clientY>a.bottom?20:0)&&setTimeout(P(d,function(){u==i&&(l.scroller.scrollTop+=r,e(t))}),50))}:n)(e)}),i=P(d,n);d.state.selectingText=i,L(l.wrapper.ownerDocument,"mousemove",r),L(l.wrapper.ownerDocument,"mouseup",i)})(i,s,o,a)):_e(e)==h.scroller&&T(e):2==n?(t&&Pi(c.doc,t),setTimeout(function(){return h.input.focus()},20)):3==n&&(q?c.display.input.onContextMenu(e):Sr(c))))}function il(e,t,n){return"char"==n?new R(t,t):"word"==n?e.findWordAt(t):"line"==n?new R(W(t.line,0),F(e.doc,W(t.line+1,0))):(n=n(e,t),new R(n.from,n.to))}function ol(e,t,n,r){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(e){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&T(t);var l=e.display,r=l.lineDiv.getBoundingClientRect();if(o>r.bottom||!Ve(e,n))return Xe(t);o-=r.top-l.viewOffset;for(var s=0;s<e.display.gutterSpecs.length;++s){var a=l.gutters.childNodes[s];if(a&&a.getBoundingClientRect().right>=i)return N(e,n,e,gt(e.doc,o),e.display.gutterSpecs[s].className,t),Xe(t)}}function ll(e,t){return ol(e,t,"gutterClick",!0)}function sl(e,t){var n,r;Tn(e.display,t)||(r=t,Ve(n=e,"gutterContextMenu")&&ol(n,r,"gutterContextMenu",!1))||(O(e,t,"contextmenu")||q||e.display.input.onContextMenu(t))}function al(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Vn(e)}el.prototype.compare=function(e,t,n){return this.time+400>e&&0==H(t,this.pos)&&n==this.button};var ul={toString:function(){return"CodeMirror.Init"}},cl={},hl={};function dl(e,t,n){!t!=!(n&&n!=ul)&&(n=e.display.dragFunctions,(t=t?L:k)(e.display.scroller,"dragstart",n.start),t(e.display.scroller,"dragenter",n.enter),t(e.display.scroller,"dragover",n.over),t(e.display.scroller,"dragleave",n.leave),t(e.display.scroller,"drop",n.drop))}function fl(e){e.options.lineWrapping?(re(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(Q(e.display.wrapper,"CodeMirror-wrap"),rn(e)),cr(e),E(e),Vn(e),setTimeout(function(){return Gr(e)},100)}function m(e,t){var n=this;if(!(this instanceof m))return new m(e,t);this.options=t=t?ae(t):{},ae(cl,t,!1);var r,i=t.value,o=("string"==typeof i?i=new p(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i,new m.inputStyles[t.inputStyle](this)),e=this.display=new si(e,i,o,t),l=(al(e.wrapper.CodeMirror=this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Kr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new ce,keySeq:null,specialChars:null},t.autofocus&&!Y&&e.input.focus(),w&&v<11&&setTimeout(function(){return n.display.input.reset(!0)},20),this),s=l.display;L(s.scroller,"mousedown",P(l,rl)),L(s.scroller,"dblclick",w&&v<11?P(l,function(e){var t;O(l,e)||!(t=hr(l,e))||ll(l,e)||Tn(l.display,e)||(T(e),e=l.findWordAt(t),Pi(l.doc,e.anchor,e.head))}):function(e){return O(l,e)||T(e)}),L(s.scroller,"contextmenu",function(e){return sl(l,e)}),L(s.input.getField(),"contextmenu",function(e){s.scroller.contains(e.target)||sl(l,e)});var a,u={end:0};function c(){s.activeTouch&&(a=setTimeout(function(){return s.activeTouch=null},1e3),(u=s.activeTouch).end=+new Date)}function h(e,t){var n;return null==t.left||400<(n=t.left-e.left)*n+(n=t.top-e.top)*n}L(s.scroller,"touchstart",function(e){var t;O(l,e)||function(e){if(1==e.touches.length)return(e=e.touches[0]).radiusX<=1&&e.radiusY<=1}(e)||ll(l,e)||(s.input.ensurePolled(),clearTimeout(a),t=+new Date,s.activeTouch={start:t,moved:!1,prev:t-u.end<=300?u:null},1==e.touches.length&&(s.activeTouch.left=e.touches[0].pageX,s.activeTouch.top=e.touches[0].pageY))}),L(s.scroller,"touchmove",function(){s.activeTouch&&(s.activeTouch.moved=!0)}),L(s.scroller,"touchend",function(e){var t,n=s.activeTouch;n&&!Tn(s,e)&&null!=n.left&&!n.moved&&new Date-n.start<300&&(t=l.coordsChar(s.activeTouch,"page"),n=!n.prev||h(n,n.prev)?new R(t,t):!n.prev.prev||h(n,n.prev.prev)?l.findWordAt(t):new R(W(t.line,0),F(l.doc,W(t.line+1,0))),l.setSelection(n.anchor,n.head),l.focus(),T(e)),c()}),L(s.scroller,"touchcancel",c),L(s.scroller,"scroll",function(){s.scroller.clientHeight&&(Er(l,s.scroller.scrollTop),Ir(l,s.scroller.scrollLeft,!0),N(l,"scroll",l))}),L(s.scroller,"mousewheel",function(e){return hi(l,e)}),L(s.scroller,"DOMMouseScroll",function(e){return hi(l,e)}),L(s.wrapper,"scroll",function(){return s.wrapper.scrollTop=s.wrapper.scrollLeft=0}),s.dragFunctions={enter:function(e){O(l,e)||Ye(e)},over:function(e){var t,n;O(l,e)||((n=hr(t=l,n=e))&&(br(t,n,n=document.createDocumentFragment()),t.display.dragCursor||(t.display.dragCursor=M("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),t.display.lineSpace.insertBefore(t.display.dragCursor,t.display.cursorDiv)),y(t.display.dragCursor,n)),Ye(e))},start:function(e){var t,n;t=l,e=e,w&&(!t.state.draggingText||+new Date-yo<100)?Ye(e):O(t,e)||Tn(t.display,e)||(e.dataTransfer.setData("Text",t.getSelection()),e.dataTransfer.effectAllowed="copyMove",e.dataTransfer.setDragImage&&!V&&((n=M("img",null,null,"position: fixed; left: 0; top: 0;")).src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",U&&(n.width=n.height=1,t.display.wrapper.appendChild(n),n._top=n.offsetTop),e.dataTransfer.setDragImage(n,0,0),U)&&n.parentNode.removeChild(n))},drop:P(l,bo),leave:function(e){O(l,e)||wo(l)}};o=s.input.getField();for(r in L(o,"keyup",function(e){return Qo.call(l,e)}),L(o,"keydown",P(l,Zo)),L(o,"keypress",P(l,Jo)),L(o,"focus",function(e){return Lr(l,e)}),L(o,"blur",function(e){return kr(l,e)}),So(),Xr(this),this.curOp.forceUpdate=!0,Si(this,i),t.autofocus&&!Y||this.hasFocus()?setTimeout(function(){n.hasFocus()&&!n.state.focused&&Lr(n)},20):kr(this),hl)hl.hasOwnProperty(r)&&hl[r](this,t[r],ul);ri(this),t.finishInit&&t.finishInit(this);for(var d=0;d<pl.length;++d)pl[d](this);Yr(this),x&&t.lineWrapping&&"optimizelegibility"==getComputedStyle(e.lineDiv).textRendering&&(e.lineDiv.style.textRendering="auto")}m.defaults=cl,m.optionHandlers=hl;var pl=[];function gl(e,t,n,r){var i,o=e.doc,l=("smart"==(n=null==n?"add":n)&&(o.mode.indent?i=Nt(e,t).state:n="prev"),e.options.tabSize),s=A(o,t),a=ue(s.text,null,l),u=(s.stateAfter&&(s.stateAfter=null),s.text.match(/^\s*/)[0]);if(r||/\S/.test(s.text)){if("smart"==n&&((c=o.mode.indent(i,s.text.slice(u.length),s.text))==de||150<c)){if(!r)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>o.first?ue(A(o,t-1).text,null,l):0:"add"==n?c=a+e.options.indentUnit:"subtract"==n?c=a-e.options.indentUnit:"number"==typeof n&&(c=a+n);var c=Math.max(0,c),h="",d=0;if(e.options.indentWithTabs)for(var f=Math.floor(c/l);f;--f)d+=l,h+="\t";if(d<c&&(h+=ye(c-d)),h!=u)return to(o,h,W(t,0),W(t,u.length),"+input"),!(s.stateAfter=null);for(var p=0;p<o.sel.ranges.length;p++){var g=o.sel.ranges[p];if(g.head.line==t&&g.head.ch<u.length){g=W(t,u.length);zi(o,p,new R(g,g));break}}}m.defineInitHook=function(e){return pl.push(e)};var ml=null;function vl(e){ml=e}function yl(e,t,n,r,i){var o=e.doc,l=(e.display.shift=!1,r=r||o.sel,+new Date-200),s="paste"==i||e.state.pasteIncoming>l,a=Je(t),u=null;if(s&&1<r.ranges.length)if(ml&&ml.text.join("\n")==t){if(r.ranges.length%ml.text.length==0)for(var u=[],c=0;c<ml.text.length;c++)u.push(o.splitLines(ml.text[c]))}else a.length==r.ranges.length&&e.options.pasteLinesPerSelection&&(u=be(a,function(e){return[e]}));for(var h=e.curOp.updateInput,d=r.ranges.length-1;0<=d;d--){var f=r.ranges[d],p=f.from(),g=f.to(),f=(f.empty()&&(n&&0<n?p=W(p.line,p.ch-n):e.state.overwrite&&!s?g=W(g.line,Math.min(A(o,g.line).text.length,g.ch+z(a).length)):s&&ml&&ml.lineWise&&ml.text.join("\n")==a.join("\n")&&(p=g=W(p.line,0))),{from:p,to:g,text:u?u[d%u.length]:a,origin:i||(s?"paste":e.state.cutIncoming>l?"cut":"+input")});qi(e.doc,f),b(e,"inputRead",e,f)}t&&!s&&wl(e,t),Dr(e),e.curOp.updateInput<2&&(e.curOp.updateInput=h),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function bl(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");return n&&(e.preventDefault(),t.isReadOnly()||t.options.disableInput||h(t,function(){return yl(t,n,0,null,"paste")}),1)}function wl(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;0<=r;r--){var i=n.ranges[r];if(!(100<i.head.ch||r&&n.ranges[r-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s<o.electricChars.length;s++)if(-1<t.indexOf(o.electricChars.charAt(s))){l=gl(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(A(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=gl(e,i.head.line,"smart"));l&&b(e,"electricInput",e,i.head.line)}}}function xl(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var i=e.doc.sel.ranges[r].head.line,i={anchor:W(i,0),head:W(i+1,0)};n.push(i),t.push(e.getRange(i.anchor,i.head))}return{text:t,ranges:n}}function Cl(e,t,n,r){e.setAttribute("autocorrect",n?"":"off"),e.setAttribute("autocapitalize",r?"":"off"),e.setAttribute("spellcheck",!!t)}function Sl(){var e=M("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=M("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return x?e.style.width="1000px":e.setAttribute("wrap","off"),j&&(e.style.border="1px solid black"),Cl(e),t}function Ll(n,r,i,o,l){var e=r,t=i,s=A(n,r.line),a=l&&"rtl"==n.direction?-i:i;function u(e){var t;if(null==(t="codepoint"==o?(t=s.text.charCodeAt(r.ch+(0<o?0:-1)),isNaN(t)?null:new W(r.line,Math.max(0,Math.min(s.text.length,r.ch+i*(55296<=t&&t<56320?2:1))),-i)):l?Go(n.cm,s,r,i):Ro(s,r,i))){if(e||(e=r.line+a)<n.first||e>=n.first+n.size||(r=new W(e,r.ch,r.sticky),!(s=A(n,e))))return;r=Bo(l,n.cm,s,r.line,a)}else r=t;return 1}if("char"==o||"codepoint"==o)u();else if("column"==o)u(!0);else if("word"==o||"group"==o)for(var c=null,h="group"==o,d=n.cm&&n.cm.getHelper(r,"wordChars"),f=!0;!(i<0)||u(!f);f=!1){var p=s.text.charAt(r.ch)||"\n",p=Le(p,d)?"w":h&&"\n"==p?"n":!h||/\s/.test(p)?null:"p";if(h&&!f&&(p=p||"s"),c&&c!=p){i<0&&(i=1,u(),r.sticky="after");break}if(p&&(c=p),0<i&&!u(!f))break}t=Xi(n,r,e,t,!0);return yt(e,t)&&(t.hitSide=!0),t}function kl(e,t,n,r){var i,o,l,s=e.doc,a=t.left;for("page"==r?(i=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),i=Math.max(i-.5*or(e.display),3),o=(0<n?t.bottom:t.top)+n*i):"line"==r&&(o=0<n?t.bottom+3:t.top-3);(l=Jn(e,a,o)).outside;){if(n<0?o<=0:o>=s.height){l.hitSide=!0;break}o+=5*n}return l}function i(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new ce,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null}function Tl(e,t){var n,r,i=En(e,t.line);return!i||i.hidden?null:(n=Hn(i,i=A(e.doc,t.line),t.line),r="left",(i=Re(i,e.doc.direction))&&(r=De(i,t.ch)%2?"right":"left"),(e=Bn(n.map,t.ch,r)).offset="right"==e.collapse?e.end:e.start,e)}function Ml(e,t){return t&&(e.bad=!0),e}function Nl(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Ml(e.clipPos(W(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==r){var u=o,o=t,l=n,s=u.text.firstChild,a=!1;if(!o||!te(s,o))return Ml(W(D(u.line),0),!0);if(o==s)if(a=!0,o=s.childNodes[l],l=0,!o)return Ml(W(D(c=u.rest?z(u.rest):u.line),c.text.length),a);var c=3==o.nodeType?o:null,h=o;for(c||1!=o.childNodes.length||3!=o.firstChild.nodeType||(c=o.firstChild,l=l&&c.nodeValue.length);h.parentNode!=s;)h=h.parentNode;var d=u.measure,f=d.maps;function p(e,t,n){for(var r=-1;r<(f?f.length:0);r++)for(var i=r<0?d.map:f[r],o=0;o<i.length;o+=3){var l,s,a=i[o+2];if(a==e||a==t)return l=D(r<0?u.line:u.rest[r]),s=i[o]+n,W(l,s=n<0||a!=e?i[o+(n?1:0)]:s)}}var g=p(c,h,l);if(g)return Ml(g,a);for(var m=h.nextSibling,v=c?c.nodeValue.length-l:0;m;m=m.nextSibling){if(g=p(m,m.firstChild,0))return Ml(W(g.line,g.ch-v),a);v+=m.textContent.length}for(var y=h.previousSibling,b=l;y;y=y.previousSibling){if(g=p(y,y.firstChild,-1))return Ml(W(g.line,g.ch+b),a);b+=y.textContent.length}return}}}i.prototype.init=function(e){var t=this,o=this,l=o.cm,s=o.div=e.lineDiv;function a(e){for(var t=e.target;t;t=t.parentNode){if(t==s)return 1;if(/\bCodeMirror-(?:line)?widget\b/.test(t.className))break}}function n(e){if(a(e)&&!O(l,e)){if(l.somethingSelected())vl({lineWise:!1,text:l.getSelections()}),"cut"==e.type&&l.replaceSelection("",null,"cut");else{if(!l.options.lineWiseCopyCut)return;var t=xl(l);vl({lineWise:!0,text:t.text}),"cut"==e.type&&l.operation(function(){l.setSelections(t.ranges,0,fe),l.replaceSelection("",null,"cut")})}if(e.clipboardData){e.clipboardData.clearData();var n=ml.text.join("\n");if(e.clipboardData.setData("Text",n),e.clipboardData.getData("Text")==n)return void e.preventDefault()}var r=Sl(),n=r.firstChild,i=(l.display.lineSpace.insertBefore(r,l.display.lineSpace.firstChild),n.value=ml.text.join("\n"),document.activeElement);le(n),setTimeout(function(){l.display.lineSpace.removeChild(r),i.focus(),i==s&&o.showPrimarySelection()},50)}}Cl(s,l.options.spellcheck,l.options.autocorrect,l.options.autocapitalize),L(s,"paste",function(e){!a(e)||O(l,e)||bl(e,l)||v<=11&&setTimeout(P(l,function(){return t.updateFromDOM()}),20)}),L(s,"compositionstart",function(e){t.composing={data:e.data,done:!1}}),L(s,"compositionupdate",function(e){t.composing||(t.composing={data:e.data,done:!1})}),L(s,"compositionend",function(e){t.composing&&(e.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)}),L(s,"touchstart",function(){return o.forceCompositionEnd()}),L(s,"input",function(){t.composing||t.readFromDOMSoon()}),L(s,"copy",n),L(s,"cut",n)},i.prototype.screenReaderLabelChanged=function(e){e?this.div.setAttribute("aria-label",e):this.div.removeAttribute("aria-label")},i.prototype.prepareSelection=function(){var e=yr(this.cm,!1);return e.focus=document.activeElement==this.div,e},i.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},i.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},i.prototype.showPrimarySelection=function(){var e=this.getSelection(),t=this.cm,n=t.doc.sel.primary(),r=n.from(),n=n.to();if(t.display.viewTo==t.display.viewFrom||r.line>=t.display.viewTo||n.line<t.display.viewFrom)e.removeAllRanges();else{var i=Nl(t,e.anchorNode,e.anchorOffset),o=Nl(t,e.focusNode,e.focusOffset);if(!i||i.bad||!o||o.bad||0!=H(xt(i,o),r)||0!=H(wt(i,o),n)){var i=t.display.view,o=r.line>=t.display.viewFrom&&Tl(t,r)||{node:i[0].measure.map[2],offset:0},r=n.line<t.display.viewTo&&Tl(t,n);if(r||(r={node:(i=(n=i[i.length-1].measure).maps?n.maps[n.maps.length-1]:n.map)[i.length-1],offset:i[i.length-2]-i[i.length-3]}),o&&r){var l,n=e.rangeCount&&e.getRangeAt(0);try{l=oe(o.node,o.offset,r.offset,r.node)}catch(e){}l&&(!G&&t.state.focused&&(e.collapse(o.node,o.offset),l.collapsed)||(e.removeAllRanges(),e.addRange(l)),n&&null==e.anchorNode?e.addRange(n):G&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},i.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},i.prototype.showMultipleSelections=function(e){y(this.cm.display.cursorDiv,e.cursors),y(this.cm.display.selectionDiv,e.selection)},i.prototype.rememberSelection=function(){var e=this.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},i.prototype.selectionInEditor=function(){var e=this.getSelection();return!!e.rangeCount&&(e=e.getRangeAt(0).commonAncestorContainer,te(this.div,e))},i.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()&&document.activeElement==this.div||this.showSelection(this.prepareSelection(),!0),this.div.focus())},i.prototype.blur=function(){this.div.blur()},i.prototype.getField=function(){return this.div},i.prototype.supportsTouch=function(){return!0},i.prototype.receivedFocus=function(){var t=this;this.selectionInEditor()?this.pollSelection():h(this.cm,function(){return t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))})},i.prototype.selectionChanged=function(){var e=this.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},i.prototype.pollSelection=function(){var e,t,n,r;null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()&&(e=this.getSelection(),t=this.cm,X&&c&&this.cm.display.gutterSpecs.length&&function(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return 1;return}(e.anchorNode)?(this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),this.focus()):this.composing||(this.rememberSelection(),n=Nl(t,e.anchorNode,e.anchorOffset),r=Nl(t,e.focusNode,e.focusOffset),n&&r&&h(t,function(){B(t.doc,fi(n,r),fe),(n.bad||r.bad)&&(t.curOp.selectionChanged=!0)})))},i.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e,t=this.cm,n=t.display,r=t.doc.sel.primary(),i=r.from(),r=r.to();if(0==i.ch&&i.line>t.firstLine()&&(i=W(i.line-1,A(t.doc,i.line-1).length)),r.ch==A(t.doc,r.line).text.length&&r.line<t.lastLine()&&(r=W(r.line+1,0)),i.line<n.viewFrom||r.line>n.viewTo-1)return!1;var o,l=i.line==n.viewFrom||0==(l=dr(t,i.line))?(e=D(n.view[0].line),n.view[0].node):(e=D(n.view[l].line),n.view[l-1].node.nextSibling),r=dr(t,r.line),n=r==n.view.length-1?(o=n.viewTo-1,n.lineDiv.lastChild):(o=D(n.view[r+1].line)-1,n.view[r+1].node.previousSibling);if(!l)return!1;for(var s=t.doc.splitLines(function(o,e,t,l,s){var n="",a=!1,u=o.doc.lineSeparator(),c=!1;function h(){a&&(n+=u,c&&(n+=u),a=c=!1)}function d(e){e&&(h(),n+=e)}for(;!function e(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)d(n);else if(n=t.getAttribute("cm-marker"))(n=o.findMarks(W(l,0),W(s+1,0),(i=+n,function(e){return e.id==i}))).length&&(n=n[0].find(0))&&d(dt(o.doc,n.from,n.to).join(u));else if("false"!=t.getAttribute("contenteditable")&&(n=/^(pre|div|p|li|table|br)$/i.test(t.nodeName),/^br$/i.test(t.nodeName)||0!=t.textContent.length)){n&&h();for(var r=0;r<t.childNodes.length;r++)e(t.childNodes[r]);/^(pre|p)$/i.test(t.nodeName)&&(c=!0),n&&(a=!0)}}else 3==t.nodeType&&d(t.nodeValue.replace(/\u200b/g,"").replace(/\u00a0/g," "));var i}(e),e!=t;)e=e.nextSibling,c=!1;return n}(t,l,n,e,o)),a=dt(t.doc,W(e,0),W(o,A(t.doc,o).text.length));1<s.length&&1<a.length;)if(z(s)==z(a))s.pop(),a.pop(),o--;else{if(s[0]!=a[0])break;s.shift(),a.shift(),e++}for(var u=0,c=0,h=s[0],d=a[0],f=Math.min(h.length,d.length);u<f&&h.charCodeAt(u)==d.charCodeAt(u);)++u;for(var p=z(s),g=z(a),m=Math.min(p.length-(1==s.length?u:0),g.length-(1==a.length?u:0));c<m&&p.charCodeAt(p.length-c-1)==g.charCodeAt(g.length-c-1);)++c;if(1==s.length&&1==a.length&&e==i.line)for(;u&&u>i.ch&&p.charCodeAt(p.length-c-1)==g.charCodeAt(g.length-c-1);)u--,c++;s[s.length-1]=p.slice(0,p.length-c).replace(/^\u200b+/,""),s[0]=s[0].slice(u).replace(/\u200b+$/,"");r=W(e,u),l=W(o,a.length?z(a).length-c:0);return 1<s.length||s[0]||H(r,l)?(to(t.doc,s,r,l,"+input"),!0):void 0},i.prototype.ensurePolled=function(){this.forceCompositionEnd()},i.prototype.reset=function(){this.forceCompositionEnd()},i.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},i.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},i.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||h(this.cm,function(){return E(e.cm)})},i.prototype.setUneditable=function(e){e.contentEditable="false"},i.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly())||P(this.cm,yl)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0)},i.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},i.prototype.onContextMenu=function(){},i.prototype.resetPosition=function(){},i.prototype.needsContentAttribute=!0;function o(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new ce,this.hasSelection=!1,this.composing=null}var Ol,Al,Dl,Wl,Hl;function l(e,t,r,n){Ol.defaults[e]=t,r&&(Al[e]=n?function(e,t,n){n!=ul&&r(e,t,n)}:r)}o.prototype.init=function(n){var e=this,r=this,i=this.cm,o=(this.createField(n),this.textarea);function t(e){if(!O(i,e)){if(i.somethingSelected())vl({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=xl(i);vl({lineWise:!0,text:t.text}),"cut"==e.type?i.setSelections(t.ranges,null,fe):(r.prevInput="",o.value=t.text.join("\n"),le(o))}"cut"==e.type&&(i.state.cutIncoming=+new Date)}}n.wrapper.insertBefore(this.wrapper,n.wrapper.firstChild),j&&(o.style.width="0px"),L(o,"input",function(){w&&9<=v&&e.hasSelection&&(e.hasSelection=null),r.poll()}),L(o,"paste",function(e){O(i,e)||bl(e,i)||(i.state.pasteIncoming=+new Date,r.fastPoll())}),L(o,"cut",t),L(o,"copy",t),L(n.scroller,"paste",function(e){var t;Tn(n,e)||O(i,e)||(o.dispatchEvent?((t=new Event("paste")).clipboardData=e.clipboardData,o.dispatchEvent(t)):(i.state.pasteIncoming=+new Date,r.focus()))}),L(n.lineSpace,"selectstart",function(e){Tn(n,e)||T(e)}),L(o,"compositionstart",function(){var e=i.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:i.markText(e,i.getCursor("to"),{className:"CodeMirror-composing"})}}),L(o,"compositionend",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},o.prototype.createField=function(e){this.wrapper=Sl(),this.textarea=this.wrapper.firstChild},o.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},o.prototype.prepareSelection=function(){var e,t=this.cm,n=t.display,r=t.doc,i=yr(t);return t.options.moveInputWithCursor&&(t=qn(t,r.sel.primary().head,"div"),r=n.wrapper.getBoundingClientRect(),e=n.lineDiv.getBoundingClientRect(),i.teTop=Math.max(0,Math.min(n.wrapper.clientHeight-10,t.top+e.top-r.top)),i.teLeft=Math.max(0,Math.min(n.wrapper.clientWidth-10,t.left+e.left-r.left))),i},o.prototype.showSelection=function(e){var t=this.cm.display;y(t.cursorDiv,e.cursors),y(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},o.prototype.reset=function(e){var t,n;this.contextMenuPending||this.composing||((t=this.cm).somethingSelected()?(this.prevInput="",n=t.getSelection(),this.textarea.value=n,t.state.focused&&le(this.textarea),w&&9<=v&&(this.hasSelection=n)):e||(this.prevInput=this.textarea.value="",w&&9<=v&&(this.hasSelection=null)))},o.prototype.getField=function(){return this.textarea},o.prototype.supportsTouch=function(){return!1},o.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!Y||ne()!=this.textarea))try{this.textarea.focus()}catch(e){}},o.prototype.blur=function(){this.textarea.blur()},o.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},o.prototype.receivedFocus=function(){this.slowPoll()},o.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},o.prototype.fastPoll=function(){var t=!1,n=this;n.pollingFast=!0,n.polling.set(20,function e(){n.poll()||t?(n.pollingFast=!1,n.slowPoll()):(t=!0,n.polling.set(60,e))})},o.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||!t.state.focused||et(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(w&&9<=v&&this.hasSelection===i||C&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203==o&&(r=r||"​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var l=0,s=Math.min(r.length,i.length);l<s&&r.charCodeAt(l)==i.charCodeAt(l);)++l;return h(t,function(){yl(t,i.slice(l),r.length-l,null,e.composing?"*compose":null),1e3<i.length||-1<i.indexOf("\n")?n.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},o.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},o.prototype.onKeyPress=function(){w&&9<=v&&(this.hasSelection=null),this.fastPoll()},o.prototype.onContextMenu=function(e){var n,r,t,i,o=this,l=o.cm,s=l.display,a=o.textarea,u=(o.contextMenuPending&&o.contextMenuPending(),hr(l,e)),c=s.scroller.scrollTop;function h(){var e,t;null!=a.selectionStart&&(t="​"+((e=l.somethingSelected())?a.value:""),a.value="⇚",a.value=t,o.prevInput=e?"":"​",a.selectionStart=1,a.selectionEnd=t.length,s.selForContextMenu=l.doc.sel)}function d(){var e,t;o.contextMenuPending==d&&(o.contextMenuPending=!1,o.wrapper.style.cssText=r,a.style.cssText=n,w&&v<9&&s.scrollbars.setScrollTop(s.scroller.scrollTop=c),null!=a.selectionStart)&&((!w||v<9)&&h(),e=0,t=function(){s.selForContextMenu==l.doc.sel&&0==a.selectionStart&&0<a.selectionEnd&&"​"==o.prevInput?P(l,_i)(l):e++<10?s.detectingSelectAll=setTimeout(t,500):(s.selForContextMenu=null,s.input.reset())},s.detectingSelectAll=setTimeout(t,200))}u&&!U&&(l.options.resetSelectionOnContextMenu&&-1==l.doc.sel.contains(u)&&P(l,B)(l.doc,fi(u),fe),n=a.style.cssText,r=o.wrapper.style.cssText,u=o.wrapper.offsetParent.getBoundingClientRect(),o.wrapper.style.cssText="position: static",a.style.cssText="position: absolute; width: 30px; height: 30px;\n      top: "+(e.clientY-u.top-5)+"px; left: "+(e.clientX-u.left-5)+"px;\n      z-index: 1000; background: "+(w?"rgba(255, 255, 255, .05)":"transparent")+";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",x&&(t=window.scrollY),s.input.focus(),x&&window.scrollTo(null,t),s.input.reset(),l.somethingSelected()||(a.value=o.prevInput=" "),o.contextMenuPending=d,s.selForContextMenu=l.doc.sel,clearTimeout(s.detectingSelectAll),w&&9<=v&&h(),q?(Ye(e),i=function(){k(window,"mouseup",i),setTimeout(d,20)},L(window,"mouseup",i)):setTimeout(d,50))},o.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e,this.textarea.readOnly=!!e},o.prototype.setUneditable=function(){},o.prototype.needsContentAttribute=!1,Al=(Ol=m).optionHandlers,Ol.defineOption=l,Ol.Init=ul,l("value","",function(e,t){return e.setValue(t)},!0),l("mode",null,function(e,t){e.doc.modeOption=t,yi(e)},!0),l("indentUnit",2,yi,!0),l("indentWithTabs",!1),l("smartIndent",!0),l("tabSize",4,function(e){bi(e),Vn(e),E(e)},!0),l("lineSeparator",null,function(e,r){if(e.doc.lineSep=r){var i=[],o=e.doc.first;e.doc.iter(function(e){for(var t=0;;){var n=e.text.indexOf(r,t);if(-1==n)break;t=n+r.length,i.push(W(o,n))}o++});for(var t=i.length-1;0<=t;t--)to(e.doc,r,i[t],W(i[t].line,i[t].ch+r.length))}}),l("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200c\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=ul&&e.refresh()}),l("specialCharPlaceholder",cn,function(e){return e.refresh()},!0),l("electricChars",!0),l("inputStyle",Y?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),l("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),l("autocorrect",!1,function(e,t){return e.getInputField().autocorrect=t},!0),l("autocapitalize",!1,function(e,t){return e.getInputField().autocapitalize=t},!0),l("rtlMoveVisually",!a),l("wholeLineUpdateBefore",!0),l("theme","default",function(e){al(e),li(e)},!0),l("keyMap","default",function(e,t,n){t=Po(t),n=n!=ul&&Po(n);n&&n.detach&&n.detach(e,t),t.attach&&t.attach(e,n||null)}),l("extraKeys",null),l("configureMouse",null),l("lineWrapping",!1,fl,!0),l("gutters",[],function(e,t){e.display.gutterSpecs=ii(t,e.options.lineNumbers),li(e)},!0),l("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?ar(e.display)+"px":"0",e.refresh()},!0),l("coverGutterNextToScrollbar",!1,function(e){return Gr(e)},!0),l("scrollbarStyle","native",function(e){Kr(e),Gr(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),l("lineNumbers",!1,function(e,t){e.display.gutterSpecs=ii(e.options.gutters,t),li(e)},!0),l("firstLineNumber",1,li,!0),l("lineNumberFormatter",function(e){return e},li,!0),l("showCursorWhenSelecting",!1,vr,!0),l("resetSelectionOnContextMenu",!0),l("lineWiseCopyCut",!0),l("pasteLinesPerSelection",!0),l("selectionsMayTouch",!1),l("readOnly",!1,function(e,t){"nocursor"==t&&(kr(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),l("screenReaderLabel",null,function(e,t){e.display.input.screenReaderLabelChanged(t=""===t?null:t)}),l("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),l("dragDrop",!0,dl),l("allowDropFileTypes",null),l("cursorBlinkRate",530),l("cursorScrollMargin",0),l("cursorHeight",1,vr,!0),l("singleCursorHeightPerLine",!0,vr,!0),l("workTime",100),l("workDelay",100),l("flattenSpans",!0,bi,!0),l("addModeClass",!1,bi,!0),l("pollInterval",100),l("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),l("historyEventDelay",1250),l("viewportMargin",10,function(e){return e.refresh()},!0),l("maxHighlightLength",1e4,bi,!0),l("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),l("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),l("autofocus",null),l("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0),l("phrases",null),Wl=(Dl=m).optionHandlers,Hl=Dl.helpers={},Dl.prototype={constructor:Dl,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,t){var n=this.options,r=n[e];n[e]==t&&"mode"!=e||(n[e]=t,Wl.hasOwnProperty(e)&&P(this,Wl[e])(this,t,r),N(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Po(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;n<t.length;++n)if(t[n]==e||t[n].name==e)return t.splice(n,1),!0},addOverlay:n(function(e,t){var n=e.token?e:Dl.getMode(this.options,e);if(n.startState)throw new Error("Overlays may not be stateful.");for(var r=this.state.overlays,n={mode:n,modeSpec:e,opaque:t&&t.opaque,priority:t&&t.priority||0},i=function(e){return e.priority},o=0,l=i(n);o<r.length&&i(r[o])<=l;)o++;r.splice(o,0,n),this.state.modeGen++,E(this)}),removeOverlay:n(function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var r=t[n].modeSpec;if(r==e||"string"==typeof e&&r.name==e)return t.splice(n,1),this.state.modeGen++,void E(this)}}),indentLine:n(function(e,t,n){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),mt(this.doc,e)&&gl(this,e,t,n)}),indentSelection:n(function(e){for(var t=this.doc.sel.ranges,n=-1,r=0;r<t.length;r++){var i=t[r];if(i.empty())i.head.line>n&&(gl(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex)&&Dr(this);else{for(var o=i.from(),i=i.to(),l=Math.max(n,o.line),n=Math.min(this.lastLine(),i.line-(i.ch?0:1))+1,s=l;s<n;++s)gl(this,s,e);i=this.doc.sel.ranges;0==o.ch&&t.length==i.length&&0<i[r].from().ch&&zi(this.doc,r,new R(o,i[r].to()),fe)}}}),getTokenAt:function(e,t){return Ht(this,e,t)},getLineTokens:function(e,t){return Ht(this,W(e),t,!0)},getTokenTypeAt:function(e){e=F(this.doc,e);var t,n=Mt(this,A(this.doc,e.line)),r=0,i=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var l=r+i>>1;if((l?n[2*l-1]:0)>=o)i=l;else{if(!(n[2*l+1]<o)){t=n[2*l+2];break}r=1+l}}e=t?t.indexOf("overlay "):-1;return e<0?t:0==e?null:t.slice(0,e-1)},getModeAt:function(e){var t=this.doc.mode;return t.innerMode?Dl.innerMode(t,this.getTokenAt(e).state).mode:t},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var n=[];if(Hl.hasOwnProperty(t)){var r=Hl[t],i=this.getModeAt(e);if("string"==typeof i[t])r[i[t]]&&n.push(r[i[t]]);else if(i[t])for(var o=0;o<i[t].length;o++){var l=r[i[t][o]];l&&n.push(l)}else i.helperType&&r[i.helperType]?n.push(r[i.helperType]):r[i.name]&&n.push(r[i.name]);for(var s=0;s<r._global.length;s++){var a=r._global[s];a.pred(i,this)&&-1==S(n,a.val)&&n.push(a.val)}}return n},getStateAfter:function(e,t){var n=this.doc;return Nt(this,(e=Ct(n,null==e?n.first+n.size-1:e))+1,t).state},cursorCoords:function(e,t){var n=this.doc.sel.primary(),e=null==e?n.head:"object"==typeof e?F(this.doc,e):e?n.from():n.to();return qn(this,e,t||"page")},charCoords:function(e,t){return $n(this,F(this.doc,e),t||"page")},coordsChar:function(e,t){return Jn(this,(e=_n(this,e,t||"page")).left,e.top)},lineAtHeight:function(e,t){return e=_n(this,{top:e,left:0},t||"page").top,gt(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,n){var r=!1,i="number"==typeof e?(i=this.doc.first+this.doc.size-1,e<this.doc.first?e=this.doc.first:i<e&&(e=i,r=!0),A(this.doc,e)):e;return Yn(this,i,{top:0,left:0},t||"page",n||r).top+(r?this.doc.height-tn(i):0)},defaultTextHeight:function(){return or(this.display)},defaultCharWidth:function(){return lr(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var o,l,s=this.display,a=(e=qn(this,F(this.doc,e))).bottom,u=e.left;t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),s.sizer.appendChild(t),"over"==r?a=e.top:"above"!=r&&"near"!=r||(l=Math.max(s.wrapper.clientHeight,this.doc.height),o=Math.max(s.sizer.clientWidth,s.lineSpace.clientWidth),("above"==r||e.bottom+t.offsetHeight>l)&&e.top>t.offsetHeight?a=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=l&&(a=e.bottom),u+t.offsetWidth>o&&(u=o-t.offsetWidth)),t.style.top=a+"px",t.style.left=t.style.right="","right"==i?(u=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?u=0:"middle"==i&&(u=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+"px"),n&&(r=this,l={left:u,top:a,right:u+t.offsetWidth,bottom:a+t.offsetHeight},null!=(l=Or(r,l)).scrollTop&&Er(r,l.scrollTop),null!=l.scrollLeft)&&Ir(r,l.scrollLeft)},triggerOnKeyDown:n(Zo),triggerOnKeyPress:n(Jo),triggerOnKeyUp:Qo,triggerOnMouseDown:n(rl),execCommand:function(e){if(Uo.hasOwnProperty(e))return Uo[e].call(null,this)},triggerElectric:n(function(e){wl(this,e)}),findPosH:function(e,t,n,r){for(var i=1,o=(t<0&&(i=-1,t=-t),F(this.doc,e)),l=0;l<t&&!(o=Ll(this.doc,o,i,n,r)).hitSide;++l);return o},moveH:n(function(t,n){var r=this;this.extendSelectionsBy(function(e){return r.display.shift||r.doc.extend||e.empty()?Ll(r.doc,e.head,t,n,r.options.rtlMoveVisually):t<0?e.from():e.to()},ge)}),deleteH:n(function(n,r){var e=this.doc.sel,i=this.doc;e.somethingSelected()?i.replaceSelection("",null,"+delete"):Io(this,function(e){var t=Ll(i,e.head,n,r,!1);return n<0?{from:t,to:e.head}:{from:e.head,to:t}})}),findPosV:function(e,t,n,r){for(var i=1,o=r,l=(t<0&&(i=-1,t=-t),F(this.doc,e)),s=0;s<t;++s){var a=qn(this,l,"div");if(null==o?o=a.left:a.left=o,(l=kl(this,a,i,n)).hitSide)break}return l},moveV:n(function(r,i){var o=this,l=this.doc,s=[],a=!this.display.shift&&!l.extend&&l.sel.somethingSelected();if(l.extendSelectionsBy(function(e){var t,n;return a?r<0?e.from():e.to():(t=qn(o,e.head,"div"),null!=e.goalColumn&&(t.left=e.goalColumn),s.push(t.left),n=kl(o,t,r,i),"page"==i&&e==l.sel.primary()&&Ar(o,$n(o,n,"div").top-t.top),n)},ge),s.length)for(var e=0;e<l.sel.ranges.length;e++)l.sel.ranges[e].goalColumn=s[e]}),findWordAt:function(e){var t=A(this.doc,e.line).text,n=e.ch,r=e.ch;if(t){for(var i=this.getHelper(e,"wordChars"),o=("before"!=e.sticky&&r!=t.length||!n?++r:--n,t.charAt(n)),l=Le(o,i)?function(e){return Le(e,i)}:/\s/.test(o)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!Le(e)};0<n&&l(t.charAt(n-1));)--n;for(;r<t.length&&l(t.charAt(r));)++r}return new R(W(e.line,n),W(e.line,r))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||(((this.state.overwrite=!this.state.overwrite)?re:Q)(this.display.cursorDiv,"CodeMirror-overwrite"),N(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==ne()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:n(function(e,t){Wr(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-An(this)-this.display.barHeight,width:e.scrollWidth-An(this)-this.display.barWidth,clientHeight:Wn(this),clientWidth:Dn(this)}},scrollIntoView:n(function(e,t){var n;null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:W(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?(t=e,Hr(n=this),n.curOp.scrollToPos=t):Fr(this,e.from,e.to,e.margin)}),setSize:n(function(e,t){function n(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e}var r=this,i=(null!=e&&(this.display.wrapper.style.width=n(e)),null!=t&&(this.display.wrapper.style.height=n(t)),this.options.lineWrapping&&Un(this),this.display.viewFrom);this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){fr(r,i,"widget");break}++i}),this.curOp.forceUpdate=!0,N(this,"refresh",this)}),operation:function(e){return h(this,e)},startOperation:function(){return Xr(this)},endOperation:function(){return Yr(this)},refresh:n(function(){var e=this.display.cachedTextHeight;E(this),this.curOp.forceUpdate=!0,Vn(this),Wr(this,this.doc.scrollLeft,this.doc.scrollTop),ei(this.display),(null==e||.5<Math.abs(e-or(this.display))||this.options.lineWrapping)&&cr(this),N(this,"refresh",this)}),swapDoc:n(function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Si(this,e),Vn(this),this.display.input.reset(),Wr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,b(this,"swapDoc",this,t),t}),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Ke(Dl),Dl.registerHelper=function(e,t,n){Hl.hasOwnProperty(e)||(Hl[e]=Dl[e]={_global:[]}),Hl[e][t]=n},Dl.registerGlobalHelper=function(e,t,n,r){Dl.registerHelper(e,t,r),Hl[e]._global.push({pred:n,val:r})};var Fl,El="iter insert remove copy getEditor constructor".split(" ");for(Fl in p.prototype)p.prototype.hasOwnProperty(Fl)&&S(El,Fl)<0&&(m.prototype[Fl]=function(e){return function(){return e.apply(this.doc,arguments)}}(p.prototype[Fl]));return Ke(p),m.inputStyles={textarea:o,contenteditable:i},m.defineMode=function(e){m.defaults.mode||"null"==e||(m.defaults.mode=e),function(e,t){2<arguments.length&&(t.dependencies=Array.prototype.slice.call(arguments,2)),rt[e]=t}.apply(this,arguments)},m.defineMIME=function(e,t){it[e]=t},m.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),m.defineMIME("text/plain","null"),m.defineExtension=function(e,t){m.prototype[e]=t},m.defineDocExtension=function(e,t){p.prototype[e]=t},m.fromTextArea=function(t,n){var e;function r(){t.value=s.getValue()}if((n=n?ae(n):{}).value=t.value,!n.tabindex&&t.tabIndex&&(n.tabindex=t.tabIndex),!n.placeholder&&t.placeholder&&(n.placeholder=t.placeholder),null==n.autofocus&&(e=ne(),n.autofocus=e==t||null!=t.getAttribute("autofocus")&&e==document.body),t.form&&(L(t.form,"submit",r),!n.leaveSubmitMethodAlone)){var i=t.form,o=i.submit;try{var l=i.submit=function(){r(),i.submit=o,i.submit(),i.submit=l}}catch(e){}}n.finishInit=function(e){e.save=r,e.getTextArea=function(){return t},e.toTextArea=function(){e.toTextArea=isNaN,r(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display="",t.form&&(k(t.form,"submit",r),n.leaveSubmitMethodAlone||"function"!=typeof t.form.submit||(t.form.submit=o))}},t.style.display="none";var s=m(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},n);return s},(t=m).off=k,t.on=L,t.wheelEventPixels=ci,t.Doc=p,t.splitLines=Je,t.countColumn=ue,t.findColumn=me,t.isWordChar=Se,t.Pass=de,t.signal=N,t.Line=on,t.changeEnd=pi,t.scrollbarModel=Vr,t.Pos=W,t.cmpPos=H,t.modes=rt,t.mimeModes=it,t.resolveMode=ot,t.getMode=lt,t.modeExtensions=st,t.extendMode=at,t.copyState=ut,t.startState=ht,t.innerMode=ct,t.commands=Uo,t.keyMap=Oo,t.keyName=Eo,t.isModifierKey=Ho,t.lookupKey=Wo,t.normalizeKeyMap=Do,t.StringStream=g,t.SharedTextMarker=po,t.TextMarker=co,t.LineWidget=ao,t.e_preventDefault=T,t.e_stopPropagation=je,t.e_stop=Ye,t.addClass=re,t.contains=te,t.rmClass=Q,t.keyNames=ko,m.version="5.58.3",m});
PK|c�\
�T�++(managesieve/codemirror/lib/codemirror.jsnu�[���// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE

// This is CodeMirror (https://codemirror.net), a code editor
// implemented in JavaScript on top of the browser's DOM.
//
// You can find some technical background for some of the code below
// at http://marijnhaverbeke.nl/blog/#cm-internals .

(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global = global || self, global.CodeMirror = factory());
}(this, (function () { 'use strict';

  // Kludges for bugs and behavior differences that can't be feature
  // detected are enabled based on userAgent etc sniffing.
  var userAgent = navigator.userAgent;
  var platform = navigator.platform;

  var gecko = /gecko\/\d/i.test(userAgent);
  var ie_upto10 = /MSIE \d/.test(userAgent);
  var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent);
  var edge = /Edge\/(\d+)/.exec(userAgent);
  var ie = ie_upto10 || ie_11up || edge;
  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);
  var webkit = !edge && /WebKit\//.test(userAgent);
  var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent);
  var chrome = !edge && /Chrome\//.test(userAgent);
  var presto = /Opera\//.test(userAgent);
  var safari = /Apple Computer/.test(navigator.vendor);
  var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent);
  var phantom = /PhantomJS/.test(userAgent);

  var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent);
  var android = /Android/.test(userAgent);
  // This is woefully incomplete. Suggestions for alternative methods welcome.
  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);
  var mac = ios || /Mac/.test(platform);
  var chromeOS = /\bCrOS\b/.test(userAgent);
  var windows = /win/i.test(platform);

  var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/);
  if (presto_version) { presto_version = Number(presto_version[1]); }
  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }
  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X
  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));
  var captureRightClick = gecko || (ie && ie_version >= 9);

  function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") }

  var rmClass = function(node, cls) {
    var current = node.className;
    var match = classTest(cls).exec(current);
    if (match) {
      var after = current.slice(match.index + match[0].length);
      node.className = current.slice(0, match.index) + (after ? match[1] + after : "");
    }
  };

  function removeChildren(e) {
    for (var count = e.childNodes.length; count > 0; --count)
      { e.removeChild(e.firstChild); }
    return e
  }

  function removeChildrenAndAdd(parent, e) {
    return removeChildren(parent).appendChild(e)
  }

  function elt(tag, content, className, style) {
    var e = document.createElement(tag);
    if (className) { e.className = className; }
    if (style) { e.style.cssText = style; }
    if (typeof content == "string") { e.appendChild(document.createTextNode(content)); }
    else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }
    return e
  }
  // wrapper for elt, which removes the elt from the accessibility tree
  function eltP(tag, content, className, style) {
    var e = elt(tag, content, className, style);
    e.setAttribute("role", "presentation");
    return e
  }

  var range;
  if (document.createRange) { range = function(node, start, end, endNode) {
    var r = document.createRange();
    r.setEnd(endNode || node, end);
    r.setStart(node, start);
    return r
  }; }
  else { range = function(node, start, end) {
    var r = document.body.createTextRange();
    try { r.moveToElementText(node.parentNode); }
    catch(e) { return r }
    r.collapse(true);
    r.moveEnd("character", end);
    r.moveStart("character", start);
    return r
  }; }

  function contains(parent, child) {
    if (child.nodeType == 3) // Android browser always returns false when child is a textnode
      { child = child.parentNode; }
    if (parent.contains)
      { return parent.contains(child) }
    do {
      if (child.nodeType == 11) { child = child.host; }
      if (child == parent) { return true }
    } while (child = child.parentNode)
  }

  function activeElt() {
    // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement.
    // IE < 10 will throw when accessed while the page is loading or in an iframe.
    // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.
    var activeElement;
    try {
      activeElement = document.activeElement;
    } catch(e) {
      activeElement = document.body || null;
    }
    while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)
      { activeElement = activeElement.shadowRoot.activeElement; }
    return activeElement
  }

  function addClass(node, cls) {
    var current = node.className;
    if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; }
  }
  function joinClasses(a, b) {
    var as = a.split(" ");
    for (var i = 0; i < as.length; i++)
      { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } }
    return b
  }

  var selectInput = function(node) { node.select(); };
  if (ios) // Mobile Safari apparently has a bug where select() is broken.
    { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }
  else if (ie) // Suppress mysterious IE10 errors
    { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }

  function bind(f) {
    var args = Array.prototype.slice.call(arguments, 1);
    return function(){return f.apply(null, args)}
  }

  function copyObj(obj, target, overwrite) {
    if (!target) { target = {}; }
    for (var prop in obj)
      { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))
        { target[prop] = obj[prop]; } }
    return target
  }

  // Counts the column offset in a string, taking tabs into account.
  // Used mostly to find indentation.
  function countColumn(string, end, tabSize, startIndex, startValue) {
    if (end == null) {
      end = string.search(/[^\s\u00a0]/);
      if (end == -1) { end = string.length; }
    }
    for (var i = startIndex || 0, n = startValue || 0;;) {
      var nextTab = string.indexOf("\t", i);
      if (nextTab < 0 || nextTab >= end)
        { return n + (end - i) }
      n += nextTab - i;
      n += tabSize - (n % tabSize);
      i = nextTab + 1;
    }
  }

  var Delayed = function() {
    this.id = null;
    this.f = null;
    this.time = 0;
    this.handler = bind(this.onTimeout, this);
  };
  Delayed.prototype.onTimeout = function (self) {
    self.id = 0;
    if (self.time <= +new Date) {
      self.f();
    } else {
      setTimeout(self.handler, self.time - +new Date);
    }
  };
  Delayed.prototype.set = function (ms, f) {
    this.f = f;
    var time = +new Date + ms;
    if (!this.id || time < this.time) {
      clearTimeout(this.id);
      this.id = setTimeout(this.handler, ms);
      this.time = time;
    }
  };

  function indexOf(array, elt) {
    for (var i = 0; i < array.length; ++i)
      { if (array[i] == elt) { return i } }
    return -1
  }

  // Number of pixels added to scroller and sizer to hide scrollbar
  var scrollerGap = 50;

  // Returned or thrown by various protocols to signal 'I'm not
  // handling this'.
  var Pass = {toString: function(){return "CodeMirror.Pass"}};

  // Reused option objects for setSelection & friends
  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"};

  // The inverse of countColumn -- find the offset that corresponds to
  // a particular column.
  function findColumn(string, goal, tabSize) {
    for (var pos = 0, col = 0;;) {
      var nextTab = string.indexOf("\t", pos);
      if (nextTab == -1) { nextTab = string.length; }
      var skipped = nextTab - pos;
      if (nextTab == string.length || col + skipped >= goal)
        { return pos + Math.min(skipped, goal - col) }
      col += nextTab - pos;
      col += tabSize - (col % tabSize);
      pos = nextTab + 1;
      if (col >= goal) { return pos }
    }
  }

  var spaceStrs = [""];
  function spaceStr(n) {
    while (spaceStrs.length <= n)
      { spaceStrs.push(lst(spaceStrs) + " "); }
    return spaceStrs[n]
  }

  function lst(arr) { return arr[arr.length-1] }

  function map(array, f) {
    var out = [];
    for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }
    return out
  }

  function insertSorted(array, value, score) {
    var pos = 0, priority = score(value);
    while (pos < array.length && score(array[pos]) <= priority) { pos++; }
    array.splice(pos, 0, value);
  }

  function nothing() {}

  function createObj(base, props) {
    var inst;
    if (Object.create) {
      inst = Object.create(base);
    } else {
      nothing.prototype = base;
      inst = new nothing();
    }
    if (props) { copyObj(props, inst); }
    return inst
  }

  var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
  function isWordCharBasic(ch) {
    return /\w/.test(ch) || ch > "\x80" &&
      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))
  }
  function isWordChar(ch, helper) {
    if (!helper) { return isWordCharBasic(ch) }
    if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true }
    return helper.test(ch)
  }

  function isEmpty(obj) {
    for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }
    return true
  }

  // Extending unicode characters. A series of a non-extending char +
  // any number of extending chars is treated as a single unit as far
  // as editing and measuring is concerned. This is not fully correct,
  // since some scripts/fonts/browsers also treat other configurations
  // of code points as a group.
  var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;
  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }

  // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.
  function skipExtendingChars(str, pos, dir) {
    while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }
    return pos
  }

  // Returns the value from the range [`from`; `to`] that satisfies
  // `pred` and is closest to `from`. Assumes that at least `to`
  // satisfies `pred`. Supports `from` being greater than `to`.
  function findFirst(pred, from, to) {
    // At any point we are certain `to` satisfies `pred`, don't know
    // whether `from` does.
    var dir = from > to ? -1 : 1;
    for (;;) {
      if (from == to) { return from }
      var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);
      if (mid == from) { return pred(mid) ? from : to }
      if (pred(mid)) { to = mid; }
      else { from = mid + dir; }
    }
  }

  // BIDI HELPERS

  function iterateBidiSections(order, from, to, f) {
    if (!order) { return f(from, to, "ltr", 0) }
    var found = false;
    for (var i = 0; i < order.length; ++i) {
      var part = order[i];
      if (part.from < to && part.to > from || from == to && part.to == from) {
        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i);
        found = true;
      }
    }
    if (!found) { f(from, to, "ltr"); }
  }

  var bidiOther = null;
  function getBidiPartAt(order, ch, sticky) {
    var found;
    bidiOther = null;
    for (var i = 0; i < order.length; ++i) {
      var cur = order[i];
      if (cur.from < ch && cur.to > ch) { return i }
      if (cur.to == ch) {
        if (cur.from != cur.to && sticky == "before") { found = i; }
        else { bidiOther = i; }
      }
      if (cur.from == ch) {
        if (cur.from != cur.to && sticky != "before") { found = i; }
        else { bidiOther = i; }
      }
    }
    return found != null ? found : bidiOther
  }

  // Bidirectional ordering algorithm
  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
  // that this (partially) implements.

  // One-char codes used for character types:
  // L (L):   Left-to-Right
  // R (R):   Right-to-Left
  // r (AL):  Right-to-Left Arabic
  // 1 (EN):  European Number
  // + (ES):  European Number Separator
  // % (ET):  European Number Terminator
  // n (AN):  Arabic Number
  // , (CS):  Common Number Separator
  // m (NSM): Non-Spacing Mark
  // b (BN):  Boundary Neutral
  // s (B):   Paragraph Separator
  // t (S):   Segment Separator
  // w (WS):  Whitespace
  // N (ON):  Other Neutrals

  // Returns null if characters are ordered as they appear
  // (left-to-right), or an array of sections ({from, to, level}
  // objects) in the order in which they occur visually.
  var bidiOrdering = (function() {
    // Character types for codepoints 0 to 0xff
    var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";
    // Character types for codepoints 0x600 to 0x6f9
    var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";
    function charType(code) {
      if (code <= 0xf7) { return lowTypes.charAt(code) }
      else if (0x590 <= code && code <= 0x5f4) { return "R" }
      else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }
      else if (0x6ee <= code && code <= 0x8ac) { return "r" }
      else if (0x2000 <= code && code <= 0x200b) { return "w" }
      else if (code == 0x200c) { return "b" }
      else { return "L" }
    }

    var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;

    function BidiSpan(level, from, to) {
      this.level = level;
      this.from = from; this.to = to;
    }

    return function(str, direction) {
      var outerType = direction == "ltr" ? "L" : "R";

      if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false }
      var len = str.length, types = [];
      for (var i = 0; i < len; ++i)
        { types.push(charType(str.charCodeAt(i))); }

      // W1. Examine each non-spacing mark (NSM) in the level run, and
      // change the type of the NSM to the type of the previous
      // character. If the NSM is at the start of the level run, it will
      // get the type of sor.
      for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {
        var type = types[i$1];
        if (type == "m") { types[i$1] = prev; }
        else { prev = type; }
      }

      // W2. Search backwards from each instance of a European number
      // until the first strong type (R, L, AL, or sor) is found. If an
      // AL is found, change the type of the European number to Arabic
      // number.
      // W3. Change all ALs to R.
      for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {
        var type$1 = types[i$2];
        if (type$1 == "1" && cur == "r") { types[i$2] = "n"; }
        else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } }
      }

      // W4. A single European separator between two European numbers
      // changes to a European number. A single common separator between
      // two numbers of the same type changes to that type.
      for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {
        var type$2 = types[i$3];
        if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; }
        else if (type$2 == "," && prev$1 == types[i$3+1] &&
                 (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; }
        prev$1 = type$2;
      }

      // W5. A sequence of European terminators adjacent to European
      // numbers changes to all European numbers.
      // W6. Otherwise, separators and terminators change to Other
      // Neutral.
      for (var i$4 = 0; i$4 < len; ++i$4) {
        var type$3 = types[i$4];
        if (type$3 == ",") { types[i$4] = "N"; }
        else if (type$3 == "%") {
          var end = (void 0);
          for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {}
          var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N";
          for (var j = i$4; j < end; ++j) { types[j] = replace; }
          i$4 = end - 1;
        }
      }

      // W7. Search backwards from each instance of a European number
      // until the first strong type (R, L, or sor) is found. If an L is
      // found, then change the type of the European number to L.
      for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {
        var type$4 = types[i$5];
        if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; }
        else if (isStrong.test(type$4)) { cur$1 = type$4; }
      }

      // N1. A sequence of neutrals takes the direction of the
      // surrounding strong text if the text on both sides has the same
      // direction. European and Arabic numbers act as if they were R in
      // terms of their influence on neutrals. Start-of-level-run (sor)
      // and end-of-level-run (eor) are used at level run boundaries.
      // N2. Any remaining neutrals take the embedding direction.
      for (var i$6 = 0; i$6 < len; ++i$6) {
        if (isNeutral.test(types[i$6])) {
          var end$1 = (void 0);
          for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}
          var before = (i$6 ? types[i$6-1] : outerType) == "L";
          var after = (end$1 < len ? types[end$1] : outerType) == "L";
          var replace$1 = before == after ? (before ? "L" : "R") : outerType;
          for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }
          i$6 = end$1 - 1;
        }
      }

      // Here we depart from the documented algorithm, in order to avoid
      // building up an actual levels array. Since there are only three
      // levels (0, 1, 2) in an implementation that doesn't take
      // explicit embedding into account, we can build up the order on
      // the fly, without following the level-based algorithm.
      var order = [], m;
      for (var i$7 = 0; i$7 < len;) {
        if (countsAsLeft.test(types[i$7])) {
          var start = i$7;
          for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}
          order.push(new BidiSpan(0, start, i$7));
        } else {
          var pos = i$7, at = order.length, isRTL = direction == "rtl" ? 1 : 0;
          for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {}
          for (var j$2 = pos; j$2 < i$7;) {
            if (countsAsNum.test(types[j$2])) {
              if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }
              var nstart = j$2;
              for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}
              order.splice(at, 0, new BidiSpan(2, nstart, j$2));
              at += isRTL;
              pos = j$2;
            } else { ++j$2; }
          }
          if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }
        }
      }
      if (direction == "ltr") {
        if (order[0].level == 1 && (m = str.match(/^\s+/))) {
          order[0].from = m[0].length;
          order.unshift(new BidiSpan(0, 0, m[0].length));
        }
        if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
          lst(order).to -= m[0].length;
          order.push(new BidiSpan(0, len - m[0].length, len));
        }
      }

      return direction == "rtl" ? order.reverse() : order
    }
  })();

  // Get the bidi ordering for the given line (and cache it). Returns
  // false for lines that are fully left-to-right, and an array of
  // BidiSpan objects otherwise.
  function getOrder(line, direction) {
    var order = line.order;
    if (order == null) { order = line.order = bidiOrdering(line.text, direction); }
    return order
  }

  // EVENT HANDLING

  // Lightweight event framework. on/off also work on DOM nodes,
  // registering native DOM handlers.

  var noHandlers = [];

  var on = function(emitter, type, f) {
    if (emitter.addEventListener) {
      emitter.addEventListener(type, f, false);
    } else if (emitter.attachEvent) {
      emitter.attachEvent("on" + type, f);
    } else {
      var map = emitter._handlers || (emitter._handlers = {});
      map[type] = (map[type] || noHandlers).concat(f);
    }
  };

  function getHandlers(emitter, type) {
    return emitter._handlers && emitter._handlers[type] || noHandlers
  }

  function off(emitter, type, f) {
    if (emitter.removeEventListener) {
      emitter.removeEventListener(type, f, false);
    } else if (emitter.detachEvent) {
      emitter.detachEvent("on" + type, f);
    } else {
      var map = emitter._handlers, arr = map && map[type];
      if (arr) {
        var index = indexOf(arr, f);
        if (index > -1)
          { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }
      }
    }
  }

  function signal(emitter, type /*, values...*/) {
    var handlers = getHandlers(emitter, type);
    if (!handlers.length) { return }
    var args = Array.prototype.slice.call(arguments, 2);
    for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }
  }

  // The DOM events that CodeMirror handles can be overridden by
  // registering a (non-DOM) handler on the editor for the event name,
  // and preventDefault-ing the event in that handler.
  function signalDOMEvent(cm, e, override) {
    if (typeof e == "string")
      { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }
    signal(cm, override || e.type, cm, e);
    return e_defaultPrevented(e) || e.codemirrorIgnore
  }

  function signalCursorActivity(cm) {
    var arr = cm._handlers && cm._handlers.cursorActivity;
    if (!arr) { return }
    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);
    for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)
      { set.push(arr[i]); } }
  }

  function hasHandler(emitter, type) {
    return getHandlers(emitter, type).length > 0
  }

  // Add on and off methods to a constructor's prototype, to make
  // registering events on such objects more convenient.
  function eventMixin(ctor) {
    ctor.prototype.on = function(type, f) {on(this, type, f);};
    ctor.prototype.off = function(type, f) {off(this, type, f);};
  }

  // Due to the fact that we still support jurassic IE versions, some
  // compatibility wrappers are needed.

  function e_preventDefault(e) {
    if (e.preventDefault) { e.preventDefault(); }
    else { e.returnValue = false; }
  }
  function e_stopPropagation(e) {
    if (e.stopPropagation) { e.stopPropagation(); }
    else { e.cancelBubble = true; }
  }
  function e_defaultPrevented(e) {
    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false
  }
  function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}

  function e_target(e) {return e.target || e.srcElement}
  function e_button(e) {
    var b = e.which;
    if (b == null) {
      if (e.button & 1) { b = 1; }
      else if (e.button & 2) { b = 3; }
      else if (e.button & 4) { b = 2; }
    }
    if (mac && e.ctrlKey && b == 1) { b = 3; }
    return b
  }

  // Detect drag-and-drop
  var dragAndDrop = function() {
    // There is *some* kind of drag-and-drop support in IE6-8, but I
    // couldn't get it to work yet.
    if (ie && ie_version < 9) { return false }
    var div = elt('div');
    return "draggable" in div || "dragDrop" in div
  }();

  var zwspSupported;
  function zeroWidthElement(measure) {
    if (zwspSupported == null) {
      var test = elt("span", "\u200b");
      removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]));
      if (measure.firstChild.offsetHeight != 0)
        { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }
    }
    var node = zwspSupported ? elt("span", "\u200b") :
      elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px");
    node.setAttribute("cm-text", "");
    return node
  }

  // Feature-detect IE's crummy client rect reporting for bidi text
  var badBidiRects;
  function hasBadBidiRects(measure) {
    if (badBidiRects != null) { return badBidiRects }
    var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA"));
    var r0 = range(txt, 0, 1).getBoundingClientRect();
    var r1 = range(txt, 1, 2).getBoundingClientRect();
    removeChildren(measure);
    if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)
    return badBidiRects = (r1.right - r0.right < 3)
  }

  // See if "".split is the broken IE version, if so, provide an
  // alternative way to split lines.
  var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) {
    var pos = 0, result = [], l = string.length;
    while (pos <= l) {
      var nl = string.indexOf("\n", pos);
      if (nl == -1) { nl = string.length; }
      var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl);
      var rt = line.indexOf("\r");
      if (rt != -1) {
        result.push(line.slice(0, rt));
        pos += rt + 1;
      } else {
        result.push(line);
        pos = nl + 1;
      }
    }
    return result
  } : function (string) { return string.split(/\r\n?|\n/); };

  var hasSelection = window.getSelection ? function (te) {
    try { return te.selectionStart != te.selectionEnd }
    catch(e) { return false }
  } : function (te) {
    var range;
    try {range = te.ownerDocument.selection.createRange();}
    catch(e) {}
    if (!range || range.parentElement() != te) { return false }
    return range.compareEndPoints("StartToEnd", range) != 0
  };

  var hasCopyEvent = (function () {
    var e = elt("div");
    if ("oncopy" in e) { return true }
    e.setAttribute("oncopy", "return;");
    return typeof e.oncopy == "function"
  })();

  var badZoomedRects = null;
  function hasBadZoomedRects(measure) {
    if (badZoomedRects != null) { return badZoomedRects }
    var node = removeChildrenAndAdd(measure, elt("span", "x"));
    var normal = node.getBoundingClientRect();
    var fromRange = range(node, 0, 1).getBoundingClientRect();
    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1
  }

  // Known modes, by name and by MIME
  var modes = {}, mimeModes = {};

  // Extra arguments are stored as the mode's dependencies, which is
  // used by (legacy) mechanisms like loadmode.js to automatically
  // load a mode. (Preferred mechanism is the require/define calls.)
  function defineMode(name, mode) {
    if (arguments.length > 2)
      { mode.dependencies = Array.prototype.slice.call(arguments, 2); }
    modes[name] = mode;
  }

  function defineMIME(mime, spec) {
    mimeModes[mime] = spec;
  }

  // Given a MIME type, a {name, ...options} config object, or a name
  // string, return a mode config object.
  function resolveMode(spec) {
    if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
      spec = mimeModes[spec];
    } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
      var found = mimeModes[spec.name];
      if (typeof found == "string") { found = {name: found}; }
      spec = createObj(found, spec);
      spec.name = found.name;
    } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
      return resolveMode("application/xml")
    } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) {
      return resolveMode("application/json")
    }
    if (typeof spec == "string") { return {name: spec} }
    else { return spec || {name: "null"} }
  }

  // Given a mode spec (anything that resolveMode accepts), find and
  // initialize an actual mode object.
  function getMode(options, spec) {
    spec = resolveMode(spec);
    var mfactory = modes[spec.name];
    if (!mfactory) { return getMode(options, "text/plain") }
    var modeObj = mfactory(options, spec);
    if (modeExtensions.hasOwnProperty(spec.name)) {
      var exts = modeExtensions[spec.name];
      for (var prop in exts) {
        if (!exts.hasOwnProperty(prop)) { continue }
        if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; }
        modeObj[prop] = exts[prop];
      }
    }
    modeObj.name = spec.name;
    if (spec.helperType) { modeObj.helperType = spec.helperType; }
    if (spec.modeProps) { for (var prop$1 in spec.modeProps)
      { modeObj[prop$1] = spec.modeProps[prop$1]; } }

    return modeObj
  }

  // This can be used to attach properties to mode objects from
  // outside the actual mode definition.
  var modeExtensions = {};
  function extendMode(mode, properties) {
    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
    copyObj(properties, exts);
  }

  function copyState(mode, state) {
    if (state === true) { return state }
    if (mode.copyState) { return mode.copyState(state) }
    var nstate = {};
    for (var n in state) {
      var val = state[n];
      if (val instanceof Array) { val = val.concat([]); }
      nstate[n] = val;
    }
    return nstate
  }

  // Given a mode and a state (for that mode), find the inner mode and
  // state at the position that the state refers to.
  function innerMode(mode, state) {
    var info;
    while (mode.innerMode) {
      info = mode.innerMode(state);
      if (!info || info.mode == mode) { break }
      state = info.state;
      mode = info.mode;
    }
    return info || {mode: mode, state: state}
  }

  function startState(mode, a1, a2) {
    return mode.startState ? mode.startState(a1, a2) : true
  }

  // STRING STREAM

  // Fed to the mode parsers, provides helper functions to make
  // parsers more succinct.

  var StringStream = function(string, tabSize, lineOracle) {
    this.pos = this.start = 0;
    this.string = string;
    this.tabSize = tabSize || 8;
    this.lastColumnPos = this.lastColumnValue = 0;
    this.lineStart = 0;
    this.lineOracle = lineOracle;
  };

  StringStream.prototype.eol = function () {return this.pos >= this.string.length};
  StringStream.prototype.sol = function () {return this.pos == this.lineStart};
  StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};
  StringStream.prototype.next = function () {
    if (this.pos < this.string.length)
      { return this.string.charAt(this.pos++) }
  };
  StringStream.prototype.eat = function (match) {
    var ch = this.string.charAt(this.pos);
    var ok;
    if (typeof match == "string") { ok = ch == match; }
    else { ok = ch && (match.test ? match.test(ch) : match(ch)); }
    if (ok) {++this.pos; return ch}
  };
  StringStream.prototype.eatWhile = function (match) {
    var start = this.pos;
    while (this.eat(match)){}
    return this.pos > start
  };
  StringStream.prototype.eatSpace = function () {
    var start = this.pos;
    while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }
    return this.pos > start
  };
  StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};
  StringStream.prototype.skipTo = function (ch) {
    var found = this.string.indexOf(ch, this.pos);
    if (found > -1) {this.pos = found; return true}
  };
  StringStream.prototype.backUp = function (n) {this.pos -= n;};
  StringStream.prototype.column = function () {
    if (this.lastColumnPos < this.start) {
      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
      this.lastColumnPos = this.start;
    }
    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
  };
  StringStream.prototype.indentation = function () {
    return countColumn(this.string, null, this.tabSize) -
      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
  };
  StringStream.prototype.match = function (pattern, consume, caseInsensitive) {
    if (typeof pattern == "string") {
      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };
      var substr = this.string.substr(this.pos, pattern.length);
      if (cased(substr) == cased(pattern)) {
        if (consume !== false) { this.pos += pattern.length; }
        return true
      }
    } else {
      var match = this.string.slice(this.pos).match(pattern);
      if (match && match.index > 0) { return null }
      if (match && consume !== false) { this.pos += match[0].length; }
      return match
    }
  };
  StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};
  StringStream.prototype.hideFirstChars = function (n, inner) {
    this.lineStart += n;
    try { return inner() }
    finally { this.lineStart -= n; }
  };
  StringStream.prototype.lookAhead = function (n) {
    var oracle = this.lineOracle;
    return oracle && oracle.lookAhead(n)
  };
  StringStream.prototype.baseToken = function () {
    var oracle = this.lineOracle;
    return oracle && oracle.baseToken(this.pos)
  };

  // Find the line object corresponding to the given line number.
  function getLine(doc, n) {
    n -= doc.first;
    if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") }
    var chunk = doc;
    while (!chunk.lines) {
      for (var i = 0;; ++i) {
        var child = chunk.children[i], sz = child.chunkSize();
        if (n < sz) { chunk = child; break }
        n -= sz;
      }
    }
    return chunk.lines[n]
  }

  // Get the part of a document between two positions, as an array of
  // strings.
  function getBetween(doc, start, end) {
    var out = [], n = start.line;
    doc.iter(start.line, end.line + 1, function (line) {
      var text = line.text;
      if (n == end.line) { text = text.slice(0, end.ch); }
      if (n == start.line) { text = text.slice(start.ch); }
      out.push(text);
      ++n;
    });
    return out
  }
  // Get the lines between from and to, as array of strings.
  function getLines(doc, from, to) {
    var out = [];
    doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value
    return out
  }

  // Update the height of a line, propagating the height change
  // upwards to parent nodes.
  function updateLineHeight(line, height) {
    var diff = height - line.height;
    if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }
  }

  // Given a line object, find its line number by walking up through
  // its parent links.
  function lineNo(line) {
    if (line.parent == null) { return null }
    var cur = line.parent, no = indexOf(cur.lines, line);
    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
      for (var i = 0;; ++i) {
        if (chunk.children[i] == cur) { break }
        no += chunk.children[i].chunkSize();
      }
    }
    return no + cur.first
  }

  // Find the line at the given vertical position, using the height
  // information in the document tree.
  function lineAtHeight(chunk, h) {
    var n = chunk.first;
    outer: do {
      for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {
        var child = chunk.children[i$1], ch = child.height;
        if (h < ch) { chunk = child; continue outer }
        h -= ch;
        n += child.chunkSize();
      }
      return n
    } while (!chunk.lines)
    var i = 0;
    for (; i < chunk.lines.length; ++i) {
      var line = chunk.lines[i], lh = line.height;
      if (h < lh) { break }
      h -= lh;
    }
    return n + i
  }

  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}

  function lineNumberFor(options, i) {
    return String(options.lineNumberFormatter(i + options.firstLineNumber))
  }

  // A Pos instance represents a position within the text.
  function Pos(line, ch, sticky) {
    if ( sticky === void 0 ) sticky = null;

    if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }
    this.line = line;
    this.ch = ch;
    this.sticky = sticky;
  }

  // Compare two positions, return 0 if they are the same, a negative
  // number when a is less, and a positive number otherwise.
  function cmp(a, b) { return a.line - b.line || a.ch - b.ch }

  function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }

  function copyPos(x) {return Pos(x.line, x.ch)}
  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }
  function minPos(a, b) { return cmp(a, b) < 0 ? a : b }

  // Most of the external API clips given positions to make sure they
  // actually exist within the document.
  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}
  function clipPos(doc, pos) {
    if (pos.line < doc.first) { return Pos(doc.first, 0) }
    var last = doc.first + doc.size - 1;
    if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }
    return clipToLen(pos, getLine(doc, pos.line).text.length)
  }
  function clipToLen(pos, linelen) {
    var ch = pos.ch;
    if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }
    else if (ch < 0) { return Pos(pos.line, 0) }
    else { return pos }
  }
  function clipPosArray(doc, array) {
    var out = [];
    for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }
    return out
  }

  var SavedContext = function(state, lookAhead) {
    this.state = state;
    this.lookAhead = lookAhead;
  };

  var Context = function(doc, state, line, lookAhead) {
    this.state = state;
    this.doc = doc;
    this.line = line;
    this.maxLookAhead = lookAhead || 0;
    this.baseTokens = null;
    this.baseTokenPos = 1;
  };

  Context.prototype.lookAhead = function (n) {
    var line = this.doc.getLine(this.line + n);
    if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }
    return line
  };

  Context.prototype.baseToken = function (n) {
    if (!this.baseTokens) { return null }
    while (this.baseTokens[this.baseTokenPos] <= n)
      { this.baseTokenPos += 2; }
    var type = this.baseTokens[this.baseTokenPos + 1];
    return {type: type && type.replace(/( |^)overlay .*/, ""),
            size: this.baseTokens[this.baseTokenPos] - n}
  };

  Context.prototype.nextLine = function () {
    this.line++;
    if (this.maxLookAhead > 0) { this.maxLookAhead--; }
  };

  Context.fromSaved = function (doc, saved, line) {
    if (saved instanceof SavedContext)
      { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }
    else
      { return new Context(doc, copyState(doc.mode, saved), line) }
  };

  Context.prototype.save = function (copy) {
    var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;
    return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state
  };


  // Compute a style array (an array starting with a mode generation
  // -- for invalidation -- followed by pairs of end positions and
  // style strings), which is used to highlight the tokens on the
  // line.
  function highlightLine(cm, line, context, forceToEnd) {
    // A styles array always starts with a number identifying the
    // mode/overlays that it is based on (for easy invalidation).
    var st = [cm.state.modeGen], lineClasses = {};
    // Compute the base array of styles
    runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },
            lineClasses, forceToEnd);
    var state = context.state;

    // Run overlays, adjust style array.
    var loop = function ( o ) {
      context.baseTokens = st;
      var overlay = cm.state.overlays[o], i = 1, at = 0;
      context.state = true;
      runMode(cm, line.text, overlay.mode, context, function (end, style) {
        var start = i;
        // Ensure there's a token end at the current position, and that i points at it
        while (at < end) {
          var i_end = st[i];
          if (i_end > end)
            { st.splice(i, 1, end, st[i+1], i_end); }
          i += 2;
          at = Math.min(end, i_end);
        }
        if (!style) { return }
        if (overlay.opaque) {
          st.splice(start, i - start, end, "overlay " + style);
          i = start + 2;
        } else {
          for (; start < i; start += 2) {
            var cur = st[start+1];
            st[start+1] = (cur ? cur + " " : "") + "overlay " + style;
          }
        }
      }, lineClasses);
      context.state = state;
      context.baseTokens = null;
      context.baseTokenPos = 1;
    };

    for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );

    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}
  }

  function getLineStyles(cm, line, updateFrontier) {
    if (!line.styles || line.styles[0] != cm.state.modeGen) {
      var context = getContextBefore(cm, lineNo(line));
      var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);
      var result = highlightLine(cm, line, context);
      if (resetState) { context.state = resetState; }
      line.stateAfter = context.save(!resetState);
      line.styles = result.styles;
      if (result.classes) { line.styleClasses = result.classes; }
      else if (line.styleClasses) { line.styleClasses = null; }
      if (updateFrontier === cm.doc.highlightFrontier)
        { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }
    }
    return line.styles
  }

  function getContextBefore(cm, n, precise) {
    var doc = cm.doc, display = cm.display;
    if (!doc.mode.startState) { return new Context(doc, true, n) }
    var start = findStartLine(cm, n, precise);
    var saved = start > doc.first && getLine(doc, start - 1).stateAfter;
    var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);

    doc.iter(start, n, function (line) {
      processLine(cm, line.text, context);
      var pos = context.line;
      line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;
      context.nextLine();
    });
    if (precise) { doc.modeFrontier = context.line; }
    return context
  }

  // Lightweight form of highlight -- proceed over this line and
  // update state, but don't save a style array. Used for lines that
  // aren't currently visible.
  function processLine(cm, text, context, startAt) {
    var mode = cm.doc.mode;
    var stream = new StringStream(text, cm.options.tabSize, context);
    stream.start = stream.pos = startAt || 0;
    if (text == "") { callBlankLine(mode, context.state); }
    while (!stream.eol()) {
      readToken(mode, stream, context.state);
      stream.start = stream.pos;
    }
  }

  function callBlankLine(mode, state) {
    if (mode.blankLine) { return mode.blankLine(state) }
    if (!mode.innerMode) { return }
    var inner = innerMode(mode, state);
    if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }
  }

  function readToken(mode, stream, state, inner) {
    for (var i = 0; i < 10; i++) {
      if (inner) { inner[0] = innerMode(mode, state).mode; }
      var style = mode.token(stream, state);
      if (stream.pos > stream.start) { return style }
    }
    throw new Error("Mode " + mode.name + " failed to advance stream.")
  }

  var Token = function(stream, type, state) {
    this.start = stream.start; this.end = stream.pos;
    this.string = stream.current();
    this.type = type || null;
    this.state = state;
  };

  // Utility for getTokenAt and getLineTokens
  function takeToken(cm, pos, precise, asArray) {
    var doc = cm.doc, mode = doc.mode, style;
    pos = clipPos(doc, pos);
    var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);
    var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;
    if (asArray) { tokens = []; }
    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {
      stream.start = stream.pos;
      style = readToken(mode, stream, context.state);
      if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }
    }
    return asArray ? tokens : new Token(stream, style, context.state)
  }

  function extractLineClasses(type, output) {
    if (type) { for (;;) {
      var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/);
      if (!lineClass) { break }
      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);
      var prop = lineClass[1] ? "bgClass" : "textClass";
      if (output[prop] == null)
        { output[prop] = lineClass[2]; }
      else if (!(new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)")).test(output[prop]))
        { output[prop] += " " + lineClass[2]; }
    } }
    return type
  }

  // Run the given mode's parser over a line, calling f for each token.
  function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {
    var flattenSpans = mode.flattenSpans;
    if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }
    var curStart = 0, curStyle = null;
    var stream = new StringStream(text, cm.options.tabSize, context), style;
    var inner = cm.options.addModeClass && [null];
    if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }
    while (!stream.eol()) {
      if (stream.pos > cm.options.maxHighlightLength) {
        flattenSpans = false;
        if (forceToEnd) { processLine(cm, text, context, stream.pos); }
        stream.pos = text.length;
        style = null;
      } else {
        style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);
      }
      if (inner) {
        var mName = inner[0].name;
        if (mName) { style = "m-" + (style ? mName + " " + style : mName); }
      }
      if (!flattenSpans || curStyle != style) {
        while (curStart < stream.start) {
          curStart = Math.min(stream.start, curStart + 5000);
          f(curStart, curStyle);
        }
        curStyle = style;
      }
      stream.start = stream.pos;
    }
    while (curStart < stream.pos) {
      // Webkit seems to refuse to render text nodes longer than 57444
      // characters, and returns inaccurate measurements in nodes
      // starting around 5000 chars.
      var pos = Math.min(stream.pos, curStart + 5000);
      f(pos, curStyle);
      curStart = pos;
    }
  }

  // Finds the line to start with when starting a parse. Tries to
  // find a line with a stateAfter, so that it can start with a
  // valid state. If that fails, it returns the line with the
  // smallest indentation, which tends to need the least context to
  // parse correctly.
  function findStartLine(cm, n, precise) {
    var minindent, minline, doc = cm.doc;
    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);
    for (var search = n; search > lim; --search) {
      if (search <= doc.first) { return doc.first }
      var line = getLine(doc, search - 1), after = line.stateAfter;
      if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))
        { return search }
      var indented = countColumn(line.text, null, cm.options.tabSize);
      if (minline == null || minindent > indented) {
        minline = search - 1;
        minindent = indented;
      }
    }
    return minline
  }

  function retreatFrontier(doc, n) {
    doc.modeFrontier = Math.min(doc.modeFrontier, n);
    if (doc.highlightFrontier < n - 10) { return }
    var start = doc.first;
    for (var line = n - 1; line > start; line--) {
      var saved = getLine(doc, line).stateAfter;
      // change is on 3
      // state on line 1 looked ahead 2 -- so saw 3
      // test 1 + 2 < 3 should cover this
      if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {
        start = line + 1;
        break
      }
    }
    doc.highlightFrontier = Math.min(doc.highlightFrontier, start);
  }

  // Optimize some code when these features are not used.
  var sawReadOnlySpans = false, sawCollapsedSpans = false;

  function seeReadOnlySpans() {
    sawReadOnlySpans = true;
  }

  function seeCollapsedSpans() {
    sawCollapsedSpans = true;
  }

  // TEXTMARKER SPANS

  function MarkedSpan(marker, from, to) {
    this.marker = marker;
    this.from = from; this.to = to;
  }

  // Search an array of spans for a span matching the given marker.
  function getMarkedSpanFor(spans, marker) {
    if (spans) { for (var i = 0; i < spans.length; ++i) {
      var span = spans[i];
      if (span.marker == marker) { return span }
    } }
  }
  // Remove a span from an array, returning undefined if no spans are
  // left (we don't store arrays for lines without spans).
  function removeMarkedSpan(spans, span) {
    var r;
    for (var i = 0; i < spans.length; ++i)
      { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }
    return r
  }
  // Add a span to a line.
  function addMarkedSpan(line, span) {
    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
    span.marker.attachLine(line);
  }

  // Used for the algorithm that adjusts markers for a change in the
  // document. These functions cut an array of spans at a given
  // character position, returning an array of remaining chunks (or
  // undefined if nothing remains).
  function markedSpansBefore(old, startCh, isInsert) {
    var nw;
    if (old) { for (var i = 0; i < old.length; ++i) {
      var span = old[i], marker = span.marker;
      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);
      if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) {
        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)
        ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));
      }
    } }
    return nw
  }
  function markedSpansAfter(old, endCh, isInsert) {
    var nw;
    if (old) { for (var i = 0; i < old.length; ++i) {
      var span = old[i], marker = span.marker;
      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);
      if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) {
        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)
        ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,
                                              span.to == null ? null : span.to - endCh));
      }
    } }
    return nw
  }

  // Given a change object, compute the new set of marker spans that
  // cover the line in which the change took place. Removes spans
  // entirely within the change, reconnects spans belonging to the
  // same marker that appear on both sides of the change, and cuts off
  // spans partially within the change. Returns an array of span
  // arrays with one element for each line in (after) the change.
  function stretchSpansOverChange(doc, change) {
    if (change.full) { return null }
    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;
    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;
    if (!oldFirst && !oldLast) { return null }

    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;
    // Get the spans that 'stick out' on both sides
    var first = markedSpansBefore(oldFirst, startCh, isInsert);
    var last = markedSpansAfter(oldLast, endCh, isInsert);

    // Next, merge those two ends
    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);
    if (first) {
      // Fix up .to properties of first
      for (var i = 0; i < first.length; ++i) {
        var span = first[i];
        if (span.to == null) {
          var found = getMarkedSpanFor(last, span.marker);
          if (!found) { span.to = startCh; }
          else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }
        }
      }
    }
    if (last) {
      // Fix up .from in last (or move them into first in case of sameLine)
      for (var i$1 = 0; i$1 < last.length; ++i$1) {
        var span$1 = last[i$1];
        if (span$1.to != null) { span$1.to += offset; }
        if (span$1.from == null) {
          var found$1 = getMarkedSpanFor(first, span$1.marker);
          if (!found$1) {
            span$1.from = offset;
            if (sameLine) { (first || (first = [])).push(span$1); }
          }
        } else {
          span$1.from += offset;
          if (sameLine) { (first || (first = [])).push(span$1); }
        }
      }
    }
    // Make sure we didn't create any zero-length spans
    if (first) { first = clearEmptySpans(first); }
    if (last && last != first) { last = clearEmptySpans(last); }

    var newMarkers = [first];
    if (!sameLine) {
      // Fill gap with whole-line-spans
      var gap = change.text.length - 2, gapMarkers;
      if (gap > 0 && first)
        { for (var i$2 = 0; i$2 < first.length; ++i$2)
          { if (first[i$2].to == null)
            { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }
      for (var i$3 = 0; i$3 < gap; ++i$3)
        { newMarkers.push(gapMarkers); }
      newMarkers.push(last);
    }
    return newMarkers
  }

  // Remove spans that are empty and don't have a clearWhenEmpty
  // option of false.
  function clearEmptySpans(spans) {
    for (var i = 0; i < spans.length; ++i) {
      var span = spans[i];
      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)
        { spans.splice(i--, 1); }
    }
    if (!spans.length) { return null }
    return spans
  }

  // Used to 'clip' out readOnly ranges when making a change.
  function removeReadOnlyRanges(doc, from, to) {
    var markers = null;
    doc.iter(from.line, to.line + 1, function (line) {
      if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
        var mark = line.markedSpans[i].marker;
        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
          { (markers || (markers = [])).push(mark); }
      } }
    });
    if (!markers) { return null }
    var parts = [{from: from, to: to}];
    for (var i = 0; i < markers.length; ++i) {
      var mk = markers[i], m = mk.find(0);
      for (var j = 0; j < parts.length; ++j) {
        var p = parts[j];
        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }
        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);
        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)
          { newParts.push({from: p.from, to: m.from}); }
        if (dto > 0 || !mk.inclusiveRight && !dto)
          { newParts.push({from: m.to, to: p.to}); }
        parts.splice.apply(parts, newParts);
        j += newParts.length - 3;
      }
    }
    return parts
  }

  // Connect or disconnect spans from a line.
  function detachMarkedSpans(line) {
    var spans = line.markedSpans;
    if (!spans) { return }
    for (var i = 0; i < spans.length; ++i)
      { spans[i].marker.detachLine(line); }
    line.markedSpans = null;
  }
  function attachMarkedSpans(line, spans) {
    if (!spans) { return }
    for (var i = 0; i < spans.length; ++i)
      { spans[i].marker.attachLine(line); }
    line.markedSpans = spans;
  }

  // Helpers used when computing which overlapping collapsed span
  // counts as the larger one.
  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }
  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }

  // Returns a number indicating which of two overlapping collapsed
  // spans is larger (and thus includes the other). Falls back to
  // comparing ids when the spans cover exactly the same range.
  function compareCollapsedMarkers(a, b) {
    var lenDiff = a.lines.length - b.lines.length;
    if (lenDiff != 0) { return lenDiff }
    var aPos = a.find(), bPos = b.find();
    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);
    if (fromCmp) { return -fromCmp }
    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);
    if (toCmp) { return toCmp }
    return b.id - a.id
  }

  // Find out whether a line ends or starts in a collapsed span. If
  // so, return the marker for that span.
  function collapsedSpanAtSide(line, start) {
    var sps = sawCollapsedSpans && line.markedSpans, found;
    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
      sp = sps[i];
      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&
          (!found || compareCollapsedMarkers(found, sp.marker) < 0))
        { found = sp.marker; }
    } }
    return found
  }
  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }
  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }

  function collapsedSpanAround(line, ch) {
    var sps = sawCollapsedSpans && line.markedSpans, found;
    if (sps) { for (var i = 0; i < sps.length; ++i) {
      var sp = sps[i];
      if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&
          (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }
    } }
    return found
  }

  // Test whether there exists a collapsed span that partially
  // overlaps (covers the start or end, but not both) of a new span.
  // Such overlap is not allowed.
  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
    var line = getLine(doc, lineNo);
    var sps = sawCollapsedSpans && line.markedSpans;
    if (sps) { for (var i = 0; i < sps.length; ++i) {
      var sp = sps[i];
      if (!sp.marker.collapsed) { continue }
      var found = sp.marker.find(0);
      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);
      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);
      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }
      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||
          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))
        { return true }
    } }
  }

  // A visual line is a line as drawn on the screen. Folding, for
  // example, can cause multiple logical lines to appear on the same
  // visual line. This finds the start of the visual line that the
  // given line is part of (usually that is the line itself).
  function visualLine(line) {
    var merged;
    while (merged = collapsedSpanAtStart(line))
      { line = merged.find(-1, true).line; }
    return line
  }

  function visualLineEnd(line) {
    var merged;
    while (merged = collapsedSpanAtEnd(line))
      { line = merged.find(1, true).line; }
    return line
  }

  // Returns an array of logical lines that continue the visual line
  // started by the argument, or undefined if there are no such lines.
  function visualLineContinued(line) {
    var merged, lines;
    while (merged = collapsedSpanAtEnd(line)) {
      line = merged.find(1, true).line
      ;(lines || (lines = [])).push(line);
    }
    return lines
  }

  // Get the line number of the start of the visual line that the
  // given line number is part of.
  function visualLineNo(doc, lineN) {
    var line = getLine(doc, lineN), vis = visualLine(line);
    if (line == vis) { return lineN }
    return lineNo(vis)
  }

  // Get the line number of the start of the next visual line after
  // the given line.
  function visualLineEndNo(doc, lineN) {
    if (lineN > doc.lastLine()) { return lineN }
    var line = getLine(doc, lineN), merged;
    if (!lineIsHidden(doc, line)) { return lineN }
    while (merged = collapsedSpanAtEnd(line))
      { line = merged.find(1, true).line; }
    return lineNo(line) + 1
  }

  // Compute whether a line is hidden. Lines count as hidden when they
  // are part of a visual line that starts with another line, or when
  // they are entirely covered by collapsed, non-widget span.
  function lineIsHidden(doc, line) {
    var sps = sawCollapsedSpans && line.markedSpans;
    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
      sp = sps[i];
      if (!sp.marker.collapsed) { continue }
      if (sp.from == null) { return true }
      if (sp.marker.widgetNode) { continue }
      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
        { return true }
    } }
  }
  function lineIsHiddenInner(doc, line, span) {
    if (span.to == null) {
      var end = span.marker.find(1, true);
      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))
    }
    if (span.marker.inclusiveRight && span.to == line.text.length)
      { return true }
    for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {
      sp = line.markedSpans[i];
      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&
          (sp.to == null || sp.to != span.from) &&
          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
          lineIsHiddenInner(doc, line, sp)) { return true }
    }
  }

  // Find the height above the given line.
  function heightAtLine(lineObj) {
    lineObj = visualLine(lineObj);

    var h = 0, chunk = lineObj.parent;
    for (var i = 0; i < chunk.lines.length; ++i) {
      var line = chunk.lines[i];
      if (line == lineObj) { break }
      else { h += line.height; }
    }
    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {
      for (var i$1 = 0; i$1 < p.children.length; ++i$1) {
        var cur = p.children[i$1];
        if (cur == chunk) { break }
        else { h += cur.height; }
      }
    }
    return h
  }

  // Compute the character length of a line, taking into account
  // collapsed ranges (see markText) that might hide parts, and join
  // other lines onto it.
  function lineLength(line) {
    if (line.height == 0) { return 0 }
    var len = line.text.length, merged, cur = line;
    while (merged = collapsedSpanAtStart(cur)) {
      var found = merged.find(0, true);
      cur = found.from.line;
      len += found.from.ch - found.to.ch;
    }
    cur = line;
    while (merged = collapsedSpanAtEnd(cur)) {
      var found$1 = merged.find(0, true);
      len -= cur.text.length - found$1.from.ch;
      cur = found$1.to.line;
      len += cur.text.length - found$1.to.ch;
    }
    return len
  }

  // Find the longest line in the document.
  function findMaxLine(cm) {
    var d = cm.display, doc = cm.doc;
    d.maxLine = getLine(doc, doc.first);
    d.maxLineLength = lineLength(d.maxLine);
    d.maxLineChanged = true;
    doc.iter(function (line) {
      var len = lineLength(line);
      if (len > d.maxLineLength) {
        d.maxLineLength = len;
        d.maxLine = line;
      }
    });
  }

  // LINE DATA STRUCTURE

  // Line objects. These hold state related to a line, including
  // highlighting info (the styles array).
  var Line = function(text, markedSpans, estimateHeight) {
    this.text = text;
    attachMarkedSpans(this, markedSpans);
    this.height = estimateHeight ? estimateHeight(this) : 1;
  };

  Line.prototype.lineNo = function () { return lineNo(this) };
  eventMixin(Line);

  // Change the content (text, markers) of a line. Automatically
  // invalidates cached information and tries to re-estimate the
  // line's height.
  function updateLine(line, text, markedSpans, estimateHeight) {
    line.text = text;
    if (line.stateAfter) { line.stateAfter = null; }
    if (line.styles) { line.styles = null; }
    if (line.order != null) { line.order = null; }
    detachMarkedSpans(line);
    attachMarkedSpans(line, markedSpans);
    var estHeight = estimateHeight ? estimateHeight(line) : 1;
    if (estHeight != line.height) { updateLineHeight(line, estHeight); }
  }

  // Detach a line from the document tree and its markers.
  function cleanUpLine(line) {
    line.parent = null;
    detachMarkedSpans(line);
  }

  // Convert a style as returned by a mode (either null, or a string
  // containing one or more styles) to a CSS style. This is cached,
  // and also looks for line-wide styles.
  var styleToClassCache = {}, styleToClassCacheWithMode = {};
  function interpretTokenStyle(style, options) {
    if (!style || /^\s*$/.test(style)) { return null }
    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;
    return cache[style] ||
      (cache[style] = style.replace(/\S+/g, "cm-$&"))
  }

  // Render the DOM representation of the text of a line. Also builds
  // up a 'line map', which points at the DOM nodes that represent
  // specific stretches of text, and is used by the measuring code.
  // The returned object contains the DOM node, this map, and
  // information about line-wide styles that were set by the mode.
  function buildLineContent(cm, lineView) {
    // The padding-right forces the element to have a 'border', which
    // is needed on Webkit to be able to get line-level bounding
    // rectangles for it (in measureChar).
    var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null);
    var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content,
                   col: 0, pos: 0, cm: cm,
                   trailingSpace: false,
                   splitSpaces: cm.getOption("lineWrapping")};
    lineView.measure = {};

    // Iterate over the logical lines that make up this visual line.
    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {
      var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);
      builder.pos = 0;
      builder.addToken = buildToken;
      // Optionally wire in some hacks into the token-rendering
      // algorithm, to deal with browser quirks.
      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))
        { builder.addToken = buildTokenBadBidi(builder.addToken, order); }
      builder.map = [];
      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);
      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));
      if (line.styleClasses) {
        if (line.styleClasses.bgClass)
          { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); }
        if (line.styleClasses.textClass)
          { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); }
      }

      // Ensure at least a single node is present, for measuring.
      if (builder.map.length == 0)
        { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }

      // Store the map and a cache object for the current logical line
      if (i == 0) {
        lineView.measure.map = builder.map;
        lineView.measure.cache = {};
      } else {
  (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)
        ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});
      }
    }

    // See issue #2901
    if (webkit) {
      var last = builder.content.lastChild;
      if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab")))
        { builder.content.className = "cm-tab-wrap-hack"; }
    }

    signal(cm, "renderLine", cm, lineView.line, builder.pre);
    if (builder.pre.className)
      { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); }

    return builder
  }

  function defaultSpecialCharPlaceholder(ch) {
    var token = elt("span", "\u2022", "cm-invalidchar");
    token.title = "\\u" + ch.charCodeAt(0).toString(16);
    token.setAttribute("aria-label", token.title);
    return token
  }

  // Build up the DOM representation for a single token, and add it to
  // the line map. Takes care to render special characters separately.
  function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {
    if (!text) { return }
    var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;
    var special = builder.cm.state.specialChars, mustWrap = false;
    var content;
    if (!special.test(text)) {
      builder.col += text.length;
      content = document.createTextNode(displayText);
      builder.map.push(builder.pos, builder.pos + text.length, content);
      if (ie && ie_version < 9) { mustWrap = true; }
      builder.pos += text.length;
    } else {
      content = document.createDocumentFragment();
      var pos = 0;
      while (true) {
        special.lastIndex = pos;
        var m = special.exec(text);
        var skipped = m ? m.index - pos : text.length - pos;
        if (skipped) {
          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));
          if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); }
          else { content.appendChild(txt); }
          builder.map.push(builder.pos, builder.pos + skipped, txt);
          builder.col += skipped;
          builder.pos += skipped;
        }
        if (!m) { break }
        pos += skipped + 1;
        var txt$1 = (void 0);
        if (m[0] == "\t") {
          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;
          txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"));
          txt$1.setAttribute("role", "presentation");
          txt$1.setAttribute("cm-text", "\t");
          builder.col += tabWidth;
        } else if (m[0] == "\r" || m[0] == "\n") {
          txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar"));
          txt$1.setAttribute("cm-text", m[0]);
          builder.col += 1;
        } else {
          txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);
          txt$1.setAttribute("cm-text", m[0]);
          if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); }
          else { content.appendChild(txt$1); }
          builder.col += 1;
        }
        builder.map.push(builder.pos, builder.pos + 1, txt$1);
        builder.pos++;
      }
    }
    builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;
    if (style || startStyle || endStyle || mustWrap || css || attributes) {
      var fullStyle = style || "";
      if (startStyle) { fullStyle += startStyle; }
      if (endStyle) { fullStyle += endStyle; }
      var token = elt("span", [content], fullStyle, css);
      if (attributes) {
        for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class")
          { token.setAttribute(attr, attributes[attr]); } }
      }
      return builder.content.appendChild(token)
    }
    builder.content.appendChild(content);
  }

  // Change some spaces to NBSP to prevent the browser from collapsing
  // trailing spaces at the end of a line when rendering text (issue #1362).
  function splitSpaces(text, trailingBefore) {
    if (text.length > 1 && !/  /.test(text)) { return text }
    var spaceBefore = trailingBefore, result = "";
    for (var i = 0; i < text.length; i++) {
      var ch = text.charAt(i);
      if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))
        { ch = "\u00a0"; }
      result += ch;
      spaceBefore = ch == " ";
    }
    return result
  }

  // Work around nonsense dimensions being reported for stretches of
  // right-to-left text.
  function buildTokenBadBidi(inner, order) {
    return function (builder, text, style, startStyle, endStyle, css, attributes) {
      style = style ? style + " cm-force-border" : "cm-force-border";
      var start = builder.pos, end = start + text.length;
      for (;;) {
        // Find the part that overlaps with the start of this text
        var part = (void 0);
        for (var i = 0; i < order.length; i++) {
          part = order[i];
          if (part.to > start && part.from <= start) { break }
        }
        if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }
        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);
        startStyle = null;
        text = text.slice(part.to - start);
        start = part.to;
      }
    }
  }

  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
    var widget = !ignoreWidget && marker.widgetNode;
    if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }
    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {
      if (!widget)
        { widget = builder.content.appendChild(document.createElement("span")); }
      widget.setAttribute("cm-marker", marker.id);
    }
    if (widget) {
      builder.cm.display.input.setUneditable(widget);
      builder.content.appendChild(widget);
    }
    builder.pos += size;
    builder.trailingSpace = false;
  }

  // Outputs a number of spans to make up a line, taking highlighting
  // and marked text into account.
  function insertLineContent(line, builder, styles) {
    var spans = line.markedSpans, allText = line.text, at = 0;
    if (!spans) {
      for (var i$1 = 1; i$1 < styles.length; i$1+=2)
        { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }
      return
    }

    var len = allText.length, pos = 0, i = 1, text = "", style, css;
    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;
    for (;;) {
      if (nextChange == pos) { // Update current marker set
        spanStyle = spanEndStyle = spanStartStyle = css = "";
        attributes = null;
        collapsed = null; nextChange = Infinity;
        var foundBookmarks = [], endStyles = (void 0);
        for (var j = 0; j < spans.length; ++j) {
          var sp = spans[j], m = sp.marker;
          if (m.type == "bookmark" && sp.from == pos && m.widgetNode) {
            foundBookmarks.push(m);
          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {
            if (sp.to != null && sp.to != pos && nextChange > sp.to) {
              nextChange = sp.to;
              spanEndStyle = "";
            }
            if (m.className) { spanStyle += " " + m.className; }
            if (m.css) { css = (css ? css + ";" : "") + m.css; }
            if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; }
            if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }
            // support for the old title property
            // https://github.com/codemirror/CodeMirror/pull/5673
            if (m.title) { (attributes || (attributes = {})).title = m.title; }
            if (m.attributes) {
              for (var attr in m.attributes)
                { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }
            }
            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))
              { collapsed = sp; }
          } else if (sp.from > pos && nextChange > sp.from) {
            nextChange = sp.from;
          }
        }
        if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)
          { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } }

        if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)
          { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }
        if (collapsed && (collapsed.from || 0) == pos) {
          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,
                             collapsed.marker, collapsed.from == null);
          if (collapsed.to == null) { return }
          if (collapsed.to == pos) { collapsed = false; }
        }
      }
      if (pos >= len) { break }

      var upto = Math.min(len, nextChange);
      while (true) {
        if (text) {
          var end = pos + text.length;
          if (!collapsed) {
            var tokenText = end > upto ? text.slice(0, upto - pos) : text;
            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes);
          }
          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}
          pos = end;
          spanStartStyle = "";
        }
        text = allText.slice(at, at = styles[i++]);
        style = interpretTokenStyle(styles[i++], builder.cm.options);
      }
    }
  }


  // These objects are used to represent the visible (currently drawn)
  // part of the document. A LineView may correspond to multiple
  // logical lines, if those are connected by collapsed ranges.
  function LineView(doc, line, lineN) {
    // The starting line
    this.line = line;
    // Continuing lines, if any
    this.rest = visualLineContinued(line);
    // Number of logical lines in this visual line
    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;
    this.node = this.text = null;
    this.hidden = lineIsHidden(doc, line);
  }

  // Create a range of LineView objects for the given lines.
  function buildViewArray(cm, from, to) {
    var array = [], nextPos;
    for (var pos = from; pos < to; pos = nextPos) {
      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);
      nextPos = pos + view.size;
      array.push(view);
    }
    return array
  }

  var operationGroup = null;

  function pushOperation(op) {
    if (operationGroup) {
      operationGroup.ops.push(op);
    } else {
      op.ownsGroup = operationGroup = {
        ops: [op],
        delayedCallbacks: []
      };
    }
  }

  function fireCallbacksForOps(group) {
    // Calls delayed callbacks and cursorActivity handlers until no
    // new ones appear
    var callbacks = group.delayedCallbacks, i = 0;
    do {
      for (; i < callbacks.length; i++)
        { callbacks[i].call(null); }
      for (var j = 0; j < group.ops.length; j++) {
        var op = group.ops[j];
        if (op.cursorActivityHandlers)
          { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)
            { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }
      }
    } while (i < callbacks.length)
  }

  function finishOperation(op, endCb) {
    var group = op.ownsGroup;
    if (!group) { return }

    try { fireCallbacksForOps(group); }
    finally {
      operationGroup = null;
      endCb(group);
    }
  }

  var orphanDelayedCallbacks = null;

  // Often, we want to signal events at a point where we are in the
  // middle of some work, but don't want the handler to start calling
  // other methods on the editor, which might be in an inconsistent
  // state or simply not expect any other events to happen.
  // signalLater looks whether there are any handlers, and schedules
  // them to be executed when the last operation ends, or, if no
  // operation is active, when a timeout fires.
  function signalLater(emitter, type /*, values...*/) {
    var arr = getHandlers(emitter, type);
    if (!arr.length) { return }
    var args = Array.prototype.slice.call(arguments, 2), list;
    if (operationGroup) {
      list = operationGroup.delayedCallbacks;
    } else if (orphanDelayedCallbacks) {
      list = orphanDelayedCallbacks;
    } else {
      list = orphanDelayedCallbacks = [];
      setTimeout(fireOrphanDelayed, 0);
    }
    var loop = function ( i ) {
      list.push(function () { return arr[i].apply(null, args); });
    };

    for (var i = 0; i < arr.length; ++i)
      loop( i );
  }

  function fireOrphanDelayed() {
    var delayed = orphanDelayedCallbacks;
    orphanDelayedCallbacks = null;
    for (var i = 0; i < delayed.length; ++i) { delayed[i](); }
  }

  // When an aspect of a line changes, a string is added to
  // lineView.changes. This updates the relevant part of the line's
  // DOM structure.
  function updateLineForChanges(cm, lineView, lineN, dims) {
    for (var j = 0; j < lineView.changes.length; j++) {
      var type = lineView.changes[j];
      if (type == "text") { updateLineText(cm, lineView); }
      else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); }
      else if (type == "class") { updateLineClasses(cm, lineView); }
      else if (type == "widget") { updateLineWidgets(cm, lineView, dims); }
    }
    lineView.changes = null;
  }

  // Lines with gutter elements, widgets or a background class need to
  // be wrapped, and have the extra elements added to the wrapper div
  function ensureLineWrapped(lineView) {
    if (lineView.node == lineView.text) {
      lineView.node = elt("div", null, null, "position: relative");
      if (lineView.text.parentNode)
        { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }
      lineView.node.appendChild(lineView.text);
      if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }
    }
    return lineView.node
  }

  function updateLineBackground(cm, lineView) {
    var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass;
    if (cls) { cls += " CodeMirror-linebackground"; }
    if (lineView.background) {
      if (cls) { lineView.background.className = cls; }
      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }
    } else if (cls) {
      var wrap = ensureLineWrapped(lineView);
      lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild);
      cm.display.input.setUneditable(lineView.background);
    }
  }

  // Wrapper around buildLineContent which will reuse the structure
  // in display.externalMeasured when possible.
  function getLineContent(cm, lineView) {
    var ext = cm.display.externalMeasured;
    if (ext && ext.line == lineView.line) {
      cm.display.externalMeasured = null;
      lineView.measure = ext.measure;
      return ext.built
    }
    return buildLineContent(cm, lineView)
  }

  // Redraw the line's text. Interacts with the background and text
  // classes because the mode may output tokens that influence these
  // classes.
  function updateLineText(cm, lineView) {
    var cls = lineView.text.className;
    var built = getLineContent(cm, lineView);
    if (lineView.text == lineView.node) { lineView.node = built.pre; }
    lineView.text.parentNode.replaceChild(built.pre, lineView.text);
    lineView.text = built.pre;
    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
      lineView.bgClass = built.bgClass;
      lineView.textClass = built.textClass;
      updateLineClasses(cm, lineView);
    } else if (cls) {
      lineView.text.className = cls;
    }
  }

  function updateLineClasses(cm, lineView) {
    updateLineBackground(cm, lineView);
    if (lineView.line.wrapClass)
      { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }
    else if (lineView.node != lineView.text)
      { lineView.node.className = ""; }
    var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass;
    lineView.text.className = textClass || "";
  }

  function updateLineGutter(cm, lineView, lineN, dims) {
    if (lineView.gutter) {
      lineView.node.removeChild(lineView.gutter);
      lineView.gutter = null;
    }
    if (lineView.gutterBackground) {
      lineView.node.removeChild(lineView.gutterBackground);
      lineView.gutterBackground = null;
    }
    if (lineView.line.gutterClass) {
      var wrap = ensureLineWrapped(lineView);
      lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass,
                                      ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px"));
      cm.display.input.setUneditable(lineView.gutterBackground);
      wrap.insertBefore(lineView.gutterBackground, lineView.text);
    }
    var markers = lineView.line.gutterMarkers;
    if (cm.options.lineNumbers || markers) {
      var wrap$1 = ensureLineWrapped(lineView);
      var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"));
      cm.display.input.setUneditable(gutterWrap);
      wrap$1.insertBefore(gutterWrap, lineView.text);
      if (lineView.line.gutterClass)
        { gutterWrap.className += " " + lineView.line.gutterClass; }
      if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
        { lineView.lineNumber = gutterWrap.appendChild(
          elt("div", lineNumberFor(cm.options, lineN),
              "CodeMirror-linenumber CodeMirror-gutter-elt",
              ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); }
      if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {
        var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];
        if (found)
          { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt",
                                     ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); }
      } }
    }
  }

  function updateLineWidgets(cm, lineView, dims) {
    if (lineView.alignable) { lineView.alignable = null; }
    var isWidget = classTest("CodeMirror-linewidget");
    for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {
      next = node.nextSibling;
      if (isWidget.test(node.className)) { lineView.node.removeChild(node); }
    }
    insertLineWidgets(cm, lineView, dims);
  }

  // Build a line's DOM representation from scratch
  function buildLineElement(cm, lineView, lineN, dims) {
    var built = getLineContent(cm, lineView);
    lineView.text = lineView.node = built.pre;
    if (built.bgClass) { lineView.bgClass = built.bgClass; }
    if (built.textClass) { lineView.textClass = built.textClass; }

    updateLineClasses(cm, lineView);
    updateLineGutter(cm, lineView, lineN, dims);
    insertLineWidgets(cm, lineView, dims);
    return lineView.node
  }

  // A lineView may contain multiple logical lines (when merged by
  // collapsed spans). The widgets for all of them need to be drawn.
  function insertLineWidgets(cm, lineView, dims) {
    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);
    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
      { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }
  }

  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
    if (!line.widgets) { return }
    var wrap = ensureLineWrapped(lineView);
    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
      var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : ""));
      if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); }
      positionLineWidget(widget, node, lineView, dims);
      cm.display.input.setUneditable(node);
      if (allowAbove && widget.above)
        { wrap.insertBefore(node, lineView.gutter || lineView.text); }
      else
        { wrap.appendChild(node); }
      signalLater(widget, "redraw");
    }
  }

  function positionLineWidget(widget, node, lineView, dims) {
    if (widget.noHScroll) {
  (lineView.alignable || (lineView.alignable = [])).push(node);
      var width = dims.wrapperWidth;
      node.style.left = dims.fixedPos + "px";
      if (!widget.coverGutter) {
        width -= dims.gutterTotalWidth;
        node.style.paddingLeft = dims.gutterTotalWidth + "px";
      }
      node.style.width = width + "px";
    }
    if (widget.coverGutter) {
      node.style.zIndex = 5;
      node.style.position = "relative";
      if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; }
    }
  }

  function widgetHeight(widget) {
    if (widget.height != null) { return widget.height }
    var cm = widget.doc.cm;
    if (!cm) { return 0 }
    if (!contains(document.body, widget.node)) {
      var parentStyle = "position: relative;";
      if (widget.coverGutter)
        { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; }
      if (widget.noHScroll)
        { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; }
      removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle));
    }
    return widget.height = widget.node.parentNode.offsetHeight
  }

  // Return true when the given mouse event happened in a widget
  function eventInWidget(display, e) {
    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
      if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") ||
          (n.parentNode == display.sizer && n != display.mover))
        { return true }
    }
  }

  // POSITION MEASUREMENT

  function paddingTop(display) {return display.lineSpace.offsetTop}
  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}
  function paddingH(display) {
    if (display.cachedPaddingH) { return display.cachedPaddingH }
    var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like"));
    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;
    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};
    if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }
    return data
  }

  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }
  function displayWidth(cm) {
    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth
  }
  function displayHeight(cm) {
    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight
  }

  // Ensure the lineView.wrapping.heights array is populated. This is
  // an array of bottom offsets for the lines that make up a drawn
  // line. When lineWrapping is on, there might be more than one
  // height.
  function ensureLineHeights(cm, lineView, rect) {
    var wrapping = cm.options.lineWrapping;
    var curWidth = wrapping && displayWidth(cm);
    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
      var heights = lineView.measure.heights = [];
      if (wrapping) {
        lineView.measure.width = curWidth;
        var rects = lineView.text.firstChild.getClientRects();
        for (var i = 0; i < rects.length - 1; i++) {
          var cur = rects[i], next = rects[i + 1];
          if (Math.abs(cur.bottom - next.bottom) > 2)
            { heights.push((cur.bottom + next.top) / 2 - rect.top); }
        }
      }
      heights.push(rect.bottom - rect.top);
    }
  }

  // Find a line map (mapping character offsets to text nodes) and a
  // measurement cache for the given line number. (A line view might
  // contain multiple lines when collapsed ranges are present.)
  function mapFromLineView(lineView, line, lineN) {
    if (lineView.line == line)
      { return {map: lineView.measure.map, cache: lineView.measure.cache} }
    for (var i = 0; i < lineView.rest.length; i++)
      { if (lineView.rest[i] == line)
        { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }
    for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)
      { if (lineNo(lineView.rest[i$1]) > lineN)
        { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }
  }

  // Render a line into the hidden node display.externalMeasured. Used
  // when measurement is needed for a line that's not in the viewport.
  function updateExternalMeasurement(cm, line) {
    line = visualLine(line);
    var lineN = lineNo(line);
    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);
    view.lineN = lineN;
    var built = view.built = buildLineContent(cm, view);
    view.text = built.pre;
    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);
    return view
  }

  // Get a {top, bottom, left, right} box (in line-local coordinates)
  // for a given character.
  function measureChar(cm, line, ch, bias) {
    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)
  }

  // Find a line view that corresponds to the given line number.
  function findViewForLine(cm, lineN) {
    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)
      { return cm.display.view[findViewIndex(cm, lineN)] }
    var ext = cm.display.externalMeasured;
    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)
      { return ext }
  }

  // Measurement can be split in two steps, the set-up work that
  // applies to the whole line, and the measurement of the actual
  // character. Functions like coordsChar, that need to do a lot of
  // measurements in a row, can thus ensure that the set-up work is
  // only done once.
  function prepareMeasureForLine(cm, line) {
    var lineN = lineNo(line);
    var view = findViewForLine(cm, lineN);
    if (view && !view.text) {
      view = null;
    } else if (view && view.changes) {
      updateLineForChanges(cm, view, lineN, getDimensions(cm));
      cm.curOp.forceUpdate = true;
    }
    if (!view)
      { view = updateExternalMeasurement(cm, line); }

    var info = mapFromLineView(view, line, lineN);
    return {
      line: line, view: view, rect: null,
      map: info.map, cache: info.cache, before: info.before,
      hasHeights: false
    }
  }

  // Given a prepared measurement object, measures the position of an
  // actual character (or fetches it from the cache).
  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
    if (prepared.before) { ch = -1; }
    var key = ch + (bias || ""), found;
    if (prepared.cache.hasOwnProperty(key)) {
      found = prepared.cache[key];
    } else {
      if (!prepared.rect)
        { prepared.rect = prepared.view.text.getBoundingClientRect(); }
      if (!prepared.hasHeights) {
        ensureLineHeights(cm, prepared.view, prepared.rect);
        prepared.hasHeights = true;
      }
      found = measureCharInner(cm, prepared, ch, bias);
      if (!found.bogus) { prepared.cache[key] = found; }
    }
    return {left: found.left, right: found.right,
            top: varHeight ? found.rtop : found.top,
            bottom: varHeight ? found.rbottom : found.bottom}
  }

  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};

  function nodeAndOffsetInLineMap(map, ch, bias) {
    var node, start, end, collapse, mStart, mEnd;
    // First, search the line map for the text node corresponding to,
    // or closest to, the target character.
    for (var i = 0; i < map.length; i += 3) {
      mStart = map[i];
      mEnd = map[i + 1];
      if (ch < mStart) {
        start = 0; end = 1;
        collapse = "left";
      } else if (ch < mEnd) {
        start = ch - mStart;
        end = start + 1;
      } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {
        end = mEnd - mStart;
        start = end - 1;
        if (ch >= mEnd) { collapse = "right"; }
      }
      if (start != null) {
        node = map[i + 2];
        if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
          { collapse = bias; }
        if (bias == "left" && start == 0)
          { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {
            node = map[(i -= 3) + 2];
            collapse = "left";
          } }
        if (bias == "right" && start == mEnd - mStart)
          { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {
            node = map[(i += 3) + 2];
            collapse = "right";
          } }
        break
      }
    }
    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}
  }

  function getUsefulRect(rects, bias) {
    var rect = nullRect;
    if (bias == "left") { for (var i = 0; i < rects.length; i++) {
      if ((rect = rects[i]).left != rect.right) { break }
    } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {
      if ((rect = rects[i$1]).left != rect.right) { break }
    } }
    return rect
  }

  function measureCharInner(cm, prepared, ch, bias) {
    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);
    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;

    var rect;
    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
      for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned
        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }
        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }
        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)
          { rect = node.parentNode.getBoundingClientRect(); }
        else
          { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }
        if (rect.left || rect.right || start == 0) { break }
        end = start;
        start = start - 1;
        collapse = "right";
      }
      if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }
    } else { // If it is a widget, simply get the box for the whole widget.
      if (start > 0) { collapse = bias = "right"; }
      var rects;
      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)
        { rect = rects[bias == "right" ? rects.length - 1 : 0]; }
      else
        { rect = node.getBoundingClientRect(); }
    }
    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {
      var rSpan = node.parentNode.getClientRects()[0];
      if (rSpan)
        { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }
      else
        { rect = nullRect; }
    }

    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;
    var mid = (rtop + rbot) / 2;
    var heights = prepared.view.measure.heights;
    var i = 0;
    for (; i < heights.length - 1; i++)
      { if (mid < heights[i]) { break } }
    var top = i ? heights[i - 1] : 0, bot = heights[i];
    var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
                  right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
                  top: top, bottom: bot};
    if (!rect.left && !rect.right) { result.bogus = true; }
    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }

    return result
  }

  // Work around problem with bounding client rects on ranges being
  // returned incorrectly when zoomed on IE10 and below.
  function maybeUpdateRectForZooming(measure, rect) {
    if (!window.screen || screen.logicalXDPI == null ||
        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))
      { return rect }
    var scaleX = screen.logicalXDPI / screen.deviceXDPI;
    var scaleY = screen.logicalYDPI / screen.deviceYDPI;
    return {left: rect.left * scaleX, right: rect.right * scaleX,
            top: rect.top * scaleY, bottom: rect.bottom * scaleY}
  }

  function clearLineMeasurementCacheFor(lineView) {
    if (lineView.measure) {
      lineView.measure.cache = {};
      lineView.measure.heights = null;
      if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
        { lineView.measure.caches[i] = {}; } }
    }
  }

  function clearLineMeasurementCache(cm) {
    cm.display.externalMeasure = null;
    removeChildren(cm.display.lineMeasure);
    for (var i = 0; i < cm.display.view.length; i++)
      { clearLineMeasurementCacheFor(cm.display.view[i]); }
  }

  function clearCaches(cm) {
    clearLineMeasurementCache(cm);
    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;
    if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }
    cm.display.lineNumChars = null;
  }

  function pageScrollX() {
    // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206
    // which causes page_Offset and bounding client rects to use
    // different reference viewports and invalidate our calculations.
    if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }
    return window.pageXOffset || (document.documentElement || document.body).scrollLeft
  }
  function pageScrollY() {
    if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }
    return window.pageYOffset || (document.documentElement || document.body).scrollTop
  }

  function widgetTopHeight(lineObj) {
    var height = 0;
    if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)
      { height += widgetHeight(lineObj.widgets[i]); } } }
    return height
  }

  // Converts a {top, bottom, left, right} box from line-local
  // coordinates into another coordinate system. Context may be one of
  // "line", "div" (display.lineDiv), "local"./null (editor), "window",
  // or "page".
  function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {
    if (!includeWidgets) {
      var height = widgetTopHeight(lineObj);
      rect.top += height; rect.bottom += height;
    }
    if (context == "line") { return rect }
    if (!context) { context = "local"; }
    var yOff = heightAtLine(lineObj);
    if (context == "local") { yOff += paddingTop(cm.display); }
    else { yOff -= cm.display.viewOffset; }
    if (context == "page" || context == "window") {
      var lOff = cm.display.lineSpace.getBoundingClientRect();
      yOff += lOff.top + (context == "window" ? 0 : pageScrollY());
      var xOff = lOff.left + (context == "window" ? 0 : pageScrollX());
      rect.left += xOff; rect.right += xOff;
    }
    rect.top += yOff; rect.bottom += yOff;
    return rect
  }

  // Coverts a box from "div" coords to another coordinate system.
  // Context may be "window", "page", "div", or "local"./null.
  function fromCoordSystem(cm, coords, context) {
    if (context == "div") { return coords }
    var left = coords.left, top = coords.top;
    // First move into "page" coordinate system
    if (context == "page") {
      left -= pageScrollX();
      top -= pageScrollY();
    } else if (context == "local" || !context) {
      var localBox = cm.display.sizer.getBoundingClientRect();
      left += localBox.left;
      top += localBox.top;
    }

    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();
    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}
  }

  function charCoords(cm, pos, context, lineObj, bias) {
    if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }
    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)
  }

  // Returns a box for a given cursor position, which may have an
  // 'other' property containing the position of the secondary cursor
  // on a bidi boundary.
  // A cursor Pos(line, char, "before") is on the same visual line as `char - 1`
  // and after `char - 1` in writing order of `char - 1`
  // A cursor Pos(line, char, "after") is on the same visual line as `char`
  // and before `char` in writing order of `char`
  // Examples (upper-case letters are RTL, lower-case are LTR):
  //     Pos(0, 1, ...)
  //     before   after
  // ab     a|b     a|b
  // aB     a|B     aB|
  // Ab     |Ab     A|b
  // AB     B|A     B|A
  // Every position after the last character on a line is considered to stick
  // to the last character on the line.
  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {
    lineObj = lineObj || getLine(cm.doc, pos.line);
    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }
    function get(ch, right) {
      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight);
      if (right) { m.left = m.right; } else { m.right = m.left; }
      return intoCoordSystem(cm, lineObj, m, context)
    }
    var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;
    if (ch >= lineObj.text.length) {
      ch = lineObj.text.length;
      sticky = "before";
    } else if (ch <= 0) {
      ch = 0;
      sticky = "after";
    }
    if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") }

    function getBidi(ch, partPos, invert) {
      var part = order[partPos], right = part.level == 1;
      return get(invert ? ch - 1 : ch, right != invert)
    }
    var partPos = getBidiPartAt(order, ch, sticky);
    var other = bidiOther;
    var val = getBidi(ch, partPos, sticky == "before");
    if (other != null) { val.other = getBidi(ch, other, sticky != "before"); }
    return val
  }

  // Used to cheaply estimate the coordinates for a position. Used for
  // intermediate scroll updates.
  function estimateCoords(cm, pos) {
    var left = 0;
    pos = clipPos(cm.doc, pos);
    if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }
    var lineObj = getLine(cm.doc, pos.line);
    var top = heightAtLine(lineObj) + paddingTop(cm.display);
    return {left: left, right: left, top: top, bottom: top + lineObj.height}
  }

  // Positions returned by coordsChar contain some extra information.
  // xRel is the relative x position of the input coordinates compared
  // to the found position (so xRel > 0 means the coordinates are to
  // the right of the character position, for example). When outside
  // is true, that means the coordinates lie outside the line's
  // vertical range.
  function PosWithInfo(line, ch, sticky, outside, xRel) {
    var pos = Pos(line, ch, sticky);
    pos.xRel = xRel;
    if (outside) { pos.outside = outside; }
    return pos
  }

  // Compute the character position closest to the given coordinates.
  // Input must be lineSpace-local ("div" coordinate system).
  function coordsChar(cm, x, y) {
    var doc = cm.doc;
    y += cm.display.viewOffset;
    if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }
    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
    if (lineN > last)
      { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }
    if (x < 0) { x = 0; }

    var lineObj = getLine(doc, lineN);
    for (;;) {
      var found = coordsCharInner(cm, lineObj, lineN, x, y);
      var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));
      if (!collapsed) { return found }
      var rangeEnd = collapsed.find(1);
      if (rangeEnd.line == lineN) { return rangeEnd }
      lineObj = getLine(doc, lineN = rangeEnd.line);
    }
  }

  function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {
    y -= widgetTopHeight(lineObj);
    var end = lineObj.text.length;
    var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);
    end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);
    return {begin: begin, end: end}
  }

  function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {
    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }
    var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top;
    return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)
  }

  // Returns true if the given side of a box is after the given
  // coordinates, in top-to-bottom, left-to-right order.
  function boxIsAfter(box, x, y, left) {
    return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x
  }

  function coordsCharInner(cm, lineObj, lineNo, x, y) {
    // Move y into line-local coordinate space
    y -= heightAtLine(lineObj);
    var preparedMeasure = prepareMeasureForLine(cm, lineObj);
    // When directly calling `measureCharPrepared`, we have to adjust
    // for the widgets at this line.
    var widgetHeight = widgetTopHeight(lineObj);
    var begin = 0, end = lineObj.text.length, ltr = true;

    var order = getOrder(lineObj, cm.doc.direction);
    // If the line isn't plain left-to-right text, first figure out
    // which bidi section the coordinates fall into.
    if (order) {
      var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)
                   (cm, lineObj, lineNo, preparedMeasure, order, x, y);
      ltr = part.level != 1;
      // The awkward -1 offsets are needed because findFirst (called
      // on these below) will treat its first bound as inclusive,
      // second as exclusive, but we want to actually address the
      // characters in the part's range
      begin = ltr ? part.from : part.to - 1;
      end = ltr ? part.to : part.from - 1;
    }

    // A binary search to find the first character whose bounding box
    // starts after the coordinates. If we run across any whose box wrap
    // the coordinates, store that.
    var chAround = null, boxAround = null;
    var ch = findFirst(function (ch) {
      var box = measureCharPrepared(cm, preparedMeasure, ch);
      box.top += widgetHeight; box.bottom += widgetHeight;
      if (!boxIsAfter(box, x, y, false)) { return false }
      if (box.top <= y && box.left <= x) {
        chAround = ch;
        boxAround = box;
      }
      return true
    }, begin, end);

    var baseX, sticky, outside = false;
    // If a box around the coordinates was found, use that
    if (boxAround) {
      // Distinguish coordinates nearer to the left or right side of the box
      var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;
      ch = chAround + (atStart ? 0 : 1);
      sticky = atStart ? "after" : "before";
      baseX = atLeft ? boxAround.left : boxAround.right;
    } else {
      // (Adjust for extended bound, if necessary.)
      if (!ltr && (ch == end || ch == begin)) { ch++; }
      // To determine which side to associate with, get the box to the
      // left of the character and compare it's vertical position to the
      // coordinates
      sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" :
        (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?
        "after" : "before";
      // Now get accurate coordinates for this place, in order to get a
      // base X position
      var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), "line", lineObj, preparedMeasure);
      baseX = coords.left;
      outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;
    }

    ch = skipExtendingChars(lineObj.text, ch, 1);
    return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)
  }

  function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {
    // Bidi parts are sorted left-to-right, and in a non-line-wrapping
    // situation, we can take this ordering to correspond to the visual
    // ordering. This finds the first part whose end is after the given
    // coordinates.
    var index = findFirst(function (i) {
      var part = order[i], ltr = part.level != 1;
      return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? "before" : "after"),
                                     "line", lineObj, preparedMeasure), x, y, true)
    }, 0, order.length - 1);
    var part = order[index];
    // If this isn't the first part, the part's start is also after
    // the coordinates, and the coordinates aren't on the same line as
    // that start, move one part back.
    if (index > 0) {
      var ltr = part.level != 1;
      var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? "after" : "before"),
                               "line", lineObj, preparedMeasure);
      if (boxIsAfter(start, x, y, true) && start.top > y)
        { part = order[index - 1]; }
    }
    return part
  }

  function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {
    // In a wrapped line, rtl text on wrapping boundaries can do things
    // that don't correspond to the ordering in our `order` array at
    // all, so a binary search doesn't work, and we want to return a
    // part that only spans one line so that the binary search in
    // coordsCharInner is safe. As such, we first find the extent of the
    // wrapped line, and then do a flat search in which we discard any
    // spans that aren't on the line.
    var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);
    var begin = ref.begin;
    var end = ref.end;
    if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; }
    var part = null, closestDist = null;
    for (var i = 0; i < order.length; i++) {
      var p = order[i];
      if (p.from >= end || p.to <= begin) { continue }
      var ltr = p.level != 1;
      var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;
      // Weigh against spans ending before this, so that they are only
      // picked if nothing ends after
      var dist = endX < x ? x - endX + 1e9 : endX - x;
      if (!part || closestDist > dist) {
        part = p;
        closestDist = dist;
      }
    }
    if (!part) { part = order[order.length - 1]; }
    // Clip the part to the wrapped line.
    if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }
    if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }
    return part
  }

  var measureText;
  // Compute the default text height.
  function textHeight(display) {
    if (display.cachedTextHeight != null) { return display.cachedTextHeight }
    if (measureText == null) {
      measureText = elt("pre", null, "CodeMirror-line-like");
      // Measure a bunch of lines, for browsers that compute
      // fractional heights.
      for (var i = 0; i < 49; ++i) {
        measureText.appendChild(document.createTextNode("x"));
        measureText.appendChild(elt("br"));
      }
      measureText.appendChild(document.createTextNode("x"));
    }
    removeChildrenAndAdd(display.measure, measureText);
    var height = measureText.offsetHeight / 50;
    if (height > 3) { display.cachedTextHeight = height; }
    removeChildren(display.measure);
    return height || 1
  }

  // Compute the default character width.
  function charWidth(display) {
    if (display.cachedCharWidth != null) { return display.cachedCharWidth }
    var anchor = elt("span", "xxxxxxxxxx");
    var pre = elt("pre", [anchor], "CodeMirror-line-like");
    removeChildrenAndAdd(display.measure, pre);
    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;
    if (width > 2) { display.cachedCharWidth = width; }
    return width || 10
  }

  // Do a bulk-read of the DOM positions and sizes needed to draw the
  // view, so that we don't interleave reading and writing to the DOM.
  function getDimensions(cm) {
    var d = cm.display, left = {}, width = {};
    var gutterLeft = d.gutters.clientLeft;
    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
      var id = cm.display.gutterSpecs[i].className;
      left[id] = n.offsetLeft + n.clientLeft + gutterLeft;
      width[id] = n.clientWidth;
    }
    return {fixedPos: compensateForHScroll(d),
            gutterTotalWidth: d.gutters.offsetWidth,
            gutterLeft: left,
            gutterWidth: width,
            wrapperWidth: d.wrapper.clientWidth}
  }

  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,
  // but using getBoundingClientRect to get a sub-pixel-accurate
  // result.
  function compensateForHScroll(display) {
    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left
  }

  // Returns a function that estimates the height of a line, to use as
  // first approximation until the line becomes visible (and is thus
  // properly measurable).
  function estimateHeight(cm) {
    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
    return function (line) {
      if (lineIsHidden(cm.doc, line)) { return 0 }

      var widgetsHeight = 0;
      if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {
        if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }
      } }

      if (wrapping)
        { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }
      else
        { return widgetsHeight + th }
    }
  }

  function estimateLineHeights(cm) {
    var doc = cm.doc, est = estimateHeight(cm);
    doc.iter(function (line) {
      var estHeight = est(line);
      if (estHeight != line.height) { updateLineHeight(line, estHeight); }
    });
  }

  // Given a mouse event, find the corresponding position. If liberal
  // is false, it checks whether a gutter or scrollbar was clicked,
  // and returns null if it was. forRect is used by rectangular
  // selections, and tries to estimate a character position even for
  // coordinates beyond the right of the text.
  function posFromMouse(cm, e, liberal, forRect) {
    var display = cm.display;
    if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null }

    var x, y, space = display.lineSpace.getBoundingClientRect();
    // Fails unpredictably on IE[67] when mouse is dragged around quickly.
    try { x = e.clientX - space.left; y = e.clientY - space.top; }
    catch (e$1) { return null }
    var coords = coordsChar(cm, x, y), line;
    if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {
      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;
      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));
    }
    return coords
  }

  // Find the view element corresponding to a given line. Return null
  // when the line isn't visible.
  function findViewIndex(cm, n) {
    if (n >= cm.display.viewTo) { return null }
    n -= cm.display.viewFrom;
    if (n < 0) { return null }
    var view = cm.display.view;
    for (var i = 0; i < view.length; i++) {
      n -= view[i].size;
      if (n < 0) { return i }
    }
  }

  // Updates the display.view data structure for a given change to the
  // document. From and to are in pre-change coordinates. Lendiff is
  // the amount of lines added or subtracted by the change. This is
  // used for changes that span multiple lines, or change the way
  // lines are divided into visual lines. regLineChange (below)
  // registers single-line changes.
  function regChange(cm, from, to, lendiff) {
    if (from == null) { from = cm.doc.first; }
    if (to == null) { to = cm.doc.first + cm.doc.size; }
    if (!lendiff) { lendiff = 0; }

    var display = cm.display;
    if (lendiff && to < display.viewTo &&
        (display.updateLineNumbers == null || display.updateLineNumbers > from))
      { display.updateLineNumbers = from; }

    cm.curOp.viewChanged = true;

    if (from >= display.viewTo) { // Change after
      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
        { resetView(cm); }
    } else if (to <= display.viewFrom) { // Change before
      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
        resetView(cm);
      } else {
        display.viewFrom += lendiff;
        display.viewTo += lendiff;
      }
    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
      resetView(cm);
    } else if (from <= display.viewFrom) { // Top overlap
      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);
      if (cut) {
        display.view = display.view.slice(cut.index);
        display.viewFrom = cut.lineN;
        display.viewTo += lendiff;
      } else {
        resetView(cm);
      }
    } else if (to >= display.viewTo) { // Bottom overlap
      var cut$1 = viewCuttingPoint(cm, from, from, -1);
      if (cut$1) {
        display.view = display.view.slice(0, cut$1.index);
        display.viewTo = cut$1.lineN;
      } else {
        resetView(cm);
      }
    } else { // Gap in the middle
      var cutTop = viewCuttingPoint(cm, from, from, -1);
      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);
      if (cutTop && cutBot) {
        display.view = display.view.slice(0, cutTop.index)
          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
          .concat(display.view.slice(cutBot.index));
        display.viewTo += lendiff;
      } else {
        resetView(cm);
      }
    }

    var ext = display.externalMeasured;
    if (ext) {
      if (to < ext.lineN)
        { ext.lineN += lendiff; }
      else if (from < ext.lineN + ext.size)
        { display.externalMeasured = null; }
    }
  }

  // Register a change to a single line. Type must be one of "text",
  // "gutter", "class", "widget"
  function regLineChange(cm, line, type) {
    cm.curOp.viewChanged = true;
    var display = cm.display, ext = cm.display.externalMeasured;
    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)
      { display.externalMeasured = null; }

    if (line < display.viewFrom || line >= display.viewTo) { return }
    var lineView = display.view[findViewIndex(cm, line)];
    if (lineView.node == null) { return }
    var arr = lineView.changes || (lineView.changes = []);
    if (indexOf(arr, type) == -1) { arr.push(type); }
  }

  // Clear the view.
  function resetView(cm) {
    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;
    cm.display.view = [];
    cm.display.viewOffset = 0;
  }

  function viewCuttingPoint(cm, oldN, newN, dir) {
    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;
    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)
      { return {index: index, lineN: newN} }
    var n = cm.display.viewFrom;
    for (var i = 0; i < index; i++)
      { n += view[i].size; }
    if (n != oldN) {
      if (dir > 0) {
        if (index == view.length - 1) { return null }
        diff = (n + view[index].size) - oldN;
        index++;
      } else {
        diff = n - oldN;
      }
      oldN += diff; newN += diff;
    }
    while (visualLineNo(cm.doc, newN) != newN) {
      if (index == (dir < 0 ? 0 : view.length - 1)) { return null }
      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;
      index += dir;
    }
    return {index: index, lineN: newN}
  }

  // Force the view to cover a given range, adding empty view element
  // or clipping off existing ones as needed.
  function adjustView(cm, from, to) {
    var display = cm.display, view = display.view;
    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {
      display.view = buildViewArray(cm, from, to);
      display.viewFrom = from;
    } else {
      if (display.viewFrom > from)
        { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }
      else if (display.viewFrom < from)
        { display.view = display.view.slice(findViewIndex(cm, from)); }
      display.viewFrom = from;
      if (display.viewTo < to)
        { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }
      else if (display.viewTo > to)
        { display.view = display.view.slice(0, findViewIndex(cm, to)); }
    }
    display.viewTo = to;
  }

  // Count the number of lines in the view whose DOM representation is
  // out of date (or nonexistent).
  function countDirtyView(cm) {
    var view = cm.display.view, dirty = 0;
    for (var i = 0; i < view.length; i++) {
      var lineView = view[i];
      if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }
    }
    return dirty
  }

  function updateSelection(cm) {
    cm.display.input.showSelection(cm.display.input.prepareSelection());
  }

  function prepareSelection(cm, primary) {
    if ( primary === void 0 ) primary = true;

    var doc = cm.doc, result = {};
    var curFragment = result.cursors = document.createDocumentFragment();
    var selFragment = result.selection = document.createDocumentFragment();

    for (var i = 0; i < doc.sel.ranges.length; i++) {
      if (!primary && i == doc.sel.primIndex) { continue }
      var range = doc.sel.ranges[i];
      if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }
      var collapsed = range.empty();
      if (collapsed || cm.options.showCursorWhenSelecting)
        { drawSelectionCursor(cm, range.head, curFragment); }
      if (!collapsed)
        { drawSelectionRange(cm, range, selFragment); }
    }
    return result
  }

  // Draws a cursor for the given range
  function drawSelectionCursor(cm, head, output) {
    var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine);

    var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"));
    cursor.style.left = pos.left + "px";
    cursor.style.top = pos.top + "px";
    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";

    if (pos.other) {
      // Secondary cursor, shown when on a 'jump' in bi-directional text
      var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"));
      otherCursor.style.display = "";
      otherCursor.style.left = pos.other.left + "px";
      otherCursor.style.top = pos.other.top + "px";
      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
    }
  }

  function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }

  // Draws the given range as a highlighted selection
  function drawSelectionRange(cm, range, output) {
    var display = cm.display, doc = cm.doc;
    var fragment = document.createDocumentFragment();
    var padding = paddingH(cm.display), leftSide = padding.left;
    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;
    var docLTR = doc.direction == "ltr";

    function add(left, top, width, bottom) {
      if (top < 0) { top = 0; }
      top = Math.round(top);
      bottom = Math.round(bottom);
      fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n                             top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n                             height: " + (bottom - top) + "px")));
    }

    function drawForLine(line, fromArg, toArg) {
      var lineObj = getLine(doc, line);
      var lineLen = lineObj.text.length;
      var start, end;
      function coords(ch, bias) {
        return charCoords(cm, Pos(line, ch), "div", lineObj, bias)
      }

      function wrapX(pos, dir, side) {
        var extent = wrappedLineExtentChar(cm, lineObj, null, pos);
        var prop = (dir == "ltr") == (side == "after") ? "left" : "right";
        var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);
        return coords(ch, prop)[prop]
      }

      var order = getOrder(lineObj, doc.direction);
      iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {
        var ltr = dir == "ltr";
        var fromPos = coords(from, ltr ? "left" : "right");
        var toPos = coords(to - 1, ltr ? "right" : "left");

        var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;
        var first = i == 0, last = !order || i == order.length - 1;
        if (toPos.top - fromPos.top <= 3) { // Single line
          var openLeft = (docLTR ? openStart : openEnd) && first;
          var openRight = (docLTR ? openEnd : openStart) && last;
          var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;
          var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;
          add(left, fromPos.top, right - left, fromPos.bottom);
        } else { // Multiple lines
          var topLeft, topRight, botLeft, botRight;
          if (ltr) {
            topLeft = docLTR && openStart && first ? leftSide : fromPos.left;
            topRight = docLTR ? rightSide : wrapX(from, dir, "before");
            botLeft = docLTR ? leftSide : wrapX(to, dir, "after");
            botRight = docLTR && openEnd && last ? rightSide : toPos.right;
          } else {
            topLeft = !docLTR ? leftSide : wrapX(from, dir, "before");
            topRight = !docLTR && openStart && first ? rightSide : fromPos.right;
            botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;
            botRight = !docLTR ? rightSide : wrapX(to, dir, "after");
          }
          add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);
          if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }
          add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);
        }

        if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }
        if (cmpCoords(toPos, start) < 0) { start = toPos; }
        if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }
        if (cmpCoords(toPos, end) < 0) { end = toPos; }
      });
      return {start: start, end: end}
    }

    var sFrom = range.from(), sTo = range.to();
    if (sFrom.line == sTo.line) {
      drawForLine(sFrom.line, sFrom.ch, sTo.ch);
    } else {
      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);
      var singleVLine = visualLine(fromLine) == visualLine(toLine);
      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;
      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;
      if (singleVLine) {
        if (leftEnd.top < rightStart.top - 2) {
          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);
        } else {
          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
        }
      }
      if (leftEnd.bottom < rightStart.top)
        { add(leftSide, leftEnd.bottom, null, rightStart.top); }
    }

    output.appendChild(fragment);
  }

  // Cursor-blinking
  function restartBlink(cm) {
    if (!cm.state.focused) { return }
    var display = cm.display;
    clearInterval(display.blinker);
    var on = true;
    display.cursorDiv.style.visibility = "";
    if (cm.options.cursorBlinkRate > 0)
      { display.blinker = setInterval(function () {
        if (!cm.hasFocus()) { onBlur(cm); }
        display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden";
      }, cm.options.cursorBlinkRate); }
    else if (cm.options.cursorBlinkRate < 0)
      { display.cursorDiv.style.visibility = "hidden"; }
  }

  function ensureFocus(cm) {
    if (!cm.hasFocus()) {
      cm.display.input.focus();
      if (!cm.state.focused) { onFocus(cm); }
    }
  }

  function delayBlurEvent(cm) {
    cm.state.delayingBlurEvent = true;
    setTimeout(function () { if (cm.state.delayingBlurEvent) {
      cm.state.delayingBlurEvent = false;
      if (cm.state.focused) { onBlur(cm); }
    } }, 100);
  }

  function onFocus(cm, e) {
    if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }

    if (cm.options.readOnly == "nocursor") { return }
    if (!cm.state.focused) {
      signal(cm, "focus", cm, e);
      cm.state.focused = true;
      addClass(cm.display.wrapper, "CodeMirror-focused");
      // This test prevents this from firing when a context
      // menu is closed (since the input reset would kill the
      // select-all detection hack)
      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
        cm.display.input.reset();
        if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730
      }
      cm.display.input.receivedFocus();
    }
    restartBlink(cm);
  }
  function onBlur(cm, e) {
    if (cm.state.delayingBlurEvent) { return }

    if (cm.state.focused) {
      signal(cm, "blur", cm, e);
      cm.state.focused = false;
      rmClass(cm.display.wrapper, "CodeMirror-focused");
    }
    clearInterval(cm.display.blinker);
    setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);
  }

  // Read the actual heights of the rendered lines, and update their
  // stored heights to match.
  function updateHeightsInViewport(cm) {
    var display = cm.display;
    var prevBottom = display.lineDiv.offsetTop;
    for (var i = 0; i < display.view.length; i++) {
      var cur = display.view[i], wrapping = cm.options.lineWrapping;
      var height = (void 0), width = 0;
      if (cur.hidden) { continue }
      if (ie && ie_version < 8) {
        var bot = cur.node.offsetTop + cur.node.offsetHeight;
        height = bot - prevBottom;
        prevBottom = bot;
      } else {
        var box = cur.node.getBoundingClientRect();
        height = box.bottom - box.top;
        // Check that lines don't extend past the right of the current
        // editor width
        if (!wrapping && cur.text.firstChild)
          { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }
      }
      var diff = cur.line.height - height;
      if (diff > .005 || diff < -.005) {
        updateLineHeight(cur.line, height);
        updateWidgetHeight(cur.line);
        if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)
          { updateWidgetHeight(cur.rest[j]); } }
      }
      if (width > cm.display.sizerWidth) {
        var chWidth = Math.ceil(width / charWidth(cm.display));
        if (chWidth > cm.display.maxLineLength) {
          cm.display.maxLineLength = chWidth;
          cm.display.maxLine = cur.line;
          cm.display.maxLineChanged = true;
        }
      }
    }
  }

  // Read and store the height of line widgets associated with the
  // given line.
  function updateWidgetHeight(line) {
    if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {
      var w = line.widgets[i], parent = w.node.parentNode;
      if (parent) { w.height = parent.offsetHeight; }
    } }
  }

  // Compute the lines that are visible in a given viewport (defaults
  // the the current scroll position). viewport may contain top,
  // height, and ensure (see op.scrollToPos) properties.
  function visibleLines(display, doc, viewport) {
    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;
    top = Math.floor(top - paddingTop(display));
    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;

    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);
    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and
    // forces those lines into the viewport (if possible).
    if (viewport && viewport.ensure) {
      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;
      if (ensureFrom < from) {
        from = ensureFrom;
        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);
      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {
        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);
        to = ensureTo;
      }
    }
    return {from: from, to: Math.max(to, from + 1)}
  }

  // SCROLLING THINGS INTO VIEW

  // If an editor sits on the top or bottom of the window, partially
  // scrolled out of view, this ensures that the cursor is visible.
  function maybeScrollWindow(cm, rect) {
    if (signalDOMEvent(cm, "scrollCursorIntoView")) { return }

    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;
    if (rect.top + box.top < 0) { doScroll = true; }
    else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }
    if (doScroll != null && !phantom) {
      var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n                         top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n                         height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n                         left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;"));
      cm.display.lineSpace.appendChild(scrollNode);
      scrollNode.scrollIntoView(doScroll);
      cm.display.lineSpace.removeChild(scrollNode);
    }
  }

  // Scroll a given position into view (immediately), verifying that
  // it actually became visible (as line heights are accurately
  // measured, the position of something may 'drift' during drawing).
  function scrollPosIntoView(cm, pos, end, margin) {
    if (margin == null) { margin = 0; }
    var rect;
    if (!cm.options.lineWrapping && pos == end) {
      // Set pos and end to the cursor positions around the character pos sticks to
      // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch
      // If pos == Pos(_, 0, "before"), pos and end are unchanged
      pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos;
      end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos;
    }
    for (var limit = 0; limit < 5; limit++) {
      var changed = false;
      var coords = cursorCoords(cm, pos);
      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);
      rect = {left: Math.min(coords.left, endCoords.left),
              top: Math.min(coords.top, endCoords.top) - margin,
              right: Math.max(coords.left, endCoords.left),
              bottom: Math.max(coords.bottom, endCoords.bottom) + margin};
      var scrollPos = calculateScrollPos(cm, rect);
      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;
      if (scrollPos.scrollTop != null) {
        updateScrollTop(cm, scrollPos.scrollTop);
        if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }
      }
      if (scrollPos.scrollLeft != null) {
        setScrollLeft(cm, scrollPos.scrollLeft);
        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }
      }
      if (!changed) { break }
    }
    return rect
  }

  // Scroll a given set of coordinates into view (immediately).
  function scrollIntoView(cm, rect) {
    var scrollPos = calculateScrollPos(cm, rect);
    if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }
    if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }
  }

  // Calculate a new scroll position needed to scroll the given
  // rectangle into view. Returns an object with scrollTop and
  // scrollLeft properties. When these are undefined, the
  // vertical/horizontal position does not need to be adjusted.
  function calculateScrollPos(cm, rect) {
    var display = cm.display, snapMargin = textHeight(cm.display);
    if (rect.top < 0) { rect.top = 0; }
    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;
    var screen = displayHeight(cm), result = {};
    if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }
    var docBottom = cm.doc.height + paddingVert(display);
    var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;
    if (rect.top < screentop) {
      result.scrollTop = atTop ? 0 : rect.top;
    } else if (rect.bottom > screentop + screen) {
      var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);
      if (newTop != screentop) { result.scrollTop = newTop; }
    }

    var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;
    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;
    var screenw = displayWidth(cm) - display.gutters.offsetWidth;
    var tooWide = rect.right - rect.left > screenw;
    if (tooWide) { rect.right = rect.left + screenw; }
    if (rect.left < 10)
      { result.scrollLeft = 0; }
    else if (rect.left < screenleft)
      { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }
    else if (rect.right > screenw + screenleft - 3)
      { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }
    return result
  }

  // Store a relative adjustment to the scroll position in the current
  // operation (to be applied when the operation finishes).
  function addToScrollTop(cm, top) {
    if (top == null) { return }
    resolveScrollToPos(cm);
    cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;
  }

  // Make sure that at the end of the operation the current cursor is
  // shown.
  function ensureCursorVisible(cm) {
    resolveScrollToPos(cm);
    var cur = cm.getCursor();
    cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};
  }

  function scrollToCoords(cm, x, y) {
    if (x != null || y != null) { resolveScrollToPos(cm); }
    if (x != null) { cm.curOp.scrollLeft = x; }
    if (y != null) { cm.curOp.scrollTop = y; }
  }

  function scrollToRange(cm, range) {
    resolveScrollToPos(cm);
    cm.curOp.scrollToPos = range;
  }

  // When an operation has its scrollToPos property set, and another
  // scroll action is applied before the end of the operation, this
  // 'simulates' scrolling that position into view in a cheap way, so
  // that the effect of intermediate scroll commands is not ignored.
  function resolveScrollToPos(cm) {
    var range = cm.curOp.scrollToPos;
    if (range) {
      cm.curOp.scrollToPos = null;
      var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);
      scrollToCoordsRange(cm, from, to, range.margin);
    }
  }

  function scrollToCoordsRange(cm, from, to, margin) {
    var sPos = calculateScrollPos(cm, {
      left: Math.min(from.left, to.left),
      top: Math.min(from.top, to.top) - margin,
      right: Math.max(from.right, to.right),
      bottom: Math.max(from.bottom, to.bottom) + margin
    });
    scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);
  }

  // Sync the scrollable area and scrollbars, ensure the viewport
  // covers the visible area.
  function updateScrollTop(cm, val) {
    if (Math.abs(cm.doc.scrollTop - val) < 2) { return }
    if (!gecko) { updateDisplaySimple(cm, {top: val}); }
    setScrollTop(cm, val, true);
    if (gecko) { updateDisplaySimple(cm); }
    startWorker(cm, 100);
  }

  function setScrollTop(cm, val, forceScroll) {
    val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));
    if (cm.display.scroller.scrollTop == val && !forceScroll) { return }
    cm.doc.scrollTop = val;
    cm.display.scrollbars.setScrollTop(val);
    if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }
  }

  // Sync scroller and scrollbar, ensure the gutter elements are
  // aligned.
  function setScrollLeft(cm, val, isScroller, forceScroll) {
    val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));
    if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }
    cm.doc.scrollLeft = val;
    alignHorizontally(cm);
    if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }
    cm.display.scrollbars.setScrollLeft(val);
  }

  // SCROLLBARS

  // Prepare DOM reads needed to update the scrollbars. Done in one
  // shot to minimize update/measure roundtrips.
  function measureForScrollbars(cm) {
    var d = cm.display, gutterW = d.gutters.offsetWidth;
    var docH = Math.round(cm.doc.height + paddingVert(cm.display));
    return {
      clientHeight: d.scroller.clientHeight,
      viewHeight: d.wrapper.clientHeight,
      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,
      viewWidth: d.wrapper.clientWidth,
      barLeft: cm.options.fixedGutter ? gutterW : 0,
      docHeight: docH,
      scrollHeight: docH + scrollGap(cm) + d.barHeight,
      nativeBarWidth: d.nativeBarWidth,
      gutterWidth: gutterW
    }
  }

  var NativeScrollbars = function(place, scroll, cm) {
    this.cm = cm;
    var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar");
    var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
    vert.tabIndex = horiz.tabIndex = -1;
    place(vert); place(horiz);

    on(vert, "scroll", function () {
      if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); }
    });
    on(horiz, "scroll", function () {
      if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); }
    });

    this.checkedZeroWidth = false;
    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
    if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; }
  };

  NativeScrollbars.prototype.update = function (measure) {
    var needsH = measure.scrollWidth > measure.clientWidth + 1;
    var needsV = measure.scrollHeight > measure.clientHeight + 1;
    var sWidth = measure.nativeBarWidth;

    if (needsV) {
      this.vert.style.display = "block";
      this.vert.style.bottom = needsH ? sWidth + "px" : "0";
      var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);
      // A bug in IE8 can cause this value to be negative, so guard it.
      this.vert.firstChild.style.height =
        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px";
    } else {
      this.vert.style.display = "";
      this.vert.firstChild.style.height = "0";
    }

    if (needsH) {
      this.horiz.style.display = "block";
      this.horiz.style.right = needsV ? sWidth + "px" : "0";
      this.horiz.style.left = measure.barLeft + "px";
      var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);
      this.horiz.firstChild.style.width =
        Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px";
    } else {
      this.horiz.style.display = "";
      this.horiz.firstChild.style.width = "0";
    }

    if (!this.checkedZeroWidth && measure.clientHeight > 0) {
      if (sWidth == 0) { this.zeroWidthHack(); }
      this.checkedZeroWidth = true;
    }

    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}
  };

  NativeScrollbars.prototype.setScrollLeft = function (pos) {
    if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }
    if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); }
  };

  NativeScrollbars.prototype.setScrollTop = function (pos) {
    if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }
    if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); }
  };

  NativeScrollbars.prototype.zeroWidthHack = function () {
    var w = mac && !mac_geMountainLion ? "12px" : "18px";
    this.horiz.style.height = this.vert.style.width = w;
    this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none";
    this.disableHoriz = new Delayed;
    this.disableVert = new Delayed;
  };

  NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {
    bar.style.pointerEvents = "auto";
    function maybeDisable() {
      // To find out whether the scrollbar is still visible, we
      // check whether the element under the pixel in the bottom
      // right corner of the scrollbar box is the scrollbar box
      // itself (when the bar is still visible) or its filler child
      // (when the bar is hidden). If it is still visible, we keep
      // it enabled, if it's hidden, we disable pointer events.
      var box = bar.getBoundingClientRect();
      var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)
          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);
      if (elt != bar) { bar.style.pointerEvents = "none"; }
      else { delay.set(1000, maybeDisable); }
    }
    delay.set(1000, maybeDisable);
  };

  NativeScrollbars.prototype.clear = function () {
    var parent = this.horiz.parentNode;
    parent.removeChild(this.horiz);
    parent.removeChild(this.vert);
  };

  var NullScrollbars = function () {};

  NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };
  NullScrollbars.prototype.setScrollLeft = function () {};
  NullScrollbars.prototype.setScrollTop = function () {};
  NullScrollbars.prototype.clear = function () {};

  function updateScrollbars(cm, measure) {
    if (!measure) { measure = measureForScrollbars(cm); }
    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;
    updateScrollbarsInner(cm, measure);
    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
        { updateHeightsInViewport(cm); }
      updateScrollbarsInner(cm, measureForScrollbars(cm));
      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;
    }
  }

  // Re-synchronize the fake scrollbars with the actual size of the
  // content.
  function updateScrollbarsInner(cm, measure) {
    var d = cm.display;
    var sizes = d.scrollbars.update(measure);

    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px";
    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px";
    d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent";

    if (sizes.right && sizes.bottom) {
      d.scrollbarFiller.style.display = "block";
      d.scrollbarFiller.style.height = sizes.bottom + "px";
      d.scrollbarFiller.style.width = sizes.right + "px";
    } else { d.scrollbarFiller.style.display = ""; }
    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
      d.gutterFiller.style.display = "block";
      d.gutterFiller.style.height = sizes.bottom + "px";
      d.gutterFiller.style.width = measure.gutterWidth + "px";
    } else { d.gutterFiller.style.display = ""; }
  }

  var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars};

  function initScrollbars(cm) {
    if (cm.display.scrollbars) {
      cm.display.scrollbars.clear();
      if (cm.display.scrollbars.addClass)
        { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }
    }

    cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {
      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);
      // Prevent clicks in the scrollbars from killing focus
      on(node, "mousedown", function () {
        if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }
      });
      node.setAttribute("cm-not-content", "true");
    }, function (pos, axis) {
      if (axis == "horizontal") { setScrollLeft(cm, pos); }
      else { updateScrollTop(cm, pos); }
    }, cm);
    if (cm.display.scrollbars.addClass)
      { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }
  }

  // Operations are used to wrap a series of changes to the editor
  // state in such a way that each change won't have to update the
  // cursor and display (which would be awkward, slow, and
  // error-prone). Instead, display updates are batched and then all
  // combined and executed at once.

  var nextOpId = 0;
  // Start a new operation.
  function startOperation(cm) {
    cm.curOp = {
      cm: cm,
      viewChanged: false,      // Flag that indicates that lines might need to be redrawn
      startHeight: cm.doc.height, // Used to detect need to update scrollbar
      forceUpdate: false,      // Used to force a redraw
      updateInput: 0,       // Whether to reset the input textarea
      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)
      changeObjs: null,        // Accumulated changes, for firing change events
      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on
      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already
      selectionChanged: false, // Whether the selection needs to be redrawn
      updateMaxLine: false,    // Set when the widest line needs to be determined anew
      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
      scrollToPos: null,       // Used to scroll to a specific position
      focus: false,
      id: ++nextOpId           // Unique ID
    };
    pushOperation(cm.curOp);
  }

  // Finish an operation, updating the display and signalling delayed events
  function endOperation(cm) {
    var op = cm.curOp;
    if (op) { finishOperation(op, function (group) {
      for (var i = 0; i < group.ops.length; i++)
        { group.ops[i].cm.curOp = null; }
      endOperations(group);
    }); }
  }

  // The DOM updates done when an operation finishes are batched so
  // that the minimum number of relayouts are required.
  function endOperations(group) {
    var ops = group.ops;
    for (var i = 0; i < ops.length; i++) // Read DOM
      { endOperation_R1(ops[i]); }
    for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)
      { endOperation_W1(ops[i$1]); }
    for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM
      { endOperation_R2(ops[i$2]); }
    for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)
      { endOperation_W2(ops[i$3]); }
    for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM
      { endOperation_finish(ops[i$4]); }
  }

  function endOperation_R1(op) {
    var cm = op.cm, display = cm.display;
    maybeClipScrollbars(cm);
    if (op.updateMaxLine) { findMaxLine(cm); }

    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||
      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||
                         op.scrollToPos.to.line >= display.viewTo) ||
      display.maxLineChanged && cm.options.lineWrapping;
    op.update = op.mustUpdate &&
      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);
  }

  function endOperation_W1(op) {
    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);
  }

  function endOperation_R2(op) {
    var cm = op.cm, display = cm.display;
    if (op.updatedDisplay) { updateHeightsInViewport(cm); }

    op.barMeasure = measureForScrollbars(cm);

    // If the max line changed since it was last measured, measure it,
    // and ensure the document's width matches it.
    // updateDisplay_W2 will use these properties to do the actual resizing
    if (display.maxLineChanged && !cm.options.lineWrapping) {
      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;
      cm.display.sizerWidth = op.adjustWidthTo;
      op.barMeasure.scrollWidth =
        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);
      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));
    }

    if (op.updatedDisplay || op.selectionChanged)
      { op.preparedSelection = display.input.prepareSelection(); }
  }

  function endOperation_W2(op) {
    var cm = op.cm;

    if (op.adjustWidthTo != null) {
      cm.display.sizer.style.minWidth = op.adjustWidthTo + "px";
      if (op.maxScrollLeft < cm.doc.scrollLeft)
        { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }
      cm.display.maxLineChanged = false;
    }

    var takeFocus = op.focus && op.focus == activeElt();
    if (op.preparedSelection)
      { cm.display.input.showSelection(op.preparedSelection, takeFocus); }
    if (op.updatedDisplay || op.startHeight != cm.doc.height)
      { updateScrollbars(cm, op.barMeasure); }
    if (op.updatedDisplay)
      { setDocumentHeight(cm, op.barMeasure); }

    if (op.selectionChanged) { restartBlink(cm); }

    if (cm.state.focused && op.updateInput)
      { cm.display.input.reset(op.typing); }
    if (takeFocus) { ensureFocus(op.cm); }
  }

  function endOperation_finish(op) {
    var cm = op.cm, display = cm.display, doc = cm.doc;

    if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }

    // Abort mouse wheel delta measurement, when scrolling explicitly
    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))
      { display.wheelStartX = display.wheelStartY = null; }

    // Propagate the scroll position to the actual DOM scroller
    if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }

    if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }
    // If we need to scroll a specific position into view, do so.
    if (op.scrollToPos) {
      var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),
                                   clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);
      maybeScrollWindow(cm, rect);
    }

    // Fire events for markers that are hidden/unidden by editing or
    // undoing
    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;
    if (hidden) { for (var i = 0; i < hidden.length; ++i)
      { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } }
    if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)
      { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } }

    if (display.wrapper.offsetHeight)
      { doc.scrollTop = cm.display.scroller.scrollTop; }

    // Fire change events, and delayed event handlers
    if (op.changeObjs)
      { signal(cm, "changes", cm, op.changeObjs); }
    if (op.update)
      { op.update.finish(); }
  }

  // Run the given function in an operation
  function runInOp(cm, f) {
    if (cm.curOp) { return f() }
    startOperation(cm);
    try { return f() }
    finally { endOperation(cm); }
  }
  // Wraps a function in an operation. Returns the wrapped function.
  function operation(cm, f) {
    return function() {
      if (cm.curOp) { return f.apply(cm, arguments) }
      startOperation(cm);
      try { return f.apply(cm, arguments) }
      finally { endOperation(cm); }
    }
  }
  // Used to add methods to editor and doc instances, wrapping them in
  // operations.
  function methodOp(f) {
    return function() {
      if (this.curOp) { return f.apply(this, arguments) }
      startOperation(this);
      try { return f.apply(this, arguments) }
      finally { endOperation(this); }
    }
  }
  function docMethodOp(f) {
    return function() {
      var cm = this.cm;
      if (!cm || cm.curOp) { return f.apply(this, arguments) }
      startOperation(cm);
      try { return f.apply(this, arguments) }
      finally { endOperation(cm); }
    }
  }

  // HIGHLIGHT WORKER

  function startWorker(cm, time) {
    if (cm.doc.highlightFrontier < cm.display.viewTo)
      { cm.state.highlight.set(time, bind(highlightWorker, cm)); }
  }

  function highlightWorker(cm) {
    var doc = cm.doc;
    if (doc.highlightFrontier >= cm.display.viewTo) { return }
    var end = +new Date + cm.options.workTime;
    var context = getContextBefore(cm, doc.highlightFrontier);
    var changedLines = [];

    doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {
      if (context.line >= cm.display.viewFrom) { // Visible
        var oldStyles = line.styles;
        var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;
        var highlighted = highlightLine(cm, line, context, true);
        if (resetState) { context.state = resetState; }
        line.styles = highlighted.styles;
        var oldCls = line.styleClasses, newCls = highlighted.classes;
        if (newCls) { line.styleClasses = newCls; }
        else if (oldCls) { line.styleClasses = null; }
        var ischange = !oldStyles || oldStyles.length != line.styles.length ||
          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);
        for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }
        if (ischange) { changedLines.push(context.line); }
        line.stateAfter = context.save();
        context.nextLine();
      } else {
        if (line.text.length <= cm.options.maxHighlightLength)
          { processLine(cm, line.text, context); }
        line.stateAfter = context.line % 5 == 0 ? context.save() : null;
        context.nextLine();
      }
      if (+new Date > end) {
        startWorker(cm, cm.options.workDelay);
        return true
      }
    });
    doc.highlightFrontier = context.line;
    doc.modeFrontier = Math.max(doc.modeFrontier, context.line);
    if (changedLines.length) { runInOp(cm, function () {
      for (var i = 0; i < changedLines.length; i++)
        { regLineChange(cm, changedLines[i], "text"); }
    }); }
  }

  // DISPLAY DRAWING

  var DisplayUpdate = function(cm, viewport, force) {
    var display = cm.display;

    this.viewport = viewport;
    // Store some values that we'll need later (but don't want to force a relayout for)
    this.visible = visibleLines(display, cm.doc, viewport);
    this.editorIsHidden = !display.wrapper.offsetWidth;
    this.wrapperHeight = display.wrapper.clientHeight;
    this.wrapperWidth = display.wrapper.clientWidth;
    this.oldDisplayWidth = displayWidth(cm);
    this.force = force;
    this.dims = getDimensions(cm);
    this.events = [];
  };

  DisplayUpdate.prototype.signal = function (emitter, type) {
    if (hasHandler(emitter, type))
      { this.events.push(arguments); }
  };
  DisplayUpdate.prototype.finish = function () {
    for (var i = 0; i < this.events.length; i++)
      { signal.apply(null, this.events[i]); }
  };

  function maybeClipScrollbars(cm) {
    var display = cm.display;
    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {
      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;
      display.heightForcer.style.height = scrollGap(cm) + "px";
      display.sizer.style.marginBottom = -display.nativeBarWidth + "px";
      display.sizer.style.borderRightWidth = scrollGap(cm) + "px";
      display.scrollbarsClipped = true;
    }
  }

  function selectionSnapshot(cm) {
    if (cm.hasFocus()) { return null }
    var active = activeElt();
    if (!active || !contains(cm.display.lineDiv, active)) { return null }
    var result = {activeElt: active};
    if (window.getSelection) {
      var sel = window.getSelection();
      if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {
        result.anchorNode = sel.anchorNode;
        result.anchorOffset = sel.anchorOffset;
        result.focusNode = sel.focusNode;
        result.focusOffset = sel.focusOffset;
      }
    }
    return result
  }

  function restoreSelection(snapshot) {
    if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }
    snapshot.activeElt.focus();
    if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&
        snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {
      var sel = window.getSelection(), range = document.createRange();
      range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);
      range.collapse(false);
      sel.removeAllRanges();
      sel.addRange(range);
      sel.extend(snapshot.focusNode, snapshot.focusOffset);
    }
  }

  // Does the actual updating of the line display. Bails out
  // (returning false) when there is nothing to be done and forced is
  // false.
  function updateDisplayIfNeeded(cm, update) {
    var display = cm.display, doc = cm.doc;

    if (update.editorIsHidden) {
      resetView(cm);
      return false
    }

    // Bail out if the visible area is already rendered and nothing changed.
    if (!update.force &&
        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&
        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&
        display.renderedView == display.view && countDirtyView(cm) == 0)
      { return false }

    if (maybeUpdateLineNumberWidth(cm)) {
      resetView(cm);
      update.dims = getDimensions(cm);
    }

    // Compute a suitable new viewport (from & to)
    var end = doc.first + doc.size;
    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);
    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);
    if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }
    if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }
    if (sawCollapsedSpans) {
      from = visualLineNo(cm.doc, from);
      to = visualLineEndNo(cm.doc, to);
    }

    var different = from != display.viewFrom || to != display.viewTo ||
      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;
    adjustView(cm, from, to);

    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));
    // Position the mover div to align with the current scroll position
    cm.display.mover.style.top = display.viewOffset + "px";

    var toUpdate = countDirtyView(cm);
    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&
        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))
      { return false }

    // For big changes, we hide the enclosing element during the
    // update, since that speeds up the operations on most browsers.
    var selSnapshot = selectionSnapshot(cm);
    if (toUpdate > 4) { display.lineDiv.style.display = "none"; }
    patchDisplay(cm, display.updateLineNumbers, update.dims);
    if (toUpdate > 4) { display.lineDiv.style.display = ""; }
    display.renderedView = display.view;
    // There might have been a widget with a focused element that got
    // hidden or updated, if so re-focus it.
    restoreSelection(selSnapshot);

    // Prevent selection and cursors from interfering with the scroll
    // width and height.
    removeChildren(display.cursorDiv);
    removeChildren(display.selectionDiv);
    display.gutters.style.height = display.sizer.style.minHeight = 0;

    if (different) {
      display.lastWrapHeight = update.wrapperHeight;
      display.lastWrapWidth = update.wrapperWidth;
      startWorker(cm, 400);
    }

    display.updateLineNumbers = null;

    return true
  }

  function postUpdateDisplay(cm, update) {
    var viewport = update.viewport;

    for (var first = true;; first = false) {
      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
        // Clip forced viewport to actual scrollable area.
        if (viewport && viewport.top != null)
          { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }
        // Updated line heights might result in the drawn area not
        // actually covering the viewport. Keep looping until it does.
        update.visible = visibleLines(cm.display, cm.doc, viewport);
        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)
          { break }
      } else if (first) {
        update.visible = visibleLines(cm.display, cm.doc, viewport);
      }
      if (!updateDisplayIfNeeded(cm, update)) { break }
      updateHeightsInViewport(cm);
      var barMeasure = measureForScrollbars(cm);
      updateSelection(cm);
      updateScrollbars(cm, barMeasure);
      setDocumentHeight(cm, barMeasure);
      update.force = false;
    }

    update.signal(cm, "update", cm);
    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {
      update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo);
      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;
    }
  }

  function updateDisplaySimple(cm, viewport) {
    var update = new DisplayUpdate(cm, viewport);
    if (updateDisplayIfNeeded(cm, update)) {
      updateHeightsInViewport(cm);
      postUpdateDisplay(cm, update);
      var barMeasure = measureForScrollbars(cm);
      updateSelection(cm);
      updateScrollbars(cm, barMeasure);
      setDocumentHeight(cm, barMeasure);
      update.finish();
    }
  }

  // Sync the actual display DOM structure with display.view, removing
  // nodes for lines that are no longer in view, and creating the ones
  // that are not there yet, and updating the ones that are out of
  // date.
  function patchDisplay(cm, updateNumbersFrom, dims) {
    var display = cm.display, lineNumbers = cm.options.lineNumbers;
    var container = display.lineDiv, cur = container.firstChild;

    function rm(node) {
      var next = node.nextSibling;
      // Works around a throw-scroll bug in OS X Webkit
      if (webkit && mac && cm.display.currentWheelTarget == node)
        { node.style.display = "none"; }
      else
        { node.parentNode.removeChild(node); }
      return next
    }

    var view = display.view, lineN = display.viewFrom;
    // Loop over the elements in the view, syncing cur (the DOM nodes
    // in display.lineDiv) with the view as we go.
    for (var i = 0; i < view.length; i++) {
      var lineView = view[i];
      if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet
        var node = buildLineElement(cm, lineView, lineN, dims);
        container.insertBefore(node, cur);
      } else { // Already drawn
        while (cur != lineView.node) { cur = rm(cur); }
        var updateNumber = lineNumbers && updateNumbersFrom != null &&
          updateNumbersFrom <= lineN && lineView.lineNumber;
        if (lineView.changes) {
          if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; }
          updateLineForChanges(cm, lineView, lineN, dims);
        }
        if (updateNumber) {
          removeChildren(lineView.lineNumber);
          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));
        }
        cur = lineView.node.nextSibling;
      }
      lineN += lineView.size;
    }
    while (cur) { cur = rm(cur); }
  }

  function updateGutterSpace(display) {
    var width = display.gutters.offsetWidth;
    display.sizer.style.marginLeft = width + "px";
  }

  function setDocumentHeight(cm, measure) {
    cm.display.sizer.style.minHeight = measure.docHeight + "px";
    cm.display.heightForcer.style.top = measure.docHeight + "px";
    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px";
  }

  // Re-align line numbers and gutter marks to compensate for
  // horizontal scrolling.
  function alignHorizontally(cm) {
    var display = cm.display, view = display.view;
    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }
    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
    var gutterW = display.gutters.offsetWidth, left = comp + "px";
    for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {
      if (cm.options.fixedGutter) {
        if (view[i].gutter)
          { view[i].gutter.style.left = left; }
        if (view[i].gutterBackground)
          { view[i].gutterBackground.style.left = left; }
      }
      var align = view[i].alignable;
      if (align) { for (var j = 0; j < align.length; j++)
        { align[j].style.left = left; } }
    } }
    if (cm.options.fixedGutter)
      { display.gutters.style.left = (comp + gutterW) + "px"; }
  }

  // Used to ensure that the line number gutter is still the right
  // size for the current document size. Returns true when an update
  // is needed.
  function maybeUpdateLineNumberWidth(cm) {
    if (!cm.options.lineNumbers) { return false }
    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
    if (last.length != display.lineNumChars) {
      var test = display.measure.appendChild(elt("div", [elt("div", last)],
                                                 "CodeMirror-linenumber CodeMirror-gutter-elt"));
      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
      display.lineGutter.style.width = "";
      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;
      display.lineNumWidth = display.lineNumInnerWidth + padding;
      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
      display.lineGutter.style.width = display.lineNumWidth + "px";
      updateGutterSpace(cm.display);
      return true
    }
    return false
  }

  function getGutters(gutters, lineNumbers) {
    var result = [], sawLineNumbers = false;
    for (var i = 0; i < gutters.length; i++) {
      var name = gutters[i], style = null;
      if (typeof name != "string") { style = name.style; name = name.className; }
      if (name == "CodeMirror-linenumbers") {
        if (!lineNumbers) { continue }
        else { sawLineNumbers = true; }
      }
      result.push({className: name, style: style});
    }
    if (lineNumbers && !sawLineNumbers) { result.push({className: "CodeMirror-linenumbers", style: null}); }
    return result
  }

  // Rebuild the gutter elements, ensure the margin to the left of the
  // code matches their width.
  function renderGutters(display) {
    var gutters = display.gutters, specs = display.gutterSpecs;
    removeChildren(gutters);
    display.lineGutter = null;
    for (var i = 0; i < specs.length; ++i) {
      var ref = specs[i];
      var className = ref.className;
      var style = ref.style;
      var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className));
      if (style) { gElt.style.cssText = style; }
      if (className == "CodeMirror-linenumbers") {
        display.lineGutter = gElt;
        gElt.style.width = (display.lineNumWidth || 1) + "px";
      }
    }
    gutters.style.display = specs.length ? "" : "none";
    updateGutterSpace(display);
  }

  function updateGutters(cm) {
    renderGutters(cm.display);
    regChange(cm);
    alignHorizontally(cm);
  }

  // The display handles the DOM integration, both for input reading
  // and content drawing. It holds references to DOM nodes and
  // display-related state.

  function Display(place, doc, input, options) {
    var d = this;
    this.input = input;

    // Covers bottom-right square when both scrollbars are present.
    d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
    d.scrollbarFiller.setAttribute("cm-not-content", "true");
    // Covers bottom of gutter when coverGutterNextToScrollbar is on
    // and h scrollbar is present.
    d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
    d.gutterFiller.setAttribute("cm-not-content", "true");
    // Will contain the actual code, positioned to cover the viewport.
    d.lineDiv = eltP("div", null, "CodeMirror-code");
    // Elements are added to these to represent selection and cursors.
    d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
    d.cursorDiv = elt("div", null, "CodeMirror-cursors");
    // A visibility: hidden element used to find the size of things.
    d.measure = elt("div", null, "CodeMirror-measure");
    // When lines outside of the viewport are measured, they are drawn in this.
    d.lineMeasure = elt("div", null, "CodeMirror-measure");
    // Wraps everything that needs to exist inside the vertically-padded coordinate system
    d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],
                      null, "position: relative; outline: none");
    var lines = eltP("div", [d.lineSpace], "CodeMirror-lines");
    // Moved around its parent to cover visible view.
    d.mover = elt("div", [lines], null, "position: relative");
    // Set to the height of the document, allowing scrolling.
    d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
    d.sizerWidth = null;
    // Behavior of elts with overflow: auto and padding is
    // inconsistent across browsers. This is used to ensure the
    // scrollable area is big enough.
    d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;");
    // Will contain the gutters, if any.
    d.gutters = elt("div", null, "CodeMirror-gutters");
    d.lineGutter = null;
    // Actual scrollable element.
    d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
    d.scroller.setAttribute("tabIndex", "-1");
    // The element in which the editor lives.
    d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");

    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }
    if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }

    if (place) {
      if (place.appendChild) { place.appendChild(d.wrapper); }
      else { place(d.wrapper); }
    }

    // Current rendered range (may be bigger than the view window).
    d.viewFrom = d.viewTo = doc.first;
    d.reportedViewFrom = d.reportedViewTo = doc.first;
    // Information about the rendered lines.
    d.view = [];
    d.renderedView = null;
    // Holds info about a single rendered line when it was rendered
    // for measurement, while not in view.
    d.externalMeasured = null;
    // Empty space (in pixels) above the view
    d.viewOffset = 0;
    d.lastWrapHeight = d.lastWrapWidth = 0;
    d.updateLineNumbers = null;

    d.nativeBarWidth = d.barHeight = d.barWidth = 0;
    d.scrollbarsClipped = false;

    // Used to only resize the line number gutter when necessary (when
    // the amount of lines crosses a boundary that makes its width change)
    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
    // Set to true when a non-horizontal-scrolling line widget is
    // added. As an optimization, line widget aligning is skipped when
    // this is false.
    d.alignWidgets = false;

    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;

    // Tracks the maximum line length so that the horizontal scrollbar
    // can be kept static when scrolling.
    d.maxLine = null;
    d.maxLineLength = 0;
    d.maxLineChanged = false;

    // Used for measuring wheel scrolling granularity
    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;

    // True when shift is held down.
    d.shift = false;

    // Used to track whether anything happened since the context menu
    // was opened.
    d.selForContextMenu = null;

    d.activeTouch = null;

    d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);
    renderGutters(d);

    input.init(d);
  }

  // Since the delta values reported on mouse wheel events are
  // unstandardized between browsers and even browser versions, and
  // generally horribly unpredictable, this code starts by measuring
  // the scroll effect that the first few mouse wheel events have,
  // and, from that, detects the way it can convert deltas to pixel
  // offsets afterwards.
  //
  // The reason we want to know the amount a wheel event will scroll
  // is that it gives us a chance to update the display before the
  // actual scrolling happens, reducing flickering.

  var wheelSamples = 0, wheelPixelsPerUnit = null;
  // Fill in a browser-detected starting value on browsers where we
  // know one. These don't have to be accurate -- the result of them
  // being wrong would just be a slight flicker on the first wheel
  // scroll (if it is large enough).
  if (ie) { wheelPixelsPerUnit = -.53; }
  else if (gecko) { wheelPixelsPerUnit = 15; }
  else if (chrome) { wheelPixelsPerUnit = -.7; }
  else if (safari) { wheelPixelsPerUnit = -1/3; }

  function wheelEventDelta(e) {
    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;
    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }
    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }
    else if (dy == null) { dy = e.wheelDelta; }
    return {x: dx, y: dy}
  }
  function wheelEventPixels(e) {
    var delta = wheelEventDelta(e);
    delta.x *= wheelPixelsPerUnit;
    delta.y *= wheelPixelsPerUnit;
    return delta
  }

  function onScrollWheel(cm, e) {
    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;

    var display = cm.display, scroll = display.scroller;
    // Quit if there's nothing to scroll here
    var canScrollX = scroll.scrollWidth > scroll.clientWidth;
    var canScrollY = scroll.scrollHeight > scroll.clientHeight;
    if (!(dx && canScrollX || dy && canScrollY)) { return }

    // Webkit browsers on OS X abort momentum scrolls when the target
    // of the scroll event is removed from the scrollable element.
    // This hack (see related code in patchDisplay) makes sure the
    // element is kept around.
    if (dy && mac && webkit) {
      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
        for (var i = 0; i < view.length; i++) {
          if (view[i].node == cur) {
            cm.display.currentWheelTarget = cur;
            break outer
          }
        }
      }
    }

    // On some browsers, horizontal scrolling will cause redraws to
    // happen before the gutter has been realigned, causing it to
    // wriggle around in a most unseemly way. When we have an
    // estimated pixels/delta value, we just handle horizontal
    // scrolling entirely here. It'll be slightly off from native, but
    // better than glitching out.
    if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {
      if (dy && canScrollY)
        { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }
      setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));
      // Only prevent default scrolling if vertical scrolling is
      // actually possible. Otherwise, it causes vertical scroll
      // jitter on OSX trackpads when deltaX is small and deltaY
      // is large (issue #3579)
      if (!dy || (dy && canScrollY))
        { e_preventDefault(e); }
      display.wheelStartX = null; // Abort measurement, if in progress
      return
    }

    // 'Project' the visible viewport to cover the area that is being
    // scrolled into view (if we know enough to estimate it).
    if (dy && wheelPixelsPerUnit != null) {
      var pixels = dy * wheelPixelsPerUnit;
      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;
      if (pixels < 0) { top = Math.max(0, top + pixels - 50); }
      else { bot = Math.min(cm.doc.height, bot + pixels + 50); }
      updateDisplaySimple(cm, {top: top, bottom: bot});
    }

    if (wheelSamples < 20) {
      if (display.wheelStartX == null) {
        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;
        display.wheelDX = dx; display.wheelDY = dy;
        setTimeout(function () {
          if (display.wheelStartX == null) { return }
          var movedX = scroll.scrollLeft - display.wheelStartX;
          var movedY = scroll.scrollTop - display.wheelStartY;
          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
            (movedX && display.wheelDX && movedX / display.wheelDX);
          display.wheelStartX = display.wheelStartY = null;
          if (!sample) { return }
          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);
          ++wheelSamples;
        }, 200);
      } else {
        display.wheelDX += dx; display.wheelDY += dy;
      }
    }
  }

  // Selection objects are immutable. A new one is created every time
  // the selection changes. A selection is one or more non-overlapping
  // (and non-touching) ranges, sorted, and an integer that indicates
  // which one is the primary selection (the one that's scrolled into
  // view, that getCursor returns, etc).
  var Selection = function(ranges, primIndex) {
    this.ranges = ranges;
    this.primIndex = primIndex;
  };

  Selection.prototype.primary = function () { return this.ranges[this.primIndex] };

  Selection.prototype.equals = function (other) {
    if (other == this) { return true }
    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }
    for (var i = 0; i < this.ranges.length; i++) {
      var here = this.ranges[i], there = other.ranges[i];
      if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }
    }
    return true
  };

  Selection.prototype.deepCopy = function () {
    var out = [];
    for (var i = 0; i < this.ranges.length; i++)
      { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }
    return new Selection(out, this.primIndex)
  };

  Selection.prototype.somethingSelected = function () {
    for (var i = 0; i < this.ranges.length; i++)
      { if (!this.ranges[i].empty()) { return true } }
    return false
  };

  Selection.prototype.contains = function (pos, end) {
    if (!end) { end = pos; }
    for (var i = 0; i < this.ranges.length; i++) {
      var range = this.ranges[i];
      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
        { return i }
    }
    return -1
  };

  var Range = function(anchor, head) {
    this.anchor = anchor; this.head = head;
  };

  Range.prototype.from = function () { return minPos(this.anchor, this.head) };
  Range.prototype.to = function () { return maxPos(this.anchor, this.head) };
  Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };

  // Take an unsorted, potentially overlapping set of ranges, and
  // build a selection out of it. 'Consumes' ranges array (modifying
  // it).
  function normalizeSelection(cm, ranges, primIndex) {
    var mayTouch = cm && cm.options.selectionsMayTouch;
    var prim = ranges[primIndex];
    ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });
    primIndex = indexOf(ranges, prim);
    for (var i = 1; i < ranges.length; i++) {
      var cur = ranges[i], prev = ranges[i - 1];
      var diff = cmp(prev.to(), cur.from());
      if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {
        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());
        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;
        if (i <= primIndex) { --primIndex; }
        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));
      }
    }
    return new Selection(ranges, primIndex)
  }

  function simpleSelection(anchor, head) {
    return new Selection([new Range(anchor, head || anchor)], 0)
  }

  // Compute the position of the end of a change (its 'to' property
  // refers to the pre-change end).
  function changeEnd(change) {
    if (!change.text) { return change.to }
    return Pos(change.from.line + change.text.length - 1,
               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))
  }

  // Adjust a position to refer to the post-change position of the
  // same text, or the end of the change if the change covers it.
  function adjustForChange(pos, change) {
    if (cmp(pos, change.from) < 0) { return pos }
    if (cmp(pos, change.to) <= 0) { return changeEnd(change) }

    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;
    if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }
    return Pos(line, ch)
  }

  function computeSelAfterChange(doc, change) {
    var out = [];
    for (var i = 0; i < doc.sel.ranges.length; i++) {
      var range = doc.sel.ranges[i];
      out.push(new Range(adjustForChange(range.anchor, change),
                         adjustForChange(range.head, change)));
    }
    return normalizeSelection(doc.cm, out, doc.sel.primIndex)
  }

  function offsetPos(pos, old, nw) {
    if (pos.line == old.line)
      { return Pos(nw.line, pos.ch - old.ch + nw.ch) }
    else
      { return Pos(nw.line + (pos.line - old.line), pos.ch) }
  }

  // Used by replaceSelections to allow moving the selection to the
  // start or around the replaced test. Hint may be "start" or "around".
  function computeReplacedSel(doc, changes, hint) {
    var out = [];
    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;
    for (var i = 0; i < changes.length; i++) {
      var change = changes[i];
      var from = offsetPos(change.from, oldPrev, newPrev);
      var to = offsetPos(changeEnd(change), oldPrev, newPrev);
      oldPrev = change.to;
      newPrev = to;
      if (hint == "around") {
        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;
        out[i] = new Range(inv ? to : from, inv ? from : to);
      } else {
        out[i] = new Range(from, from);
      }
    }
    return new Selection(out, doc.sel.primIndex)
  }

  // Used to get the editor into a consistent state again when options change.

  function loadMode(cm) {
    cm.doc.mode = getMode(cm.options, cm.doc.modeOption);
    resetModeState(cm);
  }

  function resetModeState(cm) {
    cm.doc.iter(function (line) {
      if (line.stateAfter) { line.stateAfter = null; }
      if (line.styles) { line.styles = null; }
    });
    cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;
    startWorker(cm, 100);
    cm.state.modeGen++;
    if (cm.curOp) { regChange(cm); }
  }

  // DOCUMENT DATA STRUCTURE

  // By default, updates that start and end at the beginning of a line
  // are treated specially, in order to make the association of line
  // widgets and marker elements with the text behave more intuitive.
  function isWholeLineUpdate(doc, change) {
    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" &&
      (!doc.cm || doc.cm.options.wholeLineUpdateBefore)
  }

  // Perform a change on the document data structure.
  function updateDoc(doc, change, markedSpans, estimateHeight) {
    function spansFor(n) {return markedSpans ? markedSpans[n] : null}
    function update(line, text, spans) {
      updateLine(line, text, spans, estimateHeight);
      signalLater(line, "change", line, change);
    }
    function linesFor(start, end) {
      var result = [];
      for (var i = start; i < end; ++i)
        { result.push(new Line(text[i], spansFor(i), estimateHeight)); }
      return result
    }

    var from = change.from, to = change.to, text = change.text;
    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);
    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;

    // Adjust the line structure
    if (change.full) {
      doc.insert(0, linesFor(0, text.length));
      doc.remove(text.length, doc.size - text.length);
    } else if (isWholeLineUpdate(doc, change)) {
      // This is a whole-line replace. Treated specially to make
      // sure line objects move the way they are supposed to.
      var added = linesFor(0, text.length - 1);
      update(lastLine, lastLine.text, lastSpans);
      if (nlines) { doc.remove(from.line, nlines); }
      if (added.length) { doc.insert(from.line, added); }
    } else if (firstLine == lastLine) {
      if (text.length == 1) {
        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);
      } else {
        var added$1 = linesFor(1, text.length - 1);
        added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));
        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
        doc.insert(from.line + 1, added$1);
      }
    } else if (text.length == 1) {
      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));
      doc.remove(from.line + 1, nlines);
    } else {
      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);
      var added$2 = linesFor(1, text.length - 1);
      if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }
      doc.insert(from.line + 1, added$2);
    }

    signalLater(doc, "change", doc, change);
  }

  // Call f for all linked documents.
  function linkedDocs(doc, f, sharedHistOnly) {
    function propagate(doc, skip, sharedHist) {
      if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {
        var rel = doc.linked[i];
        if (rel.doc == skip) { continue }
        var shared = sharedHist && rel.sharedHist;
        if (sharedHistOnly && !shared) { continue }
        f(rel.doc, shared);
        propagate(rel.doc, doc, shared);
      } }
    }
    propagate(doc, null, true);
  }

  // Attach a document to an editor.
  function attachDoc(cm, doc) {
    if (doc.cm) { throw new Error("This document is already in use.") }
    cm.doc = doc;
    doc.cm = cm;
    estimateLineHeights(cm);
    loadMode(cm);
    setDirectionClass(cm);
    if (!cm.options.lineWrapping) { findMaxLine(cm); }
    cm.options.mode = doc.modeOption;
    regChange(cm);
  }

  function setDirectionClass(cm) {
  (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl");
  }

  function directionChanged(cm) {
    runInOp(cm, function () {
      setDirectionClass(cm);
      regChange(cm);
    });
  }

  function History(startGen) {
    // Arrays of change events and selections. Doing something adds an
    // event to done and clears undo. Undoing moves events from done
    // to undone, redoing moves them in the other direction.
    this.done = []; this.undone = [];
    this.undoDepth = Infinity;
    // Used to track when changes can be merged into a single undo
    // event
    this.lastModTime = this.lastSelTime = 0;
    this.lastOp = this.lastSelOp = null;
    this.lastOrigin = this.lastSelOrigin = null;
    // Used by the isClean() method
    this.generation = this.maxGeneration = startGen || 1;
  }

  // Create a history change event from an updateDoc-style change
  // object.
  function historyChangeFromChange(doc, change) {
    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};
    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);
    linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);
    return histChange
  }

  // Pop all selection events off the end of a history array. Stop at
  // a change event.
  function clearSelectionEvents(array) {
    while (array.length) {
      var last = lst(array);
      if (last.ranges) { array.pop(); }
      else { break }
    }
  }

  // Find the top change event in the history. Pop off selection
  // events that are in the way.
  function lastChangeEvent(hist, force) {
    if (force) {
      clearSelectionEvents(hist.done);
      return lst(hist.done)
    } else if (hist.done.length && !lst(hist.done).ranges) {
      return lst(hist.done)
    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {
      hist.done.pop();
      return lst(hist.done)
    }
  }

  // Register a change in the history. Merges changes that are within
  // a single operation, or are close together with an origin that
  // allows merging (starting with "+") into a single event.
  function addChangeToHistory(doc, change, selAfter, opId) {
    var hist = doc.history;
    hist.undone.length = 0;
    var time = +new Date, cur;
    var last;

    if ((hist.lastOp == opId ||
         hist.lastOrigin == change.origin && change.origin &&
         ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||
          change.origin.charAt(0) == "*")) &&
        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {
      // Merge this change into the last event
      last = lst(cur.changes);
      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {
        // Optimized case for simple insertion -- don't want to add
        // new changesets for every character typed
        last.to = changeEnd(change);
      } else {
        // Add new sub-event
        cur.changes.push(historyChangeFromChange(doc, change));
      }
    } else {
      // Can not be merged, start a new event.
      var before = lst(hist.done);
      if (!before || !before.ranges)
        { pushSelectionToHistory(doc.sel, hist.done); }
      cur = {changes: [historyChangeFromChange(doc, change)],
             generation: hist.generation};
      hist.done.push(cur);
      while (hist.done.length > hist.undoDepth) {
        hist.done.shift();
        if (!hist.done[0].ranges) { hist.done.shift(); }
      }
    }
    hist.done.push(selAfter);
    hist.generation = ++hist.maxGeneration;
    hist.lastModTime = hist.lastSelTime = time;
    hist.lastOp = hist.lastSelOp = opId;
    hist.lastOrigin = hist.lastSelOrigin = change.origin;

    if (!last) { signal(doc, "historyAdded"); }
  }

  function selectionEventCanBeMerged(doc, origin, prev, sel) {
    var ch = origin.charAt(0);
    return ch == "*" ||
      ch == "+" &&
      prev.ranges.length == sel.ranges.length &&
      prev.somethingSelected() == sel.somethingSelected() &&
      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)
  }

  // Called whenever the selection changes, sets the new selection as
  // the pending selection in the history, and pushes the old pending
  // selection into the 'done' array when it was significantly
  // different (in number of selected ranges, emptiness, or time).
  function addSelectionToHistory(doc, sel, opId, options) {
    var hist = doc.history, origin = options && options.origin;

    // A new event is started when the previous origin does not match
    // the current, or the origins don't allow matching. Origins
    // starting with * are always merged, those starting with + are
    // merged when similar and close together in time.
    if (opId == hist.lastSelOp ||
        (origin && hist.lastSelOrigin == origin &&
         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||
          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))
      { hist.done[hist.done.length - 1] = sel; }
    else
      { pushSelectionToHistory(sel, hist.done); }

    hist.lastSelTime = +new Date;
    hist.lastSelOrigin = origin;
    hist.lastSelOp = opId;
    if (options && options.clearRedo !== false)
      { clearSelectionEvents(hist.undone); }
  }

  function pushSelectionToHistory(sel, dest) {
    var top = lst(dest);
    if (!(top && top.ranges && top.equals(sel)))
      { dest.push(sel); }
  }

  // Used to store marked span information in the history.
  function attachLocalSpans(doc, change, from, to) {
    var existing = change["spans_" + doc.id], n = 0;
    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {
      if (line.markedSpans)
        { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; }
      ++n;
    });
  }

  // When un/re-doing restores text containing marked spans, those
  // that have been explicitly cleared should not be restored.
  function removeClearedSpans(spans) {
    if (!spans) { return null }
    var out;
    for (var i = 0; i < spans.length; ++i) {
      if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }
      else if (out) { out.push(spans[i]); }
    }
    return !out ? spans : out.length ? out : null
  }

  // Retrieve and filter the old marked spans stored in a change event.
  function getOldSpans(doc, change) {
    var found = change["spans_" + doc.id];
    if (!found) { return null }
    var nw = [];
    for (var i = 0; i < change.text.length; ++i)
      { nw.push(removeClearedSpans(found[i])); }
    return nw
  }

  // Used for un/re-doing changes from the history. Combines the
  // result of computing the existing spans with the set of spans that
  // existed in the history (so that deleting around a span and then
  // undoing brings back the span).
  function mergeOldSpans(doc, change) {
    var old = getOldSpans(doc, change);
    var stretched = stretchSpansOverChange(doc, change);
    if (!old) { return stretched }
    if (!stretched) { return old }

    for (var i = 0; i < old.length; ++i) {
      var oldCur = old[i], stretchCur = stretched[i];
      if (oldCur && stretchCur) {
        spans: for (var j = 0; j < stretchCur.length; ++j) {
          var span = stretchCur[j];
          for (var k = 0; k < oldCur.length; ++k)
            { if (oldCur[k].marker == span.marker) { continue spans } }
          oldCur.push(span);
        }
      } else if (stretchCur) {
        old[i] = stretchCur;
      }
    }
    return old
  }

  // Used both to provide a JSON-safe object in .getHistory, and, when
  // detaching a document, to split the history in two
  function copyHistoryArray(events, newGroup, instantiateSel) {
    var copy = [];
    for (var i = 0; i < events.length; ++i) {
      var event = events[i];
      if (event.ranges) {
        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);
        continue
      }
      var changes = event.changes, newChanges = [];
      copy.push({changes: newChanges});
      for (var j = 0; j < changes.length; ++j) {
        var change = changes[j], m = (void 0);
        newChanges.push({from: change.from, to: change.to, text: change.text});
        if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) {
          if (indexOf(newGroup, Number(m[1])) > -1) {
            lst(newChanges)[prop] = change[prop];
            delete change[prop];
          }
        } } }
      }
    }
    return copy
  }

  // The 'scroll' parameter given to many of these indicated whether
  // the new cursor position should be scrolled into view after
  // modifying the selection.

  // If shift is held or the extend flag is set, extends a range to
  // include a given position (and optionally a second position).
  // Otherwise, simply returns the range between the given positions.
  // Used for cursor motion and such.
  function extendRange(range, head, other, extend) {
    if (extend) {
      var anchor = range.anchor;
      if (other) {
        var posBefore = cmp(head, anchor) < 0;
        if (posBefore != (cmp(other, anchor) < 0)) {
          anchor = head;
          head = other;
        } else if (posBefore != (cmp(head, other) < 0)) {
          head = other;
        }
      }
      return new Range(anchor, head)
    } else {
      return new Range(other || head, head)
    }
  }

  // Extend the primary selection range, discard the rest.
  function extendSelection(doc, head, other, options, extend) {
    if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }
    setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);
  }

  // Extend all selections (pos is an array of selections with length
  // equal the number of selections)
  function extendSelections(doc, heads, options) {
    var out = [];
    var extend = doc.cm && (doc.cm.display.shift || doc.extend);
    for (var i = 0; i < doc.sel.ranges.length; i++)
      { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }
    var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);
    setSelection(doc, newSel, options);
  }

  // Updates a single range in the selection.
  function replaceOneSelection(doc, i, range, options) {
    var ranges = doc.sel.ranges.slice(0);
    ranges[i] = range;
    setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);
  }

  // Reset the selection to a single range.
  function setSimpleSelection(doc, anchor, head, options) {
    setSelection(doc, simpleSelection(anchor, head), options);
  }

  // Give beforeSelectionChange handlers a change to influence a
  // selection update.
  function filterSelectionChange(doc, sel, options) {
    var obj = {
      ranges: sel.ranges,
      update: function(ranges) {
        this.ranges = [];
        for (var i = 0; i < ranges.length; i++)
          { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),
                                     clipPos(doc, ranges[i].head)); }
      },
      origin: options && options.origin
    };
    signal(doc, "beforeSelectionChange", doc, obj);
    if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); }
    if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }
    else { return sel }
  }

  function setSelectionReplaceHistory(doc, sel, options) {
    var done = doc.history.done, last = lst(done);
    if (last && last.ranges) {
      done[done.length - 1] = sel;
      setSelectionNoUndo(doc, sel, options);
    } else {
      setSelection(doc, sel, options);
    }
  }

  // Set a new selection.
  function setSelection(doc, sel, options) {
    setSelectionNoUndo(doc, sel, options);
    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);
  }

  function setSelectionNoUndo(doc, sel, options) {
    if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange"))
      { sel = filterSelectionChange(doc, sel, options); }

    var bias = options && options.bias ||
      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);
    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));

    if (!(options && options.scroll === false) && doc.cm)
      { ensureCursorVisible(doc.cm); }
  }

  function setSelectionInner(doc, sel) {
    if (sel.equals(doc.sel)) { return }

    doc.sel = sel;

    if (doc.cm) {
      doc.cm.curOp.updateInput = 1;
      doc.cm.curOp.selectionChanged = true;
      signalCursorActivity(doc.cm);
    }
    signalLater(doc, "cursorActivity", doc);
  }

  // Verify that the selection does not partially select any atomic
  // marked ranges.
  function reCheckSelection(doc) {
    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));
  }

  // Return a selection that does not partially select any atomic
  // ranges.
  function skipAtomicInSelection(doc, sel, bias, mayClear) {
    var out;
    for (var i = 0; i < sel.ranges.length; i++) {
      var range = sel.ranges[i];
      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];
      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);
      var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);
      if (out || newAnchor != range.anchor || newHead != range.head) {
        if (!out) { out = sel.ranges.slice(0, i); }
        out[i] = new Range(newAnchor, newHead);
      }
    }
    return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel
  }

  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {
    var line = getLine(doc, pos.line);
    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
      var sp = line.markedSpans[i], m = sp.marker;

      // Determine if we should prevent the cursor being placed to the left/right of an atomic marker
      // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it
      // is with selectLeft/Right
      var preventCursorLeft = ("selectLeft" in m) ? !m.selectLeft : m.inclusiveLeft;
      var preventCursorRight = ("selectRight" in m) ? !m.selectRight : m.inclusiveRight;

      if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&
          (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {
        if (mayClear) {
          signal(m, "beforeCursorEnter");
          if (m.explicitlyCleared) {
            if (!line.markedSpans) { break }
            else {--i; continue}
          }
        }
        if (!m.atomic) { continue }

        if (oldPos) {
          var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);
          if (dir < 0 ? preventCursorRight : preventCursorLeft)
            { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }
          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))
            { return skipAtomicInner(doc, near, pos, dir, mayClear) }
        }

        var far = m.find(dir < 0 ? -1 : 1);
        if (dir < 0 ? preventCursorLeft : preventCursorRight)
          { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }
        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null
      }
    } }
    return pos
  }

  // Ensure a given position is not inside an atomic range.
  function skipAtomic(doc, pos, oldPos, bias, mayClear) {
    var dir = bias || 1;
    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||
        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||
        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||
        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));
    if (!found) {
      doc.cantEdit = true;
      return Pos(doc.first, 0)
    }
    return found
  }

  function movePos(doc, pos, dir, line) {
    if (dir < 0 && pos.ch == 0) {
      if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }
      else { return null }
    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {
      if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }
      else { return null }
    } else {
      return new Pos(pos.line, pos.ch + dir)
    }
  }

  function selectAll(cm) {
    cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);
  }

  // UPDATING

  // Allow "beforeChange" event handlers to influence a change
  function filterChange(doc, change, update) {
    var obj = {
      canceled: false,
      from: change.from,
      to: change.to,
      text: change.text,
      origin: change.origin,
      cancel: function () { return obj.canceled = true; }
    };
    if (update) { obj.update = function (from, to, text, origin) {
      if (from) { obj.from = clipPos(doc, from); }
      if (to) { obj.to = clipPos(doc, to); }
      if (text) { obj.text = text; }
      if (origin !== undefined) { obj.origin = origin; }
    }; }
    signal(doc, "beforeChange", doc, obj);
    if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); }

    if (obj.canceled) {
      if (doc.cm) { doc.cm.curOp.updateInput = 2; }
      return null
    }
    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}
  }

  // Apply a change to a document, and add it to the document's
  // history, and propagating it to all linked documents.
  function makeChange(doc, change, ignoreReadOnly) {
    if (doc.cm) {
      if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }
      if (doc.cm.state.suppressEdits) { return }
    }

    if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
      change = filterChange(doc, change, true);
      if (!change) { return }
    }

    // Possibly split or suppress the update based on the presence
    // of read-only spans in its range.
    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);
    if (split) {
      for (var i = split.length - 1; i >= 0; --i)
        { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); }
    } else {
      makeChangeInner(doc, change);
    }
  }

  function makeChangeInner(doc, change) {
    if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return }
    var selAfter = computeSelAfterChange(doc, change);
    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);

    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));
    var rebased = [];

    linkedDocs(doc, function (doc, sharedHist) {
      if (!sharedHist && indexOf(rebased, doc.history) == -1) {
        rebaseHist(doc.history, change);
        rebased.push(doc.history);
      }
      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));
    });
  }

  // Revert a change stored in a document's history.
  function makeChangeFromHistory(doc, type, allowSelectionOnly) {
    var suppress = doc.cm && doc.cm.state.suppressEdits;
    if (suppress && !allowSelectionOnly) { return }

    var hist = doc.history, event, selAfter = doc.sel;
    var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done;

    // Verify that there is a useable event (so that ctrl-z won't
    // needlessly clear selection events)
    var i = 0;
    for (; i < source.length; i++) {
      event = source[i];
      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)
        { break }
    }
    if (i == source.length) { return }
    hist.lastOrigin = hist.lastSelOrigin = null;

    for (;;) {
      event = source.pop();
      if (event.ranges) {
        pushSelectionToHistory(event, dest);
        if (allowSelectionOnly && !event.equals(doc.sel)) {
          setSelection(doc, event, {clearRedo: false});
          return
        }
        selAfter = event;
      } else if (suppress) {
        source.push(event);
        return
      } else { break }
    }

    // Build up a reverse change object to add to the opposite history
    // stack (redo when undoing, and vice versa).
    var antiChanges = [];
    pushSelectionToHistory(selAfter, dest);
    dest.push({changes: antiChanges, generation: hist.generation});
    hist.generation = event.generation || ++hist.maxGeneration;

    var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange");

    var loop = function ( i ) {
      var change = event.changes[i];
      change.origin = type;
      if (filter && !filterChange(doc, change, false)) {
        source.length = 0;
        return {}
      }

      antiChanges.push(historyChangeFromChange(doc, change));

      var after = i ? computeSelAfterChange(doc, change) : lst(source);
      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));
      if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }
      var rebased = [];

      // Propagate to the linked documents
      linkedDocs(doc, function (doc, sharedHist) {
        if (!sharedHist && indexOf(rebased, doc.history) == -1) {
          rebaseHist(doc.history, change);
          rebased.push(doc.history);
        }
        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));
      });
    };

    for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {
      var returned = loop( i$1 );

      if ( returned ) return returned.v;
    }
  }

  // Sub-views need their line numbers shifted when text is added
  // above or below them in the parent document.
  function shiftDoc(doc, distance) {
    if (distance == 0) { return }
    doc.first += distance;
    doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(
      Pos(range.anchor.line + distance, range.anchor.ch),
      Pos(range.head.line + distance, range.head.ch)
    ); }), doc.sel.primIndex);
    if (doc.cm) {
      regChange(doc.cm, doc.first, doc.first - distance, distance);
      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)
        { regLineChange(doc.cm, l, "gutter"); }
    }
  }

  // More lower-level change function, handling only a single document
  // (not linked ones).
  function makeChangeSingleDoc(doc, change, selAfter, spans) {
    if (doc.cm && !doc.cm.curOp)
      { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }

    if (change.to.line < doc.first) {
      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));
      return
    }
    if (change.from.line > doc.lastLine()) { return }

    // Clip the change to the size of this doc
    if (change.from.line < doc.first) {
      var shift = change.text.length - 1 - (doc.first - change.from.line);
      shiftDoc(doc, shift);
      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
                text: [lst(change.text)], origin: change.origin};
    }
    var last = doc.lastLine();
    if (change.to.line > last) {
      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
                text: [change.text[0]], origin: change.origin};
    }

    change.removed = getBetween(doc, change.from, change.to);

    if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }
    if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }
    else { updateDoc(doc, change, spans); }
    setSelectionNoUndo(doc, selAfter, sel_dontScroll);

    if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))
      { doc.cantEdit = false; }
  }

  // Handle the interaction of a change to a document with the editor
  // that this document is part of.
  function makeChangeSingleDocInEditor(cm, change, spans) {
    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;

    var recomputeMaxLength = false, checkWidthStart = from.line;
    if (!cm.options.lineWrapping) {
      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));
      doc.iter(checkWidthStart, to.line + 1, function (line) {
        if (line == display.maxLine) {
          recomputeMaxLength = true;
          return true
        }
      });
    }

    if (doc.sel.contains(change.from, change.to) > -1)
      { signalCursorActivity(cm); }

    updateDoc(doc, change, spans, estimateHeight(cm));

    if (!cm.options.lineWrapping) {
      doc.iter(checkWidthStart, from.line + change.text.length, function (line) {
        var len = lineLength(line);
        if (len > display.maxLineLength) {
          display.maxLine = line;
          display.maxLineLength = len;
          display.maxLineChanged = true;
          recomputeMaxLength = false;
        }
      });
      if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }
    }

    retreatFrontier(doc, from.line);
    startWorker(cm, 400);

    var lendiff = change.text.length - (to.line - from.line) - 1;
    // Remember that these lines changed, for updating the display
    if (change.full)
      { regChange(cm); }
    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))
      { regLineChange(cm, from.line, "text"); }
    else
      { regChange(cm, from.line, to.line + 1, lendiff); }

    var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change");
    if (changeHandler || changesHandler) {
      var obj = {
        from: from, to: to,
        text: change.text,
        removed: change.removed,
        origin: change.origin
      };
      if (changeHandler) { signalLater(cm, "change", cm, obj); }
      if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }
    }
    cm.display.selForContextMenu = null;
  }

  function replaceRange(doc, code, from, to, origin) {
    var assign;

    if (!to) { to = from; }
    if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }
    if (typeof code == "string") { code = doc.splitLines(code); }
    makeChange(doc, {from: from, to: to, text: code, origin: origin});
  }

  // Rebasing/resetting history to deal with externally-sourced changes

  function rebaseHistSelSingle(pos, from, to, diff) {
    if (to < pos.line) {
      pos.line += diff;
    } else if (from < pos.line) {
      pos.line = from;
      pos.ch = 0;
    }
  }

  // Tries to rebase an array of history events given a change in the
  // document. If the change touches the same lines as the event, the
  // event, and everything 'behind' it, is discarded. If the change is
  // before the event, the event's positions are updated. Uses a
  // copy-on-write scheme for the positions, to avoid having to
  // reallocate them all on every rebase, but also avoid problems with
  // shared position objects being unsafely updated.
  function rebaseHistArray(array, from, to, diff) {
    for (var i = 0; i < array.length; ++i) {
      var sub = array[i], ok = true;
      if (sub.ranges) {
        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }
        for (var j = 0; j < sub.ranges.length; j++) {
          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);
          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);
        }
        continue
      }
      for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {
        var cur = sub.changes[j$1];
        if (to < cur.from.line) {
          cur.from = Pos(cur.from.line + diff, cur.from.ch);
          cur.to = Pos(cur.to.line + diff, cur.to.ch);
        } else if (from <= cur.to.line) {
          ok = false;
          break
        }
      }
      if (!ok) {
        array.splice(0, i + 1);
        i = 0;
      }
    }
  }

  function rebaseHist(hist, change) {
    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;
    rebaseHistArray(hist.done, from, to, diff);
    rebaseHistArray(hist.undone, from, to, diff);
  }

  // Utility for applying a change to a line by handle or number,
  // returning the number and optionally registering the line as
  // changed.
  function changeLine(doc, handle, changeType, op) {
    var no = handle, line = handle;
    if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); }
    else { no = lineNo(handle); }
    if (no == null) { return null }
    if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }
    return line
  }

  // The document is represented as a BTree consisting of leaves, with
  // chunk of lines in them, and branches, with up to ten leaves or
  // other branch nodes below them. The top node is always a branch
  // node, and is the document object itself (meaning it has
  // additional methods and properties).
  //
  // All nodes have parent links. The tree is used both to go from
  // line numbers to line objects, and to go from objects to numbers.
  // It also indexes by height, and is used to convert between height
  // and line object, and to find the total height of the document.
  //
  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html

  function LeafChunk(lines) {
    this.lines = lines;
    this.parent = null;
    var height = 0;
    for (var i = 0; i < lines.length; ++i) {
      lines[i].parent = this;
      height += lines[i].height;
    }
    this.height = height;
  }

  LeafChunk.prototype = {
    chunkSize: function() { return this.lines.length },

    // Remove the n lines at offset 'at'.
    removeInner: function(at, n) {
      for (var i = at, e = at + n; i < e; ++i) {
        var line = this.lines[i];
        this.height -= line.height;
        cleanUpLine(line);
        signalLater(line, "delete");
      }
      this.lines.splice(at, n);
    },

    // Helper used to collapse a small branch into a single leaf.
    collapse: function(lines) {
      lines.push.apply(lines, this.lines);
    },

    // Insert the given array of lines at offset 'at', count them as
    // having the given height.
    insertInner: function(at, lines, height) {
      this.height += height;
      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));
      for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }
    },

    // Used to iterate over a part of the tree.
    iterN: function(at, n, op) {
      for (var e = at + n; at < e; ++at)
        { if (op(this.lines[at])) { return true } }
    }
  };

  function BranchChunk(children) {
    this.children = children;
    var size = 0, height = 0;
    for (var i = 0; i < children.length; ++i) {
      var ch = children[i];
      size += ch.chunkSize(); height += ch.height;
      ch.parent = this;
    }
    this.size = size;
    this.height = height;
    this.parent = null;
  }

  BranchChunk.prototype = {
    chunkSize: function() { return this.size },

    removeInner: function(at, n) {
      this.size -= n;
      for (var i = 0; i < this.children.length; ++i) {
        var child = this.children[i], sz = child.chunkSize();
        if (at < sz) {
          var rm = Math.min(n, sz - at), oldHeight = child.height;
          child.removeInner(at, rm);
          this.height -= oldHeight - child.height;
          if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }
          if ((n -= rm) == 0) { break }
          at = 0;
        } else { at -= sz; }
      }
      // If the result is smaller than 25 lines, ensure that it is a
      // single leaf node.
      if (this.size - n < 25 &&
          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {
        var lines = [];
        this.collapse(lines);
        this.children = [new LeafChunk(lines)];
        this.children[0].parent = this;
      }
    },

    collapse: function(lines) {
      for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }
    },

    insertInner: function(at, lines, height) {
      this.size += lines.length;
      this.height += height;
      for (var i = 0; i < this.children.length; ++i) {
        var child = this.children[i], sz = child.chunkSize();
        if (at <= sz) {
          child.insertInner(at, lines, height);
          if (child.lines && child.lines.length > 50) {
            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.
            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.
            var remaining = child.lines.length % 25 + 25;
            for (var pos = remaining; pos < child.lines.length;) {
              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));
              child.height -= leaf.height;
              this.children.splice(++i, 0, leaf);
              leaf.parent = this;
            }
            child.lines = child.lines.slice(0, remaining);
            this.maybeSpill();
          }
          break
        }
        at -= sz;
      }
    },

    // When a node has grown, check whether it should be split.
    maybeSpill: function() {
      if (this.children.length <= 10) { return }
      var me = this;
      do {
        var spilled = me.children.splice(me.children.length - 5, 5);
        var sibling = new BranchChunk(spilled);
        if (!me.parent) { // Become the parent node
          var copy = new BranchChunk(me.children);
          copy.parent = me;
          me.children = [copy, sibling];
          me = copy;
       } else {
          me.size -= sibling.size;
          me.height -= sibling.height;
          var myIndex = indexOf(me.parent.children, me);
          me.parent.children.splice(myIndex + 1, 0, sibling);
        }
        sibling.parent = me.parent;
      } while (me.children.length > 10)
      me.parent.maybeSpill();
    },

    iterN: function(at, n, op) {
      for (var i = 0; i < this.children.length; ++i) {
        var child = this.children[i], sz = child.chunkSize();
        if (at < sz) {
          var used = Math.min(n, sz - at);
          if (child.iterN(at, used, op)) { return true }
          if ((n -= used) == 0) { break }
          at = 0;
        } else { at -= sz; }
      }
    }
  };

  // Line widgets are block elements displayed above or below a line.

  var LineWidget = function(doc, node, options) {
    if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))
      { this[opt] = options[opt]; } } }
    this.doc = doc;
    this.node = node;
  };

  LineWidget.prototype.clear = function () {
    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);
    if (no == null || !ws) { return }
    for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }
    if (!ws.length) { line.widgets = null; }
    var height = widgetHeight(this);
    updateLineHeight(line, Math.max(0, line.height - height));
    if (cm) {
      runInOp(cm, function () {
        adjustScrollWhenAboveVisible(cm, line, -height);
        regLineChange(cm, no, "widget");
      });
      signalLater(cm, "lineWidgetCleared", cm, this, no);
    }
  };

  LineWidget.prototype.changed = function () {
      var this$1 = this;

    var oldH = this.height, cm = this.doc.cm, line = this.line;
    this.height = null;
    var diff = widgetHeight(this) - oldH;
    if (!diff) { return }
    if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }
    if (cm) {
      runInOp(cm, function () {
        cm.curOp.forceUpdate = true;
        adjustScrollWhenAboveVisible(cm, line, diff);
        signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line));
      });
    }
  };
  eventMixin(LineWidget);

  function adjustScrollWhenAboveVisible(cm, line, diff) {
    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))
      { addToScrollTop(cm, diff); }
  }

  function addLineWidget(doc, handle, node, options) {
    var widget = new LineWidget(doc, node, options);
    var cm = doc.cm;
    if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }
    changeLine(doc, handle, "widget", function (line) {
      var widgets = line.widgets || (line.widgets = []);
      if (widget.insertAt == null) { widgets.push(widget); }
      else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }
      widget.line = line;
      if (cm && !lineIsHidden(doc, line)) {
        var aboveVisible = heightAtLine(line) < doc.scrollTop;
        updateLineHeight(line, line.height + widgetHeight(widget));
        if (aboveVisible) { addToScrollTop(cm, widget.height); }
        cm.curOp.forceUpdate = true;
      }
      return true
    });
    if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); }
    return widget
  }

  // TEXTMARKERS

  // Created with markText and setBookmark methods. A TextMarker is a
  // handle that can be used to clear or find a marked position in the
  // document. Line objects hold arrays (markedSpans) containing
  // {from, to, marker} object pointing to such marker objects, and
  // indicating that such a marker is present on that line. Multiple
  // lines may point to the same marker when it spans across lines.
  // The spans will have null for their from/to properties when the
  // marker continues beyond the start/end of the line. Markers have
  // links back to the lines they currently touch.

  // Collapsed markers have unique ids, in order to be able to order
  // them, which is needed for uniquely determining an outer marker
  // when they overlap (they may nest, but not partially overlap).
  var nextMarkerId = 0;

  var TextMarker = function(doc, type) {
    this.lines = [];
    this.type = type;
    this.doc = doc;
    this.id = ++nextMarkerId;
  };

  // Clear the marker.
  TextMarker.prototype.clear = function () {
    if (this.explicitlyCleared) { return }
    var cm = this.doc.cm, withOp = cm && !cm.curOp;
    if (withOp) { startOperation(cm); }
    if (hasHandler(this, "clear")) {
      var found = this.find();
      if (found) { signalLater(this, "clear", found.from, found.to); }
    }
    var min = null, max = null;
    for (var i = 0; i < this.lines.length; ++i) {
      var line = this.lines[i];
      var span = getMarkedSpanFor(line.markedSpans, this);
      if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), "text"); }
      else if (cm) {
        if (span.to != null) { max = lineNo(line); }
        if (span.from != null) { min = lineNo(line); }
      }
      line.markedSpans = removeMarkedSpan(line.markedSpans, span);
      if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)
        { updateLineHeight(line, textHeight(cm.display)); }
    }
    if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {
      var visual = visualLine(this.lines[i$1]), len = lineLength(visual);
      if (len > cm.display.maxLineLength) {
        cm.display.maxLine = visual;
        cm.display.maxLineLength = len;
        cm.display.maxLineChanged = true;
      }
    } }

    if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }
    this.lines.length = 0;
    this.explicitlyCleared = true;
    if (this.atomic && this.doc.cantEdit) {
      this.doc.cantEdit = false;
      if (cm) { reCheckSelection(cm.doc); }
    }
    if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); }
    if (withOp) { endOperation(cm); }
    if (this.parent) { this.parent.clear(); }
  };

  // Find the position of the marker in the document. Returns a {from,
  // to} object by default. Side can be passed to get a specific side
  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the
  // Pos objects returned contain a line object, rather than a line
  // number (used to prevent looking up the same line twice).
  TextMarker.prototype.find = function (side, lineObj) {
    if (side == null && this.type == "bookmark") { side = 1; }
    var from, to;
    for (var i = 0; i < this.lines.length; ++i) {
      var line = this.lines[i];
      var span = getMarkedSpanFor(line.markedSpans, this);
      if (span.from != null) {
        from = Pos(lineObj ? line : lineNo(line), span.from);
        if (side == -1) { return from }
      }
      if (span.to != null) {
        to = Pos(lineObj ? line : lineNo(line), span.to);
        if (side == 1) { return to }
      }
    }
    return from && {from: from, to: to}
  };

  // Signals that the marker's widget changed, and surrounding layout
  // should be recomputed.
  TextMarker.prototype.changed = function () {
      var this$1 = this;

    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;
    if (!pos || !cm) { return }
    runInOp(cm, function () {
      var line = pos.line, lineN = lineNo(pos.line);
      var view = findViewForLine(cm, lineN);
      if (view) {
        clearLineMeasurementCacheFor(view);
        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;
      }
      cm.curOp.updateMaxLine = true;
      if (!lineIsHidden(widget.doc, line) && widget.height != null) {
        var oldHeight = widget.height;
        widget.height = null;
        var dHeight = widgetHeight(widget) - oldHeight;
        if (dHeight)
          { updateLineHeight(line, line.height + dHeight); }
      }
      signalLater(cm, "markerChanged", cm, this$1);
    });
  };

  TextMarker.prototype.attachLine = function (line) {
    if (!this.lines.length && this.doc.cm) {
      var op = this.doc.cm.curOp;
      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
        { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }
    }
    this.lines.push(line);
  };

  TextMarker.prototype.detachLine = function (line) {
    this.lines.splice(indexOf(this.lines, line), 1);
    if (!this.lines.length && this.doc.cm) {
      var op = this.doc.cm.curOp
      ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);
    }
  };
  eventMixin(TextMarker);

  // Create a marker, wire it up to the right lines, and
  function markText(doc, from, to, options, type) {
    // Shared markers (across linked documents) are handled separately
    // (markTextShared will call out to this again, once per
    // document).
    if (options && options.shared) { return markTextShared(doc, from, to, options, type) }
    // Ensure we are in an operation.
    if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }

    var marker = new TextMarker(doc, type), diff = cmp(from, to);
    if (options) { copyObj(options, marker, false); }
    // Don't connect empty markers unless clearWhenEmpty is false
    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)
      { return marker }
    if (marker.replacedWith) {
      // Showing up as a widget implies collapsed (widget replaces text)
      marker.collapsed = true;
      marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget");
      if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); }
      if (options.insertLeft) { marker.widgetNode.insertLeft = true; }
    }
    if (marker.collapsed) {
      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||
          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))
        { throw new Error("Inserting collapsed marker partially overlapping an existing one") }
      seeCollapsedSpans();
    }

    if (marker.addToHistory)
      { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); }

    var curLine = from.line, cm = doc.cm, updateMaxLine;
    doc.iter(curLine, to.line + 1, function (line) {
      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)
        { updateMaxLine = true; }
      if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }
      addMarkedSpan(line, new MarkedSpan(marker,
                                         curLine == from.line ? from.ch : null,
                                         curLine == to.line ? to.ch : null));
      ++curLine;
    });
    // lineIsHidden depends on the presence of the spans, so needs a second pass
    if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {
      if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }
    }); }

    if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); }

    if (marker.readOnly) {
      seeReadOnlySpans();
      if (doc.history.done.length || doc.history.undone.length)
        { doc.clearHistory(); }
    }
    if (marker.collapsed) {
      marker.id = ++nextMarkerId;
      marker.atomic = true;
    }
    if (cm) {
      // Sync editor state
      if (updateMaxLine) { cm.curOp.updateMaxLine = true; }
      if (marker.collapsed)
        { regChange(cm, from.line, to.line + 1); }
      else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||
               marker.attributes || marker.title)
        { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } }
      if (marker.atomic) { reCheckSelection(cm.doc); }
      signalLater(cm, "markerAdded", cm, marker);
    }
    return marker
  }

  // SHARED TEXTMARKERS

  // A shared marker spans multiple linked documents. It is
  // implemented as a meta-marker-object controlling multiple normal
  // markers.
  var SharedTextMarker = function(markers, primary) {
    this.markers = markers;
    this.primary = primary;
    for (var i = 0; i < markers.length; ++i)
      { markers[i].parent = this; }
  };

  SharedTextMarker.prototype.clear = function () {
    if (this.explicitlyCleared) { return }
    this.explicitlyCleared = true;
    for (var i = 0; i < this.markers.length; ++i)
      { this.markers[i].clear(); }
    signalLater(this, "clear");
  };

  SharedTextMarker.prototype.find = function (side, lineObj) {
    return this.primary.find(side, lineObj)
  };
  eventMixin(SharedTextMarker);

  function markTextShared(doc, from, to, options, type) {
    options = copyObj(options);
    options.shared = false;
    var markers = [markText(doc, from, to, options, type)], primary = markers[0];
    var widget = options.widgetNode;
    linkedDocs(doc, function (doc) {
      if (widget) { options.widgetNode = widget.cloneNode(true); }
      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));
      for (var i = 0; i < doc.linked.length; ++i)
        { if (doc.linked[i].isParent) { return } }
      primary = lst(markers);
    });
    return new SharedTextMarker(markers, primary)
  }

  function findSharedMarkers(doc) {
    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })
  }

  function copySharedMarkers(doc, markers) {
    for (var i = 0; i < markers.length; i++) {
      var marker = markers[i], pos = marker.find();
      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);
      if (cmp(mFrom, mTo)) {
        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);
        marker.markers.push(subMark);
        subMark.parent = marker;
      }
    }
  }

  function detachSharedMarkers(markers) {
    var loop = function ( i ) {
      var marker = markers[i], linked = [marker.primary.doc];
      linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });
      for (var j = 0; j < marker.markers.length; j++) {
        var subMarker = marker.markers[j];
        if (indexOf(linked, subMarker.doc) == -1) {
          subMarker.parent = null;
          marker.markers.splice(j--, 1);
        }
      }
    };

    for (var i = 0; i < markers.length; i++) loop( i );
  }

  var nextDocId = 0;
  var Doc = function(text, mode, firstLine, lineSep, direction) {
    if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }
    if (firstLine == null) { firstLine = 0; }

    BranchChunk.call(this, [new LeafChunk([new Line("", null)])]);
    this.first = firstLine;
    this.scrollTop = this.scrollLeft = 0;
    this.cantEdit = false;
    this.cleanGeneration = 1;
    this.modeFrontier = this.highlightFrontier = firstLine;
    var start = Pos(firstLine, 0);
    this.sel = simpleSelection(start);
    this.history = new History(null);
    this.id = ++nextDocId;
    this.modeOption = mode;
    this.lineSep = lineSep;
    this.direction = (direction == "rtl") ? "rtl" : "ltr";
    this.extend = false;

    if (typeof text == "string") { text = this.splitLines(text); }
    updateDoc(this, {from: start, to: start, text: text});
    setSelection(this, simpleSelection(start), sel_dontScroll);
  };

  Doc.prototype = createObj(BranchChunk.prototype, {
    constructor: Doc,
    // Iterate over the document. Supports two forms -- with only one
    // argument, it calls that for each line in the document. With
    // three, it iterates over the range given by the first two (with
    // the second being non-inclusive).
    iter: function(from, to, op) {
      if (op) { this.iterN(from - this.first, to - from, op); }
      else { this.iterN(this.first, this.first + this.size, from); }
    },

    // Non-public interface for adding and removing lines.
    insert: function(at, lines) {
      var height = 0;
      for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }
      this.insertInner(at - this.first, lines, height);
    },
    remove: function(at, n) { this.removeInner(at - this.first, n); },

    // From here, the methods are part of the public interface. Most
    // are also available from CodeMirror (editor) instances.

    getValue: function(lineSep) {
      var lines = getLines(this, this.first, this.first + this.size);
      if (lineSep === false) { return lines }
      return lines.join(lineSep || this.lineSeparator())
    },
    setValue: docMethodOp(function(code) {
      var top = Pos(this.first, 0), last = this.first + this.size - 1;
      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
                        text: this.splitLines(code), origin: "setValue", full: true}, true);
      if (this.cm) { scrollToCoords(this.cm, 0, 0); }
      setSelection(this, simpleSelection(top), sel_dontScroll);
    }),
    replaceRange: function(code, from, to, origin) {
      from = clipPos(this, from);
      to = to ? clipPos(this, to) : from;
      replaceRange(this, code, from, to, origin);
    },
    getRange: function(from, to, lineSep) {
      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
      if (lineSep === false) { return lines }
      return lines.join(lineSep || this.lineSeparator())
    },

    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},

    getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},
    getLineNumber: function(line) {return lineNo(line)},

    getLineHandleVisualStart: function(line) {
      if (typeof line == "number") { line = getLine(this, line); }
      return visualLine(line)
    },

    lineCount: function() {return this.size},
    firstLine: function() {return this.first},
    lastLine: function() {return this.first + this.size - 1},

    clipPos: function(pos) {return clipPos(this, pos)},

    getCursor: function(start) {
      var range = this.sel.primary(), pos;
      if (start == null || start == "head") { pos = range.head; }
      else if (start == "anchor") { pos = range.anchor; }
      else if (start == "end" || start == "to" || start === false) { pos = range.to(); }
      else { pos = range.from(); }
      return pos
    },
    listSelections: function() { return this.sel.ranges },
    somethingSelected: function() {return this.sel.somethingSelected()},

    setCursor: docMethodOp(function(line, ch, options) {
      setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options);
    }),
    setSelection: docMethodOp(function(anchor, head, options) {
      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);
    }),
    extendSelection: docMethodOp(function(head, other, options) {
      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);
    }),
    extendSelections: docMethodOp(function(heads, options) {
      extendSelections(this, clipPosArray(this, heads), options);
    }),
    extendSelectionsBy: docMethodOp(function(f, options) {
      var heads = map(this.sel.ranges, f);
      extendSelections(this, clipPosArray(this, heads), options);
    }),
    setSelections: docMethodOp(function(ranges, primary, options) {
      if (!ranges.length) { return }
      var out = [];
      for (var i = 0; i < ranges.length; i++)
        { out[i] = new Range(clipPos(this, ranges[i].anchor),
                           clipPos(this, ranges[i].head)); }
      if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }
      setSelection(this, normalizeSelection(this.cm, out, primary), options);
    }),
    addSelection: docMethodOp(function(anchor, head, options) {
      var ranges = this.sel.ranges.slice(0);
      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));
      setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);
    }),

    getSelection: function(lineSep) {
      var ranges = this.sel.ranges, lines;
      for (var i = 0; i < ranges.length; i++) {
        var sel = getBetween(this, ranges[i].from(), ranges[i].to());
        lines = lines ? lines.concat(sel) : sel;
      }
      if (lineSep === false) { return lines }
      else { return lines.join(lineSep || this.lineSeparator()) }
    },
    getSelections: function(lineSep) {
      var parts = [], ranges = this.sel.ranges;
      for (var i = 0; i < ranges.length; i++) {
        var sel = getBetween(this, ranges[i].from(), ranges[i].to());
        if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }
        parts[i] = sel;
      }
      return parts
    },
    replaceSelection: function(code, collapse, origin) {
      var dup = [];
      for (var i = 0; i < this.sel.ranges.length; i++)
        { dup[i] = code; }
      this.replaceSelections(dup, collapse, origin || "+input");
    },
    replaceSelections: docMethodOp(function(code, collapse, origin) {
      var changes = [], sel = this.sel;
      for (var i = 0; i < sel.ranges.length; i++) {
        var range = sel.ranges[i];
        changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};
      }
      var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse);
      for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)
        { makeChange(this, changes[i$1]); }
      if (newSel) { setSelectionReplaceHistory(this, newSel); }
      else if (this.cm) { ensureCursorVisible(this.cm); }
    }),
    undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}),
    redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}),
    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}),
    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}),

    setExtending: function(val) {this.extend = val;},
    getExtending: function() {return this.extend},

    historySize: function() {
      var hist = this.history, done = 0, undone = 0;
      for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }
      for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }
      return {undo: done, redo: undone}
    },
    clearHistory: function() {
      var this$1 = this;

      this.history = new History(this.history.maxGeneration);
      linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);
    },

    markClean: function() {
      this.cleanGeneration = this.changeGeneration(true);
    },
    changeGeneration: function(forceSplit) {
      if (forceSplit)
        { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }
      return this.history.generation
    },
    isClean: function (gen) {
      return this.history.generation == (gen || this.cleanGeneration)
    },

    getHistory: function() {
      return {done: copyHistoryArray(this.history.done),
              undone: copyHistoryArray(this.history.undone)}
    },
    setHistory: function(histData) {
      var hist = this.history = new History(this.history.maxGeneration);
      hist.done = copyHistoryArray(histData.done.slice(0), null, true);
      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);
    },

    setGutterMarker: docMethodOp(function(line, gutterID, value) {
      return changeLine(this, line, "gutter", function (line) {
        var markers = line.gutterMarkers || (line.gutterMarkers = {});
        markers[gutterID] = value;
        if (!value && isEmpty(markers)) { line.gutterMarkers = null; }
        return true
      })
    }),

    clearGutter: docMethodOp(function(gutterID) {
      var this$1 = this;

      this.iter(function (line) {
        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
          changeLine(this$1, line, "gutter", function () {
            line.gutterMarkers[gutterID] = null;
            if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }
            return true
          });
        }
      });
    }),

    lineInfo: function(line) {
      var n;
      if (typeof line == "number") {
        if (!isLine(this, line)) { return null }
        n = line;
        line = getLine(this, line);
        if (!line) { return null }
      } else {
        n = lineNo(line);
        if (n == null) { return null }
      }
      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
              widgets: line.widgets}
    },

    addLineClass: docMethodOp(function(handle, where, cls) {
      return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
        var prop = where == "text" ? "textClass"
                 : where == "background" ? "bgClass"
                 : where == "gutter" ? "gutterClass" : "wrapClass";
        if (!line[prop]) { line[prop] = cls; }
        else if (classTest(cls).test(line[prop])) { return false }
        else { line[prop] += " " + cls; }
        return true
      })
    }),
    removeLineClass: docMethodOp(function(handle, where, cls) {
      return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
        var prop = where == "text" ? "textClass"
                 : where == "background" ? "bgClass"
                 : where == "gutter" ? "gutterClass" : "wrapClass";
        var cur = line[prop];
        if (!cur) { return false }
        else if (cls == null) { line[prop] = null; }
        else {
          var found = cur.match(classTest(cls));
          if (!found) { return false }
          var end = found.index + found[0].length;
          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
        }
        return true
      })
    }),

    addLineWidget: docMethodOp(function(handle, node, options) {
      return addLineWidget(this, handle, node, options)
    }),
    removeLineWidget: function(widget) { widget.clear(); },

    markText: function(from, to, options) {
      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range")
    },
    setBookmark: function(pos, options) {
      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
                      insertLeft: options && options.insertLeft,
                      clearWhenEmpty: false, shared: options && options.shared,
                      handleMouseEvents: options && options.handleMouseEvents};
      pos = clipPos(this, pos);
      return markText(this, pos, pos, realOpts, "bookmark")
    },
    findMarksAt: function(pos) {
      pos = clipPos(this, pos);
      var markers = [], spans = getLine(this, pos.line).markedSpans;
      if (spans) { for (var i = 0; i < spans.length; ++i) {
        var span = spans[i];
        if ((span.from == null || span.from <= pos.ch) &&
            (span.to == null || span.to >= pos.ch))
          { markers.push(span.marker.parent || span.marker); }
      } }
      return markers
    },
    findMarks: function(from, to, filter) {
      from = clipPos(this, from); to = clipPos(this, to);
      var found = [], lineNo = from.line;
      this.iter(from.line, to.line + 1, function (line) {
        var spans = line.markedSpans;
        if (spans) { for (var i = 0; i < spans.length; i++) {
          var span = spans[i];
          if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||
                span.from == null && lineNo != from.line ||
                span.from != null && lineNo == to.line && span.from >= to.ch) &&
              (!filter || filter(span.marker)))
            { found.push(span.marker.parent || span.marker); }
        } }
        ++lineNo;
      });
      return found
    },
    getAllMarks: function() {
      var markers = [];
      this.iter(function (line) {
        var sps = line.markedSpans;
        if (sps) { for (var i = 0; i < sps.length; ++i)
          { if (sps[i].from != null) { markers.push(sps[i].marker); } } }
      });
      return markers
    },

    posFromIndex: function(off) {
      var ch, lineNo = this.first, sepSize = this.lineSeparator().length;
      this.iter(function (line) {
        var sz = line.text.length + sepSize;
        if (sz > off) { ch = off; return true }
        off -= sz;
        ++lineNo;
      });
      return clipPos(this, Pos(lineNo, ch))
    },
    indexFromPos: function (coords) {
      coords = clipPos(this, coords);
      var index = coords.ch;
      if (coords.line < this.first || coords.ch < 0) { return 0 }
      var sepSize = this.lineSeparator().length;
      this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value
        index += line.text.length + sepSize;
      });
      return index
    },

    copy: function(copyHistory) {
      var doc = new Doc(getLines(this, this.first, this.first + this.size),
                        this.modeOption, this.first, this.lineSep, this.direction);
      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;
      doc.sel = this.sel;
      doc.extend = false;
      if (copyHistory) {
        doc.history.undoDepth = this.history.undoDepth;
        doc.setHistory(this.getHistory());
      }
      return doc
    },

    linkedDoc: function(options) {
      if (!options) { options = {}; }
      var from = this.first, to = this.first + this.size;
      if (options.from != null && options.from > from) { from = options.from; }
      if (options.to != null && options.to < to) { to = options.to; }
      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);
      if (options.sharedHist) { copy.history = this.history
      ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});
      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];
      copySharedMarkers(copy, findSharedMarkers(this));
      return copy
    },
    unlinkDoc: function(other) {
      if (other instanceof CodeMirror) { other = other.doc; }
      if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {
        var link = this.linked[i];
        if (link.doc != other) { continue }
        this.linked.splice(i, 1);
        other.unlinkDoc(this);
        detachSharedMarkers(findSharedMarkers(this));
        break
      } }
      // If the histories were shared, split them again
      if (other.history == this.history) {
        var splitIds = [other.id];
        linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);
        other.history = new History(null);
        other.history.done = copyHistoryArray(this.history.done, splitIds);
        other.history.undone = copyHistoryArray(this.history.undone, splitIds);
      }
    },
    iterLinkedDocs: function(f) {linkedDocs(this, f);},

    getMode: function() {return this.mode},
    getEditor: function() {return this.cm},

    splitLines: function(str) {
      if (this.lineSep) { return str.split(this.lineSep) }
      return splitLinesAuto(str)
    },
    lineSeparator: function() { return this.lineSep || "\n" },

    setDirection: docMethodOp(function (dir) {
      if (dir != "rtl") { dir = "ltr"; }
      if (dir == this.direction) { return }
      this.direction = dir;
      this.iter(function (line) { return line.order = null; });
      if (this.cm) { directionChanged(this.cm); }
    })
  });

  // Public alias.
  Doc.prototype.eachLine = Doc.prototype.iter;

  // Kludge to work around strange IE behavior where it'll sometimes
  // re-fire a series of drag-related events right after the drop (#1551)
  var lastDrop = 0;

  function onDrop(e) {
    var cm = this;
    clearDragCursor(cm);
    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))
      { return }
    e_preventDefault(e);
    if (ie) { lastDrop = +new Date; }
    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;
    if (!pos || cm.isReadOnly()) { return }
    // Might be a file drop, in which case we simply extract the text
    // and insert it.
    if (files && files.length && window.FileReader && window.File) {
      var n = files.length, text = Array(n), read = 0;
      var markAsReadAndPasteIfAllFilesAreRead = function () {
        if (++read == n) {
          operation(cm, function () {
            pos = clipPos(cm.doc, pos);
            var change = {from: pos, to: pos,
                          text: cm.doc.splitLines(
                              text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),
                          origin: "paste"};
            makeChange(cm.doc, change);
            setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));
          })();
        }
      };
      var readTextFromFile = function (file, i) {
        if (cm.options.allowDropFileTypes &&
            indexOf(cm.options.allowDropFileTypes, file.type) == -1) {
          markAsReadAndPasteIfAllFilesAreRead();
          return
        }
        var reader = new FileReader;
        reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };
        reader.onload = function () {
          var content = reader.result;
          if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) {
            markAsReadAndPasteIfAllFilesAreRead();
            return
          }
          text[i] = content;
          markAsReadAndPasteIfAllFilesAreRead();
        };
        reader.readAsText(file);
      };
      for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }
    } else { // Normal drop
      // Don't do a replace if the drop happened inside of the selected text.
      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {
        cm.state.draggingText(e);
        // Ensure the editor is re-focused
        setTimeout(function () { return cm.display.input.focus(); }, 20);
        return
      }
      try {
        var text$1 = e.dataTransfer.getData("Text");
        if (text$1) {
          var selected;
          if (cm.state.draggingText && !cm.state.draggingText.copy)
            { selected = cm.listSelections(); }
          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));
          if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)
            { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } }
          cm.replaceSelection(text$1, "around", "paste");
          cm.display.input.focus();
        }
      }
      catch(e$1){}
    }
  }

  function onDragStart(cm, e) {
    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }
    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }

    e.dataTransfer.setData("Text", cm.getSelection());
    e.dataTransfer.effectAllowed = "copyMove";

    // Use dummy image instead of default browsers image.
    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
    if (e.dataTransfer.setDragImage && !safari) {
      var img = elt("img", null, null, "position: fixed; left: 0; top: 0;");
      img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
      if (presto) {
        img.width = img.height = 1;
        cm.display.wrapper.appendChild(img);
        // Force a relayout, or Opera won't use our image for some obscure reason
        img._top = img.offsetTop;
      }
      e.dataTransfer.setDragImage(img, 0, 0);
      if (presto) { img.parentNode.removeChild(img); }
    }
  }

  function onDragOver(cm, e) {
    var pos = posFromMouse(cm, e);
    if (!pos) { return }
    var frag = document.createDocumentFragment();
    drawSelectionCursor(cm, pos, frag);
    if (!cm.display.dragCursor) {
      cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors");
      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);
    }
    removeChildrenAndAdd(cm.display.dragCursor, frag);
  }

  function clearDragCursor(cm) {
    if (cm.display.dragCursor) {
      cm.display.lineSpace.removeChild(cm.display.dragCursor);
      cm.display.dragCursor = null;
    }
  }

  // These must be handled carefully, because naively registering a
  // handler for each editor will cause the editors to never be
  // garbage collected.

  function forEachCodeMirror(f) {
    if (!document.getElementsByClassName) { return }
    var byClass = document.getElementsByClassName("CodeMirror"), editors = [];
    for (var i = 0; i < byClass.length; i++) {
      var cm = byClass[i].CodeMirror;
      if (cm) { editors.push(cm); }
    }
    if (editors.length) { editors[0].operation(function () {
      for (var i = 0; i < editors.length; i++) { f(editors[i]); }
    }); }
  }

  var globalsRegistered = false;
  function ensureGlobalHandlers() {
    if (globalsRegistered) { return }
    registerGlobalHandlers();
    globalsRegistered = true;
  }
  function registerGlobalHandlers() {
    // When the window resizes, we need to refresh active editors.
    var resizeTimer;
    on(window, "resize", function () {
      if (resizeTimer == null) { resizeTimer = setTimeout(function () {
        resizeTimer = null;
        forEachCodeMirror(onResize);
      }, 100); }
    });
    // When the window loses focus, we want to show the editor as blurred
    on(window, "blur", function () { return forEachCodeMirror(onBlur); });
  }
  // Called when the window resizes
  function onResize(cm) {
    var d = cm.display;
    // Might be a text scaling operation, clear size caches.
    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
    d.scrollbarsClipped = false;
    cm.setSize();
  }

  var keyNames = {
    3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
    19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
    36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
    46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod",
    106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock",
    173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
    221: "]", 222: "'", 224: "Mod", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
    63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"
  };

  // Number keys
  for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }
  // Alphabetic keys
  for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }
  // Function keys
  for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; }

  var keyMap = {};

  keyMap.basic = {
    "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
    "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
    "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore",
    "Tab": "defaultTab", "Shift-Tab": "indentAuto",
    "Enter": "newlineAndIndent", "Insert": "toggleOverwrite",
    "Esc": "singleSelection"
  };
  // Note that the save and find-related commands aren't defined by
  // default. User code or addons can define them. Unknown commands
  // are simply ignored.
  keyMap.pcDefault = {
    "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
    "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown",
    "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
    "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
    "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
    "Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
    "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection",
    "fallthrough": "basic"
  };
  // Very basic readline/emacs-style bindings, which are standard on Mac.
  keyMap.emacsy = {
    "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
    "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
    "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
    "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars",
    "Ctrl-O": "openLine"
  };
  keyMap.macDefault = {
    "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
    "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
    "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore",
    "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
    "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
    "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight",
    "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd",
    "fallthrough": ["basic", "emacsy"]
  };
  keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;

  // KEYMAP DISPATCH

  function normalizeKeyName(name) {
    var parts = name.split(/-(?!$)/);
    name = parts[parts.length - 1];
    var alt, ctrl, shift, cmd;
    for (var i = 0; i < parts.length - 1; i++) {
      var mod = parts[i];
      if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }
      else if (/^a(lt)?$/i.test(mod)) { alt = true; }
      else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }
      else if (/^s(hift)?$/i.test(mod)) { shift = true; }
      else { throw new Error("Unrecognized modifier name: " + mod) }
    }
    if (alt) { name = "Alt-" + name; }
    if (ctrl) { name = "Ctrl-" + name; }
    if (cmd) { name = "Cmd-" + name; }
    if (shift) { name = "Shift-" + name; }
    return name
  }

  // This is a kludge to keep keymaps mostly working as raw objects
  // (backwards compatibility) while at the same time support features
  // like normalization and multi-stroke key bindings. It compiles a
  // new normalized keymap, and then updates the old object to reflect
  // this.
  function normalizeKeyMap(keymap) {
    var copy = {};
    for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {
      var value = keymap[keyname];
      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }
      if (value == "...") { delete keymap[keyname]; continue }

      var keys = map(keyname.split(" "), normalizeKeyName);
      for (var i = 0; i < keys.length; i++) {
        var val = (void 0), name = (void 0);
        if (i == keys.length - 1) {
          name = keys.join(" ");
          val = value;
        } else {
          name = keys.slice(0, i + 1).join(" ");
          val = "...";
        }
        var prev = copy[name];
        if (!prev) { copy[name] = val; }
        else if (prev != val) { throw new Error("Inconsistent bindings for " + name) }
      }
      delete keymap[keyname];
    } }
    for (var prop in copy) { keymap[prop] = copy[prop]; }
    return keymap
  }

  function lookupKey(key, map, handle, context) {
    map = getKeyMap(map);
    var found = map.call ? map.call(key, context) : map[key];
    if (found === false) { return "nothing" }
    if (found === "...") { return "multi" }
    if (found != null && handle(found)) { return "handled" }

    if (map.fallthrough) {
      if (Object.prototype.toString.call(map.fallthrough) != "[object Array]")
        { return lookupKey(key, map.fallthrough, handle, context) }
      for (var i = 0; i < map.fallthrough.length; i++) {
        var result = lookupKey(key, map.fallthrough[i], handle, context);
        if (result) { return result }
      }
    }
  }

  // Modifier key presses don't count as 'real' key presses for the
  // purpose of keymap fallthrough.
  function isModifierKey(value) {
    var name = typeof value == "string" ? value : keyNames[value.keyCode];
    return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"
  }

  function addModifierNames(name, event, noShift) {
    var base = name;
    if (event.altKey && base != "Alt") { name = "Alt-" + name; }
    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; }
    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") { name = "Cmd-" + name; }
    if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; }
    return name
  }

  // Look up the name of a key as indicated by an event object.
  function keyName(event, noShift) {
    if (presto && event.keyCode == 34 && event["char"]) { return false }
    var name = keyNames[event.keyCode];
    if (name == null || event.altGraphKey) { return false }
    // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,
    // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)
    if (event.keyCode == 3 && event.code) { name = event.code; }
    return addModifierNames(name, event, noShift)
  }

  function getKeyMap(val) {
    return typeof val == "string" ? keyMap[val] : val
  }

  // Helper for deleting text near the selection(s), used to implement
  // backspace, delete, and similar functionality.
  function deleteNearSelection(cm, compute) {
    var ranges = cm.doc.sel.ranges, kill = [];
    // Build up a set of ranges to kill first, merging overlapping
    // ranges.
    for (var i = 0; i < ranges.length; i++) {
      var toKill = compute(ranges[i]);
      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {
        var replaced = kill.pop();
        if (cmp(replaced.from, toKill.from) < 0) {
          toKill.from = replaced.from;
          break
        }
      }
      kill.push(toKill);
    }
    // Next, remove those actual ranges.
    runInOp(cm, function () {
      for (var i = kill.length - 1; i >= 0; i--)
        { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); }
      ensureCursorVisible(cm);
    });
  }

  function moveCharLogically(line, ch, dir) {
    var target = skipExtendingChars(line.text, ch + dir, dir);
    return target < 0 || target > line.text.length ? null : target
  }

  function moveLogically(line, start, dir) {
    var ch = moveCharLogically(line, start.ch, dir);
    return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before")
  }

  function endOfLine(visually, cm, lineObj, lineNo, dir) {
    if (visually) {
      if (cm.doc.direction == "rtl") { dir = -dir; }
      var order = getOrder(lineObj, cm.doc.direction);
      if (order) {
        var part = dir < 0 ? lst(order) : order[0];
        var moveInStorageOrder = (dir < 0) == (part.level == 1);
        var sticky = moveInStorageOrder ? "after" : "before";
        var ch;
        // With a wrapped rtl chunk (possibly spanning multiple bidi parts),
        // it could be that the last bidi part is not on the last visual line,
        // since visual lines contain content order-consecutive chunks.
        // Thus, in rtl, we are looking for the first (content-order) character
        // in the rtl chunk that is on the last line (that is, the same line
        // as the last (content-order) character).
        if (part.level > 0 || cm.doc.direction == "rtl") {
          var prep = prepareMeasureForLine(cm, lineObj);
          ch = dir < 0 ? lineObj.text.length - 1 : 0;
          var targetTop = measureCharPrepared(cm, prep, ch).top;
          ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);
          if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); }
        } else { ch = dir < 0 ? part.to : part.from; }
        return new Pos(lineNo, ch, sticky)
      }
    }
    return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after")
  }

  function moveVisually(cm, line, start, dir) {
    var bidi = getOrder(line, cm.doc.direction);
    if (!bidi) { return moveLogically(line, start, dir) }
    if (start.ch >= line.text.length) {
      start.ch = line.text.length;
      start.sticky = "before";
    } else if (start.ch <= 0) {
      start.ch = 0;
      start.sticky = "after";
    }
    var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];
    if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {
      // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,
      // nothing interesting happens.
      return moveLogically(line, start, dir)
    }

    var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };
    var prep;
    var getWrappedLineExtent = function (ch) {
      if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }
      prep = prep || prepareMeasureForLine(cm, line);
      return wrappedLineExtentChar(cm, line, prep, ch)
    };
    var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch);

    if (cm.doc.direction == "rtl" || part.level == 1) {
      var moveInStorageOrder = (part.level == 1) == (dir < 0);
      var ch = mv(start, moveInStorageOrder ? 1 : -1);
      if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {
        // Case 2: We move within an rtl part or in an rtl editor on the same visual line
        var sticky = moveInStorageOrder ? "before" : "after";
        return new Pos(start.line, ch, sticky)
      }
    }

    // Case 3: Could not move within this bidi part in this visual line, so leave
    // the current bidi part

    var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {
      var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder
        ? new Pos(start.line, mv(ch, 1), "before")
        : new Pos(start.line, ch, "after"); };

      for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {
        var part = bidi[partPos];
        var moveInStorageOrder = (dir > 0) == (part.level != 1);
        var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);
        if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }
        ch = moveInStorageOrder ? part.from : mv(part.to, -1);
        if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }
      }
    };

    // Case 3a: Look for other bidi parts on the same visual line
    var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);
    if (res) { return res }

    // Case 3b: Look for other bidi parts on the next visual line
    var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);
    if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {
      res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));
      if (res) { return res }
    }

    // Case 4: Nowhere to move
    return null
  }

  // Commands are parameter-less actions that can be performed on an
  // editor, mostly used for keybindings.
  var commands = {
    selectAll: selectAll,
    singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); },
    killLine: function (cm) { return deleteNearSelection(cm, function (range) {
      if (range.empty()) {
        var len = getLine(cm.doc, range.head.line).text.length;
        if (range.head.ch == len && range.head.line < cm.lastLine())
          { return {from: range.head, to: Pos(range.head.line + 1, 0)} }
        else
          { return {from: range.head, to: Pos(range.head.line, len)} }
      } else {
        return {from: range.from(), to: range.to()}
      }
    }); },
    deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({
      from: Pos(range.from().line, 0),
      to: clipPos(cm.doc, Pos(range.to().line + 1, 0))
    }); }); },
    delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({
      from: Pos(range.from().line, 0), to: range.from()
    }); }); },
    delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {
      var top = cm.charCoords(range.head, "div").top + 5;
      var leftPos = cm.coordsChar({left: 0, top: top}, "div");
      return {from: leftPos, to: range.from()}
    }); },
    delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {
      var top = cm.charCoords(range.head, "div").top + 5;
      var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div");
      return {from: range.from(), to: rightPos }
    }); },
    undo: function (cm) { return cm.undo(); },
    redo: function (cm) { return cm.redo(); },
    undoSelection: function (cm) { return cm.undoSelection(); },
    redoSelection: function (cm) { return cm.redoSelection(); },
    goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },
    goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },
    goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },
      {origin: "+move", bias: 1}
    ); },
    goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },
      {origin: "+move", bias: 1}
    ); },
    goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },
      {origin: "+move", bias: -1}
    ); },
    goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {
      var top = cm.cursorCoords(range.head, "div").top + 5;
      return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")
    }, sel_move); },
    goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {
      var top = cm.cursorCoords(range.head, "div").top + 5;
      return cm.coordsChar({left: 0, top: top}, "div")
    }, sel_move); },
    goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {
      var top = cm.cursorCoords(range.head, "div").top + 5;
      var pos = cm.coordsChar({left: 0, top: top}, "div");
      if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) }
      return pos
    }, sel_move); },
    goLineUp: function (cm) { return cm.moveV(-1, "line"); },
    goLineDown: function (cm) { return cm.moveV(1, "line"); },
    goPageUp: function (cm) { return cm.moveV(-1, "page"); },
    goPageDown: function (cm) { return cm.moveV(1, "page"); },
    goCharLeft: function (cm) { return cm.moveH(-1, "char"); },
    goCharRight: function (cm) { return cm.moveH(1, "char"); },
    goColumnLeft: function (cm) { return cm.moveH(-1, "column"); },
    goColumnRight: function (cm) { return cm.moveH(1, "column"); },
    goWordLeft: function (cm) { return cm.moveH(-1, "word"); },
    goGroupRight: function (cm) { return cm.moveH(1, "group"); },
    goGroupLeft: function (cm) { return cm.moveH(-1, "group"); },
    goWordRight: function (cm) { return cm.moveH(1, "word"); },
    delCharBefore: function (cm) { return cm.deleteH(-1, "codepoint"); },
    delCharAfter: function (cm) { return cm.deleteH(1, "char"); },
    delWordBefore: function (cm) { return cm.deleteH(-1, "word"); },
    delWordAfter: function (cm) { return cm.deleteH(1, "word"); },
    delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); },
    delGroupAfter: function (cm) { return cm.deleteH(1, "group"); },
    indentAuto: function (cm) { return cm.indentSelection("smart"); },
    indentMore: function (cm) { return cm.indentSelection("add"); },
    indentLess: function (cm) { return cm.indentSelection("subtract"); },
    insertTab: function (cm) { return cm.replaceSelection("\t"); },
    insertSoftTab: function (cm) {
      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;
      for (var i = 0; i < ranges.length; i++) {
        var pos = ranges[i].from();
        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);
        spaces.push(spaceStr(tabSize - col % tabSize));
      }
      cm.replaceSelections(spaces);
    },
    defaultTab: function (cm) {
      if (cm.somethingSelected()) { cm.indentSelection("add"); }
      else { cm.execCommand("insertTab"); }
    },
    // Swap the two chars left and right of each selection's head.
    // Move cursor behind the two swapped characters afterwards.
    //
    // Doesn't consider line feeds a character.
    // Doesn't scan more than one line above to find a character.
    // Doesn't do anything on an empty line.
    // Doesn't do anything with non-empty selections.
    transposeChars: function (cm) { return runInOp(cm, function () {
      var ranges = cm.listSelections(), newSel = [];
      for (var i = 0; i < ranges.length; i++) {
        if (!ranges[i].empty()) { continue }
        var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;
        if (line) {
          if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }
          if (cur.ch > 0) {
            cur = new Pos(cur.line, cur.ch + 1);
            cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),
                            Pos(cur.line, cur.ch - 2), cur, "+transpose");
          } else if (cur.line > cm.doc.first) {
            var prev = getLine(cm.doc, cur.line - 1).text;
            if (prev) {
              cur = new Pos(cur.line, 1);
              cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +
                              prev.charAt(prev.length - 1),
                              Pos(cur.line - 1, prev.length - 1), cur, "+transpose");
            }
          }
        }
        newSel.push(new Range(cur, cur));
      }
      cm.setSelections(newSel);
    }); },
    newlineAndIndent: function (cm) { return runInOp(cm, function () {
      var sels = cm.listSelections();
      for (var i = sels.length - 1; i >= 0; i--)
        { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); }
      sels = cm.listSelections();
      for (var i$1 = 0; i$1 < sels.length; i$1++)
        { cm.indentLine(sels[i$1].from().line, null, true); }
      ensureCursorVisible(cm);
    }); },
    openLine: function (cm) { return cm.replaceSelection("\n", "start"); },
    toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }
  };


  function lineStart(cm, lineN) {
    var line = getLine(cm.doc, lineN);
    var visual = visualLine(line);
    if (visual != line) { lineN = lineNo(visual); }
    return endOfLine(true, cm, visual, lineN, 1)
  }
  function lineEnd(cm, lineN) {
    var line = getLine(cm.doc, lineN);
    var visual = visualLineEnd(line);
    if (visual != line) { lineN = lineNo(visual); }
    return endOfLine(true, cm, line, lineN, -1)
  }
  function lineStartSmart(cm, pos) {
    var start = lineStart(cm, pos.line);
    var line = getLine(cm.doc, start.line);
    var order = getOrder(line, cm.doc.direction);
    if (!order || order[0].level == 0) {
      var firstNonWS = Math.max(start.ch, line.text.search(/\S/));
      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;
      return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)
    }
    return start
  }

  // Run a handler that was bound to a key.
  function doHandleBinding(cm, bound, dropShift) {
    if (typeof bound == "string") {
      bound = commands[bound];
      if (!bound) { return false }
    }
    // Ensure previous input has been read, so that the handler sees a
    // consistent view of the document
    cm.display.input.ensurePolled();
    var prevShift = cm.display.shift, done = false;
    try {
      if (cm.isReadOnly()) { cm.state.suppressEdits = true; }
      if (dropShift) { cm.display.shift = false; }
      done = bound(cm) != Pass;
    } finally {
      cm.display.shift = prevShift;
      cm.state.suppressEdits = false;
    }
    return done
  }

  function lookupKeyForEditor(cm, name, handle) {
    for (var i = 0; i < cm.state.keyMaps.length; i++) {
      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);
      if (result) { return result }
    }
    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))
      || lookupKey(name, cm.options.keyMap, handle, cm)
  }

  // Note that, despite the name, this function is also used to check
  // for bound mouse clicks.

  var stopSeq = new Delayed;

  function dispatchKey(cm, name, e, handle) {
    var seq = cm.state.keySeq;
    if (seq) {
      if (isModifierKey(name)) { return "handled" }
      if (/\'$/.test(name))
        { cm.state.keySeq = null; }
      else
        { stopSeq.set(50, function () {
          if (cm.state.keySeq == seq) {
            cm.state.keySeq = null;
            cm.display.input.reset();
          }
        }); }
      if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true }
    }
    return dispatchKeyInner(cm, name, e, handle)
  }

  function dispatchKeyInner(cm, name, e, handle) {
    var result = lookupKeyForEditor(cm, name, handle);

    if (result == "multi")
      { cm.state.keySeq = name; }
    if (result == "handled")
      { signalLater(cm, "keyHandled", cm, name, e); }

    if (result == "handled" || result == "multi") {
      e_preventDefault(e);
      restartBlink(cm);
    }

    return !!result
  }

  // Handle a key from the keydown event.
  function handleKeyBinding(cm, e) {
    var name = keyName(e, true);
    if (!name) { return false }

    if (e.shiftKey && !cm.state.keySeq) {
      // First try to resolve full name (including 'Shift-'). Failing
      // that, see if there is a cursor-motion command (starting with
      // 'go') bound to the keyname without 'Shift-'.
      return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); })
          || dispatchKey(cm, name, e, function (b) {
               if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
                 { return doHandleBinding(cm, b) }
             })
    } else {
      return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })
    }
  }

  // Handle a key from the keypress event
  function handleCharBinding(cm, e, ch) {
    return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); })
  }

  var lastStoppedKey = null;
  function onKeyDown(e) {
    var cm = this;
    if (e.target && e.target != cm.display.input.getField()) { return }
    cm.curOp.focus = activeElt();
    if (signalDOMEvent(cm, e)) { return }
    // IE does strange things with escape.
    if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }
    var code = e.keyCode;
    cm.display.shift = code == 16 || e.shiftKey;
    var handled = handleKeyBinding(cm, e);
    if (presto) {
      lastStoppedKey = handled ? code : null;
      // Opera has no cut event... we try to at least catch the key combo
      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
        { cm.replaceSelection("", null, "cut"); }
    }
    if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)
      { document.execCommand("cut"); }

    // Turn mouse into crosshair when Alt is held on Mac.
    if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className))
      { showCrossHair(cm); }
  }

  function showCrossHair(cm) {
    var lineDiv = cm.display.lineDiv;
    addClass(lineDiv, "CodeMirror-crosshair");

    function up(e) {
      if (e.keyCode == 18 || !e.altKey) {
        rmClass(lineDiv, "CodeMirror-crosshair");
        off(document, "keyup", up);
        off(document, "mouseover", up);
      }
    }
    on(document, "keyup", up);
    on(document, "mouseover", up);
  }

  function onKeyUp(e) {
    if (e.keyCode == 16) { this.doc.sel.shift = false; }
    signalDOMEvent(this, e);
  }

  function onKeyPress(e) {
    var cm = this;
    if (e.target && e.target != cm.display.input.getField()) { return }
    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }
    var keyCode = e.keyCode, charCode = e.charCode;
    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}
    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }
    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
    // Some browsers fire keypress events for backspace
    if (ch == "\x08") { return }
    if (handleCharBinding(cm, e, ch)) { return }
    cm.display.input.onKeyPress(e);
  }

  var DOUBLECLICK_DELAY = 400;

  var PastClick = function(time, pos, button) {
    this.time = time;
    this.pos = pos;
    this.button = button;
  };

  PastClick.prototype.compare = function (time, pos, button) {
    return this.time + DOUBLECLICK_DELAY > time &&
      cmp(pos, this.pos) == 0 && button == this.button
  };

  var lastClick, lastDoubleClick;
  function clickRepeat(pos, button) {
    var now = +new Date;
    if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {
      lastClick = lastDoubleClick = null;
      return "triple"
    } else if (lastClick && lastClick.compare(now, pos, button)) {
      lastDoubleClick = new PastClick(now, pos, button);
      lastClick = null;
      return "double"
    } else {
      lastClick = new PastClick(now, pos, button);
      lastDoubleClick = null;
      return "single"
    }
  }

  // A mouse down can be a single click, double click, triple click,
  // start of selection drag, start of text drag, new cursor
  // (ctrl-click), rectangle drag (alt-drag), or xwin
  // middle-click-paste. Or it might be a click on something we should
  // not interfere with, such as a scrollbar or widget.
  function onMouseDown(e) {
    var cm = this, display = cm.display;
    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }
    display.input.ensurePolled();
    display.shift = e.shiftKey;

    if (eventInWidget(display, e)) {
      if (!webkit) {
        // Briefly turn off draggability, to allow widgets to do
        // normal dragging things.
        display.scroller.draggable = false;
        setTimeout(function () { return display.scroller.draggable = true; }, 100);
      }
      return
    }
    if (clickInGutter(cm, e)) { return }
    var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single";
    window.focus();

    // #3261: make sure, that we're not starting a second selection
    if (button == 1 && cm.state.selectingText)
      { cm.state.selectingText(e); }

    if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }

    if (button == 1) {
      if (pos) { leftButtonDown(cm, pos, repeat, e); }
      else if (e_target(e) == display.scroller) { e_preventDefault(e); }
    } else if (button == 2) {
      if (pos) { extendSelection(cm.doc, pos); }
      setTimeout(function () { return display.input.focus(); }, 20);
    } else if (button == 3) {
      if (captureRightClick) { cm.display.input.onContextMenu(e); }
      else { delayBlurEvent(cm); }
    }
  }

  function handleMappedButton(cm, button, pos, repeat, event) {
    var name = "Click";
    if (repeat == "double") { name = "Double" + name; }
    else if (repeat == "triple") { name = "Triple" + name; }
    name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name;

    return dispatchKey(cm,  addModifierNames(name, event), event, function (bound) {
      if (typeof bound == "string") { bound = commands[bound]; }
      if (!bound) { return false }
      var done = false;
      try {
        if (cm.isReadOnly()) { cm.state.suppressEdits = true; }
        done = bound(cm, pos) != Pass;
      } finally {
        cm.state.suppressEdits = false;
      }
      return done
    })
  }

  function configureMouse(cm, repeat, event) {
    var option = cm.getOption("configureMouse");
    var value = option ? option(cm, repeat, event) : {};
    if (value.unit == null) {
      var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;
      value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line";
    }
    if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }
    if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }
    if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }
    return value
  }

  function leftButtonDown(cm, pos, repeat, event) {
    if (ie) { setTimeout(bind(ensureFocus, cm), 0); }
    else { cm.curOp.focus = activeElt(); }

    var behavior = configureMouse(cm, repeat, event);

    var sel = cm.doc.sel, contained;
    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&
        repeat == "single" && (contained = sel.contains(pos)) > -1 &&
        (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&
        (cmp(contained.to(), pos) > 0 || pos.xRel < 0))
      { leftButtonStartDrag(cm, event, pos, behavior); }
    else
      { leftButtonSelect(cm, event, pos, behavior); }
  }

  // Start a text drag. When it ends, see if any dragging actually
  // happen, and treat as a click if it didn't.
  function leftButtonStartDrag(cm, event, pos, behavior) {
    var display = cm.display, moved = false;
    var dragEnd = operation(cm, function (e) {
      if (webkit) { display.scroller.draggable = false; }
      cm.state.draggingText = false;
      if (cm.state.delayingBlurEvent) {
        if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }
        else { delayBlurEvent(cm); }
      }
      off(display.wrapper.ownerDocument, "mouseup", dragEnd);
      off(display.wrapper.ownerDocument, "mousemove", mouseMove);
      off(display.scroller, "dragstart", dragStart);
      off(display.scroller, "drop", dragEnd);
      if (!moved) {
        e_preventDefault(e);
        if (!behavior.addNew)
          { extendSelection(cm.doc, pos, null, null, behavior.extend); }
        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
        if ((webkit && !safari) || ie && ie_version == 9)
          { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }
        else
          { display.input.focus(); }
      }
    });
    var mouseMove = function(e2) {
      moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;
    };
    var dragStart = function () { return moved = true; };
    // Let the drag handler handle this.
    if (webkit) { display.scroller.draggable = true; }
    cm.state.draggingText = dragEnd;
    dragEnd.copy = !behavior.moveOnDrag;
    on(display.wrapper.ownerDocument, "mouseup", dragEnd);
    on(display.wrapper.ownerDocument, "mousemove", mouseMove);
    on(display.scroller, "dragstart", dragStart);
    on(display.scroller, "drop", dragEnd);

    cm.state.delayingBlurEvent = true;
    setTimeout(function () { return display.input.focus(); }, 20);
    // IE's approach to draggable
    if (display.scroller.dragDrop) { display.scroller.dragDrop(); }
  }

  function rangeForUnit(cm, pos, unit) {
    if (unit == "char") { return new Range(pos, pos) }
    if (unit == "word") { return cm.findWordAt(pos) }
    if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }
    var result = unit(cm, pos);
    return new Range(result.from, result.to)
  }

  // Normal selection, as opposed to text dragging.
  function leftButtonSelect(cm, event, start, behavior) {
    if (ie) { delayBlurEvent(cm); }
    var display = cm.display, doc = cm.doc;
    e_preventDefault(event);

    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;
    if (behavior.addNew && !behavior.extend) {
      ourIndex = doc.sel.contains(start);
      if (ourIndex > -1)
        { ourRange = ranges[ourIndex]; }
      else
        { ourRange = new Range(start, start); }
    } else {
      ourRange = doc.sel.primary();
      ourIndex = doc.sel.primIndex;
    }

    if (behavior.unit == "rectangle") {
      if (!behavior.addNew) { ourRange = new Range(start, start); }
      start = posFromMouse(cm, event, true, true);
      ourIndex = -1;
    } else {
      var range = rangeForUnit(cm, start, behavior.unit);
      if (behavior.extend)
        { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }
      else
        { ourRange = range; }
    }

    if (!behavior.addNew) {
      ourIndex = 0;
      setSelection(doc, new Selection([ourRange], 0), sel_mouse);
      startSel = doc.sel;
    } else if (ourIndex == -1) {
      ourIndex = ranges.length;
      setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),
                   {scroll: false, origin: "*mouse"});
    } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) {
      setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),
                   {scroll: false, origin: "*mouse"});
      startSel = doc.sel;
    } else {
      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);
    }

    var lastPos = start;
    function extendTo(pos) {
      if (cmp(lastPos, pos) == 0) { return }
      lastPos = pos;

      if (behavior.unit == "rectangle") {
        var ranges = [], tabSize = cm.options.tabSize;
        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);
        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);
        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);
        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));
             line <= end; line++) {
          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);
          if (left == right)
            { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }
          else if (text.length > leftPos)
            { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }
        }
        if (!ranges.length) { ranges.push(new Range(start, start)); }
        setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),
                     {origin: "*mouse", scroll: false});
        cm.scrollIntoView(pos);
      } else {
        var oldRange = ourRange;
        var range = rangeForUnit(cm, pos, behavior.unit);
        var anchor = oldRange.anchor, head;
        if (cmp(range.anchor, anchor) > 0) {
          head = range.head;
          anchor = minPos(oldRange.from(), range.anchor);
        } else {
          head = range.anchor;
          anchor = maxPos(oldRange.to(), range.head);
        }
        var ranges$1 = startSel.ranges.slice(0);
        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));
        setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);
      }
    }

    var editorSize = display.wrapper.getBoundingClientRect();
    // Used to ensure timeout re-tries don't fire when another extend
    // happened in the meantime (clearTimeout isn't reliable -- at
    // least on Chrome, the timeouts still happen even when cleared,
    // if the clear happens after their scheduled firing time).
    var counter = 0;

    function extend(e) {
      var curCount = ++counter;
      var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle");
      if (!cur) { return }
      if (cmp(cur, lastPos) != 0) {
        cm.curOp.focus = activeElt();
        extendTo(cur);
        var visible = visibleLines(display, doc);
        if (cur.line >= visible.to || cur.line < visible.from)
          { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }
      } else {
        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;
        if (outside) { setTimeout(operation(cm, function () {
          if (counter != curCount) { return }
          display.scroller.scrollTop += outside;
          extend(e);
        }), 50); }
      }
    }

    function done(e) {
      cm.state.selectingText = false;
      counter = Infinity;
      // If e is null or undefined we interpret this as someone trying
      // to explicitly cancel the selection rather than the user
      // letting go of the mouse button.
      if (e) {
        e_preventDefault(e);
        display.input.focus();
      }
      off(display.wrapper.ownerDocument, "mousemove", move);
      off(display.wrapper.ownerDocument, "mouseup", up);
      doc.history.lastSelOrigin = null;
    }

    var move = operation(cm, function (e) {
      if (e.buttons === 0 || !e_button(e)) { done(e); }
      else { extend(e); }
    });
    var up = operation(cm, done);
    cm.state.selectingText = up;
    on(display.wrapper.ownerDocument, "mousemove", move);
    on(display.wrapper.ownerDocument, "mouseup", up);
  }

  // Used when mouse-selecting to adjust the anchor to the proper side
  // of a bidi jump depending on the visual position of the head.
  function bidiSimplify(cm, range) {
    var anchor = range.anchor;
    var head = range.head;
    var anchorLine = getLine(cm.doc, anchor.line);
    if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }
    var order = getOrder(anchorLine);
    if (!order) { return range }
    var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];
    if (part.from != anchor.ch && part.to != anchor.ch) { return range }
    var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);
    if (boundary == 0 || boundary == order.length) { return range }

    // Compute the relative visual position of the head compared to the
    // anchor (<0 is to the left, >0 to the right)
    var leftSide;
    if (head.line != anchor.line) {
      leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0;
    } else {
      var headIndex = getBidiPartAt(order, head.ch, head.sticky);
      var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);
      if (headIndex == boundary - 1 || headIndex == boundary)
        { leftSide = dir < 0; }
      else
        { leftSide = dir > 0; }
    }

    var usePart = order[boundary + (leftSide ? -1 : 0)];
    var from = leftSide == (usePart.level == 1);
    var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before";
    return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)
  }


  // Determines whether an event happened in the gutter, and fires the
  // handlers for the corresponding event.
  function gutterEvent(cm, e, type, prevent) {
    var mX, mY;
    if (e.touches) {
      mX = e.touches[0].clientX;
      mY = e.touches[0].clientY;
    } else {
      try { mX = e.clientX; mY = e.clientY; }
      catch(e$1) { return false }
    }
    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }
    if (prevent) { e_preventDefault(e); }

    var display = cm.display;
    var lineBox = display.lineDiv.getBoundingClientRect();

    if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }
    mY -= lineBox.top - display.viewOffset;

    for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {
      var g = display.gutters.childNodes[i];
      if (g && g.getBoundingClientRect().right >= mX) {
        var line = lineAtHeight(cm.doc, mY);
        var gutter = cm.display.gutterSpecs[i];
        signal(cm, type, cm, line, gutter.className, e);
        return e_defaultPrevented(e)
      }
    }
  }

  function clickInGutter(cm, e) {
    return gutterEvent(cm, e, "gutterClick", true)
  }

  // CONTEXT MENU HANDLING

  // To make the context menu work, we need to briefly unhide the
  // textarea (making it as unobtrusive as possible) to let the
  // right-click take effect on it.
  function onContextMenu(cm, e) {
    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }
    if (signalDOMEvent(cm, e, "contextmenu")) { return }
    if (!captureRightClick) { cm.display.input.onContextMenu(e); }
  }

  function contextMenuInGutter(cm, e) {
    if (!hasHandler(cm, "gutterContextMenu")) { return false }
    return gutterEvent(cm, e, "gutterContextMenu", false)
  }

  function themeChanged(cm) {
    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
      cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
    clearCaches(cm);
  }

  var Init = {toString: function(){return "CodeMirror.Init"}};

  var defaults = {};
  var optionHandlers = {};

  function defineOptions(CodeMirror) {
    var optionHandlers = CodeMirror.optionHandlers;

    function option(name, deflt, handle, notOnInit) {
      CodeMirror.defaults[name] = deflt;
      if (handle) { optionHandlers[name] =
        notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }
    }

    CodeMirror.defineOption = option;

    // Passed to option handlers when there is no old value.
    CodeMirror.Init = Init;

    // These two are, on init, called from the constructor because they
    // have to be initialized before the editor can start at all.
    option("value", "", function (cm, val) { return cm.setValue(val); }, true);
    option("mode", null, function (cm, val) {
      cm.doc.modeOption = val;
      loadMode(cm);
    }, true);

    option("indentUnit", 2, loadMode, true);
    option("indentWithTabs", false);
    option("smartIndent", true);
    option("tabSize", 4, function (cm) {
      resetModeState(cm);
      clearCaches(cm);
      regChange(cm);
    }, true);

    option("lineSeparator", null, function (cm, val) {
      cm.doc.lineSep = val;
      if (!val) { return }
      var newBreaks = [], lineNo = cm.doc.first;
      cm.doc.iter(function (line) {
        for (var pos = 0;;) {
          var found = line.text.indexOf(val, pos);
          if (found == -1) { break }
          pos = found + val.length;
          newBreaks.push(Pos(lineNo, found));
        }
        lineNo++;
      });
      for (var i = newBreaks.length - 1; i >= 0; i--)
        { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }
    });
    option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200c\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) {
      cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g");
      if (old != Init) { cm.refresh(); }
    });
    option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);
    option("electricChars", true);
    option("inputStyle", mobile ? "contenteditable" : "textarea", function () {
      throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME
    }, true);
    option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);
    option("autocorrect", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);
    option("autocapitalize", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);
    option("rtlMoveVisually", !windows);
    option("wholeLineUpdateBefore", true);

    option("theme", "default", function (cm) {
      themeChanged(cm);
      updateGutters(cm);
    }, true);
    option("keyMap", "default", function (cm, val, old) {
      var next = getKeyMap(val);
      var prev = old != Init && getKeyMap(old);
      if (prev && prev.detach) { prev.detach(cm, next); }
      if (next.attach) { next.attach(cm, prev || null); }
    });
    option("extraKeys", null);
    option("configureMouse", null);

    option("lineWrapping", false, wrappingChanged, true);
    option("gutters", [], function (cm, val) {
      cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);
      updateGutters(cm);
    }, true);
    option("fixedGutter", true, function (cm, val) {
      cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0";
      cm.refresh();
    }, true);
    option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true);
    option("scrollbarStyle", "native", function (cm) {
      initScrollbars(cm);
      updateScrollbars(cm);
      cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);
      cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);
    }, true);
    option("lineNumbers", false, function (cm, val) {
      cm.display.gutterSpecs = getGutters(cm.options.gutters, val);
      updateGutters(cm);
    }, true);
    option("firstLineNumber", 1, updateGutters, true);
    option("lineNumberFormatter", function (integer) { return integer; }, updateGutters, true);
    option("showCursorWhenSelecting", false, updateSelection, true);

    option("resetSelectionOnContextMenu", true);
    option("lineWiseCopyCut", true);
    option("pasteLinesPerSelection", true);
    option("selectionsMayTouch", false);

    option("readOnly", false, function (cm, val) {
      if (val == "nocursor") {
        onBlur(cm);
        cm.display.input.blur();
      }
      cm.display.input.readOnlyChanged(val);
    });

    option("screenReaderLabel", null, function (cm, val) {
      val = (val === '') ? null : val;
      cm.display.input.screenReaderLabelChanged(val);
    });

    option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);
    option("dragDrop", true, dragDropChanged);
    option("allowDropFileTypes", null);

    option("cursorBlinkRate", 530);
    option("cursorScrollMargin", 0);
    option("cursorHeight", 1, updateSelection, true);
    option("singleCursorHeightPerLine", true, updateSelection, true);
    option("workTime", 100);
    option("workDelay", 100);
    option("flattenSpans", true, resetModeState, true);
    option("addModeClass", false, resetModeState, true);
    option("pollInterval", 100);
    option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });
    option("historyEventDelay", 1250);
    option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true);
    option("maxHighlightLength", 10000, resetModeState, true);
    option("moveInputWithCursor", true, function (cm, val) {
      if (!val) { cm.display.input.resetPosition(); }
    });

    option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; });
    option("autofocus", null);
    option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true);
    option("phrases", null);
  }

  function dragDropChanged(cm, value, old) {
    var wasOn = old && old != Init;
    if (!value != !wasOn) {
      var funcs = cm.display.dragFunctions;
      var toggle = value ? on : off;
      toggle(cm.display.scroller, "dragstart", funcs.start);
      toggle(cm.display.scroller, "dragenter", funcs.enter);
      toggle(cm.display.scroller, "dragover", funcs.over);
      toggle(cm.display.scroller, "dragleave", funcs.leave);
      toggle(cm.display.scroller, "drop", funcs.drop);
    }
  }

  function wrappingChanged(cm) {
    if (cm.options.lineWrapping) {
      addClass(cm.display.wrapper, "CodeMirror-wrap");
      cm.display.sizer.style.minWidth = "";
      cm.display.sizerWidth = null;
    } else {
      rmClass(cm.display.wrapper, "CodeMirror-wrap");
      findMaxLine(cm);
    }
    estimateLineHeights(cm);
    regChange(cm);
    clearCaches(cm);
    setTimeout(function () { return updateScrollbars(cm); }, 100);
  }

  // A CodeMirror instance represents an editor. This is the object
  // that user code is usually dealing with.

  function CodeMirror(place, options) {
    var this$1 = this;

    if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }

    this.options = options = options ? copyObj(options) : {};
    // Determine effective options based on given values and defaults.
    copyObj(defaults, options, false);

    var doc = options.value;
    if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }
    else if (options.mode) { doc.modeOption = options.mode; }
    this.doc = doc;

    var input = new CodeMirror.inputStyles[options.inputStyle](this);
    var display = this.display = new Display(place, doc, input, options);
    display.wrapper.CodeMirror = this;
    themeChanged(this);
    if (options.lineWrapping)
      { this.display.wrapper.className += " CodeMirror-wrap"; }
    initScrollbars(this);

    this.state = {
      keyMaps: [],  // stores maps added by addKeyMap
      overlays: [], // highlighting overlays, as added by addOverlay
      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info
      overwrite: false,
      delayingBlurEvent: false,
      focused: false,
      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
      pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll
      selectingText: false,
      draggingText: false,
      highlight: new Delayed(), // stores highlight worker timeout
      keySeq: null,  // Unfinished key sequence
      specialChars: null
    };

    if (options.autofocus && !mobile) { display.input.focus(); }

    // Override magic textarea content restore that IE sometimes does
    // on our hidden textarea on reload
    if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }

    registerEventHandlers(this);
    ensureGlobalHandlers();

    startOperation(this);
    this.curOp.forceUpdate = true;
    attachDoc(this, doc);

    if ((options.autofocus && !mobile) || this.hasFocus())
      { setTimeout(function () {
        if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }
      }, 20); }
    else
      { onBlur(this); }

    for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))
      { optionHandlers[opt](this, options[opt], Init); } }
    maybeUpdateLineNumberWidth(this);
    if (options.finishInit) { options.finishInit(this); }
    for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }
    endOperation(this);
    // Suppress optimizelegibility in Webkit, since it breaks text
    // measuring on line wrapping boundaries.
    if (webkit && options.lineWrapping &&
        getComputedStyle(display.lineDiv).textRendering == "optimizelegibility")
      { display.lineDiv.style.textRendering = "auto"; }
  }

  // The default configuration options.
  CodeMirror.defaults = defaults;
  // Functions to run when options are changed.
  CodeMirror.optionHandlers = optionHandlers;

  // Attach the necessary event handlers when initializing the editor
  function registerEventHandlers(cm) {
    var d = cm.display;
    on(d.scroller, "mousedown", operation(cm, onMouseDown));
    // Older IE's will not fire a second mousedown for a double click
    if (ie && ie_version < 11)
      { on(d.scroller, "dblclick", operation(cm, function (e) {
        if (signalDOMEvent(cm, e)) { return }
        var pos = posFromMouse(cm, e);
        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }
        e_preventDefault(e);
        var word = cm.findWordAt(pos);
        extendSelection(cm.doc, word.anchor, word.head);
      })); }
    else
      { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }
    // Some browsers fire contextmenu *after* opening the menu, at
    // which point we can't mess with it anymore. Context menu is
    // handled in onMouseDown for these browsers.
    on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); });
    on(d.input.getField(), "contextmenu", function (e) {
      if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }
    });

    // Used to suppress mouse event handling when a touch happens
    var touchFinished, prevTouch = {end: 0};
    function finishTouch() {
      if (d.activeTouch) {
        touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);
        prevTouch = d.activeTouch;
        prevTouch.end = +new Date;
      }
    }
    function isMouseLikeTouchEvent(e) {
      if (e.touches.length != 1) { return false }
      var touch = e.touches[0];
      return touch.radiusX <= 1 && touch.radiusY <= 1
    }
    function farAway(touch, other) {
      if (other.left == null) { return true }
      var dx = other.left - touch.left, dy = other.top - touch.top;
      return dx * dx + dy * dy > 20 * 20
    }
    on(d.scroller, "touchstart", function (e) {
      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {
        d.input.ensurePolled();
        clearTimeout(touchFinished);
        var now = +new Date;
        d.activeTouch = {start: now, moved: false,
                         prev: now - prevTouch.end <= 300 ? prevTouch : null};
        if (e.touches.length == 1) {
          d.activeTouch.left = e.touches[0].pageX;
          d.activeTouch.top = e.touches[0].pageY;
        }
      }
    });
    on(d.scroller, "touchmove", function () {
      if (d.activeTouch) { d.activeTouch.moved = true; }
    });
    on(d.scroller, "touchend", function (e) {
      var touch = d.activeTouch;
      if (touch && !eventInWidget(d, e) && touch.left != null &&
          !touch.moved && new Date - touch.start < 300) {
        var pos = cm.coordsChar(d.activeTouch, "page"), range;
        if (!touch.prev || farAway(touch, touch.prev)) // Single tap
          { range = new Range(pos, pos); }
        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap
          { range = cm.findWordAt(pos); }
        else // Triple tap
          { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }
        cm.setSelection(range.anchor, range.head);
        cm.focus();
        e_preventDefault(e);
      }
      finishTouch();
    });
    on(d.scroller, "touchcancel", finishTouch);

    // Sync scrolling between fake scrollbars and real scrollable
    // area, ensure viewport is updated when scrolling.
    on(d.scroller, "scroll", function () {
      if (d.scroller.clientHeight) {
        updateScrollTop(cm, d.scroller.scrollTop);
        setScrollLeft(cm, d.scroller.scrollLeft, true);
        signal(cm, "scroll", cm);
      }
    });

    // Listen to wheel events in order to try and update the viewport on time.
    on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); });
    on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); });

    // Prevent wrapper from ever scrolling
    on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });

    d.dragFunctions = {
      enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},
      over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},
      start: function (e) { return onDragStart(cm, e); },
      drop: operation(cm, onDrop),
      leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}
    };

    var inp = d.input.getField();
    on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); });
    on(inp, "keydown", operation(cm, onKeyDown));
    on(inp, "keypress", operation(cm, onKeyPress));
    on(inp, "focus", function (e) { return onFocus(cm, e); });
    on(inp, "blur", function (e) { return onBlur(cm, e); });
  }

  var initHooks = [];
  CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };

  // Indent the given line. The how parameter can be "smart",
  // "add"/null, "subtract", or "prev". When aggressive is false
  // (typically set to true for forced single-line indents), empty
  // lines are not indented, and places where the mode returns Pass
  // are left alone.
  function indentLine(cm, n, how, aggressive) {
    var doc = cm.doc, state;
    if (how == null) { how = "add"; }
    if (how == "smart") {
      // Fall back to "prev" when the mode doesn't have an indentation
      // method.
      if (!doc.mode.indent) { how = "prev"; }
      else { state = getContextBefore(cm, n).state; }
    }

    var tabSize = cm.options.tabSize;
    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);
    if (line.stateAfter) { line.stateAfter = null; }
    var curSpaceString = line.text.match(/^\s*/)[0], indentation;
    if (!aggressive && !/\S/.test(line.text)) {
      indentation = 0;
      how = "not";
    } else if (how == "smart") {
      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);
      if (indentation == Pass || indentation > 150) {
        if (!aggressive) { return }
        how = "prev";
      }
    }
    if (how == "prev") {
      if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }
      else { indentation = 0; }
    } else if (how == "add") {
      indentation = curSpace + cm.options.indentUnit;
    } else if (how == "subtract") {
      indentation = curSpace - cm.options.indentUnit;
    } else if (typeof how == "number") {
      indentation = curSpace + how;
    }
    indentation = Math.max(0, indentation);

    var indentString = "", pos = 0;
    if (cm.options.indentWithTabs)
      { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} }
    if (pos < indentation) { indentString += spaceStr(indentation - pos); }

    if (indentString != curSpaceString) {
      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input");
      line.stateAfter = null;
      return true
    } else {
      // Ensure that, if the cursor was in the whitespace at the start
      // of the line, it is moved to the end of that space.
      for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {
        var range = doc.sel.ranges[i$1];
        if (range.head.line == n && range.head.ch < curSpaceString.length) {
          var pos$1 = Pos(n, curSpaceString.length);
          replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));
          break
        }
      }
    }
  }

  // This will be set to a {lineWise: bool, text: [string]} object, so
  // that, when pasting, we know what kind of selections the copied
  // text was made out of.
  var lastCopied = null;

  function setLastCopied(newLastCopied) {
    lastCopied = newLastCopied;
  }

  function applyTextInput(cm, inserted, deleted, sel, origin) {
    var doc = cm.doc;
    cm.display.shift = false;
    if (!sel) { sel = doc.sel; }

    var recent = +new Date - 200;
    var paste = origin == "paste" || cm.state.pasteIncoming > recent;
    var textLines = splitLinesAuto(inserted), multiPaste = null;
    // When pasting N lines into N selections, insert one line per selection
    if (paste && sel.ranges.length > 1) {
      if (lastCopied && lastCopied.text.join("\n") == inserted) {
        if (sel.ranges.length % lastCopied.text.length == 0) {
          multiPaste = [];
          for (var i = 0; i < lastCopied.text.length; i++)
            { multiPaste.push(doc.splitLines(lastCopied.text[i])); }
        }
      } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {
        multiPaste = map(textLines, function (l) { return [l]; });
      }
    }

    var updateInput = cm.curOp.updateInput;
    // Normal behavior is to insert the new text into every selection
    for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {
      var range = sel.ranges[i$1];
      var from = range.from(), to = range.to();
      if (range.empty()) {
        if (deleted && deleted > 0) // Handle deletion
          { from = Pos(from.line, from.ch - deleted); }
        else if (cm.state.overwrite && !paste) // Handle overwrite
          { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }
        else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n"))
          { from = to = Pos(from.line, 0); }
      }
      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,
                         origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input")};
      makeChange(cm.doc, changeEvent);
      signalLater(cm, "inputRead", cm, changeEvent);
    }
    if (inserted && !paste)
      { triggerElectric(cm, inserted); }

    ensureCursorVisible(cm);
    if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }
    cm.curOp.typing = true;
    cm.state.pasteIncoming = cm.state.cutIncoming = -1;
  }

  function handlePaste(e, cm) {
    var pasted = e.clipboardData && e.clipboardData.getData("Text");
    if (pasted) {
      e.preventDefault();
      if (!cm.isReadOnly() && !cm.options.disableInput)
        { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); }
      return true
    }
  }

  function triggerElectric(cm, inserted) {
    // When an 'electric' character is inserted, immediately trigger a reindent
    if (!cm.options.electricChars || !cm.options.smartIndent) { return }
    var sel = cm.doc.sel;

    for (var i = sel.ranges.length - 1; i >= 0; i--) {
      var range = sel.ranges[i];
      if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }
      var mode = cm.getModeAt(range.head);
      var indented = false;
      if (mode.electricChars) {
        for (var j = 0; j < mode.electricChars.length; j++)
          { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
            indented = indentLine(cm, range.head.line, "smart");
            break
          } }
      } else if (mode.electricInput) {
        if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))
          { indented = indentLine(cm, range.head.line, "smart"); }
      }
      if (indented) { signalLater(cm, "electricInput", cm, range.head.line); }
    }
  }

  function copyableRanges(cm) {
    var text = [], ranges = [];
    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {
      var line = cm.doc.sel.ranges[i].head.line;
      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};
      ranges.push(lineRange);
      text.push(cm.getRange(lineRange.anchor, lineRange.head));
    }
    return {text: text, ranges: ranges}
  }

  function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {
    field.setAttribute("autocorrect", autocorrect ? "" : "off");
    field.setAttribute("autocapitalize", autocapitalize ? "" : "off");
    field.setAttribute("spellcheck", !!spellcheck);
  }

  function hiddenTextarea() {
    var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none");
    var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
    // The textarea is kept positioned near the cursor to prevent the
    // fact that it'll be scrolled into view on input from scrolling
    // our fake cursor out of view. On webkit, when wrap=off, paste is
    // very slow. So make the area wide instead.
    if (webkit) { te.style.width = "1000px"; }
    else { te.setAttribute("wrap", "off"); }
    // If border: 0; -- iOS fails to open keyboard (issue #1287)
    if (ios) { te.style.border = "1px solid black"; }
    disableBrowserMagic(te);
    return div
  }

  // The publicly visible API. Note that methodOp(f) means
  // 'wrap f in an operation, performed on its `this` parameter'.

  // This is not the complete set of editor methods. Most of the
  // methods defined on the Doc type are also injected into
  // CodeMirror.prototype, for backwards compatibility and
  // convenience.

  function addEditorMethods(CodeMirror) {
    var optionHandlers = CodeMirror.optionHandlers;

    var helpers = CodeMirror.helpers = {};

    CodeMirror.prototype = {
      constructor: CodeMirror,
      focus: function(){window.focus(); this.display.input.focus();},

      setOption: function(option, value) {
        var options = this.options, old = options[option];
        if (options[option] == value && option != "mode") { return }
        options[option] = value;
        if (optionHandlers.hasOwnProperty(option))
          { operation(this, optionHandlers[option])(this, value, old); }
        signal(this, "optionChange", this, option);
      },

      getOption: function(option) {return this.options[option]},
      getDoc: function() {return this.doc},

      addKeyMap: function(map, bottom) {
        this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map));
      },
      removeKeyMap: function(map) {
        var maps = this.state.keyMaps;
        for (var i = 0; i < maps.length; ++i)
          { if (maps[i] == map || maps[i].name == map) {
            maps.splice(i, 1);
            return true
          } }
      },

      addOverlay: methodOp(function(spec, options) {
        var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);
        if (mode.startState) { throw new Error("Overlays may not be stateful.") }
        insertSorted(this.state.overlays,
                     {mode: mode, modeSpec: spec, opaque: options && options.opaque,
                      priority: (options && options.priority) || 0},
                     function (overlay) { return overlay.priority; });
        this.state.modeGen++;
        regChange(this);
      }),
      removeOverlay: methodOp(function(spec) {
        var overlays = this.state.overlays;
        for (var i = 0; i < overlays.length; ++i) {
          var cur = overlays[i].modeSpec;
          if (cur == spec || typeof spec == "string" && cur.name == spec) {
            overlays.splice(i, 1);
            this.state.modeGen++;
            regChange(this);
            return
          }
        }
      }),

      indentLine: methodOp(function(n, dir, aggressive) {
        if (typeof dir != "string" && typeof dir != "number") {
          if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; }
          else { dir = dir ? "add" : "subtract"; }
        }
        if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }
      }),
      indentSelection: methodOp(function(how) {
        var ranges = this.doc.sel.ranges, end = -1;
        for (var i = 0; i < ranges.length; i++) {
          var range = ranges[i];
          if (!range.empty()) {
            var from = range.from(), to = range.to();
            var start = Math.max(end, from.line);
            end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;
            for (var j = start; j < end; ++j)
              { indentLine(this, j, how); }
            var newRanges = this.doc.sel.ranges;
            if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)
              { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }
          } else if (range.head.line > end) {
            indentLine(this, range.head.line, how, true);
            end = range.head.line;
            if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }
          }
        }
      }),

      // Fetch the parser token for a given character. Useful for hacks
      // that want to inspect the mode state (say, for completion).
      getTokenAt: function(pos, precise) {
        return takeToken(this, pos, precise)
      },

      getLineTokens: function(line, precise) {
        return takeToken(this, Pos(line), precise, true)
      },

      getTokenTypeAt: function(pos) {
        pos = clipPos(this.doc, pos);
        var styles = getLineStyles(this, getLine(this.doc, pos.line));
        var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;
        var type;
        if (ch == 0) { type = styles[2]; }
        else { for (;;) {
          var mid = (before + after) >> 1;
          if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }
          else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }
          else { type = styles[mid * 2 + 2]; break }
        } }
        var cut = type ? type.indexOf("overlay ") : -1;
        return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)
      },

      getModeAt: function(pos) {
        var mode = this.doc.mode;
        if (!mode.innerMode) { return mode }
        return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode
      },

      getHelper: function(pos, type) {
        return this.getHelpers(pos, type)[0]
      },

      getHelpers: function(pos, type) {
        var found = [];
        if (!helpers.hasOwnProperty(type)) { return found }
        var help = helpers[type], mode = this.getModeAt(pos);
        if (typeof mode[type] == "string") {
          if (help[mode[type]]) { found.push(help[mode[type]]); }
        } else if (mode[type]) {
          for (var i = 0; i < mode[type].length; i++) {
            var val = help[mode[type][i]];
            if (val) { found.push(val); }
          }
        } else if (mode.helperType && help[mode.helperType]) {
          found.push(help[mode.helperType]);
        } else if (help[mode.name]) {
          found.push(help[mode.name]);
        }
        for (var i$1 = 0; i$1 < help._global.length; i$1++) {
          var cur = help._global[i$1];
          if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)
            { found.push(cur.val); }
        }
        return found
      },

      getStateAfter: function(line, precise) {
        var doc = this.doc;
        line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);
        return getContextBefore(this, line + 1, precise).state
      },

      cursorCoords: function(start, mode) {
        var pos, range = this.doc.sel.primary();
        if (start == null) { pos = range.head; }
        else if (typeof start == "object") { pos = clipPos(this.doc, start); }
        else { pos = start ? range.from() : range.to(); }
        return cursorCoords(this, pos, mode || "page")
      },

      charCoords: function(pos, mode) {
        return charCoords(this, clipPos(this.doc, pos), mode || "page")
      },

      coordsChar: function(coords, mode) {
        coords = fromCoordSystem(this, coords, mode || "page");
        return coordsChar(this, coords.left, coords.top)
      },

      lineAtHeight: function(height, mode) {
        height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top;
        return lineAtHeight(this.doc, height + this.display.viewOffset)
      },
      heightAtLine: function(line, mode, includeWidgets) {
        var end = false, lineObj;
        if (typeof line == "number") {
          var last = this.doc.first + this.doc.size - 1;
          if (line < this.doc.first) { line = this.doc.first; }
          else if (line > last) { line = last; end = true; }
          lineObj = getLine(this.doc, line);
        } else {
          lineObj = line;
        }
        return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top +
          (end ? this.doc.height - heightAtLine(lineObj) : 0)
      },

      defaultTextHeight: function() { return textHeight(this.display) },
      defaultCharWidth: function() { return charWidth(this.display) },

      getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},

      addWidget: function(pos, node, scroll, vert, horiz) {
        var display = this.display;
        pos = cursorCoords(this, clipPos(this.doc, pos));
        var top = pos.bottom, left = pos.left;
        node.style.position = "absolute";
        node.setAttribute("cm-ignore-events", "true");
        this.display.input.setUneditable(node);
        display.sizer.appendChild(node);
        if (vert == "over") {
          top = pos.top;
        } else if (vert == "above" || vert == "near") {
          var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
          hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);
          // Default to positioning above (if specified and possible); otherwise default to positioning below
          if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
            { top = pos.top - node.offsetHeight; }
          else if (pos.bottom + node.offsetHeight <= vspace)
            { top = pos.bottom; }
          if (left + node.offsetWidth > hspace)
            { left = hspace - node.offsetWidth; }
        }
        node.style.top = top + "px";
        node.style.left = node.style.right = "";
        if (horiz == "right") {
          left = display.sizer.clientWidth - node.offsetWidth;
          node.style.right = "0px";
        } else {
          if (horiz == "left") { left = 0; }
          else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }
          node.style.left = left + "px";
        }
        if (scroll)
          { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }
      },

      triggerOnKeyDown: methodOp(onKeyDown),
      triggerOnKeyPress: methodOp(onKeyPress),
      triggerOnKeyUp: onKeyUp,
      triggerOnMouseDown: methodOp(onMouseDown),

      execCommand: function(cmd) {
        if (commands.hasOwnProperty(cmd))
          { return commands[cmd].call(null, this) }
      },

      triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),

      findPosH: function(from, amount, unit, visually) {
        var dir = 1;
        if (amount < 0) { dir = -1; amount = -amount; }
        var cur = clipPos(this.doc, from);
        for (var i = 0; i < amount; ++i) {
          cur = findPosH(this.doc, cur, dir, unit, visually);
          if (cur.hitSide) { break }
        }
        return cur
      },

      moveH: methodOp(function(dir, unit) {
        var this$1 = this;

        this.extendSelectionsBy(function (range) {
          if (this$1.display.shift || this$1.doc.extend || range.empty())
            { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }
          else
            { return dir < 0 ? range.from() : range.to() }
        }, sel_move);
      }),

      deleteH: methodOp(function(dir, unit) {
        var sel = this.doc.sel, doc = this.doc;
        if (sel.somethingSelected())
          { doc.replaceSelection("", null, "+delete"); }
        else
          { deleteNearSelection(this, function (range) {
            var other = findPosH(doc, range.head, dir, unit, false);
            return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}
          }); }
      }),

      findPosV: function(from, amount, unit, goalColumn) {
        var dir = 1, x = goalColumn;
        if (amount < 0) { dir = -1; amount = -amount; }
        var cur = clipPos(this.doc, from);
        for (var i = 0; i < amount; ++i) {
          var coords = cursorCoords(this, cur, "div");
          if (x == null) { x = coords.left; }
          else { coords.left = x; }
          cur = findPosV(this, coords, dir, unit);
          if (cur.hitSide) { break }
        }
        return cur
      },

      moveV: methodOp(function(dir, unit) {
        var this$1 = this;

        var doc = this.doc, goals = [];
        var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();
        doc.extendSelectionsBy(function (range) {
          if (collapse)
            { return dir < 0 ? range.from() : range.to() }
          var headPos = cursorCoords(this$1, range.head, "div");
          if (range.goalColumn != null) { headPos.left = range.goalColumn; }
          goals.push(headPos.left);
          var pos = findPosV(this$1, headPos, dir, unit);
          if (unit == "page" && range == doc.sel.primary())
            { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); }
          return pos
        }, sel_move);
        if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)
          { doc.sel.ranges[i].goalColumn = goals[i]; } }
      }),

      // Find the word at the given position (as returned by coordsChar).
      findWordAt: function(pos) {
        var doc = this.doc, line = getLine(doc, pos.line).text;
        var start = pos.ch, end = pos.ch;
        if (line) {
          var helper = this.getHelper(pos, "wordChars");
          if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; }
          var startChar = line.charAt(start);
          var check = isWordChar(startChar, helper)
            ? function (ch) { return isWordChar(ch, helper); }
            : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); }
            : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); };
          while (start > 0 && check(line.charAt(start - 1))) { --start; }
          while (end < line.length && check(line.charAt(end))) { ++end; }
        }
        return new Range(Pos(pos.line, start), Pos(pos.line, end))
      },

      toggleOverwrite: function(value) {
        if (value != null && value == this.state.overwrite) { return }
        if (this.state.overwrite = !this.state.overwrite)
          { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); }
        else
          { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); }

        signal(this, "overwriteToggle", this, this.state.overwrite);
      },
      hasFocus: function() { return this.display.input.getField() == activeElt() },
      isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },

      scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),
      getScrollInfo: function() {
        var scroller = this.display.scroller;
        return {left: scroller.scrollLeft, top: scroller.scrollTop,
                height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,
                width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,
                clientHeight: displayHeight(this), clientWidth: displayWidth(this)}
      },

      scrollIntoView: methodOp(function(range, margin) {
        if (range == null) {
          range = {from: this.doc.sel.primary().head, to: null};
          if (margin == null) { margin = this.options.cursorScrollMargin; }
        } else if (typeof range == "number") {
          range = {from: Pos(range, 0), to: null};
        } else if (range.from == null) {
          range = {from: range, to: null};
        }
        if (!range.to) { range.to = range.from; }
        range.margin = margin || 0;

        if (range.from.line != null) {
          scrollToRange(this, range);
        } else {
          scrollToCoordsRange(this, range.from, range.to, range.margin);
        }
      }),

      setSize: methodOp(function(width, height) {
        var this$1 = this;

        var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; };
        if (width != null) { this.display.wrapper.style.width = interpret(width); }
        if (height != null) { this.display.wrapper.style.height = interpret(height); }
        if (this.options.lineWrapping) { clearLineMeasurementCache(this); }
        var lineNo = this.display.viewFrom;
        this.doc.iter(lineNo, this.display.viewTo, function (line) {
          if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)
            { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, "widget"); break } } }
          ++lineNo;
        });
        this.curOp.forceUpdate = true;
        signal(this, "refresh", this);
      }),

      operation: function(f){return runInOp(this, f)},
      startOperation: function(){return startOperation(this)},
      endOperation: function(){return endOperation(this)},

      refresh: methodOp(function() {
        var oldHeight = this.display.cachedTextHeight;
        regChange(this);
        this.curOp.forceUpdate = true;
        clearCaches(this);
        scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);
        updateGutterSpace(this.display);
        if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)
          { estimateLineHeights(this); }
        signal(this, "refresh", this);
      }),

      swapDoc: methodOp(function(doc) {
        var old = this.doc;
        old.cm = null;
        // Cancel the current text selection if any (#5821)
        if (this.state.selectingText) { this.state.selectingText(); }
        attachDoc(this, doc);
        clearCaches(this);
        this.display.input.reset();
        scrollToCoords(this, doc.scrollLeft, doc.scrollTop);
        this.curOp.forceScroll = true;
        signalLater(this, "swapDoc", this, old);
        return old
      }),

      phrase: function(phraseText) {
        var phrases = this.options.phrases;
        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText
      },

      getInputField: function(){return this.display.input.getField()},
      getWrapperElement: function(){return this.display.wrapper},
      getScrollerElement: function(){return this.display.scroller},
      getGutterElement: function(){return this.display.gutters}
    };
    eventMixin(CodeMirror);

    CodeMirror.registerHelper = function(type, name, value) {
      if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }
      helpers[type][name] = value;
    };
    CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {
      CodeMirror.registerHelper(type, name, value);
      helpers[type]._global.push({pred: predicate, val: value});
    };
  }

  // Used for horizontal relative motion. Dir is -1 or 1 (left or
  // right), unit can be "codepoint", "char", "column" (like char, but
  // doesn't cross line boundaries), "word" (across next word), or
  // "group" (to the start of next group of word or
  // non-word-non-whitespace chars). The visually param controls
  // whether, in right-to-left text, direction 1 means to move towards
  // the next index in the string, or towards the character to the right
  // of the current position. The resulting position will have a
  // hitSide=true property if it reached the end of the document.
  function findPosH(doc, pos, dir, unit, visually) {
    var oldPos = pos;
    var origDir = dir;
    var lineObj = getLine(doc, pos.line);
    var lineDir = visually && doc.direction == "rtl" ? -dir : dir;
    function findNextLine() {
      var l = pos.line + lineDir;
      if (l < doc.first || l >= doc.first + doc.size) { return false }
      pos = new Pos(l, pos.ch, pos.sticky);
      return lineObj = getLine(doc, l)
    }
    function moveOnce(boundToLine) {
      var next;
      if (unit == "codepoint") {
        var ch = lineObj.text.charCodeAt(pos.ch + (unit > 0 ? 0 : -1));
        if (isNaN(ch)) { next = null; }
        else { next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (ch >= 0xD800 && ch < 0xDC00 ? 2 : 1))),
                            -dir); }
      } else if (visually) {
        next = moveVisually(doc.cm, lineObj, pos, dir);
      } else {
        next = moveLogically(lineObj, pos, dir);
      }
      if (next == null) {
        if (!boundToLine && findNextLine())
          { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }
        else
          { return false }
      } else {
        pos = next;
      }
      return true
    }

    if (unit == "char" || unit == "codepoint") {
      moveOnce();
    } else if (unit == "column") {
      moveOnce(true);
    } else if (unit == "word" || unit == "group") {
      var sawType = null, group = unit == "group";
      var helper = doc.cm && doc.cm.getHelper(pos, "wordChars");
      for (var first = true;; first = false) {
        if (dir < 0 && !moveOnce(!first)) { break }
        var cur = lineObj.text.charAt(pos.ch) || "\n";
        var type = isWordChar(cur, helper) ? "w"
          : group && cur == "\n" ? "n"
          : !group || /\s/.test(cur) ? null
          : "p";
        if (group && !first && !type) { type = "s"; }
        if (sawType && sawType != type) {
          if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";}
          break
        }

        if (type) { sawType = type; }
        if (dir > 0 && !moveOnce(!first)) { break }
      }
    }
    var result = skipAtomic(doc, pos, oldPos, origDir, true);
    if (equalCursorPos(oldPos, result)) { result.hitSide = true; }
    return result
  }

  // For relative vertical movement. Dir may be -1 or 1. Unit can be
  // "page" or "line". The resulting position will have a hitSide=true
  // property if it reached the end of the document.
  function findPosV(cm, pos, dir, unit) {
    var doc = cm.doc, x = pos.left, y;
    if (unit == "page") {
      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);
      var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);
      y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;

    } else if (unit == "line") {
      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;
    }
    var target;
    for (;;) {
      target = coordsChar(cm, x, y);
      if (!target.outside) { break }
      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }
      y += dir * 5;
    }
    return target
  }

  // CONTENTEDITABLE INPUT STYLE

  var ContentEditableInput = function(cm) {
    this.cm = cm;
    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;
    this.polling = new Delayed();
    this.composing = null;
    this.gracePeriod = false;
    this.readDOMTimeout = null;
  };

  ContentEditableInput.prototype.init = function (display) {
      var this$1 = this;

    var input = this, cm = input.cm;
    var div = input.div = display.lineDiv;
    disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);

    function belongsToInput(e) {
      for (var t = e.target; t; t = t.parentNode) {
        if (t == div) { return true }
        if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) { break }
      }
      return false
    }

    on(div, "paste", function (e) {
      if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
      // IE doesn't fire input events, so we schedule a read for the pasted content in this way
      if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }
    });

    on(div, "compositionstart", function (e) {
      this$1.composing = {data: e.data, done: false};
    });
    on(div, "compositionupdate", function (e) {
      if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }
    });
    on(div, "compositionend", function (e) {
      if (this$1.composing) {
        if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }
        this$1.composing.done = true;
      }
    });

    on(div, "touchstart", function () { return input.forceCompositionEnd(); });

    on(div, "input", function () {
      if (!this$1.composing) { this$1.readFromDOMSoon(); }
    });

    function onCopyCut(e) {
      if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }
      if (cm.somethingSelected()) {
        setLastCopied({lineWise: false, text: cm.getSelections()});
        if (e.type == "cut") { cm.replaceSelection("", null, "cut"); }
      } else if (!cm.options.lineWiseCopyCut) {
        return
      } else {
        var ranges = copyableRanges(cm);
        setLastCopied({lineWise: true, text: ranges.text});
        if (e.type == "cut") {
          cm.operation(function () {
            cm.setSelections(ranges.ranges, 0, sel_dontScroll);
            cm.replaceSelection("", null, "cut");
          });
        }
      }
      if (e.clipboardData) {
        e.clipboardData.clearData();
        var content = lastCopied.text.join("\n");
        // iOS exposes the clipboard API, but seems to discard content inserted into it
        e.clipboardData.setData("Text", content);
        if (e.clipboardData.getData("Text") == content) {
          e.preventDefault();
          return
        }
      }
      // Old-fashioned briefly-focus-a-textarea hack
      var kludge = hiddenTextarea(), te = kludge.firstChild;
      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);
      te.value = lastCopied.text.join("\n");
      var hadFocus = document.activeElement;
      selectInput(te);
      setTimeout(function () {
        cm.display.lineSpace.removeChild(kludge);
        hadFocus.focus();
        if (hadFocus == div) { input.showPrimarySelection(); }
      }, 50);
    }
    on(div, "copy", onCopyCut);
    on(div, "cut", onCopyCut);
  };

  ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {
    // Label for screenreaders, accessibility
    if(label) {
      this.div.setAttribute('aria-label', label);
    } else {
      this.div.removeAttribute('aria-label');
    }
  };

  ContentEditableInput.prototype.prepareSelection = function () {
    var result = prepareSelection(this.cm, false);
    result.focus = document.activeElement == this.div;
    return result
  };

  ContentEditableInput.prototype.showSelection = function (info, takeFocus) {
    if (!info || !this.cm.display.view.length) { return }
    if (info.focus || takeFocus) { this.showPrimarySelection(); }
    this.showMultipleSelections(info);
  };

  ContentEditableInput.prototype.getSelection = function () {
    return this.cm.display.wrapper.ownerDocument.getSelection()
  };

  ContentEditableInput.prototype.showPrimarySelection = function () {
    var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();
    var from = prim.from(), to = prim.to();

    if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {
      sel.removeAllRanges();
      return
    }

    var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
    var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);
    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&
        cmp(minPos(curAnchor, curFocus), from) == 0 &&
        cmp(maxPos(curAnchor, curFocus), to) == 0)
      { return }

    var view = cm.display.view;
    var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||
        {node: view[0].measure.map[2], offset: 0};
    var end = to.line < cm.display.viewTo && posToDOM(cm, to);
    if (!end) {
      var measure = view[view.length - 1].measure;
      var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;
      end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};
    }

    if (!start || !end) {
      sel.removeAllRanges();
      return
    }

    var old = sel.rangeCount && sel.getRangeAt(0), rng;
    try { rng = range(start.node, start.offset, end.offset, end.node); }
    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible
    if (rng) {
      if (!gecko && cm.state.focused) {
        sel.collapse(start.node, start.offset);
        if (!rng.collapsed) {
          sel.removeAllRanges();
          sel.addRange(rng);
        }
      } else {
        sel.removeAllRanges();
        sel.addRange(rng);
      }
      if (old && sel.anchorNode == null) { sel.addRange(old); }
      else if (gecko) { this.startGracePeriod(); }
    }
    this.rememberSelection();
  };

  ContentEditableInput.prototype.startGracePeriod = function () {
      var this$1 = this;

    clearTimeout(this.gracePeriod);
    this.gracePeriod = setTimeout(function () {
      this$1.gracePeriod = false;
      if (this$1.selectionChanged())
        { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }
    }, 20);
  };

  ContentEditableInput.prototype.showMultipleSelections = function (info) {
    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);
    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);
  };

  ContentEditableInput.prototype.rememberSelection = function () {
    var sel = this.getSelection();
    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;
    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;
  };

  ContentEditableInput.prototype.selectionInEditor = function () {
    var sel = this.getSelection();
    if (!sel.rangeCount) { return false }
    var node = sel.getRangeAt(0).commonAncestorContainer;
    return contains(this.div, node)
  };

  ContentEditableInput.prototype.focus = function () {
    if (this.cm.options.readOnly != "nocursor") {
      if (!this.selectionInEditor() || document.activeElement != this.div)
        { this.showSelection(this.prepareSelection(), true); }
      this.div.focus();
    }
  };
  ContentEditableInput.prototype.blur = function () { this.div.blur(); };
  ContentEditableInput.prototype.getField = function () { return this.div };

  ContentEditableInput.prototype.supportsTouch = function () { return true };

  ContentEditableInput.prototype.receivedFocus = function () {
    var input = this;
    if (this.selectionInEditor())
      { this.pollSelection(); }
    else
      { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }

    function poll() {
      if (input.cm.state.focused) {
        input.pollSelection();
        input.polling.set(input.cm.options.pollInterval, poll);
      }
    }
    this.polling.set(this.cm.options.pollInterval, poll);
  };

  ContentEditableInput.prototype.selectionChanged = function () {
    var sel = this.getSelection();
    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||
      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset
  };

  ContentEditableInput.prototype.pollSelection = function () {
    if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }
    var sel = this.getSelection(), cm = this.cm;
    // On Android Chrome (version 56, at least), backspacing into an
    // uneditable block element will put the cursor in that element,
    // and then, because it's not editable, hide the virtual keyboard.
    // Because Android doesn't allow us to actually detect backspace
    // presses in a sane way, this code checks for when that happens
    // and simulates a backspace press in this case.
    if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {
      this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs});
      this.blur();
      this.focus();
      return
    }
    if (this.composing) { return }
    this.rememberSelection();
    var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
    var head = domToPos(cm, sel.focusNode, sel.focusOffset);
    if (anchor && head) { runInOp(cm, function () {
      setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);
      if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }
    }); }
  };

  ContentEditableInput.prototype.pollContent = function () {
    if (this.readDOMTimeout != null) {
      clearTimeout(this.readDOMTimeout);
      this.readDOMTimeout = null;
    }

    var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();
    var from = sel.from(), to = sel.to();
    if (from.ch == 0 && from.line > cm.firstLine())
      { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }
    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())
      { to = Pos(to.line + 1, 0); }
    if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }

    var fromIndex, fromLine, fromNode;
    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {
      fromLine = lineNo(display.view[0].line);
      fromNode = display.view[0].node;
    } else {
      fromLine = lineNo(display.view[fromIndex].line);
      fromNode = display.view[fromIndex - 1].node.nextSibling;
    }
    var toIndex = findViewIndex(cm, to.line);
    var toLine, toNode;
    if (toIndex == display.view.length - 1) {
      toLine = display.viewTo - 1;
      toNode = display.lineDiv.lastChild;
    } else {
      toLine = lineNo(display.view[toIndex + 1].line) - 1;
      toNode = display.view[toIndex + 1].node.previousSibling;
    }

    if (!fromNode) { return false }
    var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));
    var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));
    while (newText.length > 1 && oldText.length > 1) {
      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }
      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }
      else { break }
    }

    var cutFront = 0, cutEnd = 0;
    var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);
    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))
      { ++cutFront; }
    var newBot = lst(newText), oldBot = lst(oldText);
    var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),
                             oldBot.length - (oldText.length == 1 ? cutFront : 0));
    while (cutEnd < maxCutEnd &&
           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))
      { ++cutEnd; }
    // Try to move start of change to start of selection if ambiguous
    if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {
      while (cutFront && cutFront > from.ch &&
             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {
        cutFront--;
        cutEnd++;
      }
    }

    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "");
    newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "");

    var chFrom = Pos(fromLine, cutFront);
    var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);
    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {
      replaceRange(cm.doc, newText, chFrom, chTo, "+input");
      return true
    }
  };

  ContentEditableInput.prototype.ensurePolled = function () {
    this.forceCompositionEnd();
  };
  ContentEditableInput.prototype.reset = function () {
    this.forceCompositionEnd();
  };
  ContentEditableInput.prototype.forceCompositionEnd = function () {
    if (!this.composing) { return }
    clearTimeout(this.readDOMTimeout);
    this.composing = null;
    this.updateFromDOM();
    this.div.blur();
    this.div.focus();
  };
  ContentEditableInput.prototype.readFromDOMSoon = function () {
      var this$1 = this;

    if (this.readDOMTimeout != null) { return }
    this.readDOMTimeout = setTimeout(function () {
      this$1.readDOMTimeout = null;
      if (this$1.composing) {
        if (this$1.composing.done) { this$1.composing = null; }
        else { return }
      }
      this$1.updateFromDOM();
    }, 80);
  };

  ContentEditableInput.prototype.updateFromDOM = function () {
      var this$1 = this;

    if (this.cm.isReadOnly() || !this.pollContent())
      { runInOp(this.cm, function () { return regChange(this$1.cm); }); }
  };

  ContentEditableInput.prototype.setUneditable = function (node) {
    node.contentEditable = "false";
  };

  ContentEditableInput.prototype.onKeyPress = function (e) {
    if (e.charCode == 0 || this.composing) { return }
    e.preventDefault();
    if (!this.cm.isReadOnly())
      { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }
  };

  ContentEditableInput.prototype.readOnlyChanged = function (val) {
    this.div.contentEditable = String(val != "nocursor");
  };

  ContentEditableInput.prototype.onContextMenu = function () {};
  ContentEditableInput.prototype.resetPosition = function () {};

  ContentEditableInput.prototype.needsContentAttribute = true;

  function posToDOM(cm, pos) {
    var view = findViewForLine(cm, pos.line);
    if (!view || view.hidden) { return null }
    var line = getLine(cm.doc, pos.line);
    var info = mapFromLineView(view, line, pos.line);

    var order = getOrder(line, cm.doc.direction), side = "left";
    if (order) {
      var partPos = getBidiPartAt(order, pos.ch);
      side = partPos % 2 ? "right" : "left";
    }
    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);
    result.offset = result.collapse == "right" ? result.end : result.start;
    return result
  }

  function isInGutter(node) {
    for (var scan = node; scan; scan = scan.parentNode)
      { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }
    return false
  }

  function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }

  function domTextBetween(cm, from, to, fromLine, toLine) {
    var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;
    function recognizeMarker(id) { return function (marker) { return marker.id == id; } }
    function close() {
      if (closing) {
        text += lineSep;
        if (extraLinebreak) { text += lineSep; }
        closing = extraLinebreak = false;
      }
    }
    function addText(str) {
      if (str) {
        close();
        text += str;
      }
    }
    function walk(node) {
      if (node.nodeType == 1) {
        var cmText = node.getAttribute("cm-text");
        if (cmText) {
          addText(cmText);
          return
        }
        var markerID = node.getAttribute("cm-marker"), range;
        if (markerID) {
          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));
          if (found.length && (range = found[0].find(0)))
            { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }
          return
        }
        if (node.getAttribute("contenteditable") == "false") { return }
        var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);
        if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }

        if (isBlock) { close(); }
        for (var i = 0; i < node.childNodes.length; i++)
          { walk(node.childNodes[i]); }

        if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }
        if (isBlock) { closing = true; }
      } else if (node.nodeType == 3) {
        addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " "));
      }
    }
    for (;;) {
      walk(from);
      if (from == to) { break }
      from = from.nextSibling;
      extraLinebreak = false;
    }
    return text
  }

  function domToPos(cm, node, offset) {
    var lineNode;
    if (node == cm.display.lineDiv) {
      lineNode = cm.display.lineDiv.childNodes[offset];
      if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }
      node = null; offset = 0;
    } else {
      for (lineNode = node;; lineNode = lineNode.parentNode) {
        if (!lineNode || lineNode == cm.display.lineDiv) { return null }
        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }
      }
    }
    for (var i = 0; i < cm.display.view.length; i++) {
      var lineView = cm.display.view[i];
      if (lineView.node == lineNode)
        { return locateNodeInLineView(lineView, node, offset) }
    }
  }

  function locateNodeInLineView(lineView, node, offset) {
    var wrapper = lineView.text.firstChild, bad = false;
    if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }
    if (node == wrapper) {
      bad = true;
      node = wrapper.childNodes[offset];
      offset = 0;
      if (!node) {
        var line = lineView.rest ? lst(lineView.rest) : lineView.line;
        return badPos(Pos(lineNo(line), line.text.length), bad)
      }
    }

    var textNode = node.nodeType == 3 ? node : null, topNode = node;
    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {
      textNode = node.firstChild;
      if (offset) { offset = textNode.nodeValue.length; }
    }
    while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }
    var measure = lineView.measure, maps = measure.maps;

    function find(textNode, topNode, offset) {
      for (var i = -1; i < (maps ? maps.length : 0); i++) {
        var map = i < 0 ? measure.map : maps[i];
        for (var j = 0; j < map.length; j += 3) {
          var curNode = map[j + 2];
          if (curNode == textNode || curNode == topNode) {
            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);
            var ch = map[j] + offset;
            if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }
            return Pos(line, ch)
          }
        }
      }
    }
    var found = find(textNode, topNode, offset);
    if (found) { return badPos(found, bad) }

    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems
    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {
      found = find(after, after.firstChild, 0);
      if (found)
        { return badPos(Pos(found.line, found.ch - dist), bad) }
      else
        { dist += after.textContent.length; }
    }
    for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {
      found = find(before, before.firstChild, -1);
      if (found)
        { return badPos(Pos(found.line, found.ch + dist$1), bad) }
      else
        { dist$1 += before.textContent.length; }
    }
  }

  // TEXTAREA INPUT STYLE

  var TextareaInput = function(cm) {
    this.cm = cm;
    // See input.poll and input.reset
    this.prevInput = "";

    // Flag that indicates whether we expect input to appear real soon
    // now (after some event like 'keypress' or 'input') and are
    // polling intensively.
    this.pollingFast = false;
    // Self-resetting timeout for the poller
    this.polling = new Delayed();
    // Used to work around IE issue with selection being forgotten when focus moves away from textarea
    this.hasSelection = false;
    this.composing = null;
  };

  TextareaInput.prototype.init = function (display) {
      var this$1 = this;

    var input = this, cm = this.cm;
    this.createField(display);
    var te = this.textarea;

    display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);

    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)
    if (ios) { te.style.width = "0px"; }

    on(te, "input", function () {
      if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }
      input.poll();
    });

    on(te, "paste", function (e) {
      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }

      cm.state.pasteIncoming = +new Date;
      input.fastPoll();
    });

    function prepareCopyCut(e) {
      if (signalDOMEvent(cm, e)) { return }
      if (cm.somethingSelected()) {
        setLastCopied({lineWise: false, text: cm.getSelections()});
      } else if (!cm.options.lineWiseCopyCut) {
        return
      } else {
        var ranges = copyableRanges(cm);
        setLastCopied({lineWise: true, text: ranges.text});
        if (e.type == "cut") {
          cm.setSelections(ranges.ranges, null, sel_dontScroll);
        } else {
          input.prevInput = "";
          te.value = ranges.text.join("\n");
          selectInput(te);
        }
      }
      if (e.type == "cut") { cm.state.cutIncoming = +new Date; }
    }
    on(te, "cut", prepareCopyCut);
    on(te, "copy", prepareCopyCut);

    on(display.scroller, "paste", function (e) {
      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }
      if (!te.dispatchEvent) {
        cm.state.pasteIncoming = +new Date;
        input.focus();
        return
      }

      // Pass the `paste` event to the textarea so it's handled by its event listener.
      var event = new Event("paste");
      event.clipboardData = e.clipboardData;
      te.dispatchEvent(event);
    });

    // Prevent normal selection in the editor (we handle our own)
    on(display.lineSpace, "selectstart", function (e) {
      if (!eventInWidget(display, e)) { e_preventDefault(e); }
    });

    on(te, "compositionstart", function () {
      var start = cm.getCursor("from");
      if (input.composing) { input.composing.range.clear(); }
      input.composing = {
        start: start,
        range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"})
      };
    });
    on(te, "compositionend", function () {
      if (input.composing) {
        input.poll();
        input.composing.range.clear();
        input.composing = null;
      }
    });
  };

  TextareaInput.prototype.createField = function (_display) {
    // Wraps and hides input textarea
    this.wrapper = hiddenTextarea();
    // The semihidden textarea that is focused when the editor is
    // focused, and receives input.
    this.textarea = this.wrapper.firstChild;
  };

  TextareaInput.prototype.screenReaderLabelChanged = function (label) {
    // Label for screenreaders, accessibility
    if(label) {
      this.textarea.setAttribute('aria-label', label);
    } else {
      this.textarea.removeAttribute('aria-label');
    }
  };

  TextareaInput.prototype.prepareSelection = function () {
    // Redraw the selection and/or cursor
    var cm = this.cm, display = cm.display, doc = cm.doc;
    var result = prepareSelection(cm);

    // Move the hidden textarea near the cursor to prevent scrolling artifacts
    if (cm.options.moveInputWithCursor) {
      var headPos = cursorCoords(cm, doc.sel.primary().head, "div");
      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();
      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
                                          headPos.top + lineOff.top - wrapOff.top));
      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
                                           headPos.left + lineOff.left - wrapOff.left));
    }

    return result
  };

  TextareaInput.prototype.showSelection = function (drawn) {
    var cm = this.cm, display = cm.display;
    removeChildrenAndAdd(display.cursorDiv, drawn.cursors);
    removeChildrenAndAdd(display.selectionDiv, drawn.selection);
    if (drawn.teTop != null) {
      this.wrapper.style.top = drawn.teTop + "px";
      this.wrapper.style.left = drawn.teLeft + "px";
    }
  };

  // Reset the input to correspond to the selection (or to be empty,
  // when not typing and nothing is selected)
  TextareaInput.prototype.reset = function (typing) {
    if (this.contextMenuPending || this.composing) { return }
    var cm = this.cm;
    if (cm.somethingSelected()) {
      this.prevInput = "";
      var content = cm.getSelection();
      this.textarea.value = content;
      if (cm.state.focused) { selectInput(this.textarea); }
      if (ie && ie_version >= 9) { this.hasSelection = content; }
    } else if (!typing) {
      this.prevInput = this.textarea.value = "";
      if (ie && ie_version >= 9) { this.hasSelection = null; }
    }
  };

  TextareaInput.prototype.getField = function () { return this.textarea };

  TextareaInput.prototype.supportsTouch = function () { return false };

  TextareaInput.prototype.focus = function () {
    if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) {
      try { this.textarea.focus(); }
      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM
    }
  };

  TextareaInput.prototype.blur = function () { this.textarea.blur(); };

  TextareaInput.prototype.resetPosition = function () {
    this.wrapper.style.top = this.wrapper.style.left = 0;
  };

  TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };

  // Poll for input changes, using the normal rate of polling. This
  // runs as long as the editor is focused.
  TextareaInput.prototype.slowPoll = function () {
      var this$1 = this;

    if (this.pollingFast) { return }
    this.polling.set(this.cm.options.pollInterval, function () {
      this$1.poll();
      if (this$1.cm.state.focused) { this$1.slowPoll(); }
    });
  };

  // When an event has just come in that is likely to add or change
  // something in the input textarea, we poll faster, to ensure that
  // the change appears on the screen quickly.
  TextareaInput.prototype.fastPoll = function () {
    var missed = false, input = this;
    input.pollingFast = true;
    function p() {
      var changed = input.poll();
      if (!changed && !missed) {missed = true; input.polling.set(60, p);}
      else {input.pollingFast = false; input.slowPoll();}
    }
    input.polling.set(20, p);
  };

  // Read input from the textarea, and update the document to match.
  // When something is selected, it is present in the textarea, and
  // selected (unless it is huge, in which case a placeholder is
  // used). When nothing is selected, the cursor sits after previously
  // seen text (can be empty), which is stored in prevInput (we must
  // not reset the textarea when typing, because that breaks IME).
  TextareaInput.prototype.poll = function () {
      var this$1 = this;

    var cm = this.cm, input = this.textarea, prevInput = this.prevInput;
    // Since this is called a *lot*, try to bail out as cheaply as
    // possible when it is clear that nothing happened. hasSelection
    // will be the case when there is a lot of text in the textarea,
    // in which case reading its value would be expensive.
    if (this.contextMenuPending || !cm.state.focused ||
        (hasSelection(input) && !prevInput && !this.composing) ||
        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)
      { return false }

    var text = input.value;
    // If nothing changed, bail.
    if (text == prevInput && !cm.somethingSelected()) { return false }
    // Work around nonsensical selection resetting in IE9/10, and
    // inexplicable appearance of private area unicode characters on
    // some key combos in Mac (#2689).
    if (ie && ie_version >= 9 && this.hasSelection === text ||
        mac && /[\uf700-\uf7ff]/.test(text)) {
      cm.display.input.reset();
      return false
    }

    if (cm.doc.sel == cm.display.selForContextMenu) {
      var first = text.charCodeAt(0);
      if (first == 0x200b && !prevInput) { prevInput = "\u200b"; }
      if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") }
    }
    // Find the part of the input that is actually new
    var same = 0, l = Math.min(prevInput.length, text.length);
    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }

    runInOp(cm, function () {
      applyTextInput(cm, text.slice(same), prevInput.length - same,
                     null, this$1.composing ? "*compose" : null);

      // Don't leave long text in the textarea, since it makes further polling slow
      if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; }
      else { this$1.prevInput = text; }

      if (this$1.composing) {
        this$1.composing.range.clear();
        this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"),
                                           {className: "CodeMirror-composing"});
      }
    });
    return true
  };

  TextareaInput.prototype.ensurePolled = function () {
    if (this.pollingFast && this.poll()) { this.pollingFast = false; }
  };

  TextareaInput.prototype.onKeyPress = function () {
    if (ie && ie_version >= 9) { this.hasSelection = null; }
    this.fastPoll();
  };

  TextareaInput.prototype.onContextMenu = function (e) {
    var input = this, cm = input.cm, display = cm.display, te = input.textarea;
    if (input.contextMenuPending) { input.contextMenuPending(); }
    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;
    if (!pos || presto) { return } // Opera is difficult.

    // Reset the current text selection only if the click is done outside of the selection
    // and 'resetSelectionOnContextMenu' option is true.
    var reset = cm.options.resetSelectionOnContextMenu;
    if (reset && cm.doc.sel.contains(pos) == -1)
      { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }

    var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;
    var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();
    input.wrapper.style.cssText = "position: static";
    te.style.cssText = "position: absolute; width: 30px; height: 30px;\n      top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n      z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";
    var oldScrollY;
    if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)
    display.input.focus();
    if (webkit) { window.scrollTo(null, oldScrollY); }
    display.input.reset();
    // Adds "Select all" to context menu in FF
    if (!cm.somethingSelected()) { te.value = input.prevInput = " "; }
    input.contextMenuPending = rehide;
    display.selForContextMenu = cm.doc.sel;
    clearTimeout(display.detectingSelectAll);

    // Select-all will be greyed out if there's nothing to select, so
    // this adds a zero-width space so that we can later check whether
    // it got selected.
    function prepareSelectAllHack() {
      if (te.selectionStart != null) {
        var selected = cm.somethingSelected();
        var extval = "\u200b" + (selected ? te.value : "");
        te.value = "\u21da"; // Used to catch context-menu undo
        te.value = extval;
        input.prevInput = selected ? "" : "\u200b";
        te.selectionStart = 1; te.selectionEnd = extval.length;
        // Re-set this, in case some other handler touched the
        // selection in the meantime.
        display.selForContextMenu = cm.doc.sel;
      }
    }
    function rehide() {
      if (input.contextMenuPending != rehide) { return }
      input.contextMenuPending = false;
      input.wrapper.style.cssText = oldWrapperCSS;
      te.style.cssText = oldCSS;
      if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }

      // Try to detect the user choosing select-all
      if (te.selectionStart != null) {
        if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }
        var i = 0, poll = function () {
          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&
              te.selectionEnd > 0 && input.prevInput == "\u200b") {
            operation(cm, selectAll)(cm);
          } else if (i++ < 10) {
            display.detectingSelectAll = setTimeout(poll, 500);
          } else {
            display.selForContextMenu = null;
            display.input.reset();
          }
        };
        display.detectingSelectAll = setTimeout(poll, 200);
      }
    }

    if (ie && ie_version >= 9) { prepareSelectAllHack(); }
    if (captureRightClick) {
      e_stop(e);
      var mouseup = function () {
        off(window, "mouseup", mouseup);
        setTimeout(rehide, 20);
      };
      on(window, "mouseup", mouseup);
    } else {
      setTimeout(rehide, 50);
    }
  };

  TextareaInput.prototype.readOnlyChanged = function (val) {
    if (!val) { this.reset(); }
    this.textarea.disabled = val == "nocursor";
    this.textarea.readOnly = !!val;
  };

  TextareaInput.prototype.setUneditable = function () {};

  TextareaInput.prototype.needsContentAttribute = false;

  function fromTextArea(textarea, options) {
    options = options ? copyObj(options) : {};
    options.value = textarea.value;
    if (!options.tabindex && textarea.tabIndex)
      { options.tabindex = textarea.tabIndex; }
    if (!options.placeholder && textarea.placeholder)
      { options.placeholder = textarea.placeholder; }
    // Set autofocus to true if this textarea is focused, or if it has
    // autofocus and no other element is focused.
    if (options.autofocus == null) {
      var hasFocus = activeElt();
      options.autofocus = hasFocus == textarea ||
        textarea.getAttribute("autofocus") != null && hasFocus == document.body;
    }

    function save() {textarea.value = cm.getValue();}

    var realSubmit;
    if (textarea.form) {
      on(textarea.form, "submit", save);
      // Deplorable hack to make the submit method do the right thing.
      if (!options.leaveSubmitMethodAlone) {
        var form = textarea.form;
        realSubmit = form.submit;
        try {
          var wrappedSubmit = form.submit = function () {
            save();
            form.submit = realSubmit;
            form.submit();
            form.submit = wrappedSubmit;
          };
        } catch(e) {}
      }
    }

    options.finishInit = function (cm) {
      cm.save = save;
      cm.getTextArea = function () { return textarea; };
      cm.toTextArea = function () {
        cm.toTextArea = isNaN; // Prevent this from being ran twice
        save();
        textarea.parentNode.removeChild(cm.getWrapperElement());
        textarea.style.display = "";
        if (textarea.form) {
          off(textarea.form, "submit", save);
          if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function")
            { textarea.form.submit = realSubmit; }
        }
      };
    };

    textarea.style.display = "none";
    var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },
      options);
    return cm
  }

  function addLegacyProps(CodeMirror) {
    CodeMirror.off = off;
    CodeMirror.on = on;
    CodeMirror.wheelEventPixels = wheelEventPixels;
    CodeMirror.Doc = Doc;
    CodeMirror.splitLines = splitLinesAuto;
    CodeMirror.countColumn = countColumn;
    CodeMirror.findColumn = findColumn;
    CodeMirror.isWordChar = isWordCharBasic;
    CodeMirror.Pass = Pass;
    CodeMirror.signal = signal;
    CodeMirror.Line = Line;
    CodeMirror.changeEnd = changeEnd;
    CodeMirror.scrollbarModel = scrollbarModel;
    CodeMirror.Pos = Pos;
    CodeMirror.cmpPos = cmp;
    CodeMirror.modes = modes;
    CodeMirror.mimeModes = mimeModes;
    CodeMirror.resolveMode = resolveMode;
    CodeMirror.getMode = getMode;
    CodeMirror.modeExtensions = modeExtensions;
    CodeMirror.extendMode = extendMode;
    CodeMirror.copyState = copyState;
    CodeMirror.startState = startState;
    CodeMirror.innerMode = innerMode;
    CodeMirror.commands = commands;
    CodeMirror.keyMap = keyMap;
    CodeMirror.keyName = keyName;
    CodeMirror.isModifierKey = isModifierKey;
    CodeMirror.lookupKey = lookupKey;
    CodeMirror.normalizeKeyMap = normalizeKeyMap;
    CodeMirror.StringStream = StringStream;
    CodeMirror.SharedTextMarker = SharedTextMarker;
    CodeMirror.TextMarker = TextMarker;
    CodeMirror.LineWidget = LineWidget;
    CodeMirror.e_preventDefault = e_preventDefault;
    CodeMirror.e_stopPropagation = e_stopPropagation;
    CodeMirror.e_stop = e_stop;
    CodeMirror.addClass = addClass;
    CodeMirror.contains = contains;
    CodeMirror.rmClass = rmClass;
    CodeMirror.keyNames = keyNames;
  }

  // EDITOR CONSTRUCTOR

  defineOptions(CodeMirror);

  addEditorMethods(CodeMirror);

  // Set up methods on CodeMirror's prototype to redirect to the editor's document.
  var dontDelegate = "iter insert remove copy getEditor constructor".split(" ");
  for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)
    { CodeMirror.prototype[prop] = (function(method) {
      return function() {return method.apply(this.doc, arguments)}
    })(Doc.prototype[prop]); } }

  eventMixin(Doc);
  CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput};

  // Extra arguments are stored as the mode's dependencies, which is
  // used by (legacy) mechanisms like loadmode.js to automatically
  // load a mode. (Preferred mechanism is the require/define calls.)
  CodeMirror.defineMode = function(name/*, mode, …*/) {
    if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name; }
    defineMode.apply(this, arguments);
  };

  CodeMirror.defineMIME = defineMIME;

  // Minimal default mode.
  CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });
  CodeMirror.defineMIME("text/plain", "null");

  // EXTENSIONS

  CodeMirror.defineExtension = function (name, func) {
    CodeMirror.prototype[name] = func;
  };
  CodeMirror.defineDocExtension = function (name, func) {
    Doc.prototype[name] = func;
  };

  CodeMirror.fromTextArea = fromTextArea;

  addLegacyProps(CodeMirror);

  CodeMirror.version = "5.58.3";

  return CodeMirror;

})));
PK|c�\2��E'	'	,managesieve/codemirror/mode/sieve/index.htmlnu�[���<!doctype html>

<title>CodeMirror: Sieve (RFC5228) mode</title>
<meta charset="utf-8"/>
<link rel=stylesheet href="../../doc/docs.css">

<link rel="stylesheet" href="../../lib/codemirror.css">
<script src="../../lib/codemirror.js"></script>
<script src="sieve.js"></script>
<style>.CodeMirror {background: #f8f8f8;}</style>
<div id=nav>
  <a href="https://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png" alt=""></a>

  <ul>
    <li><a href="../../index.html">Home</a>
    <li><a href="../../doc/manual.html">Manual</a>
    <li><a href="https://github.com/codemirror/codemirror">Code</a>
  </ul>
  <ul>
    <li><a href="../index.html">Language modes</a>
    <li><a class=active href="#">Sieve (RFC5228)</a>
  </ul>
</div>

<article>
<h2>Sieve (RFC5228) mode</h2>
<form><textarea id="code" name="code">
#
# Example Sieve Filter
# Declare any optional features or extension used by the script
#

require ["fileinto", "reject"];

#
# Reject any large messages (note that the four leading dots get
# "stuffed" to three)
#
if size :over 1M
{
  reject text:
Please do not send me large attachments.
Put your file on a server and send me the URL.
Thank you.
.... Fred
.
;
  stop;
}

#
# Handle messages from known mailing lists
# Move messages from IETF filter discussion list to filter folder
#
if header :is "Sender" "owner-ietf-mta-filters@imc.org"
{
  fileinto "filter";  # move to "filter" folder
}
#
# Keep all messages to or from people in my company
#
elsif address :domain :is ["From", "To"] "example.com"
{
  keep;               # keep in "In" folder
}

#
# Try and catch unsolicited email.  If a message is not to me,
# or it contains a subject known to be spam, file it away.
#
elsif anyof (not address :all :contains
               ["To", "Cc", "Bcc"] "me@example.com",
             header :matches "subject"
               ["*make*money*fast*", "*university*dipl*mas*"])
{
  # If message header does not contain my address,
  # it's from a list.
  fileinto "spam";   # move to "spam" folder
}
else
{
  # Move all other (non-company) mail to "personal"
  # folder.
  fileinto "personal";
}
</textarea></form>
    <script>
      var editor = CodeMirror.fromTextArea(document.getElementById("code"), {});
    </script>

    <p><strong>MIME types defined:</strong> <code>application/sieve</code>.</p>

  </article>
PK|c�\�w��*managesieve/codemirror/mode/sieve/sieve.jsnu�[���// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE

(function(mod) {
  if (typeof exports == "object" && typeof module == "object") // CommonJS
    mod(require("../../lib/codemirror"));
  else if (typeof define == "function" && define.amd) // AMD
    define(["../../lib/codemirror"], mod);
  else // Plain browser env
    mod(CodeMirror);
})(function(CodeMirror) {
"use strict";

CodeMirror.defineMode("sieve", function(config) {
  function words(str) {
    var obj = {}, words = str.split(" ");
    for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
    return obj;
  }

  var keywords = words("if elsif else stop require");
  var atoms = words("true false not");
  var indentUnit = config.indentUnit;

  function tokenBase(stream, state) {

    var ch = stream.next();
    if (ch == "/" && stream.eat("*")) {
      state.tokenize = tokenCComment;
      return tokenCComment(stream, state);
    }

    if (ch === '#') {
      stream.skipToEnd();
      return "comment";
    }

    if (ch == "\"") {
      state.tokenize = tokenString(ch);
      return state.tokenize(stream, state);
    }

    if (ch == "(") {
      state._indent.push("(");
      // add virtual angel wings so that editor behaves...
      // ...more sane incase of broken brackets
      state._indent.push("{");
      return null;
    }

    if (ch === "{") {
      state._indent.push("{");
      return null;
    }

    if (ch == ")")  {
      state._indent.pop();
      state._indent.pop();
    }

    if (ch === "}") {
      state._indent.pop();
      return null;
    }

    if (ch == ",")
      return null;

    if (ch == ";")
      return null;


    if (/[{}\(\),;]/.test(ch))
      return null;

    // 1*DIGIT "K" / "M" / "G"
    if (/\d/.test(ch)) {
      stream.eatWhile(/[\d]/);
      stream.eat(/[KkMmGg]/);
      return "number";
    }

    // ":" (ALPHA / "_") *(ALPHA / DIGIT / "_")
    if (ch == ":") {
      stream.eatWhile(/[a-zA-Z_]/);
      stream.eatWhile(/[a-zA-Z0-9_]/);

      return "operator";
    }

    stream.eatWhile(/\w/);
    var cur = stream.current();

    // "text:" *(SP / HTAB) (hash-comment / CRLF)
    // *(multiline-literal / multiline-dotstart)
    // "." CRLF
    if ((cur == "text") && stream.eat(":"))
    {
      state.tokenize = tokenMultiLineString;
      return "string";
    }

    if (keywords.propertyIsEnumerable(cur))
      return "keyword";

    if (atoms.propertyIsEnumerable(cur))
      return "atom";

    return null;
  }

  function tokenMultiLineString(stream, state)
  {
    state._multiLineString = true;
    // the first line is special it may contain a comment
    if (!stream.sol()) {
      stream.eatSpace();

      if (stream.peek() == "#") {
        stream.skipToEnd();
        return "comment";
      }

      stream.skipToEnd();
      return "string";
    }

    if ((stream.next() == ".")  && (stream.eol()))
    {
      state._multiLineString = false;
      state.tokenize = tokenBase;
    }

    return "string";
  }

  function tokenCComment(stream, state) {
    var maybeEnd = false, ch;
    while ((ch = stream.next()) != null) {
      if (maybeEnd && ch == "/") {
        state.tokenize = tokenBase;
        break;
      }
      maybeEnd = (ch == "*");
    }
    return "comment";
  }

  function tokenString(quote) {
    return function(stream, state) {
      var escaped = false, ch;
      while ((ch = stream.next()) != null) {
        if (ch == quote && !escaped)
          break;
        escaped = !escaped && ch == "\\";
      }
      if (!escaped) state.tokenize = tokenBase;
      return "string";
    };
  }

  return {
    startState: function(base) {
      return {tokenize: tokenBase,
              baseIndent: base || 0,
              _indent: []};
    },

    token: function(stream, state) {
      if (stream.eatSpace())
        return null;

      return (state.tokenize || tokenBase)(stream, state);
    },

    indent: function(state, _textAfter) {
      var length = state._indent.length;
      if (_textAfter && (_textAfter[0] == "}"))
        length--;

      if (length <0)
        length = 0;

      return length * indentUnit;
    },

    electricChars: "}"
  };
});

CodeMirror.defineMIME("application/sieve", "sieve");

});
PK|c�\F�Ϣ��/managesieve/helpdocs/en_US/settings-filters.rstnu�[���.. index:: Filters
.. _settings-managesieve-filters:

*******
Filters
*******

Incoming mail is automatically processed by the server and handled/organized
according to defined criteria. For example you can tell the server to move the message to
specified folder, redirect it to another account, send a reply, discard, delete, etc.

Filtering is based on `Sieve <https://www.rfc-editor.org/info/rfc5228>`_ language, which means that under the hood
all filters are stored as a Sieve script on the server. This interface allows you to
define rules in easy way without the need to know the language.

Each filter definition has a name and set of rules and actions. Usually 
the number of definitions is unlimited and they can be grouped into sets
(scripts) for convenience.


Filter sets
-----------

Filter definitions can be grouped into sets. These can be activated or deactivated.
Depending on server configuration there can be none, one or more active sets
at the same time. They need to have a unique name.

New sets can be created as empty or as a copy of an existing set. It is also possible
to import them from a text file containing Sieve script. Sets in form of a script
can be also downloaded e.g. for backup or migration purposes.


Filter definition
-----------------

Every filter can be active or inactive, which is convenient if you want to
disable some actions temporarily.

Because filters are executed in specified order (from top to bottom as you see them on the list)
you can use drag-and-drop technique to rearrange filters on the list.

Every filter definition contains at least one rule and one action. Depending on server
capabilities a rule can be based e.g. on message headers, body, date or size.

A set of actions also depends on server capabilities. Most servers support:

* moving/copying messages to specified folder
* redirecting/copying messages to another account
* discarding messages with specified error message
* replying (vacation)
* deleting (ignoring) messages
* setting flags (e.g. marking as Read)

Note: Some actions stop filtering process, some do not. Use *Stop evaluating rules*
and *Keep message in Inbox* actions to have more control on this.
PK|c�\�ņ��0managesieve/helpdocs/en_US/settings-vacation.rstnu�[���.. index:: Vacation
.. _settings-managesieve-vacation:

********
Vacation
********

The vacation autoresponder's purpose is to provide correspondents with
notification that the user is away for an extended period of time and that
they should not expect quick responses.

**Vacation** is used to respond to an incoming message with another message.

This interface is part of :ref:`settings-managesieve-filters` functionality
and provides a simple way to manage vacation responses.


Vacation message
----------------

To enable the autoresponder you have to set at least the response body and change
the status to *On*.

**Subject**
  Response subject is optional. By default the reply subject will be set
  to *Auto: <original subject>*

**Body**
  Response body. Here you put the reason of your absence or any other text
  that will be send to sender.

**Vacation start/end**
  These fields define when the vacation rule is active and are optional.

**Status**
  This field activates the rule. If you always use the same response body it is
  convenient to disable the vacation rule when it's not needed and enable again
  another time.

Advanced settings
-----------------

**Reply sender address**
  This is an email address that will be used as sender of the vacation reply.

**My email addresses**
  Normally the vacation response is send if recipient address of the incoming
  message is one of your addresses known to the server. Here you can add
  more addresses.

**Reply interval**
  This parameter defines how often the reply to the same sender is generated.
  When you receive a lot of messages from the same sender in short time,
  usually you don't want to reply to all of them. By default reply is send once a day.

**Incoming message action**
  This field defines an action taken on the incoming message. You can discard or keep
  it or redirect/copy to another account (so it can be handled by another person).
PK|c�\�|*��,managesieve/helpdocs/po/settings-filters.potnu�[���# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2015, roundcube.net
# This file is distributed under the same license as the Roundcube Webmail Help package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Roundcube Webmail Help 1.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-06-07 16:59\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: ../../en_US/_plugins/managesieve/settings-filters.rst:9
# cdb4a7c71e5343edb8015510da83a0b8
msgid "Filters"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:11
# 94cde05fc3f049e8911dffacfb9af0e5
msgid "Incoming mail is automatically processed by the server and handled/organized according to defined criteria. For example you can tell the server to move the message to specified folder, redirect it to another account, send a reply, discard, delete, etc."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:15
# c33e9a7b05f24fe59464ff2f1c9e10a5
msgid "Filtering is based on `Sieve <https://www.rfc-editor.org/info/rfc5228>`_ language, which means that under the hood all filters are stored as a Sieve script on the server. This interface allows you to define rules in easy way without the need to know the language."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:19
# 95eb7e571ec44698a474407092b6b79c
msgid "Each filter definition has a name and set of rules and actions. Usually the number of definitions is unlimited and they can be grouped into sets (scripts) for convenience."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:25
# aa2da905741247b9971687cd4fdb6a21
msgid "Filter sets"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:27
# dc9dbc4144034676a720caaf4379e4e3
msgid "Filter definitions can be grouped into sets. These can be activated or deactivated. Depending on server configuration there can be none, one or more active sets at the same time. They need to have a unique name."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:31
# 03f58cdba04c4282b867c792572a55e6
msgid "New sets can be created as empty or as a copy of an existing set. It is also possible to import them from a text file containing Sieve script. Sets in form of a script can be also downloaded e.g. for backup or migration purposes."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:37
# 9144e63ba44b476dadfcc84e33e72b86
msgid "Filter definition"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:39
# 602e3696b4bd4db5960351b5af0e72fd
msgid "Every filter can be active or inactive, which is convenient if you want to disable some actions temporarily."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:42
# 0f01b114450f4439b210f3831d66c534
msgid "Because filters are executed in specified order (from top to bottom as you see them on the list) you can use drag-and-drop technique to rearrange filters on the list."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:45
# 0a30f2aa835e430c9f9de2e446f4c311
msgid "Every filter definition contains at least one rule and one action. Depending on server capabilities a rule can be based e.g. on message headers, body, date or size."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:48
# d3b9c2df232c4cd891ec6ba4751e02cf
msgid "A set of actions also depends on server capabilities. Most servers support:"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:50
# 1ee77f36a88746e0809e903838314e5a
msgid "moving/copying messages to specified folder"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:51
# c2669d203d104753830a170af2ceffde
msgid "redirecting/copying messages to another account"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:52
# b04abf50eb1948518caff0c9f6d32ad4
msgid "discarding messages with specified error message"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:53
# 439873796de6457985088a206b449c5b
msgid "replying (vacation)"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:54
# 5b7bce17840647bdba48ffa944b30ec5
msgid "deleting (ignoring) messages"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:55
# a12f2f2bebe74c668b637be66352ddb7
msgid "setting flags (e.g. marking as Read)"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-filters.rst:57
# a19231cf44e64eeca67da4cd31b0303a
msgid "Note: Some actions stop filtering process, some do not. Use *Stop evaluating rules* and *Keep message in Inbox* actions to have more control on this."
msgstr ""

PK|c�\���&LL-managesieve/helpdocs/po/settings-vacation.potnu�[���# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2015, roundcube.net
# This file is distributed under the same license as the Roundcube Webmail Help package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Roundcube Webmail Help 1.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-06-07 16:59\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:9
# 6f1988e3ca10490f8b46fdf11ce3553a
msgid "Vacation"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:11
# 628c07bf4b424a039800ef834f891841
msgid "The vacation autoresponder's purpose is to provide correspondents with notification that the user is away for an extended period of time and that they should not expect quick responses."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:15
# 57607d8b841b42859d3bb4e6abc4d653
msgid "**Vacation** is used to respond to an incoming message with another message."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:17
# 34f46a208d324588906b0d3d10a6176c
msgid "This interface is part of :ref:`settings-managesieve-filters` functionality and provides a simple way to manage vacation responses."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:22
# 895cd4752ec649bc87850eb4bd149853
msgid "Vacation message"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:24
# 5de6ddf9931a481e9d1c9953183b28d8
msgid "To enable the autoresponder you have to set at least the response body and change the status to *On*."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:28
# c4790be6b0454aa190190c1e77087414
msgid "Response subject is optional. By default the reply subject will be set to *Auto: <original subject>*"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:32
# 65eb9d5c2f8d4a8cb3077c824ecf597f
msgid "Response body. Here you put the reason of your absence or any other text that will be send to sender."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:36
# 2b05975ad2ee40e9b64356eb39308a92
msgid "These fields define when the vacation rule is active and are optional."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:39
# 575bd1430cdf4ea4bbcfb9d8556393bc
msgid "This field activates the rule. If you always use the same response body it is convenient to disable the vacation rule when it's not needed and enable again another time."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:44
# 22d533b9cffd47d39c04cbca07d9513d
msgid "Advanced settings"
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:47
# d56d3eac661f41799e4538be4d2806cd
msgid "This is an email address that will be used as sender of the vacation reply."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:50
# f2c3d5d2e05c4147bdca65d3b12acdf4
msgid "Normally the vacation response is send if recipient address of the incoming message is one of your addresses known to the server. Here you can add more addresses."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:55
# 9b1ee71a799d43ebb8cef4a2555a7b83
msgid "This parameter defines how often the reply to the same sender is generated. When you receive a lot of messages from the same sender in short time, usually you don't want to reply to all of them. By default reply is send once a day."
msgstr ""

#: ../../en_US/_plugins/managesieve/settings-vacation.rst:60
# 8ce4de76e26543f1be25dedb372ce296
msgid "This field defines an action taken on the incoming message. You can discard or keep it or redirect/copy to another account (so it can be handled by another person)."
msgstr ""

PK|c�\�����managesieve/managesieve.jsnu�[���/**
 * (Manage)Sieve Filters plugin
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

if (window.rcmail) {
  rcmail.addEventListener('init', function(evt) {
    // add managesieve-create command to message_commands array,
    // so it's state will be updated on message selection/unselection
    if (rcmail.env.task == 'mail') {
      if (rcmail.env.action != 'show')
        rcmail.env.message_commands.push('managesieve-create');
      else
        rcmail.enable_command('managesieve-create', true);
    }

    if (rcmail.env.task == 'mail' || rcmail.env.action.startsWith('plugin.managesieve')) {
      // Create layer for form tips
      if (!rcmail.env.framed) {
        rcmail.env.ms_tip_layer = $('<div id="managesieve-tip" class="popupmenu"></div>');
        rcmail.env.ms_tip_layer.appendTo(document.body);
      }
    }

    // register commands
    rcmail.register_command('plugin.managesieve-save', function() { rcmail.managesieve_save() });
    rcmail.register_command('plugin.managesieve-act', function() { rcmail.managesieve_act() });
    rcmail.register_command('plugin.managesieve-add', function() { rcmail.managesieve_add() });
    rcmail.register_command('plugin.managesieve-del', function() { rcmail.managesieve_del() });
    rcmail.register_command('plugin.managesieve-move', function() { rcmail.managesieve_move() });
    rcmail.register_command('plugin.managesieve-setadd', function() { rcmail.managesieve_setadd() });
    rcmail.register_command('plugin.managesieve-setdel', function() { rcmail.managesieve_setdel() });
    rcmail.register_command('plugin.managesieve-setact', function() { rcmail.managesieve_setact() });
    rcmail.register_command('plugin.managesieve-setget', function() { rcmail.managesieve_setget() });
    rcmail.register_command('plugin.managesieve-seteditraw', function() { rcmail.managesieve_seteditraw() });

    if (rcmail.env.action.startsWith('plugin.managesieve')) {
      if (rcmail.gui_objects.sieveform) {
        rcmail.enable_command('plugin.managesieve-save', true);
        sieve_form_init();
      }
      else if (rcmail.gui_objects.sievesetrawform) {
        rcmail.enable_command('plugin.managesieve-save', true);
        sieve_raw_editor_init();
      }
      else {
        rcmail.enable_command('plugin.managesieve-add', !rcmail.env.sieveconnerror && $.inArray('new_filter', rcmail.env.managesieve_disabled_actions) == -1);
        rcmail.enable_command('plugin.managesieve-setadd', !rcmail.env.sieveconnerror && $.inArray('new_set', rcmail.env.managesieve_disabled_actions) == -1);
      }

      var setcnt, set = rcmail.env.currentset;

      if (rcmail.gui_objects.filterslist) {
        rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist,
          {multiselect:false, draggable:true, keyboard:true});

        rcmail.filters_list
          .addEventListener('select', function(o) { rcmail.managesieve_select(o); })
          .addEventListener('keypress', function(o) { rcmail.list_keypress(o, {del: 'plugin.managesieve-del'}); })
          .addEventListener('dragstart', function(o) { rcmail.managesieve_dragstart(o); })
          .addEventListener('dragend', function(o) { rcmail.managesieve_dragend(o); })
          .addEventListener('initrow', function(row) {
            row.obj.onmouseover = function() { rcmail.managesieve_focus_filter(row); };
            row.obj.onmouseout = function() { rcmail.managesieve_unfocus_filter(row); };
          })
          .init();
      }

      if (rcmail.gui_objects.filtersetslist) {
        rcmail.filtersets_list = new rcube_list_widget(rcmail.gui_objects.filtersetslist,
          {multiselect:false, draggable:false, keyboard:true});

        rcmail.filtersets_list.init().focus();

        if (set != null) {
          $('#filterset-name').text(set);
          set = rcmail.managesieve_setid(set);
          rcmail.filtersets_list.select(set);
        }

        // attach select event after initial record was selected
        rcmail.filtersets_list.addEventListener('select', function(e) { rcmail.managesieve_setselect(e); });

        setcnt = rcmail.filtersets_list.rowcount;
        rcmail.enable_command('plugin.managesieve-set', true);
        rcmail.enable_command('plugin.managesieve-setact', setcnt > 0 && $.inArray('enable_disable_set', rcmail.env.managesieve_disabled_actions) == -1);
        rcmail.enable_command('plugin.managesieve-setget', setcnt > 0 && $.inArray('download_set', rcmail.env.managesieve_disabled_actions) == -1);
        rcmail.enable_command('plugin.managesieve-setdel', setcnt > 1 && $.inArray('delete_set', rcmail.env.managesieve_disabled_actions) == -1);
        rcmail.enable_command('plugin.managesieve-seteditraw', setcnt > 0 && rcmail.env.raw_sieve_editor);

        // Fix dragging filters over sets list
        $('tr', rcmail.gui_objects.filtersetslist).each(function (i, e) { rcmail.managesieve_fixdragend(e); });
      }
    }
  });
};

/*********************************************************/
/*********       Managesieve UI methods          *********/
/*********************************************************/

rcube_webmail.prototype.managesieve_add = function()
{
  this.load_managesieveframe('_nav=hide', true);
};

rcube_webmail.prototype.managesieve_del = function()
{
  var id = this.filters_list.get_single_selection();
  this.confirm_dialog(this.get_label('managesieve.filterdeleteconfirm'), 'delete', function(e, ref) {
      var post = '_act=delete&_fid=' + ref.filters_list.rows[id].uid,
        lock = ref.set_busy(true, 'loading');

      ref.http_post('plugin.managesieve-action', post, lock);
    });
};

rcube_webmail.prototype.managesieve_act = function()
{
  var id = this.filters_list.get_single_selection(),
    lock = this.set_busy(true, 'loading');

  this.http_post('plugin.managesieve-action',
    '_act=act&_fid='+this.filters_list.rows[id].uid, lock);
};

// Filter selection
rcube_webmail.prototype.managesieve_select = function(list)
{
  var id = list.get_single_selection();

  if (id != null) {
    id = list.rows[id].uid;
    this.load_managesieveframe('_fid=' + id);
  }

  var has_id = typeof(id) != 'undefined' && id != null;

  this.enable_command('plugin.managesieve-act', has_id);
  this.enable_command('plugin.managesieve-del', has_id && $.inArray('delete_filter', rcmail.env.managesieve_disabled_actions) == -1);
};

// Set selection
rcube_webmail.prototype.managesieve_setselect = function(list)
{
  this.enable_command('plugin.managesieve-setdel', list.rowcount > 1 && $.inArray('delete_set', rcmail.env.managesieve_disabled_actions) == -1);
  this.enable_command('plugin.managesieve-setact', list.rowcount > 0 && $.inArray('enable_disable_set', rcmail.env.managesieve_disabled_actions) == -1);
  this.enable_command('plugin.managesieve-setget', list.rowcount > 0 && $.inArray('delete_set', rcmail.env.managesieve_disabled_actions) == -1);
  this.enable_command('plugin.managesieve-seteditraw', list.rowcount > 0 && this.env.raw_sieve_editor);

 if (rcmail.env.contextmenu_opening)
   return;

  this.show_contentframe(false);
  this.filters_list.clear(true);

  var id = list.get_single_selection();
  if (id != null) {
    this.managesieve_list(this.env.filtersets[id]);
    $('#filterset-name').text(this.env.filtersets[id]);
  }
};

rcube_webmail.prototype.managesieve_rowid = function(id)
{
  var i, rows = this.filters_list.rows;

  for (i in rows)
    if (rows[i] != null && rows[i].uid == id)
      return i;
};

// Returns set's identifier
rcube_webmail.prototype.managesieve_setid = function(name)
{
  for (var i in this.env.filtersets)
    if (this.env.filtersets[i] == name)
      return i;
};

// Filters listing request
rcube_webmail.prototype.managesieve_list = function(script)
{
  var lock = this.set_busy(true, 'loading');

  this.http_post('plugin.managesieve-action', '_act=list&_set='+urlencode(script), lock);
};

// Script download request
rcube_webmail.prototype.managesieve_setget = function()
{
  var id = this.filtersets_list.get_single_selection(),
    script = this.env.filtersets[id];

  this.goto_url('plugin.managesieve-action', {_act: 'setget', _set: script}, false, true);
};

// Set activate/deactivate request
rcube_webmail.prototype.managesieve_setact = function()
{
  var id = this.filtersets_list.get_single_selection(),
   lock = this.set_busy(true, 'loading'),
    script = this.env.filtersets[id],
    action = $('#rcmrow'+id).hasClass('disabled') ? 'setact' : 'deact';

  this.http_post('plugin.managesieve-action', '_act='+action+'&_set='+urlencode(script), lock);
};

// Set delete request
rcube_webmail.prototype.managesieve_setdel = function()
{
  var id = this.filtersets_list.get_single_selection();
  this.confirm_dialog(this.get_label('managesieve.setdeleteconfirm'), 'delete', function(e, ref) {
      var script = ref.env.filtersets[id],
        lock = ref.set_busy(true, 'loading');

      ref.http_post('plugin.managesieve-action', '_act=setdel&_set=' + urlencode(script), lock);
    });
};

// Set edit raw request
rcube_webmail.prototype.managesieve_seteditraw = function()
{
  var id = this.filtersets_list.get_single_selection(),
    script = this.env.filtersets[id];

  this.load_managesieveframe('_nav=hide&_seteditraw=1&_set=' + urlencode(script), true);
};

// Set add request
rcube_webmail.prototype.managesieve_setadd = function()
{
  this.load_managesieveframe('_nav=hide&_newset=1', true);
};

rcube_webmail.prototype.managesieve_updatelist = function(action, o)
{
  this.set_busy(true);

  switch (action) {
    // Delete filter row
    case 'del':
      var id = o.id, list = this.filters_list;

      list.remove_row(this.managesieve_rowid(o.id));
      this.show_contentframe(false);
      this.reset_filters_list();

      // filter identifiers changed, fix the list
      $('tr', this.filters_list.list).each(function() {
        // remove hidden (deleted) rows
        if (this.style.display == 'none') {
          $(this).detach();
          return;
        }

        var rowid = this.id.substr(6);

        // remove all attached events
        $(this).off();

        // update row id
        if (rowid > id) {
          this.uid = String(rowid - 1);
          $(this).attr('id', 'rcmrow' + this.uid);
        }
      });
      list.init();

      break;

    // Update filter row
    case 'update':
      var i, row = $('#rcmrow'+this.managesieve_rowid(o.id));

      if (o.name)
        $('td', row).text(o.name);
      if (o.disabled)
        row.addClass('disabled');
      else
        row.removeClass('disabled');

      $('#fenabled', $('iframe').contents()).prop('checked', !o.disabled);

      break;

    // Add filter row to the list
    case 'add':
      var list = this.filters_list,
        row = $('<tr><td class="name"></td></tr>');

      $('td', row).text(o.name);
      row.attr('id', 'rcmrow'+o.id);
      if (o.disabled)
        row.addClass('disabled');

      list.insert_row(row.get(0));
      list.highlight_row(o.id);

      this.enable_command('plugin.managesieve-del', $.inArray('delete_rule', rcmail.env.managesieve_disabled_actions) == -1);
      this.enable_command('plugin.managesieve-act', true);

      break;

    // Filling rules list
    case 'list':
      var i, tr, td, el, list = this.filters_list;

      if (o.clear)
        list.clear();

      for (i in o.list) {
        el = o.list[i];
        tr = document.createElement('TR');
        td = document.createElement('TD');

        $(td).text(el.name);
        td.className = 'name';
        tr.id = 'rcmrow' + el.id;
        if (el['class'])
            tr.className = el['class'];
        tr.appendChild(td);

        list.insert_row(tr);
      }

      if (o.set)
        list.highlight_row(o.set);
      else
        this.enable_command('plugin.managesieve-del', 'plugin.managesieve-act', false);

      break;

    // Activate/Deactivate the set
    case 'setact':
      var id = this.managesieve_setid(o.name), row = $('#rcmrow' + id);
      if (o.active) {
        if (o.all)
          $('tr', this.gui_objects.filtersetslist).addClass('disabled');
        row.removeClass('disabled');
      }
      else
        row.addClass('disabled');

      break;

    // Delete set row
    case 'setdel':
      var id = this.managesieve_setid(o.name);

      this.filters_list.clear();
      this.show_contentframe(false);
      this.enable_command('plugin.managesieve-setdel', 'plugin.managesieve-setact',
        'plugin.managesieve-setget', 'plugin.managesieve-seteditraw', false);

      this.filtersets_list.remove_row(id, true);
      delete this.env.filtersets[id];
      break;

    // Create set row
    case 'setadd':
      var id = 'S' + new Date().getTime(),
        list = this.filtersets_list,
        row = $('<tr class="disabled"><td class="name"></td></tr>');

      $('td', row).text(o.name);
      row.attr('id', 'rcmrow'+id);

      this.env.filtersets[id] = o.name;
      list.insert_row(row.get(0));

      // move row into its position on the list
      if (o.index != list.rowcount-1) {
        row.detach();
        var elem = $('tr:visible', list.list).get(o.index);
        row.insertBefore(elem);
      }

      list.select(id);

      // Fix dragging filters over sets list
      this.managesieve_fixdragend(row);

      break;

    case 'refresh':
      this.reset_filters_list(true);
      break;
  }

  this.set_busy(false);
};

// Resets filters list state
rcube_webmail.prototype.reset_filters_list = function(reload)
{
  this.filters_list.clear_selection();
  this.enable_command('plugin.managesieve-act', 'plugin.managesieve-del', false);

  if (reload) {
    var id = this.filtersets_list.get_single_selection();

    this.filters_list.clear(true);
    this.managesieve_list(this.env.filtersets[id]);
  }
};

// load filter frame
rcube_webmail.prototype.load_managesieveframe = function(add_url, reset)
{
  if (reset)
    this.reset_filters_list();

  var target = this.get_frame_window(this.env.contentframe),
    url = this.url('plugin.managesieve-action', '_framed=1' + (add_url ? ('&' + add_url) : ''));

  if (target) {
    this.location_href(url, target, true);
  }
};

// load filter frame
rcube_webmail.prototype.managesieve_dragstart = function(list)
{
  var id = this.filters_list.get_single_selection();

  this.drag_active = true;
  this.drag_filter = id;
};

rcube_webmail.prototype.managesieve_dragend = function(e)
{
  if (this.drag_active) {
    if (this.drag_filter_target) {
      var lock = this.set_busy(true, 'loading');

      this.show_contentframe(false);
      this.http_post('plugin.managesieve-action', '_act=move&_fid='+this.drag_filter
        +'&_to='+this.drag_filter_target, lock);
    }
    this.drag_active = false;
  }
};

// Fixes filters dragging over sets list
// @TODO: to be removed after implementing copying filters
rcube_webmail.prototype.managesieve_fixdragend = function(elem)
{
  var p = this;
  $(elem).on('mouseup' + ((bw.iphone || bw.ipad) ? ' touchend' : ''), function(e) {
    if (p.drag_active)
      p.filters_list.drag_mouse_up(e);
  });
};

rcube_webmail.prototype.managesieve_focus_filter = function(row)
{
  var id = row.id.replace(/^rcmrow/, '');
  if (this.drag_active && id != this.drag_filter) {
    this.drag_filter_target = id;
    $(row.obj).addClass(id < this.drag_filter ? 'filtermoveup' : 'filtermovedown');
  }
};

rcube_webmail.prototype.managesieve_unfocus_filter = function(row)
{
  if (this.drag_active) {
    $(row.obj).removeClass('filtermoveup filtermovedown');
    this.drag_filter_target = null;
  }
};

/*********************************************************/
/*********          Filter Form methods          *********/
/*********************************************************/

// Form submission
rcube_webmail.prototype.managesieve_save = function()
{
  if (this.env.action == 'plugin.managesieve-vacation') {
    var data = $(this.gui_objects.sieveform).serialize();
    this.http_post('plugin.managesieve-vacation', data, this.display_message(this.get_label('managesieve.vacation.saving'), 'loading'));
    return;
  }

  if (this.env.action == 'plugin.managesieve-forward') {
    var data = $(this.gui_objects.sieveform).serialize();
    this.http_post('plugin.managesieve-forward', data, this.display_message(this.get_label('managesieve.forward.saving'), 'loading'));
    return;
  }

  if (this.gui_objects.sieveform) {
    if (parent.rcmail && parent.rcmail.filters_list && this.gui_objects.sieveform.name != 'filtersetform') {
      var id = parent.rcmail.filters_list.get_single_selection();
      if (id != null)
        this.gui_objects.sieveform.elements['_fid'].value = parent.rcmail.filters_list.rows[id].uid;
    }
    this.gui_objects.sieveform.submit();
  }
  else if (this.gui_objects.sievesetrawform) {
    this.gui_objects.sievesetrawform.submit();
  }
};

// Operations on filters form
rcube_webmail.prototype.managesieve_ruleadd = function(id)
{
  this.http_post('plugin.managesieve-action', '_act=ruleadd&_rid='+id);
};

rcube_webmail.prototype.managesieve_rulefill = function(content, id, after)
{
  if (content != '') {
    // create new element
    var div = $('#rules')[0],
      row = $('<div>').attr({'class': 'rulerow', id: 'rulerow'+id})
        .html(content);

    this.managesieve_insertrow(div, row, after);

    // initialize smart list inputs
    $('textarea[data-type="list"]', row).each(function() {
      smart_field_init(this);
    });

    this.managesieve_formbuttons(div);
  }
};

rcube_webmail.prototype.managesieve_ruledel = function(id)
{
  if ($('#ruledel'+id).hasClass('disabled'))
    return;

  this.confirm_dialog(this.get_label('managesieve.ruledeleteconfirm'), 'delete', function(e, ref) {
      var row = document.getElementById('rulerow'+id);
      row.parentNode.removeChild(row);
      ref.managesieve_formbuttons(document.getElementById('rules'));
    });
};

rcube_webmail.prototype.managesieve_actionadd = function(id)
{
  this.http_post('plugin.managesieve-action', '_act=actionadd&_aid='+id);
};

rcube_webmail.prototype.managesieve_actionfill = function(content, id, after)
{
  if (content != '') {
    var div = $('#actions')[0],
      row = $('<div>').attr({'class': 'actionrow', id: 'actionrow'+id})
        .html(content);

    this.managesieve_insertrow(div, row, after);

    // initialize smart list inputs
    $('textarea[data-type="list"]', row).each(function() {
      smart_field_init(this);
    });

    this.managesieve_formbuttons(div);
  }
};

rcube_webmail.prototype.managesieve_actiondel = function(id)
{
  if ($('#actiondel'+id).hasClass('disabled'))
    return;

  this.confirm_dialog(this.get_label('managesieve.actiondeleteconfirm'), 'delete', function(e, ref) {
      var row = document.getElementById('actionrow'+id);
      row.parentNode.removeChild(row);
      ref.managesieve_formbuttons(document.getElementById('actions'));
    });
};

// insert rule/action row in specified place on the list
rcube_webmail.prototype.managesieve_insertrow = function(div, row, after)
{
  var node = $('#' + ($(div).attr('id') == 'rules' ? 'rulerow' : 'actionrow')  + after)[0];

  if (node)
    $(row).insertAfter(node);
  else
    $(div).append(row);

  this.triggerEvent('managesieve.insertrow', {obj: row});
};

// update Delete buttons status
rcube_webmail.prototype.managesieve_formbuttons = function(div)
{
  var buttons = $('a.delete', div);

  buttons.removeClass('disabled');
  if (buttons.length == 1)
    buttons.addClass('disabled');
};

// update vacation addresses field with user identities
rcube_webmail.prototype.managesieve_vacation_addresses = function(id)
{
  var lock = this.set_busy(true, 'loading');
  this.http_post('plugin.managesieve-action', {_act: 'addresses', _aid: id}, lock);
};

// update vacation addresses field with user identities
rcube_webmail.prototype.managesieve_vacation_addresses_update = function(id, addresses)
{
  var field = $('#vacation_addresses,#action_addresses' + (id || ''));
  smart_field_reset(field.get(0), addresses);
};

function rule_header_select(id)
{
  var is_header,
    obj = document.getElementById('header' + id),
    size = document.getElementById('rule_size' + id),
    spamtest = document.getElementById('rule_spamtest' + id),
    msg = document.getElementById('rule_message' + id),
    op = document.getElementById('rule_op' + id),
    header = document.getElementById('custom_header' + id + '_list'),
    custstr = document.getElementById('custom_var' + id + '_list'),
    mod = document.getElementById('rule_mod' + id),
    trans = document.getElementById('rule_trans' + id),
    comp = document.getElementById('rule_comp' + id),
    mime = document.getElementById('rule_mime' + id),
    mime_part = document.getElementById('rule_mime_part' + id),
    datepart = document.getElementById('rule_date_part' + id),
    dateheader = document.getElementById('rule_date_header_div' + id),
    rule = $('#rule_op' + id),
    h = obj.value,
    set = [op, header, custstr, mod, trans, comp, size, mime, mime_part];

  if (h == 'size') {
    if (msg) set.push(msg);
    $.each(set, function() { if (this != window) this.style.display = 'none'; });
    if (spamtest)
      spamtest.style.display = 'none';
    size.style.display = '';
  }
  else if (h == 'spamtest') {
    if (msg) set.push(msg);
    $.each(set, function() { if (this != window) this.style.display = 'none'; });
    if (spamtest)
      spamtest.style.display = '';
    size.style.display = 'none';
  }
  else if (h == 'message' && msg) {
    $.each(set, function() { if (this != window)  this.style.display = 'none'; });
    msg.style.display = '';
  }
  else {
    is_header = h != 'body' && h != 'currentdate' && h != 'date' && h != 'string';
    header.style.display = h != '...' ? 'none' : '';
    custstr.style.display = h != 'string' ? 'none' : '';
    size.style.display = 'none';
    op.style.display = '';
    comp.style.display = '';
    mod.style.display = is_header ? '' : 'none';
    trans.style.display = h == 'body' ? '' : 'none';
    if (spamtest)
      spamtest.style.display = 'none';
    if (mime)
      mime.style.display =  is_header ? '' : 'none';
    if (mime_part)
      mime_part.style.display = is_header ? '' : 'none';
    if (msg)
      msg.style.display = h == 'message' ? '' : 'none';
  }

  if (datepart)
    datepart.style.display = h == 'currentdate' || h == 'date' ? 'inline' : 'none';
  if (dateheader)
    dateheader.style.display = h == 'date' ? '' : 'none';

  $('[value="exists"],[value="notexists"]', rule).prop('disabled', h == 'string');
  if (!rule.val())
    rule.val('contains');

  rule_op_select(op, id, h);
  rule_mod_select(id, h, !is_header);
  rule_mime_select(id);
  if (spamtest)
    rule_spamtest_select(id);

  obj.style.width = h == '...' ? '40px' : '';
};

function rule_op_select(obj, id, header)
{
  var target = document.getElementById('rule_target' + id + '_list');

  if (!header)
    header = document.getElementById('header' + id).value;

  target.style.display = obj.value.match(/^(exists|notexists)$/) || header.match(/^(size|spamtest|message)$/) ? 'none' : '';
};

function rule_trans_select(id)
{
  var obj = document.getElementById('rule_trans_op' + id),
    target = document.getElementById('rule_trans_type' + id);

  target.style.display = obj.value != 'content' ? 'none' : 'inline';
};

function rule_mod_select(id, header, reset)
{
  var obj = document.getElementById('rule_mod_op' + id),
    target = document.getElementById('rule_mod_type' + id),
    duplicate = document.getElementById('rule_duplicate_div' + id),
    index = document.getElementById('rule_index_div' + id);

  if (reset)
    obj.value = '';

  if (!header)
    header = document.getElementById('header' + id).value;

  target.style.display = obj.value != 'address' && obj.value != 'envelope' ? 'none' : '';

  if (index)
    index.style.display = !header.match(/^(body|currentdate|size|spamtest|message|string)$/) && obj.value != 'envelope'  ? '' : 'none';

  if (duplicate)
    duplicate.style.display = header == 'message' ? '' : 'none';
};

function rule_spamtest_select(id)
{
  var obj = document.getElementById('rule_spamtest_op' + id),
    target = document.getElementById('rule_spamtest_target' + id);

  target.style.display = obj.value ? '' : 'none';
  $(obj)[obj.value ? 'removeClass' : 'addClass']('rounded-right');
};

function rule_join_radio(value)
{
  $('#rules').css('display', value == 'any' ? 'none' : 'block');
};

function rule_adv_switch(id, elem)
{
  var elem = $(elem), enabled = elem.hasClass('hide'), adv = $('#rule_advanced'+id);

  if (enabled) {
    adv.get(0).style.display = 'none';
    elem.removeClass('hide').addClass('show');
  }
  else {
    adv.get(0).style.display = '';
    elem.removeClass('show').addClass('hide');
  }
};

function rule_mime_select(id)
{
  var elem = $('#rule_mime_type' + id),
    param_elem = $('#rule_mime_param' + id + '_list');

  if (param_elem.length)
    param_elem[0].style.display = elem.val() == 'param' ? '' : 'none';
};

function action_type_select(id)
{
  var obj = document.getElementById('action_type' + id),
    v = obj.value, enabled = {},
    elems = {
      mailbox: document.getElementById('action_mailbox' + id),
      target: document.getElementById('redirect_target' + id),
      target_area: document.getElementById('action_target_area' + id),
      flags: document.getElementById('action_flags' + id),
      vacation: document.getElementById('action_vacation' + id),
      forward: document.getElementById('action_forward' + id),
      set: document.getElementById('action_set' + id),
      notify: document.getElementById('action_notify' + id),
      addheader: document.getElementById('action_addheader' + id),
      deleteheader: document.getElementById('action_deleteheader' + id)
    };

  if (v == 'fileinto' || v == 'fileinto_copy') {
    enabled.mailbox = 1;
  }
  else if (v == 'redirect' || v == 'redirect_copy') {
    enabled.target = 1;
  }
  else if (v.match(/^reject|ereject$/)) {
    enabled.target_area = 1;
  }
  else if (v.match(/^(add|set|remove)flag$/)) {
    enabled.flags = 1;
  }
  else if (v.match(/^(vacation|forward|set|notify|addheader|deleteheader)$/)) {
    enabled[v] = 1;
  }

  for (var x in elems) {
    if (elems[x])
      elems[x].style.display = !enabled[x] ? 'none' : '';
  }
};

function vacation_action_select()
{
  var selected = $('#vacation_action').val();

  $('#action_target_span')[selected == 'discard' || selected == 'keep' ? 'hide' : 'show']();
};

// Initializes smart list input
function smart_field_init(field)
{
  if (window.UI && UI.smart_field_init)
    return UI.smart_field_init(field);

  var id = field.id + '_list',
    area = $('<span class="listarea"></span>'),
    list = field.value ? field.value.split("\n") : [''];

  if ($('#'+id).length)
    return;

  // add input rows
  $.each(list, function(i, v) {
    area.append(smart_field_row(v, i, field));
  });

  area.attr('id', id);
  field = $(field);

  if (field.attr('disabled'))
    area.hide();
  // disable the original field anyway, we don't want it in POST
  else
    field.prop('disabled', true);

  if (field.data('hidden'))
    area.hide();

  field.after(area);

  if (field.hasClass('error')) {
    area.addClass('error');
    rcmail.managesieve_tip_register([[id, field.data('tip-class'), field.data('tip-msg')]]);
  }
};

function smart_field_row(value, idx, field)
{
  // build row element content
  var input, content = '<span class="listelement">'
      + '<span class="reset"></span><input type="text"></span>',
    elem = $(content),
    attrs = {
      value: value,
      name: field.name + '[]',
      size: $(field).data('size'),
      title: field.title,
      placeholder: $(field).attr('placeholder')
    };

  input = elem.find('input').attr(attrs).keydown(function(e) {
    var input = $(this);

    // element creation event (on Enter)
    if (e.which == 13) {
      var elem = smart_field_row('', (new Date()).getTime(), field);

      input.parent().after(elem);
      $('input', elem).focus();
    }
    // backspace or delete: remove input, focus previous one
    else if ((e.which == 8 || e.which == 46) && input.val() == '') {

      var parent = input.parent(), siblings = parent.parent().children();

      if (siblings.length > 1) {
        if (parent.prev().length)
          parent.prev().children('input').focus();
        else
          parent.next().children('input').focus();

        parent.remove();
        return false;
      }
    }
  });

  // element deletion event
  $('span[class="reset"]', elem).click(function() {
    var span = $(this.parentNode);

    if (span.parent().children().length > 1)
      span.remove();
    else
      $('input', span).val('').focus();
  });

  return elem;
}

// Reset and fill the smart list input with new data
function smart_field_reset(field, data)
{
  if (window.UI && UI.smart_field_reset)
    return UI.smart_field_reset(field, data);

  var id = field.id + '_list',
    list = data.length ? data : [''];
    area = $('#' + id);

  area.empty();

  // add input rows
  $.each(list, function(i, v) {
    area.append(smart_field_row(v, i, field));
  });
}

// Register onmouse(leave/enter) events for tips on specified form element
rcube_webmail.prototype.managesieve_tip_register = function(tips)
{
  if (window.UI && UI.form_errors)
    return UI.form_errors(tips);

  var n, framed = parent.rcmail,
    tip = framed ? parent.rcmail.env.ms_tip_layer : rcmail.env.ms_tip_layer;

  for (n in tips) {
    $('#'+tips[n][0])
      .data('tip-class', tips[n][1])
      .data('tip-msg', tips[n][2])
      .mouseleave(function(e) { tip.hide(); })
      .mouseenter(function(e) {
        var elem = $(this),
          offset = elem.offset(),
          left = offset.left,
          top = offset.top - 12,
          minwidth = elem.width(),
          span = $('<span>').addClass(elem.data('tip-class')).text(elem.data('tip-msg'));

        if (framed) {
          offset = $((rcmail.env.task == 'mail'  ? '#sievefilterform > iframe' : '#filter-box'), parent.document).offset();
          top  += offset.top;
          left += offset.left;
        }

        tip.html('').append(span);
        top -= tip.height();

        tip.css({left: left, top: top, minWidth: (minwidth-2) + 'px'}).show();
      });
  }
};

// format time string
function sieve_formattime(hour, minutes)
{
  var i, c, h, time = '', format = rcmail.env.time_format || 'H:i';

  for (i=0; i<format.length; i++) {
    c = format.charAt(i);
    switch (c) {
      case 'a': time += hour >= 12 ? 'pm' : 'am'; break;
      case 'A': time += hour >= 12 ? 'PM' : 'AM'; break;
      case 'g':
      case 'h':
        h = hour == 0 ? 12 : hour > 12 ? hour - 12 : hour;
        time += (c == 'h' && hour < 10 ? '0' : '') + hour;
        break;
      case 'G': time += hour; break;
      case 'H': time += (hour < 10 ? '0' : '') + hour; break;
      case 'i': time += (minutes < 10 ? '0' : '') + minutes; break;
      case 's': time += '00';
      default: time += c;
    }
  }

  return time;
}

function sieve_form_init()
{
  var form = rcmail.gui_objects.sieveform;

  // resize dialog window
  if (rcmail.env.action == 'plugin.managesieve' && rcmail.env.task == 'mail') {
    parent.rcmail.managesieve_dialog_resize(form);
  }

  $('input[type="text"]', form).first().focus();

  // initialize smart list inputs
  $('textarea[data-type="list"]', form).each(function() {
    smart_field_init(this);
  });

  // initialize rules form(s)
  $('[name^="_header"]', form).each(function() {
    if (/([0-9]+)$/.test(this.id)) {
      rule_header_select(RegExp.$1);
    }
  });

  // enable date pickers on date fields
  if ($.datepicker && rcmail.env.date_format) {
    $.datepicker.setDefaults({
      dateFormat: rcmail.env.date_format,
      changeMonth: true,
      showOtherMonths: true,
      selectOtherMonths: true,
      onSelect: function(dateText) { $(this).focus().val(dateText); }
    });
    $('input.datepicker').datepicker();
  }

  // configure drop-down menu on time input fields based on jquery UI autocomplete
  $('#vacation_timefrom, #vacation_timeto')
    .attr('autocomplete', "off")
    .autocomplete({
      delay: 100,
      minLength: 1,
      source: function(p, callback) {
        var h, result = [];
        for (h = 0; h < 24; h++)
          result.push(sieve_formattime(h, 0));
        result.push(sieve_formattime(23, 59));

        return callback(result);
      },
      open: function(event, ui) {
        // scroll to current time
        var $this = $(this), val = $this.val(),
          widget = $this.autocomplete('widget').css('width', '10em'),
          menu = $this.data('ui-autocomplete').menu;

        if (val && val.length)
          widget.children().each(function() {
            var li = $(this);
            if (li.text().indexOf(val) == 0)
              menu._scrollIntoView(li);
          });
      },
      select: function(event, ui) {
        $(this).val(ui.item.value);
        return false;
      }
    })
    .click(function() {  // show drop-down upon clicks
      $(this).autocomplete('search', $(this).val() || ' ');
    })

  // display advanced controls when contain errors
  $('input.error').each(function() {
    if (String(this.id).match(/([0-9]+)$/)) {
      $('#ruleadv' + RegExp.$1 + '.show').click();
    }
  });
}

/*********************************************************/
/*********        RAW editor methods             *********/
/*********************************************************/

var cmeditor;

function cmCreateErrorElem(msg)
{
  var marker = document.createElement("div");
  marker.style.color = "#822";
  marker.innerHTML = "●";
  marker.title = msg;

  return marker;
}

function cmScrollToError()
{
  var line = $('.CodeMirror-lines .line-error'),
    scroll = $('.CodeMirror-scroll'),
    h = line.parent();

  scroll.scrollTop(line.offset().top - scroll.offset().top - Math.round(scroll.height()/2));
}

function sieve_raw_editor_init()
{
  var textArea = document.getElementById('rawfiltersettxt');
  if (textArea && !cmeditor) {
    cmeditor = CodeMirror.fromTextArea(textArea, {
      mode: 'sieve',
      lineNumbers: true,
      gutters: ["CodeMirror-linenumbers", "errorGutter"],
      styleActiveLine: true
    });

    // fetching errors from environment and setting the line background
    // and a gutter element with the error message accordingly
    $.each(rcmail.env.sieve_errors || [], function(i, err) {
      var lineNo = Number(err.line) - 1;
      cmeditor.addLineClass(lineNo, 'background', 'line-error');
      cmeditor.setGutterMarker(lineNo, 'errorGutter', cmCreateErrorElem(err.msg));
      if (!i) cmScrollToError();
    });
  }
}


/*********************************************************/
/*********           Mail UI methods             *********/
/*********************************************************/

rcube_webmail.prototype.managesieve_create = function(force)
{
  if (!force && this.env.action != 'show') {
    var uid = this.message_list.get_single_selection(),
      lock = this.set_busy(true, 'loading');

    this.http_post('plugin.managesieve-action', {_uid: uid}, lock);
    return;
  }

  if (!this.env.sieve_headers || !this.env.sieve_headers.length)
    return;

  var i, buttons = {},
    title = this.get_label('managesieve.newfilter'),
    dialog = $('<div id="sievefilterform" class="propform"></div>'),
    props = {minWidth: 600, minHeight: 250, height: 300};


  // build dialog window content
  dialog.append($('<fieldset>')
    .append($('<legend>').text(this.get_label('managesieve.usedata')))
    .append($('<ul class="proplist">'))
  );

  $.each(this.env.sieve_headers, function(i, v) {
    var attr = {type: 'checkbox', name: 'headers[]', id: 'sievehdr' + i, value: i,  checked: true},
      label = rcmail.env.sieve_headers[i][0] + ': ' + rcmail.env.sieve_headers[i][1];

    $('ul', dialog).append($('<li>')
      .append($('<input>').attr(attr))
      .append($('<label>').attr('for', 'sievehdr' + i).text(label))
    );
  });

  // [Next Step] button action
  buttons[this.get_label('managesieve.nextstep')] = function () {
    // check if there's at least one checkbox checked
    var hdrs = $('input[name="headers[]"]:checked', dialog);
    if (!hdrs.length) {
      rcmail.alert_dialog(rcmail.get_label('managesieve.nodata'));
      return;
    }

    // build frame URL
    var url = rcmail.get_task_url('mail');
    url = rcmail.add_url(url, '_action', 'plugin.managesieve');
    url = rcmail.add_url(url, '_framed', 1);

    hdrs.map(function() {
      var val = rcmail.env.sieve_headers[this.value];
      url = rcmail.add_url(url, 'r['+this.value+']', val[0]+':'+val[1]);
    });

    // load form in the iframe
    var buttons = {}, iframe = $('<iframe>').attr({src: url, frameborder: 0});

    // Change [Next Step] button with [Save] button
    buttons[rcmail.get_label('save')] = function() {
      var win = $('iframe', dialog).get(0).contentWindow;
      win.rcmail.managesieve_save();
    };
    buttons[rcmail.get_label('cancel')] = function() { $(this).dialog('destroy'); };

    dialog.dialog('destroy');

    rcmail.env.managesieve_dialog = dialog = rcmail.show_popup_dialog(
      iframe, title, buttons, $.extend(props, {button_classes: ['mainaction save', 'cancel']})
    );
  };

  buttons[this.get_label('cancel')] = function() { $(this).dialog('destroy'); };

  this.env.managesieve_dialog = dialog = this.show_popup_dialog(
    dialog, title, buttons, $.extend(props, {button_classes: ['mainaction next', 'cancel']})
  );
}

rcube_webmail.prototype.managesieve_dialog_close = function()
{
  this.env.managesieve_dialog.dialog('destroy');
}

rcube_webmail.prototype.managesieve_dialog_resize = function(o)
{
  var dialog = this.env.managesieve_dialog,
    win = $(window), form = $(o);
    width = $('fieldset', o).first().width(), // fieldset width is more appropriate here
    height = form.height(),
    w = win.width(), h = win.height();

  if (height < 100)
    return;

  dialog.dialog('option', { height: Math.min(h-20, height+120), width: Math.min(w-20, width+65) });
}
PK|c�\�A�Fƕƕ2managesieve/lib/Roundcube/rcube_sieve_vacation.phpnu�[���<?php

/**
 * Managesieve Vacation Engine
 *
 * Engine part of Managesieve plugin implementing UI and backend access.
 *
 * Copyright (C) Kolab Systems AG
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_sieve_vacation extends rcube_sieve_engine
{
    protected $error;
    protected $script_name;
    protected $vacation = [];

    function actions()
    {
        $error = $this->start('vacation');

        // find current vacation rule
        if (!$error) {
            $this->vacation_rule();
            $this->vacation_post();
        }

        $this->plugin->add_label('vacation.saving');
        $this->rc->output->add_handlers([
                'vacationform' => [$this, 'vacation_form'],
        ]);

        $this->rc->output->set_pagetitle($this->plugin->gettext('vacation'));
        $this->rc->output->send('managesieve.vacation');
    }

    /**
     * Find and load sieve script with/for vacation rule
     *
     * @param string $script_name Optional script name
     *
     * @return int Connection status: 0 on success, >0 on failure
     */
    protected function load_script($script_name = null)
    {
        if ($this->script_name !== null) {
            return 0;
        }

        $list     = $this->list_scripts();
        $master   = $this->rc->config->get('managesieve_kolab_master');
        $included = [];

        $this->script_name = false;

        // first try the active script(s)...
        if (!empty($this->active)) {
            // Note: there can be more than one active script on KEP:14-enabled server
            foreach ($this->active as $script) {
                if ($this->sieve->load($script)) {
                    foreach ($this->sieve->script->as_array() as $rule) {
                        if (!empty($rule['actions'])) {
                            $action = $rule['actions'][0];
                            if ($action['type'] == 'vacation') {
                                $this->script_name = $script;
                                return 0;
                            }
                            else if (empty($master) && empty($action['global']) && $action['type'] == 'include') {
                                $included[] = $action['target'];
                            }
                        }
                    }
                }
            }

            // ...else try scripts included in active script (not for KEP:14)
            foreach ($included as $script) {
                if ($this->sieve->load($script)) {
                    foreach ($this->sieve->script->as_array() as $rule) {
                        if (!empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
                            $this->script_name = $script;
                            return 0;
                        }
                    }
                }
            }
        }

        // try all other scripts
        if (!empty($list)) {
            // else try included scripts
            foreach (array_diff($list, $included, $this->active) as $script) {
                if ($this->sieve->load($script)) {
                    foreach ($this->sieve->script->as_array() as $rule) {
                        if (!empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
                            $this->script_name = $script;
                            return 0;
                        }
                    }
                }
            }

            // none of the scripts contains existing vacation rule
            // use any (first) active or just existing script (in that order)
            if (!empty($this->active)) {
                $this->sieve->load($this->script_name = $this->active[0]);
            }
            else {
                $this->sieve->load($this->script_name = $list[0]);
            }
        }

        return $this->sieve->error();
    }

    protected function vacation_rule()
    {
        if ($this->script_name === false || $this->script_name === null || !$this->sieve->load($this->script_name)) {
            return;
        }

        $list   = [];
        $active = in_array($this->script_name, $this->active);

        // find (first) vacation rule
        foreach ($this->script as $idx => $rule) {
            if (empty($this->vacation) && !empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
                $action = 'keep';
                $target = null;

                foreach ($rule['actions'] as $act) {
                    if ($act['type'] == 'discard' || $act['type'] == 'keep') {
                        $action = $act['type'];
                    }
                    else if ($act['type'] == 'redirect') {
                        $action = $act['copy'] ? 'copy' : 'redirect';
                        $target = $act['target'];
                    }
                }

                $this->vacation = array_merge($rule['actions'][0], [
                        'idx'      => $idx,
                        'disabled' => $rule['disabled'] || !$active,
                        'name'     => $rule['name'],
                        'tests'    => $rule['tests'],
                        'action'   => $action,
                        'target'   => $target,
                ]);
            }
            else if ($active) {
                $list[$idx] = $rule['name'] ?: ('#' . ($idx + 1));
            }
        }

        $this->vacation['list'] = $list;
    }

    protected function vacation_post()
    {
        if (empty($_POST)) {
            return;
        }

        $date_extension  = in_array('date', $this->exts);
        $regex_extension = in_array('regex', $this->exts);

        // set user's timezone
        try {
            $timezone = new DateTimeZone($this->rc->config->get('timezone', 'GMT'));
        }
        catch (Exception $e) {
            $timezone = new DateTimeZone('GMT');
        }

        $status        = rcube_utils::get_input_string('vacation_status', rcube_utils::INPUT_POST);
        $from          = rcube_utils::get_input_string('vacation_from', rcube_utils::INPUT_POST, true);
        $subject       = rcube_utils::get_input_string('vacation_subject', rcube_utils::INPUT_POST, true);
        $reason        = rcube_utils::get_input_string('vacation_reason', rcube_utils::INPUT_POST, true);
        $addresses     = rcube_utils::get_input_value('vacation_addresses', rcube_utils::INPUT_POST, true);
        $interval      = rcube_utils::get_input_string('vacation_interval', rcube_utils::INPUT_POST);
        $interval_type = rcube_utils::get_input_string('vacation_interval_type', rcube_utils::INPUT_POST);
        $date_from     = rcube_utils::get_input_string('vacation_datefrom', rcube_utils::INPUT_POST);
        $date_to       = rcube_utils::get_input_string('vacation_dateto', rcube_utils::INPUT_POST);
        $time_from     = rcube_utils::get_input_string('vacation_timefrom', rcube_utils::INPUT_POST);
        $time_to       = rcube_utils::get_input_string('vacation_timeto', rcube_utils::INPUT_POST);
        $after         = rcube_utils::get_input_string('vacation_after', rcube_utils::INPUT_POST);
        $action        = rcube_utils::get_input_string('vacation_action', rcube_utils::INPUT_POST);
        $target        = rcube_utils::get_input_string('action_target', rcube_utils::INPUT_POST, true);
        $target_domain = rcube_utils::get_input_string('action_domain', rcube_utils::INPUT_POST);

        $interval_type                   = $interval_type == 'seconds' ? 'seconds' : 'days';
        $vacation_action['type']         = 'vacation';
        $vacation_action['reason']       = $this->strip_value(str_replace("\r\n", "\n", $reason), true);
        $vacation_action['subject']      = trim($subject);
        $vacation_action['from']         = trim($from);
        $vacation_action['addresses']    = $addresses;
        $vacation_action[$interval_type] = $interval;
        $vacation_tests                  = !empty($this->vacation['tests']) ? $this->vacation['tests'] : [];

        foreach ((array) $vacation_action['addresses'] as $aidx => $address) {
            $vacation_action['addresses'][$aidx] = $address = trim($address);

            if (empty($address)) {
                unset($vacation_action['addresses'][$aidx]);
            }
            else if (!rcube_utils::check_email($address)) {
                $error = 'noemailwarning';
                break;
            }
        }

        if (!empty($vacation_action['from'])) {
            // According to RFC5230 the :from string must specify a valid [RFC2822] mailbox-list
            // we'll try to extract addresses and validate them separately
            $from = rcube_mime::decode_address_list($vacation_action['from'], null, true, RCUBE_CHARSET);
            foreach ((array) $from as $idx => $addr) {
                if (empty($addr['mailto']) || !rcube_utils::check_email($addr['mailto'])) {
                    $error = $from_error = 'noemailwarning';
                    break;
                }
                else {
                    $from[$idx] = format_email_recipient($addr['mailto'], $addr['name']);
                }
            }

            // Only one address is allowed (at least on cyrus imap)
            if (is_array($from) && count($from) > 1) {
                $error = $from_error = 'noemailwarning';
            }

            // Then we convert it back to RFC2822 format
            if (empty($from_error) && !empty($from)) {
                $vacation_action['from'] = Mail_mimePart::encodeHeader(
                    'From', implode(', ', $from), RCUBE_CHARSET, 'base64', '');
            }
        }

        if ($vacation_action['reason'] == '') {
            $error = 'managesieve.emptyvacationbody';
        }

        if ($vacation_action[$interval_type] && !preg_match('/^[0-9]+$/', $vacation_action[$interval_type])) {
            $error = 'managesieve.forbiddenchars';
        }

        // find and remove existing date/regex/true rules
        foreach ((array) $vacation_tests as $idx => $t) {
            if ($t['test'] == 'currentdate' || $t['test'] == 'true'
                || ($t['test'] == 'header' && $t['type'] == 'regex' && $t['arg1'] == 'received')
            ) {
                unset($vacation_tests[$idx]);
            }
        }

        if ($date_extension) {
            $date_format = $this->rc->config->get('date_format', 'Y-m-d');
            foreach (['date_from', 'date_to'] as $var) {
                $time = ${str_replace('date', 'time', $var)};
                $date = rcube_utils::format_datestr($$var, $date_format);
                $date = trim($date . ' ' . $time);

                if ($date && ($dt = rcube_utils::anytodatetime($date, $timezone))) {
                    if ($time) {
                        $vacation_tests[] = [
                            'test' => 'currentdate',
                            'part' => 'iso8601',
                            'type' => 'value-' . ($var == 'date_from' ? 'ge' : 'le'),
                            'zone' => $dt->format('O'),
                            'arg'  => str_replace('+00:00', 'Z', strtoupper($dt->format('c'))),
                        ];
                    }
                    else {
                        $vacation_tests[] = [
                            'test' => 'currentdate',
                            'part' => 'date',
                            'type' => 'value-' . ($var == 'date_from' ? 'ge' : 'le'),
                            'zone' => $dt->format('O'),
                            'arg'  => $dt->format('Y-m-d'),
                        ];
                    }
                }
            }
        }
        else if ($regex_extension) {
            // Add date range rules if range specified
            if ($date_from && $date_to) {
                if ($tests = self::build_regexp_tests($date_from, $date_to, $error)) {
                    $vacation_tests = array_merge($vacation_tests, $tests);
                }
            }
        }

        if ($action == 'redirect' || $action == 'copy') {
            if ($target_domain) {
                $target .= '@' . $target_domain;
            }

            if (empty($target) || !rcube_utils::check_email($target)) {
                $error = 'noemailwarning';
            }
        }

        if (empty($vacation_tests)) {
            $vacation_tests = (array) $this->rc->config->get('managesieve_vacation_test', [['test' => 'true']]);
        }

        if (empty($error)) {
            $rule               = $this->vacation;
            $rule['type']       = 'if';
            $rule['name']       = !empty($rule['name']) ? $rule['name'] : $this->plugin->gettext('vacation');
            $rule['disabled']   = $status == 'off';
            $rule['tests']      = $vacation_tests;
            $rule['join']       = $date_extension ? count($vacation_tests) > 1 : false;
            $rule['actions']    = [$vacation_action];
            $rule['after']      = $after;

            if ($action && $action != 'keep') {
                $rule['actions'][] = [
                    'type'   => $action == 'discard' ? 'discard' : 'redirect',
                    'copy'   => $action == 'copy',
                    'target' => $action != 'discard' ? $target : '',
                ];
            }

            if ($this->merge_rule($rule, $this->vacation, $this->script_name)) {
                $this->rc->output->show_message('managesieve.vacationsaved', 'confirmation');
                $this->rc->output->send();
            }
        }

        if (empty($error)) {
            $error = 'managesieve.saveerror';
        }

        $this->rc->output->show_message($error, 'error');
        $this->rc->output->send();
    }

    /**
     * Independent vacation form
     */
    public function vacation_form($attrib)
    {
        // check supported extensions
        $date_extension    = in_array('date', $this->exts);
        $regex_extension   = in_array('regex', $this->exts);
        $seconds_extension = in_array('vacation-seconds', $this->exts);

        // build FORM tag
        $form_id = !empty($attrib['id']) ? $attrib['id'] : 'form';
        $out     = $this->rc->output->request_form([
                'id'      => $form_id,
                'name'    => $form_id,
                'method'  => 'post',
                'task'    => 'settings',
                'action'  => 'plugin.managesieve-vacation',
                'noclose' => true
            ] + $attrib
        );

        $from_addr = $this->rc->config->get('managesieve_vacation_from_init');
        $auto_addr = $this->rc->config->get('managesieve_vacation_addresses_init');

        if (count($this->vacation) < 2) {
            if ($auto_addr) {
                $this->vacation['addresses'] = $this->user_emails();
            }
            if ($from_addr) {
                $default_identity = $this->rc->user->list_emails(true);
                $this->vacation['from'] = format_email_recipient($default_identity['email'], $default_identity['name']);
            }
        }
        else if (!empty($this->vacation['from'])) {
            $from = rcube_mime::decode_address_list($this->vacation['from'], null, true, RCUBE_CHARSET);
            foreach ((array) $from as $idx => $addr) {
                $from[$idx] = format_email_recipient($addr['mailto'], $addr['name']);
            }
            $this->vacation['from'] = implode(', ', $from);
        }

        // form elements
        $from      = new html_inputfield(['name' => 'vacation_from', 'id' => 'vacation_from', 'size' => 50, 'class' => 'form-control']);
        $subject   = new html_inputfield(['name' => 'vacation_subject', 'id' => 'vacation_subject', 'size' => 50, 'class' => 'form-control']);
        $reason    = new html_textarea(['name' => 'vacation_reason', 'id' => 'vacation_reason', 'cols' => 60, 'rows' => 8]);
        $interval  = new html_inputfield(['name' => 'vacation_interval', 'id' => 'vacation_interval', 'size' => 5, 'class' => 'form-control']);
        $addresses = '<textarea name="vacation_addresses" id="vacation_addresses" data-type="list" data-size="30" style="display: none">'
            . (!empty($this->vacation['addresses']) ? rcube::Q(implode("\n", (array) $this->vacation['addresses']), 'strict', false) : '')
            . '</textarea>';
        $status    = new html_select(['name' => 'vacation_status', 'id' => 'vacation_status', 'class' => 'custom-select']);
        $action    = new html_select(['name' => 'vacation_action', 'id' => 'vacation_action', 'class' => 'custom-select', 'onchange' => 'vacation_action_select()']);
        $addresses_link = new html_inputfield([
                'type'    => 'button',
                'href'    => '#',
                'class' => 'button',
                'onclick' => rcmail_output::JS_OBJECT_NAME . '.managesieve_vacation_addresses()'
            ]);

        $redirect = !empty($this->vacation['action'])
            && ($this->vacation['action'] == 'redirect' || $this->vacation['action'] == 'copy');

        $status->add($this->plugin->gettext('vacation.on'), 'on');
        $status->add($this->plugin->gettext('vacation.off'), 'off');

        $action->add($this->plugin->gettext('vacation.keep'), 'keep');
        $action->add($this->plugin->gettext('vacation.discard'), 'discard');
        if ($redirect || !in_array('redirect', $this->disabled_actions)) {
            $action->add($this->plugin->gettext('vacation.redirect'), 'redirect');
            if (in_array('copy', $this->exts)) {
                $action->add($this->plugin->gettext('vacation.copy'), 'copy');
            }
        }

        if (
            $this->rc->config->get('managesieve_vacation') != 2
            && !empty($this->vacation['list'])
            && in_array($this->script_name, $this->active)
        ) {
            $after = new html_select(['name' => 'vacation_after', 'id' => 'vacation_after', 'class' => 'custom-select']);

            $after->add('---', '');
            foreach ($this->vacation['list'] as $idx => $rule) {
                $after->add($rule, $idx);
            }
        }

        $interval_txt = $interval->show(self::vacation_interval($this->vacation, $this->exts));
        if ($seconds_extension) {
            $interval_select = new html_select(['name' => 'vacation_interval_type', 'class' => 'custom-select']);
            $interval_select->add($this->plugin->gettext('days'), 'days');
            $interval_select->add($this->plugin->gettext('seconds'), 'seconds');
            $interval_txt .= $interval_select->show(isset($this->vacation['seconds']) ? 'seconds' : 'days');
        }
        else {
            $interval_txt .= "\n" . html::span('input-group-append',
                html::span('input-group-text', $this->plugin->gettext('days')));
        }

        $date_format = $this->rc->config->get('date_format', 'Y-m-d');
        $time_format = $this->rc->config->get('time_format', 'H:i');

        if ($date_extension || $regex_extension) {
            $date_from = new html_inputfield(['name' => 'vacation_datefrom', 'id' => 'vacation_datefrom', 'class' => 'datepicker form-control', 'size' => 12]);
            $date_to   = new html_inputfield(['name' => 'vacation_dateto', 'id' => 'vacation_dateto', 'class' => 'datepicker form-control', 'size' => 12]);
        }

        if ($date_extension) {
            $time_from  = new html_inputfield(['name' => 'vacation_timefrom', 'id' => 'vacation_timefrom', 'size' => 7, 'class' => 'form-control']);
            $time_to    = new html_inputfield(['name' => 'vacation_timeto', 'id' => 'vacation_timeto', 'size' => 7, 'class' => 'form-control']);
            $date_value = [];

            if (!empty($this->vacation['tests'])) {
                foreach ((array) $this->vacation['tests'] as $test) {
                    if ($test['test'] == 'currentdate') {
                        $idx = $test['type'] == 'value-ge' ? 'from' : 'to';

                        if ($test['part'] == 'date') {
                            $date_value[$idx]['date'] = $test['arg'];
                        }
                        else if ($test['part'] == 'iso8601') {
                            $date_value[$idx]['datetime'] = $test['arg'];
                        }
                    }
                }
            }

            foreach ($date_value as $idx => $value) {
                $date = !empty($value['datetime']) ? $value['datetime'] : $value['date'];
                $date_value[$idx] = $this->rc->format_date($date, $date_format, false);

                if (!empty($value['datetime'])) {
                    $date_value['time_' . $idx] = $this->rc->format_date($date, $time_format, true);
                }
            }
        }
        else if ($regex_extension) {
            // Sieve 'date' extension not available, read start/end from RegEx based rules instead
            if ($date_tests = self::parse_regexp_tests($this->vacation['tests'])) {
                $date_value['from'] = $this->rc->format_date($date_tests['from'], $date_format, false);
                $date_value['to']   = $this->rc->format_date($date_tests['to'], $date_format, false);
            }
        }

        // force domain selection in redirect email input
        $domains = (array) $this->rc->config->get('managesieve_domains');

        if (!empty($domains)) {
            sort($domains);

            $domain_select = new html_select(['name' => 'action_domain', 'id' => 'action_domain', 'class' => 'custom-select']);
            $domain_select->add(array_combine($domains, $domains));

            if ($redirect && !empty($this->vacation['target'])) {
                $parts = explode('@', $this->vacation['target']);
                if (!empty($parts)) {
                    $this->vacation['domain'] = array_pop($parts);
                    $this->vacation['target'] = implode('@', $parts);
                }
            }
        }

        // redirect target
        $action_target = ' <span id="action_target_span" class="input-group"' . (!$redirect ? ' style="display:none"' : '') . '>'
            . '<input type="text" name="action_target" id="action_target"'
            . ' value="' .($redirect ? rcube::Q($this->vacation['target'], 'strict', false) : '') . '"'
            . (!empty($domain_select) ? ' size="20"' : ' size="35"') . '/>'
            . (!empty($domain_select) ? ' <span class="input-group-append input-group-prepend"><span class="input-group-text">@</span></span>'
                . $domain_select->show(!empty($this->vacation['domain']) ? $this->vacation['domain'] : null) : '')
            . '</span>';

        // Message tab
        $table = new html_table(['cols' => 2]);

        $table->add('title', html::label('vacation_subject', $this->plugin->gettext('vacation.subject')));
        $table->add(null, $subject->show(!empty($this->vacation['subject']) ? $this->vacation['subject'] : null));
        $table->add('title', html::label('vacation_reason', $this->plugin->gettext('vacation.body')));
        $table->add(null, $reason->show(!empty($this->vacation['reason']) ? $this->vacation['reason'] : null));

        if (!empty($date_from)) {
            $table->add('title', html::label('vacation_datefrom', $this->plugin->gettext('vacation.start')));
            $table->add(null, $date_from->show(!empty($date_value['from']) ? $date_value['from'] : null)
                . (!empty($time_from) ? ' ' . $time_from->show(!empty($date_value['time_from']) ? $date_value['time_from'] : null) : '')
            );
            $table->add('title', html::label('vacation_dateto', $this->plugin->gettext('vacation.end')));
            $table->add(null, $date_to->show(!empty($date_value['to']) ? $date_value['to'] : null)
                . (!empty($time_to) ? ' ' . $time_to->show(!empty($date_value['time_to']) ? $date_value['time_to'] : null) : ''));
        }

        $table->add('title', html::label('vacation_status', $this->plugin->gettext('vacation.status')));
        $table->add(null, $status->show(!isset($this->vacation['disabled']) || $this->vacation['disabled'] ? 'off' : 'on'));

        $out .= html::tag('fieldset', '', html::tag('legend', null, $this->plugin->gettext('vacation.reply')) . $table->show($attrib));

        // Advanced tab
        $table = new html_table(['cols' => 2]);

        $table->add('title', html::label('vacation_from', $this->plugin->gettext('vacation.from')));
        $table->add(null, $from->show(!empty($this->vacation['from']) ? $this->vacation['from'] : null));
        $table->add('title', html::label('vacation_addresses', $this->plugin->gettext('vacation.addresses')));
        $table->add(null, $addresses . $addresses_link->show($this->plugin->gettext('filladdresses')));
        $table->add('title', html::label('vacation_interval', $this->plugin->gettext('vacation.interval')));
        $table->add(null, html::span('input-group', $interval_txt));

        if (!empty($after)) {
            $table->add('title', html::label('vacation_after', $this->plugin->gettext('vacation.after')));
            $table->add(null, $after->show(isset($this->vacation['idx']) ? $this->vacation['idx'] - 1 : ''));
        }

        $table->add('title', html::label('vacation_action', $this->plugin->gettext('vacation.action')));
        $table->add('vacation input-group input-group-combo',
            $action->show(!empty($this->vacation['action']) ? $this->vacation['action'] : null) . $action_target
        );

        $out .= html::tag('fieldset', '', html::tag('legend', null, $this->plugin->gettext('vacation.advanced'))
            . $table->show($attrib)
        );

        $out .= '</form>';

        $this->rc->output->add_gui_object('sieveform', $form_id);

        if (!empty($time_format)) {
            $this->rc->output->set_env('time_format', $time_format);
        }

        return $out;
    }

    protected static function build_regexp_tests($date_from, $date_to, &$error)
    {
        $tests    = [];
        $dt_from  = rcube_utils::anytodatetime($date_from);
        $dt_to    = rcube_utils::anytodatetime($date_to);
        $interval = $dt_from->diff($dt_to);

        if ($interval->invert || $interval->days > 365) {
            $error = 'managesieve.invaliddateformat';
            return;
        }

        $dt_i     = $dt_from;
        $interval = new DateInterval('P1D');
        $matchexp = '';

        while (!$dt_i->diff($dt_to)->invert) {
            $days     = (int) $dt_i->format('d');
            $matchexp .= $days < 10 ? "[ 0]$days" : $days;

            if ($days == $dt_i->format('t') || $dt_i->diff($dt_to)->days == 0) {
                $test = [
                    'test' => 'header',
                    'type' => 'regex',
                    'arg1' => 'received',
                    'arg2' => "($matchexp) " . $dt_i->format('M Y')
                ];

                $tests[]  = $test;
                $matchexp = '';
            }
            else {
                $matchexp .= '|';
            }

            $dt_i->add($interval);
        }

        return $tests;
    }

    protected static function parse_regexp_tests($tests)
    {
        $rx_from = '/^\(([0-9]{2}).*\)\s([A-Za-z]+)\s([0-9]{4})/';
        $rx_to   = '/^\(.*([0-9]{2})\)\s([A-Za-z]+)\s([0-9]{4})/';
        $result  = [];

        foreach ((array) $tests as $test) {
            if ($test['test'] == 'header' && $test['type'] == 'regex' && $test['arg1'] == 'received') {
                $textexp = preg_replace('/\[ ([^\]]*)\]/', '0', $test['arg2']);

                if (empty($result['from']) && preg_match($rx_from, $textexp, $matches)) {
                    $result['from'] = $matches[1]." ".$matches[2]." ".$matches[3];
                }

                if (preg_match($rx_to, $textexp, $matches)) {
                    $result['to'] = $matches[1]." ".$matches[2]." ".$matches[3];
                }
            }
        }

        return $result;
    }

    /**
     * Get current vacation interval
     */
    public static function vacation_interval(&$vacation, $extensions = [])
    {
        $rcube = rcube::get_instance();
        $seconds_extension = in_array('vacation-seconds', $extensions);

        if (isset($vacation['seconds'])) {
            $interval = $vacation['seconds'];
        }
        else if (isset($vacation['days'])) {
            $interval = $vacation['days'];
        }
        else if ($interval_cfg = $rcube->config->get('managesieve_vacation_interval')) {
            if (preg_match('/^([0-9]+)s$/', $interval_cfg, $m)) {
                if ($seconds_extension) {
                    $vacation['seconds'] = ($interval = intval($m[1])) ? $interval : null;
                }
                else {
                    $vacation['days'] = $interval = ceil(intval($m[1])/86400);
                }
            }
            else {
                $vacation['days'] = $interval = intval($interval_cfg);
            }
        }

        return !empty($interval) ? $interval : '';
    }

    /**
     * API: get vacation rule
     *
     * @return array Vacation rule information
     */
    public function get_vacation()
    {
        $this->exts = $this->sieve->get_extensions();
        $this->init_script();
        $this->vacation_rule();

        // check supported extensions
        $date_extension  = in_array('date', $this->exts);
        $regex_extension = in_array('regex', $this->exts);

        // set user's timezone
        try {
            $timezone = new DateTimeZone($this->rc->config->get('timezone', 'GMT'));
        }
        catch (Exception $e) {
            $timezone = new DateTimeZone('GMT');
        }

        $interval = null;
        $start    = null;
        $end      = null;

        if ($date_extension) {
            $date_value = [];
            if (!empty($this->vacation['tests'])) {
                foreach ((array) $this->vacation['tests'] as $test) {
                    if ($test['test'] == 'currentdate') {
                        $idx = $test['type'] == 'value-ge' ? 'start' : 'end';

                        if ($test['part'] == 'date') {
                            $date_value[$idx]['date'] = $test['arg'];
                        }
                        else if ($test['part'] == 'iso8601') {
                            $date_value[$idx]['datetime'] = $test['arg'];
                        }
                    }
                }
            }

            foreach ($date_value as $idx => $value) {
                ${$idx} = new DateTime(!empty($value['datetime']) ? $value['datetime'] : $value['date'], $timezone);
            }
        }
        else if ($regex_extension) {
            // Sieve 'date' extension not available, read start/end from RegEx based rules instead
            if ($date_tests = self::parse_regexp_tests($this->vacation['tests'])) {
                $start = new DateTime($date_tests['from'] . ' ' . '00:00:00', $timezone);
                $end   = new DateTime($date_tests['to'] . ' ' . '23:59:59', $timezone);
            }
        }

        if (isset($this->vacation['seconds'])) {
            $interval = $this->vacation['seconds'] . 's';
        }
        else if (isset($this->vacation['days'])) {
            $interval = $this->vacation['days'] . 'd';
        }

        $vacation = [
            'supported' => $this->exts,
            'interval'  => $interval,
            'start'     => $start,
            'end'       => $end,
            'enabled'   => !empty($this->vacation['reason']) && empty($this->vacation['disabled']),
            'message'   => isset($this->vacation['reason']) ? $this->vacation['reason'] : null,
            'subject'   => isset($this->vacation['subject']) ? $this->vacation['subject'] : null,
            'action'    => isset($this->vacation['action']) ? $this->vacation['action'] : null,
            'target'    => isset($this->vacation['target']) ? $this->vacation['target'] : null,
            'addresses' => isset($this->vacation['addresses']) ? $this->vacation['addresses'] : null,
            'from'      => isset($this->vacation['from']) ? $this->vacation['from'] : null,
        ];

        return $vacation;
    }

    /**
     * API: set vacation rule
     *
     * @param array $data Vacation rule information (see self::get_vacation())
     *
     * @return bool True on success, False on failure
     */
    public function set_vacation($data)
    {
        $this->exts  = $this->sieve->get_extensions();
        $this->error = false;

        $this->init_script();
        $this->vacation_rule();

        // check supported extensions
        $date_extension  = in_array('date', $this->exts);
        $regex_extension = in_array('regex', $this->exts);

        $vacation['type']      = 'vacation';
        $vacation['reason']    = $this->strip_value(str_replace("\r\n", "\n", $data['message']), true);
        $vacation['addresses'] = $data['addresses'];
        $vacation['subject']   = trim($data['subject']);
        $vacation['from']      = trim($data['from']);
        $vacation_tests        = (array) $this->vacation['tests'];

        foreach ((array) $vacation['addresses'] as $aidx => $address) {
            $vacation['addresses'][$aidx] = $address = trim($address);

            if (empty($address)) {
                unset($vacation['addresses'][$aidx]);
            }
            else if (!rcube_utils::check_email($address)) {
                $this->error = "Invalid address in vacation addresses: $address";
                return false;
            }
        }

        if (!empty($vacation['from']) && !rcube_utils::check_email($vacation['from'])) {
            $this->error = "Invalid address in 'from': " . $vacation['from'];
            return false;
        }

        if ($vacation['reason'] == '') {
            $this->error = "No vacation message specified";
            return false;
        }

        if (!empty($data['interval'])) {
            if (!preg_match('/^([0-9]+)\s*([sd])$/', $data['interval'], $m)) {
                $this->error = "Invalid vacation interval value: " . $data['interval'];
                return false;
            }
            else if ($m[1]) {
                $vacation[strtolower($m[2]) == 's' ? 'seconds' : 'days'] = $m[1];
            }
        }

        // find and remove existing date/regex/true rules
        foreach ((array) $vacation_tests as $idx => $t) {
            if ($t['test'] == 'currentdate' || $t['test'] == 'true'
                || ($t['test'] == 'header' && $t['type'] == 'regex' && $t['arg1'] == 'received')
            ) {
                unset($vacation_tests[$idx]);
            }
        }

        if ($date_extension) {
            foreach (['start', 'end'] as $var) {
                if (!empty($data[$var])) {
                    $dt = $data[$var];
                    $vacation_tests[] = [
                        'test' => 'currentdate',
                        'part' => 'iso8601',
                        'type' => 'value-' . ($var == 'start' ? 'ge' : 'le'),
                        'zone' => $dt->format('O'),
                        'arg'  => str_replace('+00:00', 'Z', strtoupper($dt->format('c'))),
                    ];
                }
            }
        }
        else if ($regex_extension) {
            // Add date range rules if range specified
            if (!empty($data['start']) && !empty($data['end'])) {
                if ($tests = self::build_regexp_tests($data['start'], $data['end'], $error)) {
                    $vacation_tests = array_merge($vacation_tests, $tests);
                }

                if ($error) {
                    $this->error = "Invalid dates specified or unsupported period length";
                    return false;
                }
            }
        }

        if ($data['action'] == 'redirect' || $data['action'] == 'copy') {
            if (empty($data['target']) || !rcube_utils::check_email($data['target'])) {
                $this->error = "Invalid address in action target: " . $data['target'];
                return false;
            }
        }
        else if ($data['action'] && $data['action'] != 'keep' && $data['action'] != 'discard') {
            $this->error = "Unsupported vacation action: " . $data['action'];
            return false;
        }

        if (empty($vacation_tests)) {
            $vacation_tests = (array) $this->rc->config->get('managesieve_vacation_test', [['test' => 'true']]);
        }

        $rule             = $this->vacation;
        $rule['type']     = 'if';
        $rule['name']     = !empty($rule['name']) ? $rule['name'] : 'Out-of-Office';
        $rule['disabled'] = isset($data['enabled']) && !$data['enabled'];
        $rule['tests']    = $vacation_tests;
        $rule['join']     = $date_extension ? count($vacation_tests) > 1 : false;
        $rule['actions']  = [$vacation];

        if (!empty($data['action']) && $data['action'] != 'keep') {
            $rule['actions'][] = [
                'type'   => $data['action'] == 'discard' ? 'discard' : 'redirect',
                'copy'   => $data['action'] == 'copy',
                'target' => $data['action'] != 'discard' ? $data['target'] : '',
            ];
        }

        return $this->merge_rule($rule, $this->vacation, $this->script_name);
    }

    /**
     * API: connect to managesieve server
     */
    public function connect($username, $password)
    {
        $error = parent::connect($username, $password);

        if ($error) {
            return $error;
        }

        return $this->load_script();
    }

    /**
     * API: Returns last error
     *
     * @return string Error message
     */
    public function get_error()
    {
        return $this->error;
    }
}
PK|c�\O=������0managesieve/lib/Roundcube/rcube_sieve_script.phpnu�[���<?php

/**
 * Class for operations on Sieve scripts
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_sieve_script
{
    public $content = [];      // script rules array

    private $vars      = [];   // "global" variables
    private $prefix    = '';   // script header (comments)
    private $supported = [     // supported Sieve extensions:
        'body',                     // RFC5173
        'copy',                     // RFC3894
        'date',                     // RFC5260
        'duplicate',                // RFC7352
        'editheader',               // RFC5293
        'enotify',                  // RFC5435
        'envelope',                 // RFC5228
        'ereject',                  // RFC5429
        'fileinto',                 // RFC5228
        'imapflags',                // draft-melnikov-sieve-imapflags-06
        'imap4flags',               // RFC5232
        'include',                  // RFC6609
        'index',                    // RFC5260
        'mime',                     // RFC5703 (except: foreverypart/break, enclose, extracttext)
        'notify',                   // RFC5435
        'regex',                    // draft-ietf-sieve-regex-01
        'reject',                   // RFC5429
        'relational',               // RFC3431
        'subaddress',               // RFC5233
        'vacation',                 // RFC5230
        'vacation-seconds',         // RFC6131
        'variables',                // RFC5229
        'spamtest',                 // RFC3685 (not RFC5235 with :percent argument)
        // @TODO: virustest, mailbox
    ];

    /**
     * Object constructor
     *
     * @param string $script       Script's text content
     * @param array  $capabilities List of capabilities supported by server
     */
    public function __construct($script, $capabilities = [])
    {
        $capabilities = array_map('strtolower', (array) $capabilities);

        // disable features by server capabilities
        if (!empty($capabilities)) {
            foreach ($this->supported as $idx => $ext) {
                if (!in_array($ext, $capabilities)) {
                    unset($this->supported[$idx]);
                }
            }
        }

        // Parse text content of the script
        $this->_parse_text($script);
    }

    /**
     * Adds rule to the script (at the end)
     *
     * @param array $content Rule content (as array)
     *
     * @return int The index of the new rule
     */
    public function add_rule($content)
    {
        // TODO: check this->supported
        array_push($this->content, $content);
        return count($this->content) - 1;
    }

    /**
     * Removes a rule from the script.
     *
     * @param int $index Rule index
     *
     * @return bool True on success, False otherwise
     */
    public function delete_rule($index)
    {
        if (isset($this->content[$index])) {
            unset($this->content[$index]);
            return true;
        }

        return false;
    }

    /**
     * Get the script size - count of rules.
     *
     * @return int Count of rules
     */
    public function size()
    {
        return count($this->content);
    }

    /**
     * Updates (replaces) a rule at specified index.
     *
     * @param int   $index   Rule index
     * @param array $content Rule content (as array)
     *
     * @return bool True on success, False otherwise
     */
    public function update_rule($index, $content)
    {
        // TODO: check this->supported
        if (isset($this->content[$index])) {
            $this->content[$index] = $content;
            return $index;
        }

        return false;
    }

    /**
     * Sets "global" variable
     *
     * @param string $name  Variable name
     * @param string $value Variable value
     * @param array  $mods  Variable modifiers
     */
    public function set_var($name, $value, $mods = [])
    {
        // Check if variable exists
        for ($i=0, $len=count($this->vars); $i<$len; $i++) {
            if ($this->vars[$i]['name'] == $name) {
                break;
            }
        }

        $var = array_merge($mods, ['name' => $name, 'value' => $value]);

        $this->vars[$i] = $var;
    }

    /**
     * Unsets "global" variable
     *
     * @param string $name Variable name
     */
    public function unset_var($name)
    {
        // Check if variable exists
        foreach ($this->vars as $idx => $var) {
            if ($var['name'] == $name) {
                unset($this->vars[$idx]);
                break;
            }
        }
    }

    /**
     * Gets the value of "global" variable
     *
     * @param string $name Variable name
     *
     * @return string Variable value
     */
    public function get_var($name)
    {
        // Check if variable exists
        for ($i=0, $len=count($this->vars); $i<$len; $i++) {
            if ($this->vars[$i]['name'] == $name) {
                return $this->vars[$i]['name'];
            }
        }
    }

    /**
     * Sets script header content
     *
     * @param string $text Header content
     */
    public function set_prefix($text)
    {
        $this->prefix = $text;
    }

    /**
     * Returns script as text
     */
    public function as_text()
    {
        $output = '';
        $exts   = [];
        $idx    = 0;

        if (!empty($this->vars)) {
            if (in_array('variables', (array)$this->supported)) {
                $has_vars = true;
                array_push($exts, 'variables');
            }
            foreach ($this->vars as $var) {
                if (empty($has_vars)) {
                    // 'variables' extension not supported, put vars in comments
                    $output .= sprintf("# %s %s\r\n", $var['name'], $var['value']);
                }
                else {
                    $output .= 'set ';
                    foreach (array_diff(array_keys($var), ['name', 'value']) as $opt) {
                        $output .= ":$opt ";
                    }
                    $output .= self::escape_string($var['name']) . ' ' . self::escape_string($var['value']) . ";\r\n";
                }
            }
        }

        $imapflags = in_array('imap4flags', $this->supported) ? 'imap4flags' : 'imapflags';
        $notify    = in_array('enotify', $this->supported) ? 'enotify' : 'notify';

        // rules
        foreach ($this->content as $rule) {
            $script    = '';
            $tests     = [];
            $i         = 0;

            // header
            if (!empty($rule['name']) && strlen($rule['name'])) {
                $script .= '# rule:[' . $rule['name'] . "]\r\n";
            }

            // constraints expressions
            if (!empty($rule['tests'])) {
                foreach ($rule['tests'] as $test) {
                    $tests[$i] = '';
                    switch ($test['test']) {
                    case 'size':
                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '');
                        $tests[$i] .= 'size :' . ($test['type'] == 'under' ? 'under ' : 'over ') . $test['arg'];
                        break;

                    case 'spamtest':
                        array_push($exts, 'spamtest');
                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '');
                        $tests[$i] .= $test['test'];

                        $this->add_operator($test, $tests[$i], $exts);

                        $tests[$i] .= ' ' . self::escape_string($test['arg']);
                        break;

                    case 'true':
                        $tests[$i] .= !empty($test['not']) ? 'false' : 'true';
                        break;

                    case 'exists':
                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '') . 'exists';

                        $this->add_mime($test, $tests[$i], $exts);

                        $tests[$i] .= ' ' . self::escape_string($test['arg']);
                        break;

                    case 'header':
                    case 'string':
                        if ($test['test'] == 'string') {
                            array_push($exts, 'variables');
                        }

                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '');
                        $tests[$i] .= $test['test'];

                        if ($test['test'] == 'header') {
                            $this->add_mime($test, $tests[$i], $exts);
                        }

                        $this->add_index($test, $tests[$i], $exts);
                        $this->add_operator($test, $tests[$i], $exts);

                        $tests[$i] .= ' ' . self::escape_string($test['arg1']);
                        $tests[$i] .= ' ' . self::escape_string($test['arg2']);
                        break;

                    case 'address':
                    case 'envelope':
                        if ($test['test'] == 'envelope') {
                            array_push($exts, 'envelope');
                        }

                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '');
                        $tests[$i] .= $test['test'];

                        if ($test['test'] == 'address') {
                            $this->add_mime($test, $tests[$i], $exts);
                            $this->add_index($test, $tests[$i], $exts);
                        }

                        // :all address-part is optional, skip it
                        if (!empty($test['part']) && $test['part'] != 'all') {
                            $tests[$i] .= ' :' . $test['part'];
                            if ($test['part'] == 'user' || $test['part'] == 'detail') {
                                array_push($exts, 'subaddress');
                            }
                        }

                        $this->add_operator($test, $tests[$i], $exts);

                        $tests[$i] .= ' ' . self::escape_string($test['arg1']);
                        $tests[$i] .= ' ' . self::escape_string($test['arg2']);
                        break;

                    case 'body':
                        array_push($exts, 'body');

                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '') . 'body';

                        if (!empty($test['part'])) {
                            $tests[$i] .= ' :' . $test['part'];

                            if (!empty($test['content']) && $test['part'] == 'content') {
                                $tests[$i] .= ' ' . self::escape_string($test['content']);
                            }
                        }

                        $this->add_operator($test, $tests[$i], $exts);

                        $tests[$i] .= ' ' . self::escape_string($test['arg']);
                        break;

                    case 'date':
                    case 'currentdate':
                        array_push($exts, 'date');

                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '') . $test['test'];

                        $this->add_index($test, $tests[$i], $exts);

                        if (!empty($test['originalzone']) && $test['test'] == 'date') {
                            $tests[$i] .= ' :originalzone';
                        }
                        else if (!empty($test['zone'])) {
                            $tests[$i] .= ' :zone ' . self::escape_string($test['zone']);
                        }

                        $this->add_operator($test, $tests[$i], $exts);

                        if ($test['test'] == 'date') {
                            $tests[$i] .= ' ' . self::escape_string($test['header']);
                        }

                        $tests[$i] .= ' ' . self::escape_string($test['part']);
                        $tests[$i] .= ' ' . self::escape_string($test['arg']);

                        break;

                    case 'duplicate':
                        array_push($exts, 'duplicate');

                        $tests[$i] .= (!empty($test['not']) ? 'not ' : '') . $test['test'];

                        $tokens = ['handle', 'uniqueid', 'header'];
                        foreach ($tokens as $token)
                            if (isset($test[$token]) && $test[$token] !== '') {
                                $tests[$i] .= " :$token " . self::escape_string($test[$token]);
                            }

                        if (!empty($test['seconds'])) {
                            $tests[$i] .= ' :seconds ' . intval($test['seconds']);
                        }

                        if (!empty($test['last'])) {
                            $tests[$i] .= ' :last';
                        }

                        break;
                    }

                    $i++;
                }
            }

            // disabled rule: if false #....
            if (!empty($tests)) {
                $script .= 'if ' . ($rule['disabled'] ? 'false # ' : '');

                if (count($tests) > 1) {
                    $tests_str = implode(', ', $tests);
                }
                else {
                    $tests_str = $tests[0];
                }

                if ($rule['join'] || count($tests) > 1) {
                    $script .= sprintf('%s (%s)', $rule['join'] ? 'allof' : 'anyof', $tests_str);
                }
                else {
                    $script .= $tests_str;
                }
                $script .= "\r\n{\r\n";
            }

            // action(s)
            if (!empty($rule['actions'])) {
                foreach ($rule['actions'] as $action) {
                    $action_script = '';

                    switch ($action['type']) {

                    case 'fileinto':
                        array_push($exts, 'fileinto');
                        $action_script .= 'fileinto ';
                        if (!empty($action['copy'])) {
                            $action_script .= ':copy ';
                            array_push($exts, 'copy');
                        }
                        $action_script .= self::escape_string($action['target']);
                        break;

                    case 'redirect':
                        $action_script .= 'redirect ';
                        if (!empty($action['copy'])) {
                            $action_script .= ':copy ';
                            array_push($exts, 'copy');
                        }
                        $action_script .= self::escape_string($action['target']);
                        break;

                    case 'reject':
                    case 'ereject':
                        array_push($exts, $action['type']);
                        $action_script .= $action['type'] . ' ' . self::escape_string($action['target']);
                        break;

                    case 'addflag':
                    case 'setflag':
                    case 'removeflag':
                        array_push($exts, $imapflags);
                        $action_script .= $action['type'] . ' ' . self::escape_string($action['target']);
                        break;

                    case 'addheader':
                    case 'deleteheader':
                        array_push($exts, 'editheader');
                        $action_script .= $action['type'];
                        if (!empty($action['index'])) {
                            $action_script .= " :index " . intval($action['index']);
                        }
                        if (!empty($action['last']) && (!empty($action['index']) || $action['type'] == 'addheader')) {
                            $action_script .= " :last";
                        }
                        if ($action['type'] == 'deleteheader') {
                            $action['type'] = $action['match-type'] ?? null;
                            $this->add_operator($action, $action_script, $exts);
                        }
                        $action_script .= " " . self::escape_string($action['name']);
                        if ((is_string($action['value']) && strlen($action['value']) > 0) || (is_array($action['value']) && !empty($action['value']))) {
                            $action_script .= " " . self::escape_string($action['value']);
                        }
                        break;

                    case 'keep':
                    case 'discard':
                    case 'stop':
                        $action_script .= $action['type'];
                        break;

                    case 'include':
                        array_push($exts, 'include');
                        $action_script .= 'include ';
                        foreach (array_diff(array_keys($action), ['target', 'type']) as $opt) {
                            $action_script .= ":$opt ";
                        }
                        $action_script .= self::escape_string($action['target']);
                        break;

                    case 'set':
                        array_push($exts, 'variables');
                        $action_script .= 'set ';
                        foreach (array_diff(array_keys($action), ['name', 'value', 'type']) as $opt) {
                            $action_script .= ":$opt ";
                        }
                        $action_script .= self::escape_string($action['name']) . ' ' . self::escape_string($action['value']);
                        break;

                    case 'replace':
                        array_push($exts, 'mime');
                        $action_script .= 'replace';
                        if (!empty($action['mime'])) {
                            $action_script .= " :mime";
                        }
                        if (!empty($action['subject'])) {
                            $action_script .= " :subject " . self::escape_string($action['subject']);
                        }
                        if (!empty($action['from'])) {
                            $action_script .= " :from " . self::escape_string($action['from']);
                        }
                        $action_script .= ' ' . self::escape_string($action['replace']);
                        break;

                    case 'notify':
                        array_push($exts, $notify);
                        $action_script .= 'notify';

                        $method = $action['method'];
                        unset($action['method']);
                        $action['options'] = (array) $action['options'];

                        // Here we support draft-martin-sieve-notify-01 used by Cyrus
                        if ($notify == 'notify') {
                            if (!empty($action['importance'])) {
                                switch ($action['importance']) {
                                    case 1: $action_script .= " :high"; break;
                                    //case 2: $action_script .= " :normal"; break;
                                    case 3: $action_script .= " :low"; break;
                                }
                            }

                            // Old-draft way: :method "mailto" :options "email@address"
                            if (!empty($method)) {
                                $parts = explode(':', $method, 2);
                                $action['method'] = $parts[0];
                                array_unshift($action['options'], $parts[1]);
                            }

                            unset($action['importance']);
                            unset($action['from']);
                            unset($method);
                        }

                        foreach (['id', 'importance', 'method', 'options', 'from', 'message'] as $n_tag) {
                            if (!empty($action[$n_tag])) {
                                $action_script .= " :$n_tag " . self::escape_string($action[$n_tag]);
                            }
                        }

                        if (!empty($method)) {
                            $action_script .= ' ' . self::escape_string($method);
                        }

                        break;

                    case 'vacation':
                        array_push($exts, 'vacation');
                        $action_script .= 'vacation';
                        if (isset($action['seconds'])) {
                            array_push($exts, 'vacation-seconds');
                            $action_script .= " :seconds " . intval($action['seconds']);
                        }
                        else if (!empty($action['days'])) {
                            $action_script .= " :days " . intval($action['days']);
                        }
                        if (!empty($action['addresses'])) {
                            $action_script .= " :addresses " . self::escape_string($action['addresses']);
                        }
                        if (!empty($action['subject'])) {
                            $action_script .= " :subject " . self::escape_string($action['subject']);
                        }
                        if (!empty($action['handle'])) {
                            $action_script .= " :handle " . self::escape_string($action['handle']);
                        }
                        if (!empty($action['from'])) {
                            $action_script .= " :from " . self::escape_string($action['from']);
                        }
                        if (!empty($action['mime'])) {
                            $action_script .= " :mime";
                        }
                        $action_script .= " " . self::escape_string($action['reason']);
                        break;
                    }

                    if ($action_script) {
                        $script .= !empty($tests) ? "\t" : '';
                        $script .= $action_script . ";\r\n";
                    }
                }
            }

            if ($script) {
                $output .= $script . (!empty($tests) ? "}\r\n" : '');
                $idx++;
            }
        }

        // requires
        if (!empty($exts)) {
            $exts = array_unique($exts);

            if (in_array('vacation-seconds', $exts) && ($key = array_search('vacation', $exts)) !== false) {
                unset($exts[$key]);
            }

            sort($exts); // for convenience use always the same order

            $output = 'require ["' . implode('","', $exts) . "\"];\r\n" . $output;
        }

        if (!empty($this->prefix)) {
            $output = $this->prefix . "\r\n\r\n" . $output;
        }

        return $output;
    }

    /**
     * Returns script object
     *
     */
    public function as_array()
    {
        return $this->content;
    }

    /**
     * Returns array of supported extensions
     *
     */
    public function get_extensions()
    {
        return array_values($this->supported);
    }

    /**
     * Converts text script to rules array
     *
     * @param string $script Text script
     */
    private function _parse_text($script)
    {
        $prefix   = '';
        $options  = [];
        $position = 0;
        $length   = strlen($script);

        while ($position < $length) {
            // skip whitespace chars
            $position = self::ltrim_position($script, $position);
            $rulename = '';

            // Comments
            while (isset($script[$position]) && $script[$position] === '#') {
                $endl = strpos($script, "\n", $position);
                if ($endl === false) {
                    $endl = $length;
                } elseif ($script[$endl - 1] === "\r") {
                    --$endl;
                }
                $line = substr($script, $position, $endl - $position);

                // Roundcube format
                if (preg_match('/^# rule:\[(.*)\]/', $line, $matches)) {
                    $rulename = $matches[1];
                }
                // KEP:14 variables
                else if (preg_match('/^# (EDITOR|EDITOR_VERSION) (.+)$/', $line, $matches)) {
                    $this->set_var($matches[1], $matches[2]);
                }
                // Horde-Ingo format
                else if (!empty($options['format']) && $options['format'] == 'INGO'
                    && preg_match('/^# (.*)/', $line, $matches)
                ) {
                    $rulename = $matches[1];
                }
                else if (empty($options['prefix'])) {
                    $prefix .= $line . "\n";
                }

                // skip empty lines after the comment (#5657)
                $position = self::ltrim_position($script, $endl + 1);
            }

            // handle script header
            if (empty($options['prefix'])) {
                $options['prefix'] = true;
                if ($prefix && strpos($prefix, 'horde.org/ingo')) {
                    $options['format'] = 'INGO';
                }
            }

            // Control structures/blocks
            if (preg_match('/^(if|else|elsif)/i', substr($script, $position, 5))) {
                $rule = $this->_tokenize_rule($script, $position);
                if (strlen($rulename) && !empty($rule)) {
                    $rule['name'] = $rulename;
                }
            }
            // Simple commands
            else {
                $rule = $this->_parse_actions($script, $position, ';');
                if (is_array($rule) && !empty($rule[0])) {
                    // set "global" variables
                    if ($rule[0]['type'] == 'set') {
                        unset($rule[0]['type']);
                        $this->vars[] = $rule[0];
                        unset($rule);
                    }
                    else {
                        $rule = ['actions' => $rule];
                    }
                }
            }

            if (!empty($rule)) {
                $this->content[] = $rule;
            }
        }

        if (!empty($prefix)) {
            $this->prefix = trim(preg_replace('/\r?\n/', "\r\n", $prefix));
        }
    }

    /**
     * Convert text script fragment to rule object
     *
     * @param string $content   The whole script content
     * @param int    &$position Start position in the script
     *
     * @return array Rule data
     */
    private function _tokenize_rule($content, &$position)
    {
        $cond = strtolower(self::tokenize($content, 1, $position));
        if ($cond != 'if' && $cond != 'elsif' && $cond != 'else') {
            return null;
        }

        $disabled = false;
        $join     = false;
        $join_not = false;
        $length   = strlen($content);

        // disabled rule (false + comment): if false # .....
        if (preg_match('/^\s*false\s+#\s*/i', substr($content, $position, 20), $m)) {
            $position += strlen($m[0]);
            $disabled = true;
        }

        while ($position < $length) {
            $tokens    = self::tokenize($content, true, $position);
            $separator = array_pop($tokens);

            if (!empty($tokens)) {
                $token = array_shift($tokens);
            }
            else {
                $token = $separator;
            }

            $token = strtolower($token);

            if ($token == 'not') {
                $not = true;
                $token = strtolower(array_shift($tokens));
            }
            else {
                $not = false;
            }

            // we support "not allof" as a negation of allof sub-tests
            if ($join_not) {
                $not = !$not;
            }

            switch ($token) {
            case 'allof':
                $join     = true;
                $join_not = $not;
                break;

            case 'anyof':
                break;

            case 'size':
                $test = ['test' => 'size', 'not' => $not];

                $test['arg'] = array_pop($tokens);

                for ($i=0, $len=count($tokens); $i<$len; $i++) {
                    if (!is_array($tokens[$i])
                        && preg_match('/^:(under|over)$/i', $tokens[$i])
                    ) {
                        $test['type'] = strtolower(substr($tokens[$i], 1));
                    }
                }

                $tests[] = $test;
                break;

            case 'spamtest':
                $test = ['test' => 'spamtest', 'not' => $not];

                $test['arg'] = array_pop($tokens);

                $test += $this->test_tokens($tokens);

                $tests[] = $test;
                break;

            case 'header':
            case 'string':
            case 'address':
            case 'envelope':
                $test = ['test' => $token, 'not' => $not];

                $test['arg2'] = array_pop($tokens);
                $test['arg1'] = array_pop($tokens);

                $test += $this->test_tokens($tokens);

                if ($token != 'header' && $token != 'string' && !empty($tokens)) {
                    for ($i=0, $len=count($tokens); $i<$len; $i++) {
                        if (!is_array($tokens[$i]) && preg_match('/^:(localpart|domain|all|user|detail)$/i', $tokens[$i])) {
                            $test['part'] = strtolower(substr($tokens[$i], 1));
                        }
                    }
                }

                $tests[] = $test;
                break;

            case 'body':
                $test = ['test' => 'body', 'not' => $not];

                $test['arg'] = array_pop($tokens);

                $test += $this->test_tokens($tokens);

                for ($i=0, $len=count($tokens); $i<$len; $i++) {
                    if (!is_array($tokens[$i]) && preg_match('/^:(raw|content|text)$/i', $tokens[$i])) {
                        $test['part'] = strtolower(substr($tokens[$i], 1));

                        if ($test['part'] == 'content') {
                            $test['content'] = $tokens[++$i];
                        }
                    }
                }

                $tests[] = $test;
                break;

            case 'date':
            case 'currentdate':
                $test = ['test' => $token, 'not' => $not];

                $test['arg']  = array_pop($tokens);
                $test['part'] = array_pop($tokens);

                if ($token == 'date') {
                    $test['header']  = array_pop($tokens);
                }

                $test += $this->test_tokens($tokens);

                for ($i=0, $len=count($tokens); $i<$len; $i++) {
                    if (!is_array($tokens[$i]) && preg_match('/^:zone$/i', $tokens[$i])) {
                        $test['zone'] = $tokens[++$i];
                    }
                    else if (!is_array($tokens[$i]) && preg_match('/^:originalzone$/i', $tokens[$i])) {
                        $test['originalzone'] = true;
                    }
                }

                $tests[] = $test;
                break;

            case 'duplicate':
                $test = ['test' => $token, 'not' => $not];

                for ($i=0, $len=count($tokens); $i<$len; $i++) {
                    if (!is_array($tokens[$i])) {
                        if (preg_match('/^:(handle|header|uniqueid|seconds)$/i', $tokens[$i], $m)) {
                            $test[strtolower($m[1])] = $tokens[++$i];
                        }
                        else if (preg_match('/^:last$/i', $tokens[$i])) {
                            $test['last'] = true;
                        }
                    }
                }

                $tests[] = $test;
                break;

            case 'exists':
                $test = ['test' => 'exists', 'not' => $not, 'arg'  => array_pop($tokens)];
                $test += $this->test_tokens($tokens);
                $tests[] = $test;
                break;

            case 'true':
                $tests[] = ['test' => 'true', 'not' => $not];
                break;

            case 'false':
                $tests[] = ['test' => 'true', 'not' => !$not];
                break;
            }

            // goto actions...
            if ($separator == '{') {
                break;
            }
        }

        // ...and actions block
        $actions = $this->_parse_actions($content, $position);

        if (!empty($tests) && $actions) {
            return [
                'type'     => $cond,
                'tests'    => $tests,
                'actions'  => $actions,
                'join'     => $join,
                'disabled' => $disabled,
            ];
        }

        return null;
    }

    /**
     * Parse body of actions section
     *
     * @param string $content   The whole script content
     * @param int    &$position Start position in the script
     * @param string $end       End of text separator
     *
     * @return array Array of parsed action type/target pairs
     */
    private function _parse_actions($content, &$position, $end = '}')
    {
        $result = [];
        $length = strlen($content);

        while ($position < $length) {
            $tokens    = self::tokenize($content, true, $position);
            $separator = array_pop($tokens);
            $token     = !empty($tokens) ? array_shift($tokens) : $separator;

            switch ($token) {
            case 'if':
            case 'else':
            case 'elsif':
                // nested 'if' conditions, ignore the whole rule (#5540)
                $this->_parse_actions($content, $position);
                continue 2;

            case 'discard':
            case 'keep':
            case 'stop':
                $result[] = ['type' => $token];
                break;

            case 'fileinto':
            case 'redirect':
                $action  = ['type' => $token, 'target' => array_pop($tokens)];
                $args    = ['copy'];
                $action += $this->action_arguments($tokens, $args);

                $result[] = $action;
                break;

            case 'vacation':
                $action  = ['type' => 'vacation', 'reason' => array_pop($tokens)];
                $args    = ['mime'];
                $vargs   = ['seconds', 'days', 'addresses', 'subject', 'handle', 'from'];
                $action += $this->action_arguments($tokens, $args, $vargs);

                $result[] = $action;
                break;

            case 'addheader':
            case 'deleteheader':
                $args = $this->test_tokens($tokens);
                if ($token == 'deleteheader' && !empty($args['type'])) {
                    $args['match-type'] = $args['type'];
                }
                if (($index = array_search(':last', $tokens)) !== false) {
                    $args['last'] = true;
                    unset($tokens[$index]);
                }
                $action = ['type' => $token, 'name' => array_shift($tokens), 'value' => array_shift($tokens)];

                $result[] = $action + $args;
                break;

            case 'reject':
            case 'ereject':
            case 'setflag':
            case 'addflag':
            case 'removeflag':
                $result[] = ['type' => $token, 'target' => array_pop($tokens)];
                break;

            case 'include':
                $action  = ['type' => 'include', 'target' => array_pop($tokens)];
                $args    = ['once', 'optional', 'global', 'personal'];
                $action += $this->action_arguments($tokens, $args);

                $result[] = $action;
                break;

            case 'set':
                $action  = ['type' => 'set', 'value' => array_pop($tokens), 'name' => array_pop($tokens)];
                $args    = ['lower', 'upper', 'lowerfirst', 'upperfirst', 'quotewildcard', 'length'];
                $action += $this->action_arguments($tokens, $args);

                $result[] = $action;
                break;

            case 'replace':
                $action  = ['type' => 'replace', 'replace' => array_pop($tokens)];
                $args    = ['mime'];
                $vargs   = ['subject', 'from'];
                $action += $this->action_arguments($tokens, $args, $vargs);

                $result[] = $action;
                break;

            case 'require':
                // skip, will be build according to used commands
                // $result[] = ['type' => 'require', 'target' => array_pop($tokens)];
                break;

            case 'notify':
                $action     = ['type' => 'notify'];
                $priorities = ['high' => 1, 'normal' => 2, 'low' => 3];
                $vargs      = ['from', 'id', 'importance', 'options', 'message', 'method'];
                $args       = array_keys($priorities);
                $action    += $this->action_arguments($tokens, $args, $vargs);

                // Here we'll convert draft-martin-sieve-notify-01 into RFC 5435
                if (!isset($action['importance'])) {
                    foreach ($priorities as $key => $val) {
                        if (isset($action[$key])) {
                            $action['importance'] = $val;
                            unset($action[$key]);
                        }
                    }
                }

                $action['options'] = isset($action['options']) ? (array) $action['options'] : [];

                // Old-draft way: :method "mailto" :options "email@address"
                if (!empty($action['method']) && !empty($action['options'])) {
                    $action['method'] .= ':' . array_shift($action['options']);
                }
                // unnamed parameter is a :method in enotify extension
                else if (!isset($action['method'])) {
                    $action['method'] = array_pop($tokens);
                }

                $result[] = $action;
                break;
            }

            if ($separator == $end) {
                break;
            }
        }

        return !empty($result) ? $result : null;
    }

    /**
     * Add comparator to the test
     */
    private function add_comparator($test, &$out, &$exts)
    {
        if (empty($test['comparator'])) {
            return;
        }

        if ($test['comparator'] == 'i;ascii-numeric') {
            array_push($exts, 'relational');
            array_push($exts, 'comparator-i;ascii-numeric');
        }
        else if (!in_array($test['comparator'], ['i;octet', 'i;ascii-casemap'])) {
            array_push($exts, 'comparator-' . $test['comparator']);
        }

        // skip default comparator
        if ($test['comparator'] != 'i;ascii-casemap') {
            $out .= ' :comparator ' . self::escape_string($test['comparator']);
        }
    }

    /**
     * Add index argument to the test
     */
    private function add_index($test, &$out, &$exts)
    {
        if (!empty($test['index'])) {
            array_push($exts, 'index');
            $out .= ' :index ' . intval($test['index']) . (!empty($test['last']) ? ' :last' : '');
        }
    }

    /**
     * Add mime argument(s) to the test
     */
    private function add_mime($test, &$out, &$exts)
    {
        foreach (['mime', 'mime-anychild', 'mime-type', 'mime-subtype', 'mime-contenttype', 'mime-param'] as $opt) {
            if (!empty($test[$opt])) {
                $opt_name = str_replace('mime-', '', $opt);
                if (empty($got_mime)) {
                    $out .= ' :mime';
                    $got_mime = true;
                    array_push($exts, 'mime');
                }

                if ($opt_name != 'mime') {
                    $out .= " :$opt_name";
                }

                if ($opt_name == 'param') {
                    $out .= ' ' . self::escape_string($test[$opt]);
                }
            }
        }
    }

    /**
     * Add operators to the test
     */
    private function add_operator($test, &$out, &$exts)
    {
        if (empty($test['type'])) {
            return;
        }

        // relational operator
        if (preg_match('/^(value|count)-([gteqnl]{2})/', $test['type'], $m)) {
            array_push($exts, 'relational');

            $out .= ' :' . $m[1] . ' "' . $m[2] . '"';
        }
        else {
            if ($test['type'] == 'regex') {
                array_push($exts, 'regex');
            }

            $out .= ' :' . $test['type'];
        }

        $this->add_comparator($test, $out, $exts);
    }

    /**
     * Extract test tokens
     */
    private function test_tokens(&$tokens)
    {
        $test   = [];
        $result = [];

        for ($i=0, $len=count($tokens); $i<$len; $i++) {
            $token = is_array($tokens[$i]) ? null : $tokens[$i];
            if ($token && preg_match('/^:comparator$/i', $token)) {
                $test['comparator'] = $tokens[++$i];
            }
            else if ($token && preg_match('/^:(count|value)$/i', $token)) {
                $test['type'] = strtolower(substr($token, 1)) . '-' . $tokens[++$i];
            }
            else if ($token && preg_match('/^:(is|contains|matches|regex)$/i', $token)) {
                $test['type'] = strtolower(substr($token, 1));
            }
            else if ($token && preg_match('/^:(mime|anychild|type|subtype|contenttype|param)$/i', $token)) {
                $token = strtolower(substr($token, 1));
                $key   = $token == 'mime' ? $token : "mime-$token";
                $test[$key] = $token == 'param' ? $tokens[++$i] : true;
            }
            else if ($token && preg_match('/^:index$/i', $token)) {
                $test['index'] = intval($tokens[++$i]);
                if ($tokens[$i+1] && preg_match('/^:last$/i', $tokens[$i+1])) {
                    $test['last'] = true;
                    $i++;
                }
            }
            else {
                $result[] = $tokens[$i];
            }
        }

        $tokens = $result;

        return $test;
    }

    /**
     * Extract action arguments
     */
    private function action_arguments(&$tokens, $bool_args, $val_args = [])
    {
        $action = [];
        $result = [];

        for ($i=0, $len=count($tokens); $i<$len; $i++) {
            $tok = $tokens[$i];
            if (!is_array($tok) && $tok[0] == ':') {
                $tok = strtolower(substr($tok, 1));
                if (in_array($tok, $bool_args)) {
                    $action[$tok] = true;
                }
                else if (in_array($tok, $val_args)) {
                    $action[$tok] = $tokens[++$i];
                }
                else {
                    $result[] = $tok;
                }
            }
            else {
                $result[] = $tok;
            }
        }

        $tokens = $result;

        return $action;
    }

    /**
     * Escape special chars into quoted string value or multi-line string
     * or list of strings
     *
     * @param string $str Text or array (list) of strings
     *
     * @return string Result text
     */
    static function escape_string($str)
    {
        if (is_array($str) && count($str) > 1) {
            foreach ($str as $idx => $val) {
                $str[$idx] = self::escape_string($val);
            }

            return '[' . implode(',', $str) . ']';
        }
        else if (is_array($str)) {
            $str = array_pop($str);
        }

        // multi-line string
        if (preg_match('/[\r\n\0]/', $str)) {
            return sprintf("text:\r\n%s\r\n.\r\n", self::escape_multiline_string($str));
        }
        // quoted-string
        else {
            return '"' . addcslashes($str, '\\"') . '"';
        }
    }

    /**
     * Escape special chars in multi-line string value
     *
     * @param string $str Text
     *
     * @return string Text
     */
    static function escape_multiline_string($str)
    {
        $str = preg_split('/(\r?\n)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);

        foreach ($str as $idx => $line) {
            // dot-stuffing
            if (isset($line[0]) && $line[0] == '.') {
                $str[$idx] = '.' . $line;
            }
        }

        return implode($str);
    }

    /**
     * Splits script into string tokens
     *
     * @param string $str       The script
     * @param mixed  $num       Number of tokens to return, 0 for all
     *                          or True for all tokens until separator is found.
     *                          Separator will be returned as last token.
     * @param int    &$position Parsing start position
     *
     * @return mixed Tokens array or string if $num=1
     */
    static function tokenize($str, $num = 0, &$position = 0)
    {
        $result = [];
        $length = strlen($str);

        // remove spaces from the beginning of the string
        while ($position < $length && (!$num || $num === true || count($result) < $num)) {
            // skip whitespace chars
            $position = self::ltrim_position($str, $position);

            switch ($str[$position]) {

            // Quoted string
            case '"':
                for ($pos = $position + 1; $pos < $length; $pos++) {
                    if ($str[$pos] == '"') {
                        break;
                    }
                    if ($str[$pos] == "\\") {
                        if ($str[$pos + 1] == '"' || $str[$pos + 1] == "\\") {
                            $pos++;
                        }
                    }
                }
                if ($str[$pos] != '"') {
                    // error
                }

                // we need to strip slashes for a quoted string
                $result[] = stripslashes(substr($str, $position + 1, $pos - $position - 1));
                $position = $pos + 1;
                break;

            // Parenthesized list
            case '[':
                $position++;
                $result[] = self::tokenize($str, 0, $position);
                break;
            case ']':
                $position++;
                return $result;
                break;

            // list/test separator
            case ',':
            // command separator
            case ';':
            // block/tests-list
            case '(':
            case ')':
            case '{':
            case '}':
                $sep = $str[$position];
                $position++;
                if ($num === true) {
                    $result[] = $sep;
                    break 2;
                }
                break;

            // bracket-comment
            case '/':
                if ($str[$position + 1] == '*') {
                    if ($end_pos = strpos($str, '*/', $position + 2)) {
                        $position = $end_pos + 2;
                    }
                    else {
                        // error
                        $position = $length;
                    }
                }
                break;

            // hash-comment
            case '#':
                if ($lf_pos = strpos($str, "\n", $position)) {
                    $position = $lf_pos + 1;
                    break;
                }
                else {
                    $position = $length;
                }

            // String atom
            default:
                // empty or one character
                if ($position == $length) {
                    break 2;
                }
                if ($length - $position < 2) {
                    $result[] = substr($str, $position);
                    $position = $length;
                    break;
                }

                // tag/identifier/number
                if (preg_match('/[a-zA-Z0-9:_]+/', $str, $m, PREG_OFFSET_CAPTURE, $position)
                    && $m[0][1] == $position
                ) {
                    $atom      = $m[0][0];
                    $position += strlen($atom);

                    if ($atom != 'text:') {
                        $result[] = $atom;
                    }
                    // multiline string
                    else {
                        // skip whitespace chars (except \r\n)
                        $position = self::ltrim_position($str, $position, false);

                        // possible hash-comment after "text:"
                        if ($str[$position] === '#') {
                            $endl     = strpos($str, "\n", $position);
                            $position = $endl ?: $length;
                        }

                        // skip \n or \r\n
                        if ($str[$position] == "\n") {
                            $position++;
                        }
                        else if ($str[$position] == "\r" && $str[$position + 1] == "\n") {
                            $position += 2;
                        }

                        $text = '';

                        // get text until alone dot in a line
                        while ($position < $length) {
                            $pos = strpos($str, "\n.", $position);
                            if ($pos === false) {
                                break;
                            }

                            $text    .= substr($str, $position, $pos - $position);
                            $position = $pos + 2;

                            if ($str[$position] == "\n") {
                                break;
                            }

                            if ($str[$position] == "\r" && $str[$position + 1] == "\n") {
                                $position++;
                                break;
                            }

                            $text .= "\n.";
                        }

                        // remove dot-stuffing
                        $text = str_replace("\n..", "\n.", $text);

                        $result[] = rtrim($text, "\r\n");
                        $position++;
                    }
                }
                // fallback, skip one character as infinite loop prevention
                else {
                    $position++;
                }

                break;
            }
        }

        return $num === 1 ? ($result[0] ?? null) : $result;
    }

    /**
     * Skip whitespace characters in a string from specified position.
     */
    static function ltrim_position($content, $position, $br = true)
    {
        $blanks = ["\t", "\0", "\x0B", " "];

        if ($br) {
            $blanks[] = "\r";
            $blanks[] = "\n";
        }

        while (isset($content[$position]) && isset($content[$position + 1])
            && in_array($content[$position], $blanks, true)
        ) {
            $position++;
        }

        return $position;
    }
}
PK|c�\xN�%�h�h0managesieve/lib/Roundcube/rcube_sieve_engine.phpnu�[���<?php

/**
 * Managesieve (Sieve Filters) Engine
 *
 * Engine part of Managesieve plugin implementing UI and backend access.
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_sieve_engine
{
    protected $rc;
    protected $sieve;
    protected $plugin;
    protected $errors;
    protected $form;
    protected $list;
    protected $tips    = [];
    protected $script  = [];
    protected $exts    = [];
    protected $active  = [];
    protected $headers = [];
    protected $disabled_actions = [];
    protected $addr_headers = [
        // Required
        "from", "to", "cc", "bcc", "sender", "resent-from", "resent-to",
        // Additional (RFC 822 / RFC 2822)
        "reply-to", "resent-reply-to", "resent-sender", "resent-cc", "resent-bcc",
        // Non-standard (RFC 2076, draft-palme-mailext-headers-08.txt)
        "for-approval", "for-handling", "for-comment", "apparently-to", "errors-to",
        "delivered-to", "return-receipt-to", "x-admin", "read-receipt-to",
        "x-confirm-reading-to", "return-receipt-requested",
        "registered-mail-reply-requested-by", "mail-followup-to", "mail-reply-to",
        "abuse-reports-to", "x-complaints-to", "x-report-abuse-to",
        // Undocumented
        "x-beenthere",
    ];
    protected $notify_methods = [
        'mailto',
        // 'sms',
        // 'tel',
    ];
    protected $notify_importance_options = [
        3 => 'notifyimportancelow',
        2 => 'notifyimportancenormal',
        1 => 'notifyimportancehigh'
    ];

    const VERSION  = '9.4';
    const PROGNAME = 'Roundcube (Managesieve)';
    const PORT     = 4190;


    /**
     * Class constructor
     */
    function __construct($plugin)
    {
        $this->rc      = rcube::get_instance();
        $this->plugin  = $plugin;
        $this->headers = $this->get_default_headers();
    }

    /**
     * Loads configuration, initializes plugin (including sieve connection)
     */
    function start($mode = null)
    {
        // register UI objects
        $this->rc->output->add_handlers([
                'filterslist'      => [$this, 'filters_list'],
                'filtersetslist'   => [$this, 'filtersets_list'],
                'filterform'       => [$this, 'filter_form'],
                'filtersetform'    => [$this, 'filterset_form'],
                'filterseteditraw' => [$this, 'filterset_editraw'],
        ]);

        $this->disabled_actions = (array) $this->rc->config->get('managesieve_disabled_actions');

        // connect to managesieve server
        $error = $this->connect($_SESSION['username'], $this->rc->decrypt($_SESSION['password']));

        $script_name = null;

        // load current/active script
        if (!$error) {
            // Get list of scripts
            $list = $this->list_scripts();

            // reset current script when entering filters UI (#1489412)
            if ($this->rc->action == 'plugin.managesieve') {
                $this->rc->session->remove('managesieve_current');
            }

            if ($mode != 'vacation' && $mode != 'forward') {
                if (!empty($_GET['_set']) || !empty($_POST['_set'])) {
                    $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_GPC, true);
                }
                else if (!empty($_SESSION['managesieve_current'])) {
                    $script_name = $_SESSION['managesieve_current'];
                }
            }

            $error = $this->load_script($script_name);
        }

        // finally set script objects
        if ($error) {
            switch ($error) {
                case rcube_sieve::ERROR_CONNECTION:
                case rcube_sieve::ERROR_LOGIN:
                    $this->rc->output->show_message('managesieve.filterconnerror', 'error');
                    break;

                default:
                    $this->rc->output->show_message('managesieve.filterunknownerror', 'error');
                    break;
            }

            // reload interface in case of possible error when specified script wasn't found (#1489412)
            if ($script_name !== null && !empty($list) && !in_array($script_name, $list)) {
                $this->rc->output->command('reload', 500);
            }

            // to disable 'Add filter' button set env variable
            $this->rc->output->set_env('filterconnerror', true);
            $this->script = [];
        }
        else {
            $this->exts = $this->sieve->get_extensions();
            $this->init_script();
            $this->rc->output->set_env('currentset', $this->sieve->current);
            $_SESSION['managesieve_current'] = $this->sieve->current;
        }

        $this->rc->output->set_env('raw_sieve_editor', $this->rc->config->get('managesieve_raw_editor', true));
        $this->rc->output->set_env('managesieve_disabled_actions', $this->disabled_actions);
        $this->rc->output->set_env('managesieve_no_set_list', in_array('list_sets', $this->disabled_actions));

        return $error;
    }

    /**
     * Connect to configured managesieve server
     *
     * @param string $username User login
     * @param string $password User password
     *
     * @return int Connection status: 0 on success, >0 on failure
     */
    public function connect($username, $password)
    {
        $host = $this->rc->config->get('managesieve_host', 'localhost');
        $host = rcube_utils::parse_host($host);

        $plugin = $this->rc->plugins->exec_hook('managesieve_connect', [
                'user'           => $username,
                'password'       => $password,
                'host'           => $host,
                'auth_type'      => $this->rc->config->get('managesieve_auth_type'),
                'disabled'       => $this->rc->config->get('managesieve_disabled_extensions'),
                'debug'          => $this->rc->config->get('managesieve_debug', false),
                'auth_cid'       => $this->rc->config->get('managesieve_auth_cid'),
                'auth_pw'        => $this->rc->config->get('managesieve_auth_pw'),
                'socket_options' => $this->rc->config->get('managesieve_conn_options'),
                'gssapi_context' => null,
                'gssapi_cn'      => null,
        ]);

        list($host, $scheme, $port) = rcube_utils::parse_host_uri($plugin['host']);

        // Support explicit STARTTLS by establishing an unencrypted TCP connection, then instructing Net_Sieve to send the `STARTTLS` command.
        $tls = $scheme === 'tls';

        // Support implicit SSL by passing the URI scheme through to Net_Sieve -> Net_Socket -> stream_socket_client().
        if ($scheme === 'ssl') {
            $host = 'ssl://' . $host;
        }

        if (empty($port)) {
            $port = getservbyname('sieve', 'tcp') ?: self::PORT;
        }

        $host = rcube_utils::idn_to_ascii($host);

        // Handle per-host socket options
        rcube_utils::parse_socket_options($plugin['socket_options'], $host);

        // try to connect to managesieve server and to fetch the script
        $this->sieve = new rcube_sieve(
            $plugin['user'],
            $plugin['password'],
            $host,
            $port,
            $plugin['auth_type'],
            $tls,
            $plugin['disabled'],
            $plugin['debug'],
            $plugin['auth_cid'],
            $plugin['auth_pw'],
            $plugin['socket_options'],
            $plugin['gssapi_context'],
            $plugin['gssapi_cn']
        );

        $error = $this->sieve->error();

        if ($error) {
            rcube::raise_error([
                    'code'    => 403,
                    'file'    => __FILE__,
                    'line'    => __LINE__,
                    'message' => "Unable to connect to managesieve on $host:$port"
                ], true, false
            );
        }

        return $error;
    }

    /**
     * Load specified (or active) script
     *
     * @param string $script_name Optional script name
     *
     * @return int Connection status: 0 on success, >0 on failure
     */
    protected function load_script($script_name = null)
    {
        // Get list of scripts
        $list = $this->list_scripts();

        if ($script_name === null || $script_name === '') {
            // get (first) active script
            if (!empty($this->active)) {
               $script_name = $this->active[0];
            }
            else if ($list) {
                $script_name = $list[0];
            }
            else {
                // if script does not exist create one with default content
                $this->create_default_script();
            }
        }

        if ($script_name) {
            $this->sieve->load($script_name);
        }

        return $this->sieve->error();
    }

    /**
     * User interface actions handler
     */
    function actions()
    {
        $error = $this->start();

        // Handle user requests
        if ($action = rcube_utils::get_input_string('_act', rcube_utils::INPUT_GPC)) {
            $fid = (int) rcube_utils::get_input_value('_fid', rcube_utils::INPUT_POST);

            if ($action == 'delete' && !$error) {
                if (!in_array('delete_filter', $this->disabled_actions)) {
                    if (isset($this->script[$fid])) {
                        $result = false;
                        if ($this->sieve->script->delete_rule($fid)) {
                            $result = $this->save_script();
                        }

                        if ($result === true) {
                            $this->rc->output->show_message('managesieve.filterdeleted', 'confirmation');
                            $this->rc->output->command('managesieve_updatelist', 'del', ['id' => $fid]);
                        }
                        else {
                            $this->rc->output->show_message('managesieve.filterdeleteerror', 'error');
                        }
                    }
                }
                else {
                    $this->rc->output->show_message('managesieve.disabledaction', 'error');
                }
            }
            else if ($action == 'move' && !$error) {
                if (isset($this->script[$fid])) {
                    $to   = (int) rcube_utils::get_input_value('_to', rcube_utils::INPUT_POST);
                    $rule = $this->script[$fid];

                    // remove rule
                    unset($this->script[$fid]);
                    $this->script = array_values($this->script);

                    // add at target position
                    if ($to >= count($this->script)) {
                        $this->script[] = $rule;
                    }
                    else {
                        $script = [];
                        foreach ($this->script as $idx => $r) {
                            if ($idx == $to) {
                                $script[] = $rule;
                            }
                            $script[] = $r;
                        }
                        $this->script = $script;
                    }

                    $this->sieve->script->content = $this->script;
                    $result = $this->save_script();

                    if ($result === true) {
                        $result = $this->list_rules();

                        $this->rc->output->show_message('managesieve.moved', 'confirmation');
                        $this->rc->output->command('managesieve_updatelist', 'list',
                            ['list' => $result, 'clear' => true, 'set' => $to]);
                    }
                    else {
                        $this->rc->output->show_message('managesieve.moveerror', 'error');
                    }
                }
            }
            else if ($action == 'act' && !$error) {
                if (isset($this->script[$fid])) {
                    $rule     = $this->script[$fid];
                    $disabled = !empty($rule['disabled']);
                    $rule['disabled'] = !$disabled;
                    $result = $this->sieve->script->update_rule($fid, $rule);

                    if ($result !== false) {
                        $result = $this->save_script();
                    }

                    if ($result === true) {
                        if ($rule['disabled']) {
                            $this->rc->output->show_message('managesieve.deactivated', 'confirmation');
                        }
                        else {
                            $this->rc->output->show_message('managesieve.activated', 'confirmation');
                        }
                        $this->rc->output->command('managesieve_updatelist', 'update',
                            ['id' => $fid, 'disabled' => $rule['disabled']]);
                    }
                    else {
                        if ($rule['disabled']) {
                            $this->rc->output->show_message('managesieve.deactivateerror', 'error');
                        }
                        else {
                            $this->rc->output->show_message('managesieve.activateerror', 'error');
                        }
                    }
                }
            }
            else if ($action == 'setact' && !$error) {
                if (!in_array('enable_disable_set', $this->disabled_actions)) {
                    $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_POST, true);
                    $result      = $this->activate_script($script_name);
                    $kep14       = $this->rc->config->get('managesieve_kolab_master');

                    if ($result === true) {
                        $this->rc->output->set_env('active_sets', $this->active);
                        $this->rc->output->show_message('managesieve.setactivated', 'confirmation');
                        $this->rc->output->command('managesieve_updatelist', 'setact',
                            ['name' => $script_name, 'active' => true, 'all' => !$kep14]);
                    }
                    else {
                        $this->rc->output->show_message('managesieve.setactivateerror', 'error');
                    }
                }
                else {
                    $this->rc->output->show_message('managesieve.disabledaction', 'error');
                }
            }
            else if ($action == 'deact' && !$error) {
                if (!in_array('enable_disable_set', $this->disabled_actions)) {
                    $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_POST, true);
                    $result      = $this->deactivate_script($script_name);

                    if ($result === true) {
                        $this->rc->output->set_env('active_sets', $this->active);
                        $this->rc->output->show_message('managesieve.setdeactivated', 'confirmation');
                        $this->rc->output->command('managesieve_updatelist', 'setact',
                            ['name' => $script_name, 'active' => false]);
                    }
                    else {
                        $this->rc->output->show_message('managesieve.setdeactivateerror', 'error');
                    }
                }
                else {
                    $this->rc->output->show_message('managesieve.disabledaction', 'error');
                }
            }
            else if ($action == 'setdel' && !$error) {
                if (!in_array('delete_set', $this->disabled_actions)) {
                    $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_POST, true);
                    $result      = $this->remove_script($script_name);

                    if ($result === true) {
                        $this->rc->output->show_message('managesieve.setdeleted', 'confirmation');
                        $this->rc->output->command('managesieve_updatelist', 'setdel', ['name' => $script_name]);
                        $this->rc->session->remove('managesieve_current');
                    }
                    else {
                        $this->rc->output->show_message('managesieve.setdeleteerror', 'error');
                    }
                }
                else {
                    $this->rc->output->show_message('managesieve.disabledaction', 'error');
                }
            }
            else if ($action == 'setget') {
                if (!in_array('download_set', $this->disabled_actions)) {
                    $this->rc->request_security_check(rcube_utils::INPUT_GET);

                    $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_GPC, true);
                    $script      = $this->sieve->get_script($script_name);

                    if ($script !== false) {
                        $this->rc->output->download_headers($script_name . '.txt', ['length' => strlen($script)]);
                        echo $script;
                    }

                    exit;
                }
            }
            else if ($action == 'list') {
                $result = $this->list_rules();

                $this->rc->output->command('managesieve_updatelist', 'list', ['list' => $result]);
            }
            else if ($action == 'ruleadd') {
                $rid = rcube_utils::get_input_string('_rid', rcube_utils::INPUT_POST);
                $id  = $this->genid();
                $content = $this->rule_div($fid, $id, false, !empty($_SESSION['managesieve-compact-form']));

                $this->rc->output->command('managesieve_rulefill', $content, $id, $rid);
            }
            else if ($action == 'actionadd') {
                $aid = rcube_utils::get_input_string('_aid', rcube_utils::INPUT_POST);
                $id  = $this->genid();
                $content = $this->action_div($fid, $id, false);

                $this->rc->output->command('managesieve_actionfill', $content, $id, $aid);
            }
            else if ($action == 'addresses') {
                $aid = rcube_utils::get_input_string('_aid', rcube_utils::INPUT_POST);

                $this->rc->output->command('managesieve_vacation_addresses_update', $aid, $this->user_emails());
            }

            $this->rc->output->send();
        }
        else if ($this->rc->task == 'mail') {
            // Initialize the form
            $rules = rcube_utils::get_input_value('r', rcube_utils::INPUT_GET);
            if (!empty($rules)) {
                $tests = [];
                foreach ($rules as $rule) {
                    list($header, $value) = explode(':', $rule, 2);
                    $tests[] = [
                        'type' => 'contains',
                        'test' => 'header',
                        'arg1' => $header,
                        'arg2' => $value,
                    ];
                }

                $this->form = [
                    'join'  => count($tests) > 1 ? 'allof' : 'anyof',
                    'name'  => '',
                    'tests' => $tests,
                    'actions' => [
                        ['type' => 'fileinto'],
                        ['type' => 'stop'],
                    ],
                ];
            }
        }

        $this->send();
    }

    function saveraw()
    {
        // Init plugin and handle managesieve connection
        $error = $this->start();

        $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_POST);

        $result = $this->sieve->save_script($script_name, $_POST['rawsetcontent']);

        if ($result === false) {
            $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
            $errorLines = $this->sieve->get_error_lines();
            if (count($errorLines) > 0) {
                $this->rc->output->set_env("sieve_errors", $errorLines);
            }
        }
        else {
            $this->rc->output->show_message('managesieve.setupdated', 'confirmation');
            $this->rc->output->command('parent.managesieve_updatelist', 'refresh');
        }

        $this->send();
    }

    function save()
    {
        // Init plugin and handle managesieve connection
        $error = $this->start();

        // get request size limits (#1488648)
        $max_post = max([
                ini_get('max_input_vars'),
                ini_get('suhosin.request.max_vars'),
                ini_get('suhosin.post.max_vars'),
        ]);
        $max_depth = max([
                ini_get('suhosin.request.max_array_depth'),
                ini_get('suhosin.post.max_array_depth'),
        ]);

        // check request size limit
        if ($max_post && count($_POST, COUNT_RECURSIVE) >= $max_post) {
            rcube::raise_error([
                    'code' => 500, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Request size limit exceeded (one of max_input_vars/suhosin.request.max_vars/suhosin.post.max_vars)"
                ], true, false
            );
            $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
        }
        // check request depth limits
        else if ($max_depth && count($_POST['_header']) > $max_depth) {
            rcube::raise_error([
                    'code' => 500, 'file' => __FILE__, 'line' => __LINE__,
                    'message' => "Request size limit exceeded (one of suhosin.request.max_array_depth/suhosin.post.max_array_depth)"
                ], true, false
            );
            $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
        }
        // filters set add action
        else if (!empty($_POST['_newset'])) {
            $name       = rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST, true);
            $copy       = rcube_utils::get_input_string('_copy', rcube_utils::INPUT_POST, true);
            $from       = rcube_utils::get_input_string('_from', rcube_utils::INPUT_POST);
            $exceptions = $this->rc->config->get('managesieve_filename_exceptions');
            $kolab      = $this->rc->config->get('managesieve_kolab_master');
            $name_uc    = mb_strtolower($name);
            $list       = $this->list_scripts();

            if (in_array('new_set', $this->disabled_actions)) {
                $error = 'managesieve.disabledaction';
            }
            else if (!$name) {
                $this->errors['name'] = $this->plugin->gettext('cannotbeempty');
            }
            else if (mb_strlen($name) > 128) {
                $this->errors['name'] = $this->plugin->gettext('nametoolong');
            }
            else if (!empty($exceptions) && in_array($name, (array)$exceptions)) {
                $this->errors['name'] = $this->plugin->gettext('namereserved');
            }
            else if (!empty($kolab) && in_array($name_uc, ['MASTER', 'USER', 'MANAGEMENT'])) {
                $this->errors['name'] = $this->plugin->gettext('namereserved');
            }
            else if (in_array($name, $list)) {
                $this->errors['name'] = $this->plugin->gettext('setexist');
            }
            else if ($from == 'file') {
                // from file
                if (is_uploaded_file($_FILES['_file']['tmp_name'])) {
                    $file = file_get_contents($_FILES['_file']['tmp_name']);
                    $file = preg_replace('/\r/', '', $file);
                    // for security don't save script directly
                    // check syntax before, like this...
                    $this->sieve->load_script($file);
                    if (!$this->save_script($name)) {
                        $this->errors['file'] = $this->plugin->gettext('setcreateerror');
                    }
                }
                else {
                    // upload failed
                    rcmail_action::upload_error($_FILES['_file']['error']);
                }
            }
            else if (!$this->sieve->copy($name, $from == 'set' ? $copy : '')) {
                $error = 'managesieve.setcreateerror';
            }

            if (!$error && empty($this->errors)) {
                // Find position of the new script on the list
                $list[] = $name;
                asort($list, SORT_LOCALE_STRING);
                $list  = array_values($list);
                $index = array_search($name, $list);

                $this->rc->output->show_message('managesieve.setcreated', 'confirmation');
                $this->rc->output->command('parent.managesieve_updatelist', 'setadd',
                    ['name' => $name, 'index' => $index]);
            }
            else if (!empty($msg)) {
                $this->rc->output->command('display_message', $msg, 'error');
            }
            else if ($error) {
                $this->rc->output->show_message($error, 'error');
            }
        }
        // filter add/edit action
        else if (isset($_POST['_name'])) {
            $name = trim(rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST, true));
            $fid  = trim(rcube_utils::get_input_string('_fid', rcube_utils::INPUT_POST));
            $join = trim(rcube_utils::get_input_string('_join', rcube_utils::INPUT_POST));

            // and arrays
            $headers        = rcube_utils::get_input_value('_header', rcube_utils::INPUT_POST);
            $cust_headers   = rcube_utils::get_input_value('_custom_header', rcube_utils::INPUT_POST);
            $cust_vars      = rcube_utils::get_input_value('_custom_var', rcube_utils::INPUT_POST);
            $ops            = rcube_utils::get_input_value('_rule_op', rcube_utils::INPUT_POST);
            $sizeops        = rcube_utils::get_input_value('_rule_size_op', rcube_utils::INPUT_POST);
            $sizeitems      = rcube_utils::get_input_value('_rule_size_item', rcube_utils::INPUT_POST);
            $sizetargets    = rcube_utils::get_input_value('_rule_size_target', rcube_utils::INPUT_POST);
            $spamtestops    = rcube_utils::get_input_value('_rule_spamtest_op', rcube_utils::INPUT_POST);
            $spamtesttargets = rcube_utils::get_input_value('_rule_spamtest_target', rcube_utils::INPUT_POST);
            $targets        = rcube_utils::get_input_value('_rule_target', rcube_utils::INPUT_POST, true);
            $mods           = rcube_utils::get_input_value('_rule_mod', rcube_utils::INPUT_POST);
            $mod_types      = rcube_utils::get_input_value('_rule_mod_type', rcube_utils::INPUT_POST);
            $body_trans     = rcube_utils::get_input_value('_rule_trans', rcube_utils::INPUT_POST);
            $body_types     = rcube_utils::get_input_value('_rule_trans_type', rcube_utils::INPUT_POST, true);
            $comparators    = rcube_utils::get_input_value('_rule_comp', rcube_utils::INPUT_POST);
            $indexes        = rcube_utils::get_input_value('_rule_index', rcube_utils::INPUT_POST);
            $lastindexes    = rcube_utils::get_input_value('_rule_index_last', rcube_utils::INPUT_POST);
            $dateheaders    = rcube_utils::get_input_value('_rule_date_header', rcube_utils::INPUT_POST);
            $dateparts      = rcube_utils::get_input_value('_rule_date_part', rcube_utils::INPUT_POST);
            $mime_parts     = rcube_utils::get_input_value('_rule_mime_part', rcube_utils::INPUT_POST);
            $mime_types     = rcube_utils::get_input_value('_rule_mime_type', rcube_utils::INPUT_POST);
            $mime_params    = rcube_utils::get_input_value('_rule_mime_param', rcube_utils::INPUT_POST, true);
            $message        = rcube_utils::get_input_value('_rule_message', rcube_utils::INPUT_POST);
            $dup_handles    = rcube_utils::get_input_value('_rule_duplicate_handle', rcube_utils::INPUT_POST, true);
            $dup_headers    = rcube_utils::get_input_value('_rule_duplicate_header', rcube_utils::INPUT_POST, true);
            $dup_uniqueids  = rcube_utils::get_input_value('_rule_duplicate_uniqueid', rcube_utils::INPUT_POST, true);
            $dup_seconds    = rcube_utils::get_input_value('_rule_duplicate_seconds', rcube_utils::INPUT_POST);
            $dup_lasts      = rcube_utils::get_input_value('_rule_duplicate_last', rcube_utils::INPUT_POST);
            $act_types      = rcube_utils::get_input_value('_action_type', rcube_utils::INPUT_POST, true);
            $mailboxes      = rcube_utils::get_input_value('_action_mailbox', rcube_utils::INPUT_POST, true);
            $act_targets    = rcube_utils::get_input_value('_action_target', rcube_utils::INPUT_POST, true);
            $domain_targets = rcube_utils::get_input_value('_action_target_domain', rcube_utils::INPUT_POST);
            $area_targets   = rcube_utils::get_input_value('_action_target_area', rcube_utils::INPUT_POST, true);
            $reasons        = rcube_utils::get_input_value('_action_reason', rcube_utils::INPUT_POST, true);
            $addresses      = rcube_utils::get_input_value('_action_addresses', rcube_utils::INPUT_POST, true);
            $intervals      = rcube_utils::get_input_value('_action_interval', rcube_utils::INPUT_POST);
            $interval_types = rcube_utils::get_input_value('_action_interval_type', rcube_utils::INPUT_POST);
            $from           = rcube_utils::get_input_value('_action_from', rcube_utils::INPUT_POST, true);
            $subject        = rcube_utils::get_input_value('_action_subject', rcube_utils::INPUT_POST, true);
            $flags          = rcube_utils::get_input_value('_action_flags', rcube_utils::INPUT_POST);
            $varnames       = rcube_utils::get_input_value('_action_varname', rcube_utils::INPUT_POST);
            $varvalues      = rcube_utils::get_input_value('_action_varvalue', rcube_utils::INPUT_POST);
            $varmods        = rcube_utils::get_input_value('_action_varmods', rcube_utils::INPUT_POST);
            $notifymethods  = rcube_utils::get_input_value('_action_notifymethod', rcube_utils::INPUT_POST);
            $notifytargets  = rcube_utils::get_input_value('_action_notifytarget', rcube_utils::INPUT_POST, true);
            $notifyoptions  = rcube_utils::get_input_value('_action_notifyoption', rcube_utils::INPUT_POST, true);
            $notifymessages = rcube_utils::get_input_value('_action_notifymessage', rcube_utils::INPUT_POST, true);
            $notifyfrom     = rcube_utils::get_input_value('_action_notifyfrom', rcube_utils::INPUT_POST, true);
            $notifyimp      = rcube_utils::get_input_value('_action_notifyimportance', rcube_utils::INPUT_POST);
            $addheader_name  = rcube_utils::get_input_value('_action_addheader_name', rcube_utils::INPUT_POST);
            $addheader_value = rcube_utils::get_input_value('_action_addheader_value', rcube_utils::INPUT_POST, true);
            $addheader_pos   = rcube_utils::get_input_value('_action_addheader_pos', rcube_utils::INPUT_POST);
            $delheader_name  = rcube_utils::get_input_value('_action_delheader_name', rcube_utils::INPUT_POST);
            $delheader_value = rcube_utils::get_input_value('_action_delheader_value', rcube_utils::INPUT_POST, true);
            $delheader_pos   = rcube_utils::get_input_value('_action_delheader_pos', rcube_utils::INPUT_POST);
            $delheader_index = rcube_utils::get_input_value('_action_delheader_index', rcube_utils::INPUT_POST);
            $delheader_op    = rcube_utils::get_input_value('_action_delheader_op', rcube_utils::INPUT_POST);
            $delheader_comp  = rcube_utils::get_input_value('_action_delheader_comp', rcube_utils::INPUT_POST);

            $this->form['disabled'] = empty($_POST['_enabled']);
            $this->form['join']     = $join == 'allof';
            $this->form['name']     = $name;
            $this->form['tests']    = [];
            $this->form['actions']  = [];

            if ($name == '') {
                $this->errors['name'] = $this->plugin->gettext('cannotbeempty');
            }
            else {
                foreach ($this->script as $idx => $rule)
                    if ($rule['name'] == $name && $idx != $fid) {
                        $this->errors['name'] = $this->plugin->gettext('ruleexist');
                        break;
                    }
            }

            $i = 0;
            // rules
            if ($join == 'any') {
                $this->form['tests'][0]['test'] = 'true';
            }
            else {
                foreach ($headers as $idx => $header) {
                    // targets are indexed differently (assume form order)
                    $target     = $this->strip_value($targets[$idx], true);
                    $header     = $this->strip_value($header);
                    $operator   = $this->strip_value($ops[$idx]);
                    $comparator = $this->strip_value($comparators[$idx]);

                    if ($header == 'size') {
                        $sizeop     = $this->strip_value($sizeops[$idx]);
                        $sizeitem   = $this->strip_value($sizeitems[$idx]);
                        $sizetarget = $this->strip_value($sizetargets[$idx]);

                        $this->form['tests'][$i]['test'] = 'size';
                        $this->form['tests'][$i]['type'] = $sizeop;
                        $this->form['tests'][$i]['arg']  = $sizetarget;

                        if ($sizetarget === '') {
                            $this->errors['tests'][$i]['sizetarget'] = $this->plugin->gettext('cannotbeempty');
                        }
                        else if (!preg_match('/^[0-9]+(K|M|G)?$/i', $sizetarget.$sizeitem, $m)) {
                            $this->errors['tests'][$i]['sizetarget'] = $this->plugin->gettext('forbiddenchars');
                            $this->form['tests'][$i]['item'] = $sizeitem;
                        }
                        else {
                            $this->form['tests'][$i]['arg'] .= $m[1];
                        }
                    }
                    else if ($header == 'spamtest') {
                        $spamtestop     = $this->strip_value($spamtestops[$idx]);
                        $spamtesttarget = $this->strip_value($spamtesttargets[$idx]);
                        $comparator     = 'i;ascii-numeric';

                        if (!$spamtestop) {
                            $spamtestop     = 'value-eq';
                            $spamtesttarget = '0';
                        }

                        $this->form['tests'][$i]['test'] = 'spamtest';
                        $this->form['tests'][$i]['type'] = $spamtestop;
                        $this->form['tests'][$i]['arg']  = $spamtesttarget;

                        if ($spamtesttarget === '') {
                            $this->errors['tests'][$i]['spamtesttarget'] = $this->plugin->gettext('cannotbeempty');
                        }
                        else if (!preg_match('/^([0-9]|10)$/i', $spamtesttarget)) {
                            $this->errors['tests'][$i]['spamtesttarget'] = $this->plugin->gettext('forbiddenchars');
                        }
                    }
                    else if ($header == 'currentdate') {
                        $datepart = $this->strip_value($dateparts[$idx]);
                        $type     = preg_replace('/^not/', '', $operator);

                        $this->form['tests'][$i]['test'] = 'currentdate';
                        $this->form['tests'][$i]['type'] = $type;
                        $this->form['tests'][$i]['part'] = $datepart;
                        $this->form['tests'][$i]['arg']  = $target;
                        $this->form['tests'][$i]['not']  = preg_match('/^not/', $operator) === 1;

                        if ($type == 'exists') {
                            $this->errors['tests'][$i]['op'] = true;
                        }

                        if ($type != 'exists') {
                            if (empty($target)) {
                                $this->errors['tests'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
                            }
                            else if (strpos($type, 'count-') === 0) {
                                foreach ($target as $arg) {
                                    if (preg_match('/[^0-9]/', $arg)) {
                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('forbiddenchars');
                                    }
                                }
                            }
                            else if (strpos($type, 'value-') === 0) {
                                // Some date/time formats do not support i;ascii-numeric comparator
                                if ($comparator == 'i;ascii-numeric' && in_array($datepart, ['date', 'time', 'iso8601', 'std11'])) {
                                    $comparator = '';
                                }
                            }

                            if (!preg_match('/^(regex|matches|count-)/', $type) && !empty($target)) {
                                foreach ($target as $arg) {
                                    if (!$this->validate_date_part($datepart, $arg)) {
                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('invaliddateformat');
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    else if ($header == 'date') {
                        $datepart    = $this->strip_value($dateparts[$idx]);
                        $dateheader  = $this->strip_value($dateheaders[$idx]);
                        $index       = $this->strip_value($indexes[$idx]);
                        $indexlast   = $this->strip_value(isset($lastindexes[$idx]) ? $lastindexes[$idx] : null);
                        $mod         = $this->strip_value($mods[$idx]);

                        $type = preg_replace('/^not/', '', $operator);

                        if ($type == 'exists') {
                            $this->errors['tests'][$i]['op'] = true;
                        }

                        if (!empty($index) && $mod != 'envelope') {
                            $this->form['tests'][$i]['index'] = intval($index);
                            $this->form['tests'][$i]['last']  = !empty($indexlast);
                        }

                        if (empty($dateheader)) {
                            $dateheader = 'Date';
                        }
                        else if (!preg_match('/^[\x21-\x39\x41-\x7E]+$/i', $dateheader)) {
                            $this->errors['tests'][$i]['dateheader'] = $this->plugin->gettext('forbiddenchars');
                        }

                        $this->form['tests'][$i]['test']   = 'date';
                        $this->form['tests'][$i]['type']   = $type;
                        $this->form['tests'][$i]['part']   = $datepart;
                        $this->form['tests'][$i]['arg']    = $target;
                        $this->form['tests'][$i]['header'] = $dateheader;
                        $this->form['tests'][$i]['not']    = preg_match('/^not/', $operator) === 1;

                        if ($type != 'exists') {
                            if (empty($target)) {
                                $this->errors['tests'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
                            }
                            else if (strpos($type, 'count-') === 0) {
                                foreach ($target as $arg) {
                                    if (preg_match('/[^0-9]/', $arg)) {
                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('forbiddenchars');
                                    }
                                }
                            }
                            else if (strpos($type, 'value-') === 0) {
                                // Some date/time formats do not support i;ascii-numeric comparator
                                if ($comparator == 'i;ascii-numeric' && in_array($datepart, ['date', 'time', 'iso8601', 'std11'])) {
                                    $comparator = '';
                                }
                            }

                            if (!empty($target) && !preg_match('/^(regex|matches|count-)/', $type)) {
                                foreach ($target as $arg) {
                                    if (!$this->validate_date_part($datepart, $arg)) {
                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('invaliddateformat');
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    else if ($header == 'body') {
                        $trans      = $this->strip_value($body_trans[$idx]);
                        $trans_type = $this->strip_value($body_types[$idx], true);
                        $type       = preg_replace('/^not/', '', $operator);

                        $this->form['tests'][$i]['test'] = 'body';
                        $this->form['tests'][$i]['type'] = $type;
                        $this->form['tests'][$i]['arg']  = $target;
                        $this->form['tests'][$i]['not']  = preg_match('/^not/', $operator) === 1;
                        $this->form['tests'][$i]['part'] = $trans;

                        if ($trans == 'content') {
                            $this->form['tests'][$i]['content'] = $trans_type;
                        }

                        if ($type == 'exists') {
                            $this->errors['tests'][$i]['op'] = true;
                        }

                        if (empty($target) && $type != 'exists') {
                            $this->errors['tests'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
                        }
                        else if (preg_match('/^(value|count)-/', $type)) {
                            foreach ($target as $target_value) {
                                if (preg_match('/[^0-9]/', $target_value)) {
                                    $this->errors['tests'][$i]['target'] = $this->plugin->gettext('forbiddenchars');
                                }
                            }
                        }
                    }
                    else if ($header == 'message') {
                        $test = $this->strip_value($message[$idx]);

                        if (preg_match('/^not/', $test)) {
                            $this->form['tests'][$i]['not'] = true;
                            $test = substr($test, 3);
                        }

                        $this->form['tests'][$i]['test'] = $test;

                        if ($test == 'duplicate') {
                            $this->form['tests'][$i]['last']     = !empty($dup_lasts[$idx]);
                            $this->form['tests'][$i]['handle']   = trim($dup_handles[$idx]);
                            $this->form['tests'][$i]['header']   = trim($dup_headers[$idx]);
                            $this->form['tests'][$i]['uniqueid'] = trim($dup_uniqueids[$idx]);
                            $this->form['tests'][$i]['seconds']  = trim($dup_seconds[$idx]);

                            if ($this->form['tests'][$i]['seconds']
                                && preg_match('/[^0-9]/', $this->form['tests'][$i]['seconds'])
                            ) {
                                $this->errors['tests'][$i]['duplicate_seconds'] = $this->plugin->gettext('forbiddenchars');
                            }

                            if ($this->form['tests'][$i]['header'] && $this->form['tests'][$i]['uniqueid']) {
                                $this->errors['tests'][$i]['duplicate_uniqueid'] = $this->plugin->gettext('duplicate.conflict.err');
                            }
                        }
                    }
                    else {
                        $cust_header = $headers = $this->strip_value($cust_headers[$idx]);
                        $mod         = $this->strip_value($mods[$idx]);
                        $mod_type    = $this->strip_value($mod_types[$idx]);
                        $index       = isset($indexes[$idx]) ? $this->strip_value($indexes[$idx]) : null;
                        $indexlast   = isset($lastindexes[$idx]) ? $this->strip_value($lastindexes[$idx]) : null;
                        $mime_param  = isset($mime_params[$idx]) ? $this->strip_value($mime_params[$idx]) : null;
                        $mime_type   = $mime_types[$idx] ?? null;
                        $mime_part   = $mime_parts[$idx] ?? null;
                        $cust_var    = null;

                        if ($header == 'string') {
                            $cust_var = $headers = $this->strip_value($cust_vars[$idx]);
                        }

                        $this->form['tests'][$i]['not'] = preg_match('/^not/', $operator) === 1;

                        $type = preg_replace('/^not/', '', $operator);

                        if (!empty($index) && $mod != 'envelope') {
                            $this->form['tests'][$i]['index'] = intval($index);
                            $this->form['tests'][$i]['last']  = !empty($indexlast);
                        }

                        if ($header == '...' || $header == 'string') {
                            if (!count($headers)) {
                                $this->errors['tests'][$i]['header'] = $this->plugin->gettext('cannotbeempty');
                            }
                            else if ($header == '...') {
                                foreach ($headers as $hr) {
                                    // RFC2822: printable ASCII except colon
                                    if (!preg_match('/^[\x21-\x39\x41-\x7E]+$/i', $hr)) {
                                        $this->errors['tests'][$i]['header'] = $this->plugin->gettext('forbiddenchars');
                                    }
                                }
                            }

                            if (empty($this->errors['tests'][$i]['header'])) {
                                $cust_header = $cust_var = (is_array($headers) && count($headers) == 1) ? $headers[0] : $headers;
                            }
                        }

                        $test   = $header == 'string' ? 'string' : 'header';
                        $header = $header == 'string' ? $cust_var : $header;
                        $header = $header == '...' ? $cust_header : $header;

                        if (is_array($header)) {
                            foreach ($header as $h_index => $val) {
                                if (isset($this->headers[$val])) {
                                    $header[$h_index] = $this->headers[$val];
                                }
                            }
                        }

                        if ($type == 'exists') {
                            $this->form['tests'][$i]['test'] = 'exists';
                            $this->form['tests'][$i]['arg'] = $header;
                        }
                        else {
                            if ($mod == 'address' || $mod == 'envelope') {
                                $found = false;
                                if (empty($this->errors['tests'][$i]['header'])) {
                                    foreach ((array)$header as $hdr) {
                                        if (!in_array(strtolower(trim($hdr)), $this->addr_headers)) {
                                            $found = true;
                                        }
                                    }
                                }
                                if (!$found) {
                                    $test = $mod;
                                }
                            }

                            $this->form['tests'][$i]['type'] = $type;
                            $this->form['tests'][$i]['test'] = $test;
                            $this->form['tests'][$i]['arg1'] = $header;
                            $this->form['tests'][$i]['arg2'] = $target;

                            if (empty($target)) {
                                $this->errors['tests'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
                            }
                            else if (preg_match('/^(value|count)-/', $type)) {
                                foreach ($target as $target_value) {
                                    if (preg_match('/[^0-9]/', $target_value)) {
                                        $this->errors['tests'][$i]['target'] = $this->plugin->gettext('forbiddenchars');
                                    }
                                }
                            }

                            if ($mod) {
                                $this->form['tests'][$i]['part'] = $mod_type;
                            }
                        }

                        if ($test == 'header') {
                            if (in_array($mime_type, ['type', 'subtype', 'contenttype', 'param'])) {
                                $this->form['tests'][$i]['mime-' . $mime_type] = true;
                                if ($mime_type == 'param') {
                                    if (empty($mime_param)) {
                                        $this->errors['tests'][$i]['mime-param'] = $this->plugin->gettext('cannotbeempty');
                                    }

                                    $this->form['tests'][$i]['mime-param'] = $mime_param;
                                }
                            }

                            if ($mime_part == 'anychild') {
                                $this->form['tests'][$i]['mime-anychild'] = true;
                            }
                        }
                    }

                    if ($header != 'size' && $comparator) {
                        $this->form['tests'][$i]['comparator'] = $comparator;
                    }

                    $i++;
                }
            }

            $i = 0;
            // actions
            foreach ($act_types as $idx => $type) {
                $type = $this->strip_value($type);

                switch ($type) {
                case 'fileinto':
                case 'fileinto_copy':
                    $mailbox = $this->strip_value($mailboxes[$idx], false, false);
                    $this->form['actions'][$i]['target'] = $this->mod_mailbox($mailbox, 'in');

                    if ($type == 'fileinto_copy') {
                        $type = 'fileinto';
                        $this->form['actions'][$i]['copy'] = true;
                    }
                    break;

                case 'reject':
                case 'ereject':
                    $target = $this->strip_value($area_targets[$idx]);
                    $this->form['actions'][$i]['target'] = str_replace("\r\n", "\n", $target);

 //                 if ($target == '')
//                      $this->errors['actions'][$i]['targetarea'] = $this->plugin->gettext('cannotbeempty');
                    break;

                case 'redirect':
                case 'redirect_copy':
                    $target = $this->strip_value($act_targets[$idx] ?? null);
                    $domain = $this->strip_value($domain_targets[$idx] ?? null);

                    // force one of the configured domains
                    $domains = (array) $this->rc->config->get('managesieve_domains');
                    if (!empty($domains) && !empty($target)) {
                        if (!$domain || !in_array($domain, $domains)) {
                            $domain = $domains[0];
                        }

                        $target .= '@' . $domain;
                    }

                    $this->form['actions'][$i]['target'] = $target;

                    if ($target === '') {
                        $this->errors['actions'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
                    }
                    else if (!rcube_utils::check_email($target)) {
                        $this->errors['actions'][$i]['target'] = $this->plugin->gettext(!empty($domains) ? 'forbiddenchars' : 'noemailwarning');
                    }

                    if ($type == 'redirect_copy') {
                        $type = 'redirect';
                        $this->form['actions'][$i]['copy'] = true;
                    }

                    break;

                case 'addflag':
                case 'setflag':
                case 'removeflag':
                    $this->form['actions'][$i]['target'] = $this->strip_value($flags[$idx]);

                    if (empty($this->form['actions'][$i]['target'])) {
                        $this->errors['actions'][$i]['flag'] = $this->plugin->gettext('noflagset');
                    }

                    break;

                case 'addheader':
                case 'deleteheader':
                    $this->form['actions'][$i]['name']  = trim($type == 'addheader' ? $addheader_name[$idx] : $delheader_name[$idx]);
                    $this->form['actions'][$i]['value'] = $type == 'addheader' ? $addheader_value[$idx] : $delheader_value[$idx];
                    $this->form['actions'][$i]['last']  = ($type == 'addheader' ? $addheader_pos[$idx] : $delheader_pos[$idx]) == 'last';

                    if (empty($this->form['actions'][$i]['name'])) {
                        $this->errors['actions'][$i]['name'] = $this->plugin->gettext('cannotbeempty');
                    }
                    else if (!preg_match('/^[0-9a-z_-]+$/i', $this->form['actions'][$i]['name'])) {
                        $this->errors['actions'][$i]['name'] = $this->plugin->gettext('forbiddenchars');
                    }

                    if ($type == 'deleteheader') {
                        foreach ((array) $this->form['actions'][$i]['value'] as $pidx => $pattern) {
                            if (empty($pattern)) {
                                unset($this->form['actions'][$i]['value'][$pidx]);
                            }
                        }

                        $this->form['actions'][$i]['match-type'] = $delheader_op[$idx];
                        $this->form['actions'][$i]['comparator'] = $delheader_comp[$idx];
                        $this->form['actions'][$i]['index']      = $delheader_index[$idx];

                        if (empty($this->form['actions'][$i]['index'])) {
                            if (!empty($this->form['actions'][$i]['last'])) {
                                $this->errors['actions'][$i]['index'] = $this->plugin->gettext('lastindexempty');
                            }
                        }
                        else if (!preg_match('/^[0-9]+$/i', $this->form['actions'][$i]['index'])) {
                            $this->errors['actions'][$i]['index'] = $this->plugin->gettext('forbiddenchars');
                        }
                    }
                    else {
                        if (empty($this->form['actions'][$i]['value'])) {
                            $this->errors['actions'][$i]['value'] = $this->plugin->gettext('cannotbeempty');
                        }
                    }

                    break;

                case 'vacation':
                    $reason        = $this->strip_value($reasons[$idx], true);
                    $interval_type = $interval_types && $interval_types[$idx] == 'seconds' ? 'seconds' : 'days';

                    $this->form['actions'][$i]['reason']    = str_replace("\r\n", "\n", $reason);
                    $this->form['actions'][$i]['from']      = $from[$idx];
                    $this->form['actions'][$i]['subject']   = $subject[$idx];
                    $this->form['actions'][$i]['addresses'] = $addresses[$idx];
                    $this->form['actions'][$i][$interval_type] = $intervals[$idx];

                    // @TODO: vacation :mime, :handle

                    foreach ((array)$this->form['actions'][$i]['addresses'] as $aidx => $address) {
                        $this->form['actions'][$i]['addresses'][$aidx] = $address = trim($address);

                        if (empty($address)) {
                            unset($this->form['actions'][$i]['addresses'][$aidx]);
                        }
                        else if (!rcube_utils::check_email($address)) {
                            $this->errors['actions'][$i]['addresses'] = $this->plugin->gettext('noemailwarning');
                            break;
                        }
                    }

                    if (!empty($this->form['actions'][$i]['from'])) {
                        // According to RFC5230 the :from string must specify a valid [RFC2822] mailbox-list
                        $this->action_email_input($i, 'from');
                    }

                    if ($this->form['actions'][$i]['reason'] == '') {
                        $this->errors['actions'][$i]['reason'] = $this->plugin->gettext('cannotbeempty');
                    }
                    if ($this->form['actions'][$i][$interval_type] && !preg_match('/^[0-9]+$/', $this->form['actions'][$i][$interval_type])) {
                        $this->errors['actions'][$i]['interval'] = $this->plugin->gettext('forbiddenchars');
                    }
                    break;

                case 'set':
                    $this->form['actions'][$i]['name'] = $varnames[$idx];
                    $this->form['actions'][$i]['value'] = $varvalues[$idx];
                    foreach ((array)$varmods[$idx] as $v_m) {
                        $this->form['actions'][$i][$v_m] = true;
                    }

                    if (empty($varnames[$idx])) {
                        $this->errors['actions'][$i]['name'] = $this->plugin->gettext('cannotbeempty');
                    }
                    else if (!preg_match('/^[0-9a-z_]+$/i', $varnames[$idx])) {
                        $this->errors['actions'][$i]['name'] = $this->plugin->gettext('forbiddenchars');
                    }

                    if (!isset($varvalues[$idx]) || $varvalues[$idx] === '') {
                        $this->errors['actions'][$i]['value'] = $this->plugin->gettext('cannotbeempty');
                    }
                    break;

                case 'notify':
                    if (empty($notifymethods[$idx])) {
                        $this->errors['actions'][$i]['method'] = $this->plugin->gettext('cannotbeempty');
                    }
                    if (empty($notifytargets[$idx])) {
                        $this->errors['actions'][$i]['target'] = $this->plugin->gettext('cannotbeempty');
                    }

                    // skip empty options
                    foreach ((array)$notifyoptions[$idx] as $opt_idx => $opt) {
                        if (!strlen(trim($opt))) {
                            unset($notifyoptions[$idx][$opt_idx]);
                        }
                    }

                    $this->form['actions'][$i]['method']     = $notifymethods[$idx] . ':' . $notifytargets[$idx];
                    $this->form['actions'][$i]['options']    = $notifyoptions[$idx];
                    $this->form['actions'][$i]['message']    = $notifymessages[$idx];
                    $this->form['actions'][$i]['from']       = $notifyfrom[$idx];
                    $this->form['actions'][$i]['importance'] = $notifyimp[$idx];

                    if (!empty($notifyfrom[$idx]) && stripos($this->form['actions'][$i]['method'], 'mailto:') === 0) {
                        // For mailto method :from string must specify a valid [RFC2822] mailbox-list
                        $this->action_email_input($i, 'from');
                    }

                    break;
                }

                $this->form['actions'][$i]['type'] = $type;
                $i++;
            }

            if (!$this->errors && !$error) {
                // save the script
                if (!isset($this->script[$fid])) {
                    $fid = $this->sieve->script->add_rule($this->form);
                    $new = true;
                }
                else {
                    $fid = $this->sieve->script->update_rule($fid, $this->form);
                }

                if ($fid !== false) {
                    $save = $this->save_script();
                }

                if (!empty($save) && $fid !== false) {
                    $this->rc->output->show_message('managesieve.filtersaved', 'confirmation');
                    if ($this->rc->task != 'mail') {
                        $args = [
                            'name'     => $this->form['name'],
                            'id'       => $fid,
                            'disabled' => $this->form['disabled']
                        ];
                        $this->rc->output->command('parent.managesieve_updatelist', isset($new) ? 'add' : 'update', $args);
                    }
                    else {
                        $this->rc->output->command('managesieve_dialog_close');
                        $this->rc->output->send('iframe');
                    }
                }
                else {
                    $this->rc->output->show_message('managesieve.filtersaveerror', 'error');
                }
            }
            else {
                $this->rc->output->show_message('managesieve.filterformerror', 'warning');
            }
        }

        $this->send();
    }

    protected function send()
    {
        // Handle form action
        if (isset($_GET['_framed']) || isset($_POST['_framed'])) {
            if (isset($_GET['_newset']) || isset($_POST['_newset'])) {
                $this->rc->output->send('managesieve.setedit');
            }
            else if (isset($_GET['_seteditraw']) || isset($_POST['_seteditraw'])) {
                $this->rc->output->send('managesieve.seteditraw');
            }
            else {
                $this->rc->output->send('managesieve.filteredit');
            }
        }
        else {
            $this->rc->output->set_pagetitle($this->plugin->gettext('filters'));
            $this->rc->output->send('managesieve.managesieve');
        }
    }

    /**
     * Return the filters list as HTML table
     */
    function filters_list($attrib)
    {
        // add id to message list table if not specified
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmfilterslist';
        }

        // define list of cols to be displayed
        $a_show_cols = ['name'];

        $result = $this->list_rules();

        // create the table
        $out = rcmail_action::table_output($attrib, $result, $a_show_cols, 'id');

        // set client env
        $this->rc->output->add_gui_object('filterslist', $attrib['id']);
        $this->rc->output->include_script('list.js');

        // add some labels to client
        $this->rc->output->add_label('managesieve.filterdeleteconfirm');

        return $out;
    }

    /**
     * Return the filters list as <SELECT>
     */
    function filtersets_list($attrib, $no_env = false)
    {
        // add id to message list table if not specified
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmfiltersetslist';
        }

        $list = $this->list_scripts();

        if ($list) {
            asort($list, SORT_LOCALE_STRING);
        }

        if (!empty($attrib['type']) && $attrib['type'] == 'list') {
            // define list of cols to be displayed
            $a_show_cols = ['name'];
            $result      = [];
            $scripts     = [];

            if ($list) {
                foreach ($list as $idx => $set) {
                    $scripts['S' . $idx] = $set;
                    $result[] = [
                        'name'  => $set,
                        'id'    => 'S' . $idx,
                        'class' => !in_array($set, $this->active) ? 'disabled' : '',
                    ];
                }
            }

            // create XHTML table
            $out = $this->rc->table_output($attrib, $result, $a_show_cols, 'id');

            $this->rc->output->set_env('filtersets', $scripts);
            $this->rc->output->include_script('list.js');
        }
        else {
            $select = new html_select([
                    'name'     => '_set',
                    'id'       => $attrib['id'],
                    'class'    => 'custom-select',
                    'onchange' => $this->rc->task != 'mail' ? 'rcmail.managesieve_set()' : ''
            ]);

            if ($list) {
                foreach ($list as $set) {
                    $select->add($set, $set);
                }
            }

            $out = $select->show($this->sieve->current);
        }

        // set client env
        if (!$no_env) {
            $this->rc->output->add_gui_object('filtersetslist', $attrib['id']);
            $this->rc->output->add_label('managesieve.setdeleteconfirm');
        }

        return $out;
    }

    function filterset_editraw($attrib)
    {
        $script_name = rcube_utils::get_input_string('_set', rcube_utils::INPUT_GP);
        $script      = $this->sieve->get_script($script_name);
        $script_post = !empty($_POST['rawsetcontent']) ? $_POST['rawsetcontent'] : null;
        $framed      = !empty($_POST['_framed']) || !empty($_GET['_framed']);

        $hiddenfields = new html_hiddenfield();
        $hiddenfields->add(['name' => '_task',   'value' => $this->rc->task]);
        $hiddenfields->add(['name' => '_action', 'value' => 'plugin.managesieve-saveraw']);
        $hiddenfields->add(['name' => '_set',    'value' => $script_name]);
        $hiddenfields->add(['name' => '_seteditraw', 'value' => 1]);
        $hiddenfields->add(['name' => '_framed', 'value' => $framed ? 1 : 0]);

        $out = $hiddenfields->show();

        $txtarea = new html_textarea([
                'id'    => 'rawfiltersettxt',
                'name'  => 'rawsetcontent',
                'class' => 'form-control',
                'rows'  => '15'
        ]);

        $out .= $txtarea->show($script_post !== null ? $script_post : ($script !== false ? rtrim($script) : ''));

        $this->rc->output->add_gui_object('sievesetrawform', 'filtersetrawform');
        $this->plugin->include_stylesheet('codemirror/lib/codemirror.css');
        $this->plugin->include_script('codemirror/lib/codemirror.js');
        $this->plugin->include_script('codemirror/addon/selection/active-line.js');
        $this->plugin->include_script('codemirror/mode/sieve/sieve.js');

        if ($script === false) {
            $this->rc->output->show_message('managesieve.filterunknownerror', 'error');
        }

        $out = html::tag('form', $attrib + [
                'id'      => 'filtersetrawform',
                'name'    => 'filtersetrawform',
                'action'  => './',
                'method'  => 'post',
                'enctype' => 'multipart/form-data',
            ], $out
        );

        return str_replace('</form>', '', $out);
    }

    function filterset_form($attrib)
    {
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmfiltersetform';
        }

        $framed       = !empty($_POST['_framed']) || !empty($_GET['_framed']);
        $table        = new html_table(['cols' => 2, 'class' => 'propform']);
        $hiddenfields = new html_hiddenfield(['name' => '_task', 'value' => $this->rc->task]);
        $hiddenfields->add(['name' => '_action', 'value' => 'plugin.managesieve-save']);
        $hiddenfields->add(['name' => '_framed', 'value' => $framed ? 1 : 0]);
        $hiddenfields->add(['name' => '_newset', 'value' => 1]);

        $name     = rcube_utils::get_input_string('_name', rcube_utils::INPUT_POST);
        $copy     = rcube_utils::get_input_string('_copy', rcube_utils::INPUT_POST);
        $selected = rcube_utils::get_input_string('_from', rcube_utils::INPUT_POST);

        // filter set name input
        $input_name = new html_inputfield([
                'name'  => '_name',
                'id'    => '_name',
                'size'  => 30,
                'class' => !empty($this->errors['name']) ? 'error form-control' : 'form-control'
        ]);

        $table->add('title', html::label('_name', rcube::Q($this->plugin->gettext('filtersetname'))));
        $table->add(null, $input_name->show($name));

        $filters = '<ul class="proplist">';
        $filters .= '<li>' . html::label('from_none', html::tag('input', [
                'type'    => 'radio',
                'id'      => 'from_none',
                'name'    => '_from',
                'value'   => 'none',
                'checked' => !$selected || $selected == 'none'
            ]) . rcube::Q($this->plugin->gettext('none'))) . '</li>';

        // filters set list
        $list   = $this->list_scripts();
        $select = new html_select(['name' => '_copy', 'id' => '_copy', 'class' => 'custom-select']);

        if (is_array($list)) {
            asort($list, SORT_LOCALE_STRING);

            if (!$copy && isset($_SESSION['managesieve_current'])) {
                $copy = $_SESSION['managesieve_current'];
            }

            foreach ($list as $set) {
                $select->add($set, $set);
            }

            $filters .= '<li>' . html::label('from_set', html::tag('input', [
                    'type'    => 'radio',
                    'id'      => 'from_set',
                    'name'    => '_from',
                    'value'   => 'set',
                    'checked' => $selected == 'set',
                ]) .  rcube::Q($this->plugin->gettext('fromset')) . ' ' . $select->show($copy)) . '</li>';
        }

        // script upload box
        $upload = new html_inputfield([
                'name'  => '_file',
                'id'    => '_file',
                'size'  => 30,
                'type'  => 'file',
                'class' => !empty($this->errors['file']) ? 'error form-control' : 'form-control'
        ]);

        $filters .= '<li>' . html::label('from_file', html::tag('input', [
                'type'    => 'radio',
                'id'      => 'from_file',
                'name'    => '_from',
                'value'   => 'file',
                'checked' => $selected == 'file',
            ]) . rcube::Q($this->plugin->gettext('fromfile')) . ' ' . $upload->show()) . '</li>';

        $filters .= '</ul>';

        $table->add('title', html::label('from_none', rcube::Q($this->plugin->gettext('filters'))));
        $table->add('', $filters);

        $out = '<form name="filtersetform" action="./" method="post" enctype="multipart/form-data">'
            . "\n" . $hiddenfields->show() . "\n" . $table->show();

        $this->rc->output->add_gui_object('sieveform', 'filtersetform');

        if (!empty($this->errors['name'])) {
            $this->add_tip('_name', $this->errors['name'], true);
        }
        if (!empty($this->errors['file'])) {
            $this->add_tip('_file', $this->errors['file'], true);
        }

        $this->print_tips();

        return $out;
    }

    /**
     * Filter form object for templates engine
     */
    function filter_form($attrib)
    {
        if (empty($attrib['id'])) {
            $attrib['id'] = 'rcmfilterform';
        }

        $fid     = rcube_utils::get_input_string('_fid', rcube_utils::INPUT_GPC);
        $scr     = $this->form ?? (array_key_exists($fid, $this->script) ? $this->script[$fid] : null);
        $compact = !empty($attrib['compact-form']);
        $framed  = !empty($_POST['_framed']) || !empty($_GET['_framed']);

        $_SESSION['managesieve-compact-form'] = $compact;

        // do not allow creation of new filters
        if ($fid === null && in_array('new_filter', $this->disabled_actions)) {
            $this->rc->output->show_message('managesieve.disabledaction', 'error');
            return;
        }

        $hiddenfields = new html_hiddenfield(['name' => '_task', 'value' => $this->rc->task]);
        $hiddenfields->add(['name' => '_action', 'value' => 'plugin.managesieve-save']);
        $hiddenfields->add(['name' => '_framed', 'value' => $framed ? 1 : 0]);
        $hiddenfields->add(['name' => '_fid', 'value' => $fid]);

        $out = $hiddenfields->show();

        // 'any' flag
        $any = (
            (!isset($this->form) && !empty($scr) && empty($scr['tests']))
            || (!empty($scr['tests']) && count($scr['tests']) == 1
                && $scr['tests'][0]['test'] == 'true' && empty($scr['tests'][0]['not'])
            )
        );

        // filter name input
        $input_name = new html_inputfield([
                'name'  => '_name',
                'id'    => '_name',
                'size'  => 30,
                'class' => !empty($this->errors['name']) ? 'form-control error' : 'form-control'
        ]);

        if (!empty($this->errors['name'])) {
            $this->add_tip('_name', $this->errors['name'], true);
        }

        $input_name = $input_name->show(isset($scr) ? $scr['name'] : '');

        $out .= sprintf("\n" . '<div class="form-group row">'
            . '<label for="_name" class="col-sm-4 col-form-label">%s</label>'
            . '<div class="col-sm-8">%s</div></div>',
            rcube::Q($this->plugin->gettext('filtername')), $input_name
        );

        // filter set selector
        if ($this->rc->task == 'mail') {
            $out .= sprintf("\n" . '<div class="form-group row">'
                . '<label for="%s" class="col-sm-4 col-form-label">%s</label>'
                . '<div class="col-sm-8">%s</div></div>',
                'sievescriptname',
                rcube::Q($this->plugin->gettext('filterset')),
                $this->filtersets_list(['id' => 'sievescriptname'], true)
            );
        }

        $out .= sprintf("\n" . '<div class="form-group row form-check">'
            . '<label for="fenabled" class="col-sm-4 col-form-label">%s</label>'
            . '<div class="col-sm-8 form-check">'
                . '<input type="checkbox" id="fenabled" name="_enabled" value="1"' . (empty($scr['disabled']) ? ' checked' : '') . ' />'
            . '</div></div>',
            rcube::Q($this->plugin->gettext('filterenabled'))
        );

        if ($compact) {
            $select = new html_select(['name' => '_join', 'id' => '_join', 'class' => 'custom-select',
                'onchange' => 'rule_join_radio(this.value)']);

            foreach (['allof', 'anyof', 'any'] as $val) {
                $select->add($this->plugin->gettext('filter' . $val), $val);
            }

            $join = $any ? 'any' : 'allof';
            if (isset($scr) && !$any) {
                 $join = !empty($scr['join']) ? 'allof' : 'anyof';
            }

            $out .= sprintf("\n" . '<div class="form-group row">'
                . '<label for="_join" class="col-sm-4 col-form-label">%s</label>'
                . '<div class="col-sm-8">%s</div></div>',
                rcube::Q($this->plugin->gettext('scope')), $select->show($join)
            );

            $out .= '<div id="rules"'.($any ? ' style="display: none"' : '').'>';
            $out .= "\n<fieldset><legend>" . rcube::Q($this->plugin->gettext('rules')) . "</legend>\n";
        }
        else {
            $out .= '<br><fieldset><legend>' . rcube::Q($this->plugin->gettext('messagesrules')) . "</legend>\n";

            // any, allof, anyof radio buttons
            $field_id = '_allof';
            $input_join = new html_radiobutton(['name' => '_join', 'id' => $field_id, 'value' => 'allof',
                'onclick' => 'rule_join_radio(\'allof\')', 'class' => 'radio']);

            if (isset($scr) && !$any) {
                $input_join = $input_join->show($scr['join'] ? 'allof' : '');
            }
            else {
                $input_join = $input_join->show();
            }

            $out .= $input_join . html::label($field_id, rcube::Q($this->plugin->gettext('filterallof')));

            $field_id = '_anyof';
            $input_join = new html_radiobutton(['name' => '_join', 'id' => $field_id, 'value' => 'anyof',
                'onclick' => 'rule_join_radio(\'anyof\')', 'class' => 'radio']);

            if (isset($scr) && !$any) {
                $input_join = $input_join->show($scr['join'] ? '' : 'anyof');
            }
            else {
                $input_join = $input_join->show('anyof'); // default
            }

            $out .= $input_join . html::label($field_id, rcube::Q($this->plugin->gettext('filteranyof')));

            $field_id = '_any';
            $input_join = new html_radiobutton(['name' => '_join', 'id' => $field_id, 'value' => 'any',
                'onclick' => 'rule_join_radio(\'any\')', 'class' => 'radio']);

            $input_join = $input_join->show($any ? 'any' : '');

            $out .= $input_join . html::label($field_id, rcube::Q($this->plugin->gettext('filterany')));
            $out .= '<div id="rules"'.($any ? ' style="display: none"' : '').'>';
        }

        $rows_num = !empty($scr['tests']) ? count($scr['tests']) : 1;
        for ($x=0; $x<$rows_num; $x++) {
            $out .= $this->rule_div($fid, $x, true, $compact);
        }

        $out .= $compact ? "</fieldset>\n</div>\n" : "</div>\n</fieldset>\n";

        // actions
        $label = $this->plugin->gettext($compact ? 'actions' : 'messagesactions');
        $out .= '<fieldset><legend>' . rcube::Q($label) . "</legend>\n";

        $rows_num = isset($scr)  ? count($scr['actions']) : 1;

        $out .= '<div id="actions">';
        for ($x=0; $x<$rows_num; $x++) {
            $out .= $this->action_div($fid, $x);
        }
        $out .= "</div>\n";

        $out .= "</fieldset>\n";

        $this->print_tips();

        $this->rc->output->add_label(
            'managesieve.ruledeleteconfirm',
            'managesieve.actiondeleteconfirm'
        );
        $this->rc->output->set_env('rule_disabled', !empty($scr['disabled']));
        $this->rc->output->add_gui_object('sieveform', 'filterform');

        $attrib['name']   = 'filterform';
        $attrib['action'] = './';
        $attrib['method'] = 'post';

        $out = html::tag('form', $attrib, $out, ['name', 'action', 'method', 'class']);

        if (!$compact) {
            $out = str_replace('</form>', '', $out);
        }

        return $out;
    }

    function rule_div($fid, $id, $div = true, $compact = false)
    {
        if (isset($id) && isset($this->form)) {
            $rule = $this->form['tests'][$id];
        }
        else if (isset($id) && isset($this->script[$fid]['tests'][$id])) {
            $rule = $this->script[$fid]['tests'][$id];
        }
        else {
            $rule = ['test' => null];
        }

        if (isset($this->form['tests'])) {
            $rows_num = count($this->form['tests']);
        }
        else if (isset($this->script[$fid]['tests'])) {
            $rows_num = count($this->script[$fid]['tests']);
        }
        else {
            $rows_num = 0;
        }

        // headers select
        $select_header = new html_select(['name' => "_header[$id]", 'id' => 'header'.$id,
            'onchange' => 'rule_header_select(' .$id .')', 'class' => 'custom-select']);

        foreach ($this->headers as $index => $header) {
            $header = $this->rc->text_exists($index) ? $this->plugin->gettext($index) : $header;
            $select_header->add($header, $index);
        }
        $select_header->add($this->plugin->gettext('...'), '...');
        if (in_array('body', $this->exts)) {
            $select_header->add($this->plugin->gettext('body'), 'body');
        }
        $select_header->add($this->plugin->gettext('size'), 'size');
        if (in_array('spamtest', $this->exts)) {
            $select_header->add($this->plugin->gettext('spamtest'), 'spamtest');
        }
        if (in_array('date', $this->exts)) {
            $select_header->add($this->plugin->gettext('datetest'), 'date');
            $select_header->add($this->plugin->gettext('currdate'), 'currentdate');
        }
        if (in_array('variables', $this->exts)) {
            $select_header->add($this->plugin->gettext('string'), 'string');
        }
        if (in_array('duplicate', $this->exts)) {
            $select_header->add($this->plugin->gettext('message'), 'message');
        }

        $test = null;

        if (isset($rule['test'])) {
            if (in_array($rule['test'], ['header', 'address', 'envelope'])) {
                if (is_array($rule['arg1']) && count($rule['arg1']) == 1) {
                    $rule['arg1'] = $rule['arg1'][0];
                }

                $header  = !is_array($rule['arg1']) ? strtolower($rule['arg1']) : null;
                $matches = !is_array($rule['arg1']) && $header && isset($this->headers[$header]);
                $test    = $matches ? $header : '...';
            }
            else if ($rule['test'] == 'exists') {
                if (is_array($rule['arg']) && count($rule['arg']) == 1) {
                    $rule['arg'] = $rule['arg'][0];
                }

                $header  = !is_array($rule['arg']) ? strtolower($rule['arg']) : null;
                $matches = !is_array($rule['arg']) && $header && isset($this->headers[$header]);
                $test    = $matches ? $header : '...';
            }
            else if (in_array($rule['test'], ['size', 'spamtest', 'body', 'date', 'currentdate', 'string'])) {
                $test = $rule['test'];
            }
            else if (in_array($rule['test'], ['duplicate'])) {
                $test = 'message';
            }
            else if ($rule['test'] != 'true') {
                $test = '...';
            }
        }

        $tout = '<div class="flexbox">';
        $aout = $select_header->show($test);

        $custom  = null;
        $customv = null;

        // custom headers input
        if (isset($rule['test']) && in_array($rule['test'], ['header', 'address', 'envelope'])) {
            $custom = (array) $rule['arg1'];
            if (count($custom) == 1 && isset($this->headers[strtolower($custom[0])])) {
                $custom = null;
            }
        }
        else if (isset($rule['test']) && $rule['test'] == 'string') {
            $customv = (array) $rule['arg1'];
            if (count($customv) == 1 && isset($this->headers[strtolower($customv[0])])) {
                $customv = null;
            }
        }
        else if (isset($rule['test']) && $rule['test'] == 'exists') {
            $custom = (array) $rule['arg'];
            if (count($custom) == 1 && isset($this->headers[strtolower($custom[0])])) {
                $custom = null;
            }
        }

        // custom header and variable inputs
        $aout .= $this->list_input($id, 'custom_header', $custom, 15, false, [
                'disabled'    => !isset($custom),
                'class'       => $this->error_class($id, 'test', 'header', 'custom_header'),
                'placeholder' => $this->plugin->gettext('headername'),
                'title'       => $this->plugin->gettext('headername'),
            ]) . "\n";

        $aout .= $this->list_input($id, 'custom_var', $customv, 15, false, [
                'disabled' => !isset($customv),
                'class'    => $this->error_class($id, 'test', 'header', 'custom_var')
            ]) . "\n";

        $test       = self::rule_test($rule);
        $target     = '';
        $sizetarget = null;
        $sizeitem   = null;

        // target(s) input
        if (in_array($rule['test'], ['header', 'address', 'envelope', 'string'])) {
            $target = $rule['arg2'];
        }
        else if (in_array($rule['test'], ['body', 'date', 'currentdate', 'spamtest'])) {
            $target = $rule['arg'];
        }
        else if ($rule['test'] == 'size') {
            if (preg_match('/^([0-9]+)(K|M|G)?$/', $rule['arg'], $matches)) {
                $sizetarget = $matches[1];
                $sizeitem   = $matches[2];
            }
            else {
                $sizetarget = $rule['arg'];
                $sizeitem   = $rule['item'];
            }
        }

        // (current)date part select
        if (in_array('date', $this->exts) || in_array('currentdate', $this->exts)) {
            $date_parts = ['date', 'iso8601', 'std11', 'julian', 'time',
                'year', 'month', 'day', 'hour', 'minute', 'second', 'weekday', 'zone'];
            $select_dp = new html_select([
                    'name'  => "_rule_date_part[$id]",
                    'id'    => 'rule_date_part'.$id,
                    'style' => in_array($rule['test'], ['currentdate', 'date']) && !preg_match('/^(notcount|count)-/', $test) ? '' : 'display:none',
                    'class' => 'datepart_selector custom-select',
            ]);

            foreach ($date_parts as $part) {
                $select_dp->add(rcube::Q($this->plugin->gettext($part)), $part);
            }

            $aout .= $select_dp->show($rule['test'] == 'currentdate' || $rule['test'] == 'date' ? $rule['part'] : '');
        }

        // message test select (e.g. duplicate)
        if (in_array('duplicate', $this->exts)) {
            $select_msg = new html_select([
                    'name'  => "_rule_message[$id]",
                    'id'    => 'rule_message'.$id,
                    'style' => in_array($rule['test'], ['duplicate']) ? '' : 'display:none',
                    'class' => 'message_selector custom-select',
            ]);

            $select_msg->add(rcube::Q($this->plugin->gettext('duplicate')), 'duplicate');
            $select_msg->add(rcube::Q($this->plugin->gettext('notduplicate')), 'notduplicate');

            $tout .= $select_msg->show($test);
        }

        $tout .= $this->match_type_selector('rule_op', $id, $test, $rule['test']);
        $tout .= $this->list_input($id, 'rule_target', $target, null, false, [
                'disabled' => in_array($rule['test'], ['size', 'exists', 'duplicate', 'spamtest']),
                'class'    => $this->error_class($id, 'test', 'target', 'rule_target')
            ]) . "\n";

        $select_size_op = new html_select([
                'name'  => "_rule_size_op[$id]",
                'id'    => 'rule_size_op'.$id,
                'class' => 'input-group-prepend custom-select'
        ]);
        $select_size_op->add(rcube::Q($this->plugin->gettext('filterover')), 'over');
        $select_size_op->add(rcube::Q($this->plugin->gettext('filterunder')), 'under');

        $select_size_item = new html_select([
                'name'  => "_rule_size_item[$id]",
                'id'    => 'rule_size_item'.$id,
                'class' => 'input-group-append custom-select'
        ]);
        foreach (['', 'K', 'M', 'G'] as $unit) {
            $select_size_item->add($this->plugin->gettext($unit . 'B'), $unit);
        }

        $tout .= '<div id="rule_size' .$id. '" class="input-group" style="display:' . ($rule['test']=='size' ? 'inline' : 'none') .'">';
        $tout .= $select_size_op->show($rule['test']=='size' ? $rule['type'] : '');
        $tout .= html::tag('input', [
                'type'  => 'text',
                'name'  => "_rule_size_target[$id]",
                'id'    => 'rule_size_i'.$id,
                'value' => $sizetarget,
                'size'  => 10,
                'class' => $this->error_class($id, 'test', 'sizetarget', 'rule_size_i'),
        ]);
        $tout .= "\n" . $select_size_item->show($sizeitem);
        $tout .= '</div>';
        $tout .= '</div>';

        if (in_array('relational', $this->exts)) {
            $select_spamtest_op = new html_select([
                    'name'     => "_rule_spamtest_op[$id]",
                    'id'       => 'rule_spamtest_op' . $id,
                    'class'    => 'input-group-prepend custom-select',
                    'onchange' => 'rule_spamtest_select(' . $id .')'
            ]);
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestisunknown')), '');
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestisgreaterthan')), 'value-gt');
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestisgreaterthanequal')), 'value-ge');
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestislessthan')), 'value-lt');
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestislessthanequal')), 'value-le');
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestequals')), 'value-eq');
            $select_spamtest_op->add(rcube::Q($this->plugin->gettext('spamtestnotequals')), 'value-ne');

            $select_spamtest_target = new html_select([
                    'name'  => "_rule_spamtest_target[$id]",
                    'id'    => 'rule_spamtest_target' . $id,
                    'class' => 'input-group-append custom-select'
            ]);
            $select_spamtest_target->add(rcube::Q("0%"), '1');
            $select_spamtest_target->add(rcube::Q("20%"), '2');
            $select_spamtest_target->add(rcube::Q("30%"), '3');
            $select_spamtest_target->add(rcube::Q("40%"), '4');
            $select_spamtest_target->add(rcube::Q("50%"), '5');
            $select_spamtest_target->add(rcube::Q("60%"), '6');
            $select_spamtest_target->add(rcube::Q("70%"), '7');
            $select_spamtest_target->add(rcube::Q("80%"), '8');
            $select_spamtest_target->add(rcube::Q("90%"), '9');
            $select_spamtest_target->add(rcube::Q("100%"), '10');

            $tout .= '<div id="rule_spamtest' . $id . '" class="input-group" style="display:' . ($rule['test'] == 'spamtest' ? 'inline' : 'none') .'">';
            $tout .= $select_spamtest_op->show($rule['test'] == 'spamtest' && $target > 0 ? $rule['type'] : '');
            $tout .= $select_spamtest_target->show($rule['test'] == 'spamtest' ? $target : '');

            $tout .= '</div>';
        }
        // Advanced modifiers (address, envelope)
        $select_mod = new html_select([
                'name'     => "_rule_mod[$id]",
                'id'       => 'rule_mod_op' . $id,
                'class'    => 'custom-select',
                'onchange' => 'rule_mod_select(' .$id .')'
        ]);
        $select_mod->add(rcube::Q($this->plugin->gettext('none')), '');
        $select_mod->add(rcube::Q($this->plugin->gettext('address')), 'address');
        if (in_array('envelope', $this->exts)) {
            $select_mod->add(rcube::Q($this->plugin->gettext('envelope')), 'envelope');
        }

        $select_type = new html_select([
                'name'  => "_rule_mod_type[$id]",
                'id'    => 'rule_mod_type' . $id,
                'class' => 'custom-select',
        ]);
        $select_type->add(rcube::Q($this->plugin->gettext('allparts')), 'all');
        $select_type->add(rcube::Q($this->plugin->gettext('domain')), 'domain');
        $select_type->add(rcube::Q($this->plugin->gettext('localpart')), 'localpart');
        if (in_array('subaddress', $this->exts)) {
            $select_type->add(rcube::Q($this->plugin->gettext('user')), 'user');
            $select_type->add(rcube::Q($this->plugin->gettext('detail')), 'detail');
        }

        $need_mod = !in_array($rule['test'], ['size', 'spamtest', 'body', 'date', 'currentdate', 'duplicate', 'string']);
        $mout = '<div id="rule_mod' .$id. '" class="adv input-group"' . (!$need_mod ? ' style="display:none"' : '') . '>';
        $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('modifier'))));
        $mout .= $select_mod->show($rule['test']);
        $mout .= '</div>';
        $mout .= '<div id="rule_mod_type' . $id . '" class="adv input-group"';
        $mout .= (!in_array($rule['test'], ['address', 'envelope']) ? ' style="display:none"' : '') . '>';
        $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('modtype'))));
        $mout .= $select_type->show($rule['part'] ?? null);
        $mout .= '</div>';

        // Advanced modifiers (comparators)
        $need_comp = $rule['test'] != 'size' && $rule['test'] != 'spamtest' && $rule['test'] != 'duplicate';
        $mout .= '<div id="rule_comp' .$id. '" class="adv input-group"' . (!$need_comp ? ' style="display:none"' : '') . '>';
        $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('comparator'))));
        $mout .= $this->comparator_selector($rule['comparator'] ?? null, 'rule_comp', $id);
        $mout .= '</div>';

        // Advanced modifiers (mime)
        if (in_array('mime', $this->exts)) {
            $need_mime   = !$rule || in_array($rule['test'], ['header', 'address', 'exists']);
            $mime_type   = '';
            $select_mime = new html_select([
                    'name'  => "_rule_mime_type[$id]",
                    'id'    => 'rule_mime_type' . $id,
                    'style' => 'min-width:8em', 'onchange' => 'rule_mime_select(' . $id . ')',
                    'class' => 'custom-select',
            ]);
            $select_mime->add('-', '');

            foreach (['contenttype', 'type', 'subtype', 'param'] as $val) {
                if (isset($rule['mime-' . $val])) {
                    $mime_type = $val;
                }

                $select_mime->add(rcube::Q($this->plugin->gettext('mime-' . $val)), $val);
            }

            $select_mime_part = new html_select([
                    'name'  => "_rule_mime_part[$id]",
                    'id'    => 'rule_mime_part' . $id,
                    'class' => 'custom-select',
            ]);
            $select_mime_part->add(rcube::Q($this->plugin->gettext('mime-message')), '');
            $select_mime_part->add(rcube::Q($this->plugin->gettext('mime-anychild')), 'anychild');

            $mout .= '<div id="rule_mime_part' .$id. '" class="adv input-group"' . (!$need_mime ? ' style="display:none"' : '') . '>';
            $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('mimepart'))));
            $mout .= $select_mime_part->show(!empty($rule['mime-anychild']) ? 'anychild' : '');
            $mout .= '</div>';
            $mout .= '<div id="rule_mime' .$id. '" class="adv input-group"' . (!$need_mime ? ' style="display:none"' : '') . '>';
            $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('mime'))));
            $mout .= $select_mime->show($mime_type);
            $mout .= $this->list_input($id, 'rule_mime_param', $rule['mime-param'] ?? null,
                30, $mime_type != 'param', ['class' => $this->error_class($id, 'test', 'mime_param', 'rule_mime_param')]
            );
            $mout .= '</div>';
        }

        // Advanced modifiers (body transformations)
        $select_mod = new html_select([
                'name'     => "_rule_trans[$id]",
                'id'       => 'rule_trans_op' . $id,
                'class'    => 'custom-select',
                'onchange' => 'rule_trans_select(' .$id .')'
        ]);
        $select_mod->add(rcube::Q($this->plugin->gettext('text')), 'text');
        $select_mod->add(rcube::Q($this->plugin->gettext('undecoded')), 'raw');
        $select_mod->add(rcube::Q($this->plugin->gettext('contenttype')), 'content');

        $rule_content = '';
        if (isset($rule['content'])) {
            $rule_content = is_array($rule['content']) ? implode(',', $rule['content']) : $rule['content'];
        }

        $mout .= '<div id="rule_trans' .$id. '" class="adv input-group"' . ($rule['test'] != 'body' ? ' style="display:none"' : '') . '>';
        $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('modifier'))));
        $mout .= $select_mod->show($rule['part'] ?? null);
        $mout .= html::tag('input', [
                'type'  => 'text',
                'name'  => "_rule_trans_type[$id]",
                'id'    => 'rule_trans_type'.$id,
                'value' => $rule_content,
                'size'  => 20,
                'style' => !isset($rule['part']) || $rule['part'] != 'content' ? 'display:none' : '',
                'class' => $this->error_class($id, 'test', 'part', 'rule_trans_type'),
        ]);
        $mout .= '</div>';

        // Date header
        if (in_array('date', $this->exts)) {
            $mout .= '<div id="rule_date_header_div' .$id. '" class="adv input-group"'. ($rule['test'] != 'date' ? ' style="display:none"' : '') .'>';
            $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('dateheader'))));
            $mout .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_rule_date_header[$id]",
                    'id'    => 'rule_date_header' . $id,
                    'value' => $rule['test'] == 'date' ? $rule['header'] : '',
                    'size'  => 15,
                    'class' => $this->error_class($id, 'test', 'dateheader', 'rule_date_header'),
                ]);
            $mout .= '</div>';
        }

        // Index
        if (in_array('index', $this->exts)) {
            $need_index = in_array($rule['test'], ['header', ', address', 'date']);
            $mout .= '<div id="rule_index_div' .$id. '" class="adv input-group"'. (!$need_index ? ' style="display:none"' : '') .'>';
            $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('index'))));
            $mout .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_rule_index[$id]",
                    'id'    => 'rule_index' . $id,
                    'value' => !empty($rule['index']) ? intval($rule['index']) : '',
                    'size'  => 3,
                    'class' => $this->error_class($id, 'test', 'index', 'rule_index'),
            ]);
            $mout .= html::label('input-group-append',
                    html::tag('input', [
                        'type'    => 'checkbox',
                        'name'    => "_rule_index_last[$id]",
                        'id'      => 'rule_index_last' . $id,
                        'value'   => 1,
                        'checked' => !empty($rule['last']),
                    ]) . rcube::Q($this->plugin->gettext('indexlast')));
            $mout .= '</div>';
        }

        // Duplicate
        if (in_array('duplicate', $this->exts)) {
            $need_duplicate = $rule['test'] == 'duplicate';
            $mout .= '<div id="rule_duplicate_div' .$id. '" class="adv"'. (!$need_duplicate ? ' style="display:none"' : '') .'>';

            foreach (['handle', 'header', 'uniqueid'] as $unit) {
                $mout .= '<div class="input-group">';
                $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('duplicate.' . $unit))));
                $mout .= html::tag('input', [
                        'type'  => 'text',
                        'name'  => '_rule_duplicate_' . $unit . "[$id]",
                        'id'    => 'rule_duplicate_' . $unit . $id,
                        'value' => $rule[$unit] ?? '',
                        'size'  => 30,
                        'class' => $this->error_class($id, 'test', 'duplicate_' . $unit, 'rule_duplicate_' . $unit),
                ]);
                $mout .= '</div>';
            }

            $mout .= '<div class="input-group">';
            $mout .= html::span('label input-group-prepend', html::span('input-group-text', rcube::Q($this->plugin->gettext('duplicate.seconds'))));
            $mout .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_rule_duplicate_seconds[$id]",
                    'id'    => 'rule_duplicate_seconds' . $id,
                    'value' => $rule['seconds'] ?? '',
                    'size'  => 6,
                    'class' => $this->error_class($id, 'test', 'duplicate_seconds', 'rule_duplicate_seconds'),
            ]);
            $mout .= html::label('input-group-append',
                html::tag('input', [
                    'type'    => 'checkbox',
                    'name'    => "_rule_duplicate_last[$id]",
                    'id'      => 'rule_duplicate_last' . $id,
                    'value'   => 1,
                    'checked' => !empty($rule['last']),
                ]) . rcube::Q($this->plugin->gettext('duplicate.last')));
            $mout .= '</div>';
            $mout .= '</div>';
        }

        $add_title = rcube::Q($this->plugin->gettext('add'));
        $del_title = rcube::Q($this->plugin->gettext('del'));
        $adv_title = rcube::Q($this->plugin->gettext('advancedopts'));

        // Build output table
        $out = $div ? '<div class="rulerow" id="rulerow' .$id .'">'."\n" : '';
        $out .= '<table class="compact-table"><tr>';

        if (!$compact) {
            $out .= '<td class="advbutton">';
            $out .= sprintf('<a href="#" id="ruleadv%s" title="%s" onclick="rule_adv_switch(%s, this); return false" class="show">'
                . '<span class="inner">%s</span></a>', $id, $adv_title, $id, $adv_title);
            $out .= '</td>';
        }

        $out .= '<td class="rowactions"><div class="flexbox">' . $aout . '</div></td>';
        $out .= '<td class="rowtargets">' . $tout . "\n";
        $out .= '<div id="rule_advanced' .$id. '" style="display:none" class="advanced">' . $mout . '</div>';
        $out .= '</td>';
        $out .= '<td class="rowbuttons">';
        if ($compact) {
            $out .= sprintf('<a href="#" id="ruleadv%s" title="%s" onclick="rule_adv_switch(%s, this); return false" class="advanced show">'
                . '<span class="inner">%s</span></a>', $id, $adv_title, $id, $adv_title);
        }
        $out .= sprintf('<a href="#" id="ruleadd%s" title="%s" onclick="rcmail.managesieve_ruleadd(\'%s\'); return false" class="button create add">'
            . '<span class="inner">%s</span></a>', $id, $add_title, $id, $add_title);
        $out .= sprintf('<a href="#" id="ruledel%s" title="%s" onclick="rcmail.managesieve_ruledel(\'%s\'); return false" class="button delete del%s">'
            . '<span class="inner">%s</span></a>', $id, $del_title, $id, ($rows_num < 2 ? ' disabled' : ''), $del_title);
        $out .= '</td>';

        $out .= '</tr></table>';
        $out .= $div ? "</div>\n" : '';

        return $out;
    }

    private static function rule_test(&$rule)
    {
        // first modify value/count tests with 'not' keyword
        // we'll revert the meaning of operators
        if (!empty($rule['not']) && !empty($rule['type'])
            && preg_match('/^(count|value)-([gteqnl]{2})/', $rule['type'], $m)
        ) {
            $rule['not'] = false;

            switch ($m[2]) {
            case 'gt': $rule['type'] = $m[1] . '-le'; break;
            case 'ge': $rule['type'] = $m[1] . '-lt'; break;
            case 'lt': $rule['type'] = $m[1] . '-ge'; break;
            case 'le': $rule['type'] = $m[1] . '-gt'; break;
            case 'eq': $rule['type'] = $m[1] . '-ne'; break;
            case 'ne': $rule['type'] = $m[1] . '-eq'; break;
            }
        }
        else if (!empty($rule['not']) && !empty($rule['test']) && $rule['test'] == 'size') {
            $rule['not']  = false;
            $rule['type'] = $rule['type'] == 'over' ? 'under' : 'over';
        }

        $set  = ['header', 'address', 'envelope', 'body', 'date', 'currentdate', 'string'];
        $test = null;

        // build test string supported by select element
        if (!empty($rule['size'])) {
            $test = $rule['type'];
        }
        else if (!empty($rule['test']) && in_array($rule['test'], $set)) {
            $test = (!empty($rule['not']) ? 'not' : '') . ($rule['type'] ?: 'is');
        }
        else if (!empty($rule['test'])) {
            $test = (!empty($rule['not']) ? 'not' : '') . $rule['test'];
        }

        return $test;
    }

    function action_div($fid, $id, $div = true)
    {
        if (isset($id) && isset($this->form)) {
            $action = $this->form['actions'][$id];
        }
        else if (isset($id) && isset($this->script[$fid]['actions'][$id])) {
            $action = $this->script[$fid]['actions'][$id];
        }
        else {
            $action = ['type' => null];
        }

        if (isset($this->form['actions'])) {
            $rows_num = count($this->form['actions']);
        }
        else if (isset($this->script[$fid]['actions'])) {
            $rows_num = count($this->script[$fid]['actions']);
        }
        else {
            $rows_num = 0;
        }

        $out = $div ? '<div class="actionrow" id="actionrow' .$id .'">'."\n" : '';

        $out .= '<table class="compact-table"><tr><td class="rowactions">';

        // action select
        $select_action = new html_select([
                'name'     => "_action_type[$id]",
                'id'       => 'action_type' . $id,
                'class'    => 'custom-select',
                'onchange' => "action_type_select($id)"
        ]);
        if (in_array('fileinto', $this->exts)) {
            $select_action->add($this->plugin->gettext('messagemoveto'), 'fileinto');
        }
        if (in_array('fileinto', $this->exts) && in_array('copy', $this->exts)) {
            $select_action->add($this->plugin->gettext('messagecopyto'), 'fileinto_copy');
        }
        if ($action['type'] == 'redirect' || !in_array('redirect', $this->disabled_actions)) {
            $select_action->add($this->plugin->gettext('messageredirect'), 'redirect');
            if (in_array('copy', $this->exts)) {
                $select_action->add($this->plugin->gettext('messagesendcopy'), 'redirect_copy');
            }
        }
        if (in_array('reject', $this->exts)) {
            $select_action->add($this->plugin->gettext('messagediscard'), 'reject');
        }
        else if (in_array('ereject', $this->exts)) {
            $select_action->add($this->plugin->gettext('messagediscard'), 'ereject');
        }
        if (in_array('vacation', $this->exts)) {
            $select_action->add($this->plugin->gettext('messagereply'), 'vacation');
        }
        $select_action->add($this->plugin->gettext('messagedelete'), 'discard');
        if (in_array('imapflags', $this->exts) || in_array('imap4flags', $this->exts)) {
            $select_action->add($this->plugin->gettext('setflags'), 'setflag');
            $select_action->add($this->plugin->gettext('addflags'), 'addflag');
            $select_action->add($this->plugin->gettext('removeflags'), 'removeflag');
        }
        if (in_array('editheader', $this->exts)) {
            $select_action->add($this->plugin->gettext('addheader'), 'addheader');
            $select_action->add($this->plugin->gettext('deleteheader'), 'deleteheader');
        }
        if (in_array('variables', $this->exts)) {
            $select_action->add($this->plugin->gettext('setvariable'), 'set');
        }
        if (in_array('enotify', $this->exts) || in_array('notify', $this->exts)) {
            $select_action->add($this->plugin->gettext('notify'), 'notify');
        }
        $select_action->add($this->plugin->gettext('messagekeep'), 'keep');
        $select_action->add($this->plugin->gettext('rulestop'), 'stop');

        $select_type = $action['type'];
        if (in_array($action['type'], ['fileinto', 'redirect']) && !empty($action['copy'])) {
            $select_type .= '_copy';
        }

        $out .= $select_action->show($select_type);
        $out .= '</td>';

        // actions target inputs
        $out .= '<td class="rowtargets">';

        // force domain selection in redirect email input
        $domains = (array) $this->rc->config->get('managesieve_domains');

        if (!empty($domains)) {
            sort($domains);

            $domain_select = new html_select([
                    'name'  => "_action_target_domain[$id]",
                    'id'    => 'action_target_domain' . $id,
                    'class' => 'custom-select',
            ]);

            $domain_select->add(array_combine($domains, $domains));

            if ($action['type'] == 'redirect') {
                $parts = explode('@', $action['target']);
                if (!empty($parts)) {
                    $action['domain'] = array_pop($parts);
                    $action['target'] = implode('@', $parts);
                }
            }
        }

        // redirect target
        $out .= '<span id="redirect_target' . $id . '" class="input-group" style="white-space:nowrap;'
            . ' display:' . ($action['type'] == 'redirect' ? '' : 'none') . '">'
            . html::tag('input', [
                'type'  => 'text',
                'name'  => "_action_target[$id]",
                'id'    => 'action_target' . $id,
                'value' => $action['type'] == 'redirect' ? $action['target'] : '',
                'size'  => !empty($domains) ? 20 : 35,
                'class' => $this->error_class($id, 'action', 'target', 'action_target'),
            ]);
        $out .= isset($domain_select) ? '<span class="input-group-append input-group-prepend">'
            . ' <span class="input-group-text">@</span> </span>'
            . $domain_select->show(!empty($action['domain']) ? $action['domain'] : '') : '';
        $out .= '</span>';

        // (e)reject target
        $out .= html::tag('textarea', [
                'name'  => '_action_target_area[' . $id . ']',
                'id'    => 'action_target_area' . $id,
                'rows'  => 3,
                'cols'  => 35,
                'class' => $this->error_class($id, 'action', 'targetarea', 'action_target_area'),
                'style' => 'display:' . (in_array($action['type'], ['reject', 'ereject']) ? 'inline' : 'none'),
            ],
            (in_array($action['type'], ['reject', 'ereject']) ? rcube::Q($action['target'], 'strict', false) : '')
        );

        // vacation
        $vsec      = in_array('vacation-seconds', $this->exts);
        $auto_addr = $this->rc->config->get('managesieve_vacation_addresses_init');
        $from_addr = $this->rc->config->get('managesieve_vacation_from_init');

        if (empty($action)) {
            if ($auto_addr) {
                $action['addresses'] = $this->user_emails();
            }
            if ($from_addr) {
                $default_identity = $this->rc->user->list_emails(true);
                $action['from']   = format_email_recipient($default_identity['email'], $default_identity['name']);
            }
        }
        else if (!empty($action['from'])) {
            $from = rcube_mime::decode_address_list($action['from'], null, true, RCUBE_CHARSET);
            foreach ((array) $from as $idx => $addr) {
                $from[$idx] = format_email_recipient($addr['mailto'], $addr['name']);
            }
            if (!empty($from)) {
                $action['from'] = implode(', ', $from);
            }
        }

        $action_subject = '';
        if (isset($action['subject'])) {
            $action_subject = is_array($action['subject']) ? implode(', ', $action['subject']) : $action['subject'];
        }

        $out .= '<div id="action_vacation' .$id.'" style="display:' .($action['type'] == 'vacation' ? 'inline' : 'none') .'" class="composite">';
        $out .= '<span class="label">'. rcube::Q($this->plugin->gettext('vacationreason')) .'</span><br>';
        $out .= html::tag('textarea', [
                'name'  => "_action_reason[$id]",
                'id'   => 'action_reason' . $id,
                'rows'  => 3,
                'cols'  => 35,
                'class' => $this->error_class($id, 'action', 'reason', 'action_reason'),
            ], rcube::Q($action['reason'] ?? '', 'strict', false));
        $out .= '<br><span class="label">' .rcube::Q($this->plugin->gettext('vacationsubject')) . '</span><br>';
        $out .= html::tag('input', [
                'type'  => 'text',
                'name'  => "_action_subject[$id]",
                'id'    => 'action_subject' . $id,
                'value' => $action_subject,
                'size'  => 35,
                'class' => $this->error_class($id, 'action', 'subject', 'action_subject'),
        ]);
        $out .= '<br><span class="label">' .rcube::Q($this->plugin->gettext('vacationfrom')) . '</span><br>';
        $out .= html::tag('input', [
                'type'  => 'text',
                'name'  => "_action_from[$id]",
                'id'    => 'action_from' . $id,
                'value' => $action['from'] ?? '',
                'size'  => 35,
                'class' => $this->error_class($id, 'action', 'from', 'action_from'),
        ]);
        $out .= '<br><span class="label">' .rcube::Q($this->plugin->gettext('vacationaddr')) . '</span><br>';
        $out .= $this->list_input($id, 'action_addresses', $action['addresses'] ?? null,
                30, false, ['class' => $this->error_class($id, 'action', 'addresses', 'action_addresses')]
            )
            . html::a(['href' => '#', 'onclick' => rcmail_output::JS_OBJECT_NAME . ".managesieve_vacation_addresses($id)"],
                rcube::Q($this->plugin->gettext('filladdresses')));
        $out .= '<br><span class="label">' . rcube::Q($this->plugin->gettext('vacationinterval')) . '</span><br>';
        $out .= '<div class="input-group">' . html::tag('input', [
                'type'  => 'text',
                'name'  => "_action_interval[$id]",
                'id'    => 'action_interval' . $id,
                'value' => rcube_sieve_vacation::vacation_interval($action, $this->exts),
                'size'  => 2,
                'class' => $this->error_class($id, 'action', 'interval', 'action_interval'),
        ]);
        if ($vsec) {
            $interval_select = new html_select([
                    'name'  => "_action_interval_type[$id]",
                    'class' => 'input-group-append custom-select'
            ]);
            $interval_select->add($this->plugin->gettext('days'), 'days');
            $interval_select->add($this->plugin->gettext('seconds'), 'seconds');
            $out .= $interval_select->show(isset($action['seconds']) ? 'seconds' : 'days');
        }
        else {
            $out .= "\n" . html::span('input-group-append', html::span('input-group-text', $this->plugin->gettext('days')));
        }
        $out .= '</div></div>';

        // flags
        $flags = [
            'read'      => '\\Seen',
            'answered'  => '\\Answered',
            'flagged'   => '\\Flagged',
            'deleted'   => '\\Deleted',
            'draft'     => '\\Draft',
        ];

        $flags_target   = isset($action['target']) ? (array) $action['target'] : [];
        $custom_flags   = [];
        $is_flag_action = preg_match('/^(set|add|remove)flag$/', (string) $action['type']);

        if ($is_flag_action) {
            $custom_flags = array_filter($flags_target, function($v) use($flags) {
                return !in_array_nocase($v, $flags);
            });
        }

        $flout = '';

        foreach ($flags as $fidx => $flag) {
            $flout .= html::label(null, html::tag('input', [
                    'type'    => 'checkbox',
                    'name'    => "_action_flags[$id][]",
                    'value'   => $flag,
                    'checked' => $is_flag_action && in_array_nocase($flag, $flags_target),
                ])
                . rcube::Q($this->plugin->gettext('flag'.$fidx))) . '<br>';
        }

        $flout .= $this->list_input($id, 'action_flags', $custom_flags, null, false, [
                'class' => $this->error_class($id, 'action', 'flag', 'action_flags_flag'),
                'id'    => "action_flags_flag{$id}"
        ]);

        $out .= html::div([
                'id'    => 'action_flags' . $id,
                'style' => 'display:' . ($is_flag_action ? 'inline' : 'none'),
                'class' => trim('checklist ' . $this->error_class($id, 'action', 'flags', 'action_flags')),
            ], $flout);

        // set variable
        $set_modifiers = [
            'lower',
            'upper',
            'lowerfirst',
            'upperfirst',
            'quotewildcard',
            'length'
        ];

        $out .= '<div id="action_set' .$id.'" class="composite" style="display:' .($action['type'] == 'set' ? 'inline' : 'none') .'">';
        foreach (['name', 'value'] as $unit) {
            $out .= '<span class="label">' .rcube::Q($this->plugin->gettext('setvar' . $unit)) . '</span><br>';
            $out .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => '_action_var' . $unit . '[' . $id . ']',
                    'id'    => 'action_var' . $unit . $id,
                    'value' => $action[$unit] ?? '',
                    'size'  => 35,
                    'class' => $this->error_class($id, 'action', $unit, 'action_var' . $unit),
            ]);
            $out .= '<br>';
        }

        $smout = '';
        foreach ($set_modifiers as $s_m) {
            $smout .= html::label(null,
                html::tag('input', [
                    'type'    => 'checkbox',
                    'name'    => "_action_varmods[$id][]",
                    'value'   => $s_m,
                    'checked' => array_key_exists($s_m, (array) $action) && !empty($action[$s_m]),
                ])
                . rcube::Q($this->plugin->gettext('var' . $s_m))
            );
        }

        $out .= '<span class="label">' .rcube::Q($this->plugin->gettext('setvarmodifiers')) . '</span>';
        $out .= html::div('checklist', $smout);
        $out .= '</div>';

        // notify
        $notify_methods     = (array) $this->rc->config->get('managesieve_notify_methods');
        $importance_options = $this->notify_importance_options;

        if (empty($notify_methods)) {
            $notify_methods = $this->notify_methods;
        }

        $method = $target = '';

        if (!empty($action['method'])) {
            list($method, $target) = explode(':', $action['method'], 2);
            $method = strtolower($method);
        }

        if ($method && !in_array($method, $notify_methods)) {
            $notify_methods[] = $method;
        }

        $select_method = new html_select([
            'name'  => "_action_notifymethod[$id]",
            'id'    => "_action_notifymethod$id",
            'class' => 'input-group-prepend custom-select ' . $this->error_class($id, 'action', 'method', 'action_notifymethod'),
        ]);

        foreach ($notify_methods as $m_n) {
            $select_method->add(rcube::Q($this->rc->text_exists('managesieve.notifymethod'.$m_n) ? $this->plugin->gettext('managesieve.notifymethod'.$m_n) : $m_n), $m_n);
        }

        $select_importance = new html_select([
            'name'  => "_action_notifyimportance[$id]",
            'id'    => "_action_notifyimportance$id",
            'class' => 'custom-select ' . $this->error_class($id, 'action', 'importance', 'action_notifyimportance')
        ]);

        foreach ($importance_options as $io_v => $io_n) {
            $select_importance->add(rcube::Q($this->plugin->gettext($io_n)), $io_v);
        }

        // @TODO: nice UI for mailto: (other methods too) URI parameters
        $out .= '<div id="action_notify' .$id.'" style="display:' .($action['type'] == 'notify' ? 'inline' : 'none') .'" class="composite">';
        $out .= '<span class="label">' .rcube::Q($this->plugin->gettext('notifytarget')) . '</span><br>';
        $out .= '<div class="input-group">';
        $out .= $select_method->show($method);
        $out .= html::tag('input', [
                'type'  => 'text',
                'name'  => "_action_notifytarget[$id]",
                'id'    => 'action_notifytarget' . $id,
                'value' => $target,
                'size'  => 25,
                'class' => $this->error_class($id, 'action', 'target', 'action_notifytarget'),
        ]);
        $out .= '</div>';
        $out .= '<br><span class="label">'. rcube::Q($this->plugin->gettext('notifymessage')) .'</span><br>';
        $out .= html::tag('textarea', [
                'name'  => "_action_notifymessage[$id]",
                'id'    => 'action_notifymessage' . $id,
                'rows'  => 3,
                'cols'  => 35,
                'class' => $this->error_class($id, 'action', 'message', 'action_notifymessage'),
            ], isset($action['message']) ? rcube::Q($action['message'], 'strict', false) : ''
        );
        if (in_array('enotify', $this->exts)) {
            $out .= '<br><span class="label">' .rcube::Q($this->plugin->gettext('notifyfrom')) . '</span><br>';
            $out .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_action_notifyfrom[$id]",
                    'id'    => 'action_notifyfrom' . $id,
                    'value' => $action['from'] ?? '',
                    'size'  => 35,
                    'class' => $this->error_class($id, 'action', 'from', 'action_notifyfrom'),
            ]);
        }
        $out .= '<br><span class="label">' . rcube::Q($this->plugin->gettext('notifyimportance')) . '</span><br>';
        $out .= $select_importance->show(!empty($action['importance']) ? (int) $action['importance'] : 2);
        $out .= '<div id="action_notifyoption_div' . $id  . '">'
            . '<span class="label">' . rcube::Q($this->plugin->gettext('notifyoptions')) . '</span><br>'
            . $this->list_input($id, 'action_notifyoption', !empty($action['options']) ? (array) $action['options'] : [],
                30, false, ['class' => $this->error_class($id, 'action', 'options', 'action_notifyoption')]
            ) . '</div>';
        $out .= '</div>';

        if (in_array('editheader', $this->exts)) {
            $action['pos'] = !empty($action['last']) ? 'last' : '';
            $pos1_selector = new html_select([
                    'name'  => "_action_addheader_pos[$id]",
                    'id'    => "action_addheader_pos$id",
                    'class' => 'custom-select ' . $this->error_class($id, 'action', 'pos', 'action_addheader_pos')
            ]);
            $pos1_selector->add($this->plugin->gettext('headeratstart'), '');
            $pos1_selector->add($this->plugin->gettext('headeratend'), 'last');
            $pos2_selector = new html_select([
                    'name'  => "_action_delheader_pos[$id]",
                    'id'    => "action_delheader_pos$id",
                    'class' => 'custom-select ' . $this->error_class($id, 'action', 'pos', 'action_delheader_pos')
            ]);
            $pos2_selector->add($this->plugin->gettext('headerfromstart'), '');
            $pos2_selector->add($this->plugin->gettext('headerfromend'), 'last');

            // addheader
            $out .= '<div id="action_addheader' .$id.'" style="display:' .($action['type'] == 'addheader' ? 'inline' : 'none') .'" class="composite">';
            $out .= '<label class="label" for="action_addheader_name' . $id .'">' .rcube::Q($this->plugin->gettext('headername')) . '</label><br>';
            $out .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_action_addheader_name[$id]",
                    'id'    => "action_addheader_name{$id}",
                    'value' => $action['name'] ?? '',
                    'size'  => 35,
                    'class' => $this->error_class($id, 'action', 'name', 'action_addheader_name'),
            ]);
            $out .= '<br><label class="label" for="action_addheader_value' . $id .'">'. rcube::Q($this->plugin->gettext('headervalue')) .'</label><br>';
            $out .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_action_addheader_value[$id]",
                    'id'    => "action_addheader_value{$id}",
                    'value' => $action['value'] ?? '',
                    'size'  => 35,
                    'class' => $this->error_class($id, 'action', 'value', 'action_addheader_value'),
            ]);
            $out .= '<br><label class="label" for="action_addheader_pos' . $id .'">'. rcube::Q($this->plugin->gettext('headerpos')) .'</label><br>';
            $out .= $pos1_selector->show($action['pos']);
            $out .= '</div>';

            // deleteheader
            $out .= '<div id="action_deleteheader' .$id.'" style="display:' .($action['type'] == 'deleteheader' ? 'inline' : 'none') .'" class="composite">';
            $out .= '<label class="label" for="action_delheader_name' . $id .'">' .rcube::Q($this->plugin->gettext('headername')) . '</label><br>';
            $out .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_action_delheader_name[$id]",
                    'id'    => "action_delheader_name{$id}",
                    'value' => $action['name'] ?? '',
                    'size'  => 35,
                    'class' => $this->error_class($id, 'action', 'name', 'action_delheader_name'),
            ]);
            $out .= '<br><label class="label" for="action_delheader_value' . $id .'">'. rcube::Q($this->plugin->gettext('headerpatterns')) .'</label><br>';
            $out .= $this->list_input($id, 'action_delheader_value', $action['value'] ?? null,
                null, false, ['class' => $this->error_class($id, 'action', 'value', 'action_delheader_value')]) . "\n";
            $out .= '<br><div class="adv input-group">';
            $out .= html::span('label input-group-prepend', html::label([
                    'class' => 'input-group-text', 'for' => 'action_delheader_op'.$id
                ], rcube::Q($this->plugin->gettext('headermatchtype'))));
            $out .= $this->match_type_selector('action_delheader_op', $id, $action['match-type'] ?? null, null, 'basic');
            $out .= '</div>';
            $out .= '<div class="adv input-group">';
            $out .= html::span('label input-group-prepend', html::label([
                    'class' => 'input-group-text', 'for' => 'action_delheader_comp_op'.$id
                ], rcube::Q($this->plugin->gettext('comparator'))));
            $out .= $this->comparator_selector($action['comparator'] ?? null, 'action_delheader_comp', $id);
            $out .= '</div>';
            $out .= '<br><label class="label" for="action_delheader_index' . $id .'">'. rcube::Q($this->plugin->gettext('headeroccurrence')) .'</label><br>';
            $out .= '<div class="input-group">';
            $out .= html::tag('input', [
                    'type'  => 'text',
                    'name'  => "_action_delheader_index[$id]",
                    'id'    => "action_delheader_index{$id}",
                    'value' => !empty($action['index']) ? intval($action['index']) : '',
                    'size'  => 5,
                    'class' => $this->error_class($id, 'action', 'index', 'action_delheader_index'),
            ]);
            $out .= ' ' . $pos2_selector->show($action['pos']);
            $out .= '</div></div>';
        }

        // mailbox select
        $additional = [];
        if ($action['type'] == 'fileinto' && isset($action['target'])) {
            // make sure non-existing (or unsubscribed) mailbox is listed (#1489956)
            if ($mailbox = $this->mod_mailbox($action['target'], 'out')) {
                $additional = [$mailbox];
            }
        }
        else {
            $mailbox = '';
        }

        $select = rcmail_action::folder_selector([
                'maxlength'  => 100,
                'name'       => "_action_mailbox[$id]",
                'id'         => "action_mailbox{$id}",
                'style'      => 'display:'.(empty($action['type']) || $action['type'] == 'fileinto' ? 'inline' : 'none'),
                'additional' => $additional,
        ]);
        $out .= $select->show($mailbox);
        $out .= '</td>';

        // add/del buttons
        $add_label = rcube::Q($this->plugin->gettext('add'));
        $del_label = rcube::Q($this->plugin->gettext('del'));
        $out .= '<td class="rowbuttons">';
        $out .= sprintf('<a href="#" id="actionadd%s" title="%s" onclick="rcmail.managesieve_actionadd(%s)" class="button create add">'
            . '<span class="inner">%s</span></a>', $id, $add_label, $id, $add_label);
        $out .= sprintf('<a href="#" id="actiondel%s" title="%s" onclick="rcmail.managesieve_actiondel(%s)" class="button delete del%s">'
            . '<span class="inner">%s</span></a>', $id, $del_label, $id, ($rows_num < 2 ? ' disabled' : ''), $del_label);
        $out .= '</td>';

        $out .= '</tr></table>';

        $out .= $div ? "</div>\n" : '';

        return $out;
    }

    /**
     * Generates a numeric identifier for a filter
     */
    protected function genid()
    {
        return preg_replace('/[^0-9]/', '', microtime(true));
    }

    /**
     * Trims and makes safe an input value
     *
     * @param string|array $str        Input value
     * @param bool         $allow_html Allow HTML tags in the value
     * @param bool         $trim       Trim the value
     *
     * @return string|array
     */
    protected function strip_value($str, $allow_html = false, $trim = true)
    {
        if (is_array($str)) {
            foreach ($str as $idx => $val) {
                $str[$idx] = $this->strip_value($val, $allow_html, $trim);

                if ($str[$idx] === '') {
                    unset($str[$idx]);
                }
            }

            return $str;
        }

        $str = (string) $str;

        if (!$allow_html) {
            $str = strip_tags($str);
        }

        return $trim ? trim($str) : $str;
    }

    /**
     * Returns error class, if there's a form error "registered"
     */
    protected function error_class($id, $type, $target, $elem_prefix = '')
    {
        // TODO: tooltips
        if (
            ($type == 'test' && !empty($this->errors['tests'][$id][$target]))
            || ($type == 'action' && !empty($this->errors['actions'][$id][$target]))
        ) {
            $str = $this->errors[$type == 'test' ? 'tests' : 'actions'][$id][$target];
            $this->add_tip($elem_prefix . $id, $str, true);

            return 'error';
        }

        return '';
    }

    protected function add_tip($id, $str, $error = false)
    {
        $class = $error ? 'sieve error' : '';

        $this->tips[] = [$id, $class, $str];
    }

    protected function print_tips()
    {
        if (empty($this->tips)) {
            return;
        }

        $script = rcmail_output::JS_OBJECT_NAME.'.managesieve_tip_register('.json_encode($this->tips).');';
        $this->rc->output->add_script($script, 'docready');
    }

    protected function list_input($id, $name, $value, $size = null, $hidden = false, $attrib = [])
    {
        $value = (array) $value;
        $value = array_map(['rcube', 'Q'], $value);
        $value = implode("\n", $value);

        $attrib = array_merge($attrib, [
                'data-type' => 'list',
                'data-size' => $size,
                'data-hidden' => $hidden ?: null,
                'name'      => '_' . $name . '[' . $id . ']',
                'style'     => 'display:none',
        ]);

        if (empty($attrib['id'])) {
            $attrib['id'] = $name . $id;
        }

        return html::tag('textarea', $attrib, $value);
    }

    /**
     * Validate input for date part elements
     */
    protected function validate_date_part($type, $value)
    {
        // we do simple validation of date/part format
        switch ($type) {
            case 'date': // yyyy-mm-dd
                return preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $value);
            case 'iso8601':
                return preg_match('/^[0-9: .,ZWT+-]+$/', $value);
            case 'std11':
                return preg_match('/^((Sun|Mon|Tue|Wed|Thu|Fri|Sat),\s+)?[0-9]{1,2}\s+'
                    . '(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+[0-9]{2,4}\s+'
                    . '[0-9]{2}:[0-9]{2}(:[0-9]{2})?\s+([+-]*[0-9]{4}|[A-Z]{1,3})$/', $value);
            case 'julian':
                return preg_match('/^[0-9]+$/', $value);
            case 'time': // hh:mm:ss
                return preg_match('/^[0-9]{2}:[0-9]{2}:[0-9]{2}$/', $value);
            case 'year':
                return preg_match('/^[0-9]{4}$/', $value);
            case 'month':
                return preg_match('/^[0-9]{2}$/', $value) && $value > 0 && $value < 13;
            case 'day':
                return preg_match('/^[0-9]{2}$/', $value) && $value > 0 && $value < 32;
            case 'hour':
                return preg_match('/^[0-9]{2}$/', $value) && $value < 24;
            case 'minute':
                return preg_match('/^[0-9]{2}$/', $value) && $value < 60;
            case 'second':
                // According to RFC5260, seconds can be from 00 to 60
                return preg_match('/^[0-9]{2}$/', $value) && $value < 61;
            case 'weekday':
                return preg_match('/^[0-9]$/', $value) && $value < 7;
            case 'zone':
                return preg_match('/^[+-][0-9]{4}$/', $value);
        }
    }

    /**
     * Converts mailbox name from/to UTF7-IMAP from/to internal Sieve encoding
     * with delimiter replacement.
     *
     * @param string $mailbox Mailbox name
     * @param string $mode    Conversion direction ('in'|'out')
     *
     * @return string Mailbox name
     */
    protected function mod_mailbox($mailbox, $mode = 'out')
    {
        $delimiter         = $_SESSION['imap_delimiter'];
        $replace_delimiter = $this->rc->config->get('managesieve_replace_delimiter');
        $mbox_encoding     = $this->rc->config->get('managesieve_mbox_encoding', 'UTF7-IMAP');

        if ($mode == 'out') {
            $mailbox = rcube_charset::convert($mailbox, $mbox_encoding, 'UTF7-IMAP');
            if ($replace_delimiter && $replace_delimiter != $delimiter) {
                $mailbox = str_replace($replace_delimiter, $delimiter, $mailbox);
            }
        }
        else {
            $mailbox = rcube_charset::convert($mailbox, 'UTF7-IMAP', $mbox_encoding);
            if ($replace_delimiter && $replace_delimiter != $delimiter) {
                $mailbox = str_replace($delimiter, $replace_delimiter, $mailbox);
            }
        }

        return $mailbox;
    }

    /**
     * List sieve scripts
     *
     * @return array Scripts list
     */
    public function list_scripts()
    {
        if ($this->list !== null) {
            return $this->list;
        }

        $this->list = $this->sieve->get_scripts();

        // Handle active script(s) and list of scripts according to Kolab's KEP:14
        if ($this->rc->config->get('managesieve_kolab_master')) {
            // Skip protected names
            foreach ((array) $this->list as $idx => $name) {
                $_name = strtoupper($name);
                if ($_name == 'MASTER') {
                    $master_script = $name;
                }
                else if ($_name == 'MANAGEMENT') {
                    $management_script = $name;
                }
                else if ($_name == 'USER') {
                    $user_script = $name;
                }
                else {
                    continue;
                }

                unset($this->list[$idx]);
            }

            // get active script(s), read USER script
            if (!empty($user_script)) {
                $extension = $this->rc->config->get('managesieve_filename_extension', '.sieve');
                $filename_regex = '/'.preg_quote($extension, '/').'$/';
                $_SESSION['managesieve_user_script'] = $user_script;

                $this->sieve->load($user_script);

                if (!empty($this->sieve->script)) {
                    foreach ($this->sieve->script->as_array() as $rules) {
                        foreach ($rules['actions'] as $action) {
                            if ($action['type'] == 'include' && empty($action['global'])) {
                                $name = preg_replace($filename_regex, '', $action['target']);
                                // make sure the script exist
                                if (in_array($name, $this->list)) {
                                    $this->active[] = $name;
                                }
                            }
                        }
                    }
                }
            }
            // create USER script if it doesn't exist
            else {
                $content = "# USER Management Script\n"
                    ."#\n"
                    ."# This script includes the various active sieve scripts\n"
                    ."# it is AUTOMATICALLY GENERATED. DO NOT EDIT MANUALLY!\n"
                    ."#\n"
                    ."# For more information, see http://wiki.kolab.org/KEP:14#USER\n"
                    ."#\n";

                if ($this->sieve->save_script('USER', $content)) {
                    $_SESSION['managesieve_user_script'] = 'USER';
                    if (empty($this->master_file)) {
                        $this->sieve->activate('USER');
                    }
                }
            }
        }
        else if (!empty($this->list)) {
            // Get active script name
            if ($active = $this->sieve->get_active()) {
                $this->active = [$active];
            }

            // Hide scripts from config
            $exceptions = $this->rc->config->get('managesieve_filename_exceptions');
            if (!empty($exceptions)) {
                $this->list = array_diff($this->list, (array)$exceptions);
            }
        }

        // When no script listing allowed limit the list to the defined script
        if (in_array('list_sets', $this->disabled_actions)) {
            $script_name = $this->rc->config->get('managesieve_script_name', 'roundcube');
            $this->list = array_intersect($this->list, [$script_name]);
            $this->active = null;
            if (in_array($script_name, $this->list)) {
                // Because its the only allowed script make sure its active
                $this->activate_script($script_name);
            }
        }

        // reindex
        if (!empty($this->list)) {
            $this->list = array_values($this->list);
        }

        return $this->list;
    }

    /**
     * Removes sieve script
     *
     * @param string $name Script name
     *
     * @return bool True on success, False on failure
     */
    public function remove_script($name)
    {
        $result = $this->sieve->remove($name);

        // Kolab's KEP:14
        if ($result && $this->rc->config->get('managesieve_kolab_master')) {
            $this->deactivate_script($name);
        }

        return $result;
    }

    /**
     * Activates sieve script
     *
     * @param string $name Script name
     *
     * @return bool True on success, False on failure
     */
    public function activate_script($name)
    {
        // Kolab's KEP:14
        if ($this->rc->config->get('managesieve_kolab_master')) {
            $extension   = $this->rc->config->get('managesieve_filename_extension', '.sieve');
            $user_script = $_SESSION['managesieve_user_script'];
            $result      = false;

            // if the script is not active...
            if ($user_script && array_search($name, (array) $this->active) === false) {
                // ...rewrite USER file adding appropriate include command
                if ($this->sieve->load($user_script)) {
                    $script = $this->sieve->script->as_array();
                    $list   = [];
                    $regexp = '/' . preg_quote($extension, '/') . '$/';

                    // Create new include entry
                    $rule = [
                        'actions' => [
                            [
                                'target'   => $name . $extension,
                                'type'     => 'include',
                                'personal' => true,
                            ]
                        ]
                    ];

                    // get all active scripts for sorting
                    foreach ($script as $rid => $rules) {
                        foreach ($rules['actions'] as $action) {
                            if ($action['type'] == 'include' && empty($action['global'])) {
                                $target = $extension ? preg_replace($regexp, '', $action['target']) : $action['target'];
                                $list[] = $target;
                            }
                        }
                    }
                    $list[] = $name;

                    // Sort and find current script position
                    asort($list, SORT_LOCALE_STRING);
                    $list  = array_values($list);
                    $index = array_search($name, $list);

                    // add rule at the end of the script
                    if ($index === false || $index == count($list)-1) {
                        $this->sieve->script->add_rule($rule);
                    }
                    // add rule at index position
                    else {
                        $script2 = [];
                        foreach ($script as $rid => $rules) {
                            if ($rid == $index) {
                                $script2[] = $rule;
                            }
                            $script2[] = $rules;
                        }
                        $this->sieve->script->content = $script2;
                    }

                    $result = $this->sieve->save();
                    if ($result) {
                        $this->active[] = $name;
                    }
                }
            }
        }
        else {
            $result = $this->sieve->activate($name);
            if ($result) {
                $this->active = [$name];
            }
        }

        return $result;
    }

    /**
     * Deactivates sieve script
     *
     * @param string $name Script name
     *
     * @return bool True on success, False on failure
     */
    public function deactivate_script($name)
    {
        // Kolab's KEP:14
        if ($this->rc->config->get('managesieve_kolab_master')) {
            $extension   = $this->rc->config->get('managesieve_filename_extension', '.sieve');
            $user_script = $_SESSION['managesieve_user_script'];
            $result      = false;

            // if the script is active...
            if ($user_script && ($key = array_search($name, $this->active)) !== false) {
                // ...rewrite USER file removing appropriate include command
                if ($this->sieve->load($user_script)) {
                    $script = $this->sieve->script->as_array();
                    $name   = $name.$extension;
                    $rid    = 0;

                    foreach ($script as $rid => $rules) {
                        foreach ($rules['actions'] as $action) {
                            if ($action['type'] == 'include' && empty($action['global'])
                                && $action['target'] == $name
                            ) {
                                break 2;
                            }
                        }
                    }

                    // Entry found
                    if ($rid < count($script)) {
                        $this->sieve->script->delete_rule($rid);
                        $result = $this->sieve->save();
                        if ($result) {
                            unset($this->active[$key]);
                        }
                    }
                }
            }
        }
        else {
            $result = $this->sieve->deactivate();
            if ($result)
                $this->active = [];
        }

        return $result;
    }

    /**
     * Saves current script (adding some variables)
     */
    public function save_script($name = null)
    {
        // Kolab's KEP:14
        if ($this->rc->config->get('managesieve_kolab_master')) {
            $this->sieve->script->set_var('EDITOR', self::PROGNAME);
            $this->sieve->script->set_var('EDITOR_VERSION', self::VERSION);
        }

        return $this->sieve->save($name);
    }

    /**
     * Returns list of rules from the current script
     *
     * @return array List of rules
     */
    public function list_rules()
    {
        $result = [];
        $i      = 1;

        foreach ($this->script as $idx => $filter) {
            if (empty($filter['actions'])) {
                continue;
            }
            $fname = !empty($filter['name']) ? $filter['name'] : "#$i";
            $result[] = [
                'id'    => $idx,
                'name'  => $fname,
                'class' => !empty($filter['disabled']) ? 'disabled' : '',
            ];
            $i++;
        }

        return $result;
    }

    /**
     * Initializes internal script data
     */
    protected function init_script()
    {
        if (!$this->sieve->script) {
            return;
        }

        $this->script = $this->sieve->script->as_array();

        $headers    = [];
        $exceptions = ['date', 'currentdate', 'size', 'spamtest', 'body'];

        // find common headers used in script, will be added to the list
        // of available (predefined) headers (#1489271)
        foreach ($this->script as $rule) {
            foreach ((array) $rule['tests'] as $test) {
                if ($test['test'] == 'header') {
                    foreach ((array) $test['arg1'] as $header) {
                        $lc_header = strtolower($header);

                        // skip special names to not confuse UI
                        if (in_array($lc_header, $exceptions)) {
                            continue;
                        }

                        if (!isset($this->headers[$lc_header]) && !isset($headers[$lc_header])) {
                            $headers[$lc_header] = $header;
                        }
                    }
                }
            }
        }

        ksort($headers);

        $this->headers += $headers;
    }

    /**
     * Get all e-mail addresses of the user
     */
    protected function user_emails()
    {
        $addresses = $this->rc->user->list_emails();

        foreach ($addresses as $idx => $email) {
            $addresses[$idx] = $email['email'];
        }

        $addresses = array_unique($addresses);
        sort($addresses);

        return $addresses;
    }

    /**
     * Convert configured default headers into internal format
     */
    protected function get_default_headers()
    {
        $default = ['Subject', 'From', 'To'];
        $headers = (array) $this->rc->config->get('managesieve_default_headers', $default);

        if (empty($headers) || $headers === ['']) {
            $headers = $default;
        }

        $keys    = array_map('strtolower', $headers);
        $headers = array_combine($keys, $headers);

        // make sure there's no Date header
        unset($headers['date']);

        return $headers;
    }

    /**
     * Match type selector
     */
    protected function match_type_selector($name, $id, $test, $rule = null, $mode = 'all')
    {
        // matching type select (operator)
        $select_op = new html_select([
                'name'     => "_{$name}[$id]",
                'id'       => "{$name}{$id}",
                'style'    => 'display:' . (!in_array($rule, ['size', 'duplicate', 'spamtest']) ? 'inline' : 'none'),
                'class'    => 'operator_selector col-6 custom-select',
                'onchange' => "{$name}_select(this, '{$id}')",
        ]);

        $select_op->add(rcube::Q($this->plugin->gettext('filtercontains')), 'contains');
        $select_op->add(rcube::Q($this->plugin->gettext('filternotcontains')), 'notcontains');
        $select_op->add(rcube::Q($this->plugin->gettext('filteris')), 'is');
        $select_op->add(rcube::Q($this->plugin->gettext('filterisnot')), 'notis');
        if ($mode == 'all') {
            $select_op->add(rcube::Q($this->plugin->gettext('filterexists')), 'exists');
            $select_op->add(rcube::Q($this->plugin->gettext('filternotexists')), 'notexists');
        }
        $select_op->add(rcube::Q($this->plugin->gettext('filtermatches')), 'matches');
        $select_op->add(rcube::Q($this->plugin->gettext('filternotmatches')), 'notmatches');
        if (in_array('regex', $this->exts)) {
            $select_op->add(rcube::Q($this->plugin->gettext('filterregex')), 'regex');
            $select_op->add(rcube::Q($this->plugin->gettext('filternotregex')), 'notregex');
        }
        if ($mode == 'all' && in_array('relational', $this->exts)) {
            $select_op->add(rcube::Q($this->plugin->gettext('countisgreaterthan')), 'count-gt');
            $select_op->add(rcube::Q($this->plugin->gettext('countisgreaterthanequal')), 'count-ge');
            $select_op->add(rcube::Q($this->plugin->gettext('countislessthan')), 'count-lt');
            $select_op->add(rcube::Q($this->plugin->gettext('countislessthanequal')), 'count-le');
            $select_op->add(rcube::Q($this->plugin->gettext('countequals')), 'count-eq');
            $select_op->add(rcube::Q($this->plugin->gettext('countnotequals')), 'count-ne');
            $select_op->add(rcube::Q($this->plugin->gettext('valueisgreaterthan')), 'value-gt');
            $select_op->add(rcube::Q($this->plugin->gettext('valueisgreaterthanequal')), 'value-ge');
            $select_op->add(rcube::Q($this->plugin->gettext('valueislessthan')), 'value-lt');
            $select_op->add(rcube::Q($this->plugin->gettext('valueislessthanequal')), 'value-le');
            $select_op->add(rcube::Q($this->plugin->gettext('valueequals')), 'value-eq');
            $select_op->add(rcube::Q($this->plugin->gettext('valuenotequals')), 'value-ne');
        }

        return $select_op->show($test);
    }

    protected function comparator_selector($comparator, $name, $id)
    {
        $select_comp = new html_select([
                'name'  => "_{$name}[$id]",
                'id'    => "{$name}_op{$id}",
                'class' => 'custom-select'
        ]);
        $select_comp->add(rcube::Q($this->plugin->gettext('default')), '');
        $select_comp->add(rcube::Q($this->plugin->gettext('octet')), 'i;octet');
        $select_comp->add(rcube::Q($this->plugin->gettext('asciicasemap')), 'i;ascii-casemap');
        if (in_array('comparator-i;ascii-numeric', $this->exts)) {
            $select_comp->add(rcube::Q($this->plugin->gettext('asciinumeric')), 'i;ascii-numeric');
        }

        return $select_comp->show($comparator);
    }

    /**
     * Merge a rule into the script
     */
    protected function merge_rule($rule, $existing, &$script_name = null)
    {
        // if script does not exist create a new one
        if ($script_name === null || $script_name === false) {
            $script_name = $this->create_default_script();
            $this->sieve->load($script_name);
            $this->init_script();
        }

        if (!$this->sieve->script) {
            return false;
        }

        $script_active   = in_array($script_name, $this->active);
        $rule_active     = empty($rule['disabled']);
        $rule_index      = 0;
        $activate_script = false;

        // If the script is not active, but the rule is,
        // put the rule in an active script if there is one
        if (!$script_active && $rule_active && !empty($this->active)) {
            // Remove the rule from current (inactive) script
            if (isset($existing['idx'])) {
                unset($this->script[$existing['idx']]);
                $this->sieve->script->content = $this->script;
                $this->save_script($script_name);
            }

            // Load and init the active script, add the rule there
            $this->sieve->load($script_name = $this->active[0]);
            $this->init_script();
            array_unshift($this->script, $rule);
        }
        // update original forward rule/script
        else {
            // re-order rules if needed
            if (isset($rule['after']) && $rule['after'] !== '') {
                // unset the original rule
                if (isset($existing['idx'])) {
                    $this->script[$existing['idx']] = null;
                }

                // add at target position
                if ($rule['after'] >= count($this->script) - 1) {
                    $this->script[] = $rule;
                    $this->script = array_values(array_filter($this->script));
                    $rule_index = count($this->script);
                }
                else {
                    $script = [];

                    foreach ($this->script as $idx => $r) {
                        if ($r) {
                            $script[] = $r;
                        }

                        if ($idx == $rule['after']) {
                            $script[] = $rule;
                            $rule_index = count($script);
                        }
                    }

                    $this->script = $script;
                }
            }
            // rule exists, update it "in place"
            else if (isset($existing['idx'])) {
                $this->script[$existing['idx']] = $rule;
                $rule_index = $existing['idx'];
            }
            // otherwise put the rule on top
            else {
                array_unshift($this->script, $rule);
                $rule_index = 0;
            }

            // if the script is not active, but the rule is, we need to de-activate
            // all rules except the forward rule
            if (!$script_active && $rule_active) {
                $activate_script = true;
                foreach ($this->script as $idx => $r) {
                    if ($idx !== $rule_index) {
                        $this->script[$idx]['disabled'] = true;
                    }
                }
            }
        }

        $this->sieve->script->content = $this->script;

        // save the script
        $saved = $this->save_script($script_name);

        // activate the script
        if ($saved && $activate_script) {
            $this->activate_script($script_name);
        }

        return $saved;
    }

    /**
     * Create default script
     */
    protected function create_default_script()
    {
        // if script not exists build default script contents
        $script_file  = $this->rc->config->get('managesieve_default');
        $script_name  = $this->rc->config->get('managesieve_script_name');
        $kolab_master = $this->rc->config->get('managesieve_kolab_master');
        $content      = '';

        if (empty($script_name)) {
            $script_name = 'roundcube';
        }

        if ($script_file && !$kolab_master && is_readable($script_file) && !is_dir($script_file)) {
            $content = file_get_contents($script_file);
        }

        // add script and set it active
        if ($this->sieve->save_script($script_name, $content)) {
            $this->activate_script($script_name);
            $this->list[] = $script_name;
        }

        return $script_name;
    }

    /**
     * Read email address input, parse it and check validity
     */
    protected function action_email_input($i, $field)
    {
        // According to RFC5230 the :from string must specify a valid [RFC2822] mailbox-list
        // we'll try to extract addresses and validate them separately
        $from = rcube_mime::decode_address_list($this->form['actions'][$i][$field], null, true, RCUBE_CHARSET);
        foreach ((array) $from as $idx => $addr) {
            if (empty($addr['mailto']) || !rcube_utils::check_email($addr['mailto'])) {
                $this->errors['actions'][$i][$field] = $this->plugin->gettext('noemailwarning');
                break;
            }
            else {
                $from[$idx] = format_email_recipient($addr['mailto'], $addr['name']);
            }
        }

        // Only one address is allowed (at least on cyrus imap)
        if (is_array($from) && count($from) > 1) {
            $this->errors['actions'][$i][$field] = $this->plugin->gettext('noemailwarning');
        }

        // Then we convert it back to RFC2822 format
        if (empty($this->errors['actions'][$i][$field]) && !empty($from)) {
            $this->form['actions'][$i][$field] = Mail_mimePart::encodeHeader(
                'From', implode(', ', $from), RCUBE_CHARSET, 'base64', '');

            return true;
        }

        return false;
    }
}
PK|c�\e�z33)managesieve/lib/Roundcube/rcube_sieve.phpnu�[���<?php

/**
 * Classes for managesieve operations (using PEAR::Net_Sieve)
 *
 * Copyright (C) The Roundcube Dev Team
 * Copyright (C) Kolab Systems AG
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

// Managesieve Protocol: RFC5804

class rcube_sieve
{
    private $sieve;                 // Net_Sieve object
    private $error      = false;    // error flag
    private $errorLines = [];       // array of line numbers within sieve script which raised an error
    private $list       = [];       // scripts list
    private $exts;                  // array of supported extensions
    private $active;                // active script name

    public $script;                 // rcube_sieve_script object
    public $current;                // name of currently loaded script

    const ERROR_CONNECTION = 1;
    const ERROR_LOGIN      = 2;
    const ERROR_NOT_EXISTS = 3;    // script not exists
    const ERROR_INSTALL    = 4;    // script installation
    const ERROR_ACTIVATE   = 5;    // script activation
    const ERROR_DELETE     = 6;    // script deletion
    const ERROR_INTERNAL   = 7;    // internal error
    const ERROR_DEACTIVATE = 8;    // script activation
    const ERROR_OTHER      = 255;  // other/unknown error


    /**
     * Object constructor
     *
     * @param string $username  Username (for managesieve login)
     * @param string $password  Password (for managesieve login)
     * @param string $host      Managesieve server hostname/address
     * @param string $port      Managesieve server port number
     * @param string $auth_type Managesieve authentication method
     * @param bool   $usetls    Enable/disable TLS use
     * @param array  $disabled  Disabled extensions
     * @param bool   $debug     Enable/disable debugging
     * @param string $auth_cid  Proxy authentication identifier
     * @param string $auth_pw   Proxy authentication password
     * @param array  $options   List of options to pass to stream_context_create().
     */
    public function __construct($username, $password = '', $host = 'localhost', $port = 4190,
        $auth_type = null, $usetls = true, $disabled = [], $debug = false,
        $auth_cid = null, $auth_pw = null, $options = [], $gssapi_principal = null,
        $gssapi_cname = null)
    {
        $this->sieve = new Net_Sieve();

        if ($debug) {
            $this->sieve->setDebug(true, [$this, 'debug_handler']);
        }

        if (isset($gssapi_principal)) {
            $this->sieve->setServicePrincipal($gssapi_principal);
        }

        if (isset($gssapi_cname)) {
            $this->sieve->setServiceCN($gssapi_cname);
        }

        $result = $this->sieve->connect($host, $port, $options, $usetls);

        if (is_a($result, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_CONNECTION);
        }

        $authz = null;

        if (!empty($auth_cid)) {
            $authz    = $username;
            $username = $auth_cid;
        }

        if (!empty($auth_pw)) {
            $password = $auth_pw;
        }

        $result = $this->sieve->login($username, $password, $auth_type ? strtoupper($auth_type) : null, $authz);

        if (is_a($result, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_LOGIN);
        }

        $this->exts = $this->get_extensions();

        // disable features by config
        if (!empty($disabled)) {
            // we're working on lower-cased names
            $disabled = array_map('strtolower', (array) $disabled);
            foreach ($disabled as $ext) {
                if (($idx = array_search($ext, $this->exts)) !== false) {
                    unset($this->exts[$idx]);
                }
            }
        }
    }

    public function __destruct()
    {
        $this->sieve->disconnect();
    }

    /**
     * Getter for error code
     */
    public function error()
    {
        return $this->error ?: false;
    }

    /**
     * Saves current script into server
     */
    public function save($name = null)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        if (!$this->script) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        if (!$name) {
            $name = $this->current;
        }

        $script = $this->script->as_text();

        if (!$script) {
            $script = '/* empty script */';
        }

        $result = $this->sieve->installScript($name, $script);
        if (is_a($result, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_INSTALL);
        }

        return true;
    }

    /**
     * Saves text script into server
     */
    public function save_script($name, $content = null)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        if (!$content) {
            $content = '/* empty script */';
        }

        $result = $this->sieve->installScript($name, $content);

        if (is_a($result, 'PEAR_Error')) {
            $rawErrorMessage = $result->getMessage();
            $errMessages = preg_split("/$name:/", $rawErrorMessage);

            if (count($errMessages) > 0) {
                foreach ($errMessages as $singleError) {
                    $res = preg_match('/line (\d+):(.*)/i', $singleError, $matches);

                    if ($res === 1 ) {
                        if (count($matches) > 2) {
                            $this->errorLines[] = ['line' => $matches[1], 'msg' => $matches[2]];
                        }
                        else {
                            $this->errorLines[] = ['line' => $matches[1], 'msg' => null];
                        }
                    }
                }
            }

            return $this->_set_error(self::ERROR_INSTALL);
        }

        return true;
    }

    /**
     * Returns the current error line within the saved sieve script
     */
    public function get_error_lines()
    {
        return $this->errorLines;
    }

    /**
     * Activates specified script
     */
    public function activate($name = null)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        if (!$name) {
            $name = $this->current;
        }

        $result = $this->sieve->setActive($name);

        if (is_a($result, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_ACTIVATE);
        }

        $this->active = $name;

        return true;
    }

    /**
     * De-activates specified script
     */
    public function deactivate()
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        $result = $this->sieve->setActive('');

        if (is_a($result, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_DEACTIVATE);
        }

        $this->active = null;

        return true;
    }

    /**
     * Removes specified script
     */
    public function remove($name = null)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        if (!$name) {
            $name = $this->current;
        }

        // script must be deactivated first
        if ($name == $this->sieve->getActive()) {
            $result = $this->sieve->setActive('');

            if (is_a($result, 'PEAR_Error')) {
                return $this->_set_error(self::ERROR_DELETE);
            }

            $this->active = null;
        }

        $result = $this->sieve->removeScript($name);

        if (is_a($result, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_DELETE);
        }

        if ($name == $this->current) {
            $this->current = null;
        }

        $this->list = null;

        return true;
    }

    /**
     * Gets list of supported by server Sieve extensions
     */
    public function get_extensions()
    {
        if ($this->exts) {
            return $this->exts;
        }

        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        $ext = $this->sieve->getExtensions();

        if (is_a($ext, 'PEAR_Error')) {
            return [];
        }

        // we're working on lower-cased names
        $ext = array_map('strtolower', (array) $ext);

        if ($this->script) {
            $supported = $this->script->get_extensions();
            $ext       = array_values(array_intersect($ext, $supported));
        }

        return $ext;
    }

    /**
     * Gets list of scripts from server
     */
    public function get_scripts()
    {
        if (!$this->list) {
            if (!$this->sieve) {
                return $this->_set_error(self::ERROR_INTERNAL);
            }

            $active = null;
            $list   = $this->sieve->listScripts($active);

            if (is_a($list, 'PEAR_Error')) {
                return $this->_set_error(self::ERROR_OTHER);
            }

            $this->list   = $list;
            $this->active = $active;
        }

        return $this->list;
    }

    /**
     * Returns active script name
     */
    public function get_active()
    {
        if ($this->active !== null) {
            return $this->active;
        }

        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        return $this->active = $this->sieve->getActive();
    }

    /**
     * Loads script by name
     */
    public function load($name)
    {
        if ($this->current === $name) {
            return true;
        }

        $script = $this->get_script($name);

        if ($script === false) {
            return false;
        }

        // try to parse to Roundcube format
        $this->script = $this->_parse($script);

        $this->current = $name;

        return true;
    }

    /**
     * Loads script from text content
     */
    public function load_script($script)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        // try to parse to Roundcube format
        $this->script = $this->_parse($script);
    }

    /**
     * Creates rcube_sieve_script object from text script
     */
    private function _parse($txt)
    {
        // parse
        $script = new rcube_sieve_script($txt, $this->exts);

        // fix/convert to Roundcube format
        if (!empty($script->content)) {
            // replace all elsif with if+stop, we support only ifs
            foreach ($script->content as $idx => $rule) {
                if (empty($rule['type']) || !preg_match('/^(if|elsif|else)$/', $rule['type'])) {
                    continue;
                }

                $script->content[$idx]['type'] = 'if';

                // 'stop' not found?
                foreach ($rule['actions'] as $action) {
                    if (preg_match('/^(stop|vacation)$/', $action['type'])) {
                        continue 2;
                    }
                }

                if (!empty($script->content[$idx+1]) && $script->content[$idx+1]['type'] != 'if') {
                    $script->content[$idx]['actions'][] = ['type' => 'stop'];
                }
            }
        }

        return $script;
    }

    /**
     * Gets specified script as text
     */
    public function get_script($name)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        $content = $this->sieve->getScript($name);

        if (is_a($content, 'PEAR_Error')) {
            return $this->_set_error(self::ERROR_OTHER);
        }

        return $content;
    }

    /**
     * Creates empty script or a copy of another script
     */
    public function copy($name, $copy)
    {
        if (!$this->sieve) {
            return $this->_set_error(self::ERROR_INTERNAL);
        }

        $content = '';

        if ($copy) {
            $content = $this->sieve->getScript($copy);

            if (is_a($content, 'PEAR_Error')) {
                return $this->_set_error(self::ERROR_OTHER);
            }
        }

        return $this->save_script($name, $content);
    }

    private function _set_error($error)
    {
        $this->error = $error;
        return false;
    }

    /**
     * This is our own debug handler for connection
     */
    public function debug_handler($sieve, $message)
    {
        rcube::write_log('sieve', preg_replace('/\r\n$/', '', $message));
    }
}
PK|c�\Wd�.�<�<1managesieve/lib/Roundcube/rcube_sieve_forward.phpnu�[���<?php

/**
 * Managesieve Forward Engine
 *
 * Engine part of Managesieve plugin implementing UI and backend access.
 *
 * Copyright (C) Kolab Systems AG
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class rcube_sieve_forward extends rcube_sieve_engine
{
    protected $error;
    protected $script_name;
    protected $forward = [];

    function actions()
    {
        $error = $this->start('forward');

        // find current forward rule
        if (!$error) {
            $this->forward_rule();
            $this->forward_post();
        }

        $this->plugin->add_label('forward.saving');
        $this->rc->output->add_handlers([
                'forwardform' => [$this, 'forward_form'],
        ]);

        $this->rc->output->set_pagetitle($this->plugin->gettext('forward'));
        $this->rc->output->send('managesieve.forward');
    }

    /**
     * Find and load sieve script with/for forward rule
     *
     * @param string $script_name Optional script name
     *
     * @return int Connection status: 0 on success, >0 on failure
     */
    protected function load_script($script_name = null)
    {
        if ($this->script_name !== null) {
            return 0;
        }

        $list     = $this->list_scripts();
        $master   = $this->rc->config->get('managesieve_kolab_master');
        $included = [];

        $this->script_name = false;

        // first try the active script(s)...
        if (!empty($this->active)) {
            // Note: there can be more than one active script on KEP:14-enabled server
            foreach ($this->active as $script) {
                if ($this->sieve->load($script)) {
                    foreach ($this->sieve->script->as_array() as $rule) {
                        if (!empty($rule['actions'])) {
                            if ($rule['actions'][0]['type'] == 'redirect') {
                                $this->script_name = $script;
                                return 0;
                            }
                            else if (empty($master) && $rule['actions'][0]['type'] == 'include') {
                                $included[] = $rule['actions'][0]['target'];
                            }
                        }
                    }
                }
            }

            // ...else try scripts included in active script (not for KEP:14)
            foreach ($included as $script) {
                if ($this->sieve->load($script)) {
                    foreach ($this->sieve->script->as_array() as $rule) {
                        if (!empty($rule['actions']) && $rule['actions'][0]['type'] == 'redirect') {
                            $this->script_name = $script;
                            return 0;
                        }
                    }
                }
            }
        }

        // try all other scripts
        if (!empty($list)) {
            // else try included scripts
            foreach (array_diff($list, $included, $this->active) as $script) {
                if ($this->sieve->load($script)) {
                    foreach ($this->sieve->script->as_array() as $rule) {
                        if (!empty($rule['actions']) && $rule['actions'][0]['type'] == 'redirect') {
                            $this->script_name = $script;
                            return 0;
                        }
                    }
                }
            }

            // none of the scripts contains existing forward rule
            // use any (first) active or just existing script (in that order)
            if (!empty($this->active)) {
                $this->sieve->load($this->script_name = $this->active[0]);
            }
            else {
                $this->sieve->load($this->script_name = $list[0]);
            }
        }

        return $this->sieve->error();
    }

    private function forward_rule()
    {
        if ($this->script_name === false || $this->script_name === null || !$this->sieve->load($this->script_name)) {
            return;
        }

        $list   = [];
        $active = in_array($this->script_name, $this->active);

        // find (first) simple forward rule that can be expressed with the minimal settings
        foreach ($this->script as $idx => $rule) {
            if (empty($this->forward) && !empty($rule['actions']) && $rule['actions'][0]['type'] == 'redirect') {
                $ignore_rule = false;
                $target      = null;
                $stop_found  = false;
                $action      = 'keep';

                foreach ($rule['actions'] as $act) {
                    if ($stop_found) {
                        // we might loose information if there rules after the stop
                        $ignore_rule = true;
                    }
                    if ($act['type'] == 'keep') {
                        $action = 'copy';
                    }
                    else if ($act['type'] == 'stop') {
                        // we might loose information if there are rules after the stop
                        $stop_found = true;
                    }
                    else if ($act['type'] == 'discard') {
                        $action = 'redirect';
                    }
                    else if ($act['type'] == 'redirect') {
                        if (!empty($target)) {
                            // we cannot use this rule, because there are multiple targets
                            $ignore_rule = true;
                        }
                        else {
                            $action = !empty($act['copy']) ? 'copy' : 'redirect';
                            $target = $act['target'];
                        }
                    }
                    else {
                        // we cannot use this rule, because there are unknown commands, and we don't want to overwrite them.
                        $ignore_rule = true;
                    }
                }

                if (count($rule['tests']) != 1 || $rule['tests'][0]['test'] != "true" || $rule['tests'][0]['not'] != null) {
                    // ignore rules that have special conditions
                    $ignore_rule = true;
                }

                if (!$ignore_rule) {
                    $this->forward = array_merge($rule['actions'][0], [
                        'idx'      => $idx,
                        'disabled' => $rule['disabled'] || !$active,
                        'name'     => $rule['name'],
                        'tests'    => $rule['tests'],
                        'action'   => $action,
                        'target'   => $target,
                    ]);
                }
            }
            else if ($active) {
                $list[$idx] = $rule['name'];
            }
        }

        $this->forward['list'] = $list;
    }

    private function forward_post()
    {
        if (empty($_POST)) {
            return;
        }

        $status = rcube_utils::get_input_string('forward_status', rcube_utils::INPUT_POST);
        $action = rcube_utils::get_input_string('forward_action', rcube_utils::INPUT_POST);
        $target = rcube_utils::get_input_string('action_target', rcube_utils::INPUT_POST, true);
        $target_domain = rcube_utils::get_input_string('action_domain', rcube_utils::INPUT_POST);

        $date_extension = in_array('date', $this->exts);

        if ($target_domain) {
            $target .= '@' . $target_domain;
        }

        if (empty($target) || !rcube_utils::check_email($target)) {
            $error = 'noemailwarning';
        }

        if (empty($this->forward['tests'])) {
            $forward_tests = (array) $this->rc->config->get('managesieve_forward_test', [['test' => 'true']]);
        }
        else {
            $forward_tests = (array) $this->forward['tests'];
        }

        if (empty($error)) {
            $rule               = $this->forward;
            $rule['type']       = 'if';
            $rule['name']       = !empty($rule['name']) ? $rule['name'] : $this->plugin->gettext('forward');
            $rule['disabled']   = $status == 'off';
            $rule['tests']      = $forward_tests;
            $rule['join']       = $date_extension ? count($forward_tests) > 1 : false;
            $rule['actions']    = [[
                    'type'   => 'redirect',
                    'copy'   => $action == 'copy',
                    'target' => $target,
            ]];

            if ($this->merge_rule($rule, $this->forward, $this->script_name)) {
                $this->rc->output->show_message('managesieve.forwardsaved', 'confirmation');
                $this->rc->output->send();
            }
        }

        if (empty($error)) {
            $error = 'managesieve.saveerror';
        }

        $this->rc->output->show_message($error, 'error');
        $this->rc->output->send();
    }

    /**
     * Independent forward form
     */
    public function forward_form($attrib)
    {
        // build FORM tag
        $form_id = !empty($attrib['id']) ? $attrib['id'] : 'form';
        $out     = $this->rc->output->request_form([
                'id'      => $form_id,
                'name'    => $form_id,
                'method'  => 'post',
                'task'    => 'settings',
                'action'  => 'plugin.managesieve-forward',
                'noclose' => true
            ] + $attrib
        );


        // form elements
        $status = new html_select(['name' => 'forward_status', 'id' => 'forward_status', 'class' => 'custom-select']);
        $action = new html_select(['name' => 'forward_action', 'id' => 'forward_action', 'class' => 'custom-select']);

        $status->add($this->plugin->gettext('forward.on'), 'on');
        $status->add($this->plugin->gettext('forward.off'), 'off');

        if (in_array('copy', $this->exts)) {
            $action->add($this->plugin->gettext('forward.copy'), 'copy');
        }
        $action->add($this->plugin->gettext('forward.redirect'), 'redirect');

        // force domain selection in redirect email input
        $domains  = (array) $this->rc->config->get('managesieve_domains');
        $redirect = !empty($this->forward['action'])
            && ($this->forward['action'] == 'redirect' || $this->forward['action'] == 'copy');

        if (!empty($domains)) {
            sort($domains);

            $domain_select = new html_select(['name' => 'action_domain', 'id' => 'action_domain', 'class' => 'custom-select']);
            $domain_select->add(array_combine($domains, $domains));

            if ($redirect && !empty($this->forward['target'])) {
                $parts = explode('@', $this->forward['target']);
                if (!empty($parts)) {
                    $this->forward['domain'] = array_pop($parts);
                    $this->forward['target'] = implode('@', $parts);
                }
            }
        }

        // redirect target
        $action_target = '<span id="action_target_span" class="input-group">'
            . '<input type="text" name="action_target" id="action_target"'
            . ' value="' .($redirect ? rcube::Q($this->forward['target'], 'strict', false) : '') . '"'
            . (!empty($domain_select) ? ' size="20"' : ' size="35"') . '/>'
            . (!empty($domain_select) ? ' <span class="input-group-prepend input-group-append"><span class="input-group-text">@</span></span> '
                . $domain_select->show(!empty($this->forward['domain']) ? $this->forward['domain'] : null) : '')
            . '</span>';

        // Message tab
        $table = new html_table(['cols' => 2]);

        $table->add('title', html::label('forward_action', $this->plugin->gettext('forward.action')));
        $table->add('forward input-group input-group-combo',
            $action->show(!empty($this->forward['action']) ? $this->forward['action'] : null) . ' ' . $action_target
        );

        $table->add('title', html::label('forward_status', $this->plugin->gettext('forward.status')));
        $table->add(null, $status->show(!isset($this->forward['disabled']) || $this->forward['disabled'] ? 'off' : 'on'));

        $out .= $table->show($attrib);

        $out .= '</form>';

        $this->rc->output->add_gui_object('sieveform', $form_id);

        return $out;
    }

    /**
     * API: get forward rule
     *
     * @return array forward rule information
     */
    public function get_forward()
    {
        $this->exts = $this->sieve->get_extensions();
        $this->init_script();
        $this->forward_rule();

        $forward = [
            'supported' => $this->exts,
            'enabled'   => empty($this->forward['disabled']),
            'action'    => $this->forward['action'],
            'target'    => $this->forward['target'],
        ];

        return $forward;
    }

    /**
     * API: set forward rule
     *
     * @param array $data forward rule information (see self::get_forward())
     *
     * @return bool True on success, False on failure
     */
    public function set_forward($data)
    {
        $this->exts  = $this->sieve->get_extensions();
        $this->error = false;

        $this->init_script();
        $this->forward_rule();

        $date_extension = in_array('date', $this->exts);

        if ($data['action'] == 'redirect' || $data['action'] == 'copy') {
            if (empty($data['target']) || !rcube_utils::check_email($data['target'])) {
                $this->error = "Invalid address in action target: " . $data['target'];
                return false;
            }
        }
        else if ($data['action']) {
            $this->error = "Unsupported forward action: " . $data['action'];
            return false;
        }

        if (empty($forward_tests)) {
            $forward_tests = (array) $this->rc->config->get('managesieve_forward_test', [['test' => 'true']]);
        }

        $rule             = $this->forward;
        $rule['type']     = 'if';
        $rule['name']     = !empty($rule['name']) ? $rule['name'] : 'Out-of-Office';
        $rule['disabled'] = isset($data['enabled']) && !$data['enabled'];
        $rule['tests']    = $forward_tests;
        $rule['join']     = $date_extension ? count($forward_tests) > 1 : false;
        $rule['actions']  = [[
                'type'   => 'redirect',
                'copy'   => $data['action'] == 'copy',
                'target' => $data['target'],
        ]];

        return $this->merge_rule($rule, $this->forward, $this->script_name);
    }

    /**
     * API: connect to managesieve server
     */
    public function connect($username, $password)
    {
        $error = parent::connect($username, $password);

        if ($error) {
            return $error;
        }

        return $this->load_script();
    }

    /**
     * API: Returns last error
     *
     * @return string Error message
     */
    public function get_error()
    {
        return $this->error;
    }
}
PK|c�\^؊kk&acl/skins/elastic/templates/table.htmlnu�[���<div id="acllist-container" class="table-widget">
	<div id="acllist-content" class="content">
		<h2 class="voice" id="aria-label-acltable"><roundcube:label name="acl.ariasummaryacltable" /></h2>
		<roundcube:object name="acltable" id="acltable" class="records-table options-table" aria-labelledby="aria-label-acltable" role="listbox" />
	</div>
	<div id="acllist-footer" class="footer toolbar menu">
		<roundcube:button command="acl-create" type="link" class="create disabled" classAct="create"
			label="acl.add" title="acl.newuser" innerClass="inner" />
		<roundcube:button name="aclmenulink" type="link"
			label="actions" title="acl.actions" href="#acl-actions"
			class="actions" innerClass="inner" data-popup="acl-menu" />
	</div>
</div>

<div id="acl-menu" class="popupmenu" aria-hidden="true" data-align="bottom">
	<h3 id="aria-label-aclactions" class="voice"><roundcube:label name="acl.arialabelaclactions" /></h3>
	<ul class="menu listing iconized" role="menu" aria-labelledby="aria-label-aclactions">
		<roundcube:button command="acl-edit" label="edit" type="link-menuitem" class="edit disabled" classAct="edit active" />
		<roundcube:button command="acl-delete" label="delete" type="link-menuitem" class="delete disabled" classAct="delete active" />
		<roundcube:if condition="!in_array('acl_advanced_mode', (array)config:dont_override)" />
			<roundcube:button name="acl-switch" type="link-menuitem" class="active check" id="acl-switch" onclick="rcmail.command('acl-mode-switch')" label="acl.advanced" />
		<roundcube:endif />
	</ul>
</div>

<div id="aclform" class="popupmenu formcontent" aria-labelledby="aria-label-aclform" role="form">
	<h3 id="aria-label-aclform" class="voice"><roundcube:label name="acl.arialabelaclform" /></h3>
	<div class="row form-group">
		<label class="col-sm-4 col-form-label"><roundcube:label name="acl.identifier" /></label>
		<roundcube:object name="acluser" id="acluser" class="proplist col-sm-8" />
	</div>
	<div class="row form-group">
		<label class="col-sm-4 col-form-label"><roundcube:label name="acl.myrights" /></label>
		<roundcube:object name="aclrights" class="proplist col-sm-8" />
	</div>
</div>
PK|c�\&��1��acl/acl.min.jsnu�[���/**
 * ACL plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
window.rcmail&&rcmail.addEventListener("init",function(){var e;rcmail.gui_objects.acltable&&(rcmail.acl_list_init(),rcmail.env.acl_users_source)&&((e=rcmail.is_framed()?parent.rcmail:rcmail).init_address_input_events($("#acluser"),{action:"settings/plugin.acl-autocomplete"}),e.set_env({autocomplete_max:rcmail.env.autocomplete_max,autocomplete_min_length:rcmail.env.autocomplete_min_length}),e.add_label("autocompletechars",rcmail.labels.autocompletechars),e.add_label("autocompletemore",rcmail.labels.autocompletemore),e.addEventListener("autocomplete_insert",function(e){"acluser"==e.field.id&&(e.field.value=e.insert.replace(/[ ,;]+$/,""))})),rcmail.enable_command("acl-create","acl-save","acl-cancel","acl-mode-switch",!0),rcmail.enable_command("acl-delete","acl-edit",!1),rcmail.env.acl_advanced&&$("#acl-switch").addClass("selected").find("input").prop("checked",!0)}),rcube_webmail.prototype.acl_create=function(){this.acl_init_form()},rcube_webmail.prototype.acl_edit=function(){var e=this.acl_list.get_single_selection();e&&this.acl_init_form(e)},rcube_webmail.prototype.acl_delete=function(){var a=this.acl_get_usernames();a&&a.length&&this.confirm_dialog(this.get_label("acl.deleteconfirm"),"delete",function(e,t){t.http_post("settings/plugin.acl",{_act:"delete",_user:a.join(","),_mbox:rcmail.env.mailbox},t.set_busy(!0,"acl.deleting"))})},rcube_webmail.prototype.acl_save=function(){var e,t="",a=$("#acluser",this.acl_form).val();$(this.env.acl_advanced?"#advancedrights :checkbox":"#simplerights :checkbox",this.acl_form).map(function(){this.checked&&(t+=this.value)}),(a=(e=$("input:checked[name=usertype]",this.acl_form).val())&&"user"!=e?e:a)?t?(e={_act:"save",_user:a,_acl:t,_mbox:this.env.mailbox},this.acl_id&&(e._old=this.acl_id),this.http_post("settings/plugin.acl",e,this.set_busy(!0,"acl.saving"))):this.alert_dialog(this.get_label("acl.norights")):this.alert_dialog(this.get_label("acl.nouser"))},rcube_webmail.prototype.acl_cancel=function(){this.ksearch_blur(),this.acl_popup.dialog("close")},rcube_webmail.prototype.acl_update=function(e){e.old?this.acl_remove_row(e.old):this.env.acl[e.id]&&this.acl_remove_row(e.id),this.acl_add_row(e,!0),this.ksearch_blur(),this.acl_popup.dialog("close")},rcube_webmail.prototype.acl_mode_switch=function(e){this.env.acl_advanced=!this.env.acl_advanced,this.enable_command("acl-delete","acl-edit",!1),this.http_request("settings/plugin.acl","_act=list&_mode="+(this.env.acl_advanced?"advanced":"simple")+"&_mbox="+urlencode(this.env.mailbox),this.set_busy(!0,"loading"))},rcube_webmail.prototype.acl_list_init=function(){var e=this.env.acl_advanced?"addClass":"removeClass";$("#acl-switch")[e]("selected"),$(this.gui_objects.acltable)[e]("advanced"),this.acl_list=new rcube_list_widget(this.gui_objects.acltable,{multiselect:!0,draggable:!1,keyboard:!0}),this.acl_list.addEventListener("select",function(e){rcmail.acl_list_select(e)}).addEventListener("dblclick",function(e){rcmail.acl_list_dblclick(e)}).addEventListener("keypress",function(e){rcmail.acl_list_keypress(e)}).init()},rcube_webmail.prototype.acl_list_select=function(e){rcmail.enable_command("acl-delete",0<e.get_selection().length),rcmail.enable_command("acl-edit",1==e.get_selection().length),e.focus()},rcube_webmail.prototype.acl_list_dblclick=function(e){this.acl_edit()},rcube_webmail.prototype.acl_list_keypress=function(e){e.key_pressed==e.ENTER_KEY?this.command("acl-edit"):e.key_pressed!=e.DELETE_KEY&&e.key_pressed!=e.BACKSPACE_KEY||this.acl_form&&this.acl_form.is(":visible")||this.command("acl-delete")},rcube_webmail.prototype.acl_list_update=function(e){$(this.gui_objects.acltable).html(e),this.acl_list_init()},rcube_webmail.prototype.acl_get_usernames=function(){for(var e,t=[],a=this.acl_list,l=a.get_selection(),c=0,i=l.length;c<i;c++)this.env.acl_specials.length&&0<=$.inArray(l[c],this.env.acl_specials)?t.push(l[c]):(e=a.rows[l[c]])&&(e=$(e.obj).data("userid"))&&t.push(e);return t},rcube_webmail.prototype.acl_remove_row=function(e){var t=this.acl_list;t.remove_row(e),t.clear_selection(),$("#rcmrow"+e).remove(),this.env.acl[e]=null,this.enable_command("acl-delete",0<t.get_selection().length),this.enable_command("acl-edit",1==t.get_selection().length)},rcube_webmail.prototype.acl_add_row=function(l,e){var t,a,c=[],i=[],s=l.id,n=this.acl_list,o=this.env.acl_advanced?[]:this.env.acl_items,r=this.gui_objects.acltable,r=$("thead > tr",r).clone();for(t in $("th",r).map(function(){var e=$("<td>"),t=$(this).attr("title"),a=this.className.replace(/^acl/,"");t&&e.attr("title",t),"user"==(a=o&&o[a]?o[a]:a)?e.addClass(a).attr("title",l.title).append($("<a>").text(l.display)):e.addClass(this.className+" "+rcmail.acl_class(l.acl,a)).html("<span/>"),$(this).replaceWith(e)}),r=r.attr({id:"rcmrow"+s,"data-userid":l.username}).get(0),this.env.acl[s]=l.acl,this.env.acl)this.env.acl[t]&&(this.env.acl_specials.length&&0<=$.inArray(t,this.env.acl_specials)?i:c).push(t);for(c.sort(),t=0,a=(c=i.concat(c)).length;t<a&&c[t]!=s;t++);t&&t<a?($("#rcmrow"+c[t-1]).after(r),n.init_row(r),n.rowcount++):n.insert_row(r),e&&n.select_row(l.id)},rcube_webmail.prototype.acl_init_form=function(e){var t,a,l,c="",i="user",s=($("body"),$("#advancedrights")),n=$("#simplerights"),o=$("#acluser"),r=$("#usertype"),n=(this.acl_form||o.click(l=function(){$('input[value="user"]').prop("checked",!0)}).keypress(l),this.acl_form=$("#aclform"),l=this.env.acl_advanced?(s.show(),n.hide(),s):(n.show(),s.hide(),n),(s=$(":checkbox",l)).attr("checked",!1),e&&(t=this.acl_list.rows[e])?(t=t.obj,s.map(function(){(a=$("td."+this.id,t)).length&&a.hasClass("enabled")&&(this.checked=!0)}),!this.env.acl_specials.length||$.inArray(e,this.env.acl_specials)<0?c=$(t).data("userid"):i=e):s.filter(function(){return this.id.match(/^acl([lrs]|read)$/)}).prop("checked",!0),o.val(c),$("input[value="+i+"]").prop("checked",!0),this.acl_id=e,{}),_=this,d=document.body;n[this.get_label("save")]=function(e){_.command("acl-save")},n[this.get_label("cancel")]=function(e){_.command("acl-cancel")},this.acl_popup=this.show_popup_dialog(this.acl_form.show(),e?this.get_label("acl.editperms"):this.get_label("acl.newuser"),n,{button_classes:["mainaction submit","cancel"],modal:!0,closeOnEscape:!0,close:function(e,t){(_.is_framed()?parent.rcmail:_).ksearch_hide(),_.acl_form.appendTo(d).hide(),$(this).remove(),window.focus()}}),("user"==i?o:$("input:checked",r)).focus()},rcube_webmail.prototype.acl_class=function(e,t){var a,l,c=0;for(e=String(e),a=0,l=(t=String(t)).length;a<l;a++)-1<e.indexOf(t[a])&&c++;return c==l?"enabled":c?"partial":"disabled"};
PK|c�\l�:MMacl/composer.jsonnu�[���{
    "name": "roundcube/acl",
    "type": "roundcube-plugin",
    "description": "IMAP Folders Access Control Lists Management (RFC4314, RFC2086).",
    "license": "GPL-3.0-or-later",
    "version": "1.8",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PK|c�\�T"fpfpacl/acl.phpnu�[���<?php

/**
 * Folders Access Control Lists Management (RFC4314, RFC2086)
 *
 * @author Aleksander Machniak <alec@alec.pl>
 *
 * Copyright (C) Kolab Systems AG
 *
 * 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 3 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, see http://www.gnu.org/licenses/.
 */

class acl extends rcube_plugin
{
    public $task = 'settings';

    private $rc;
    private $supported = null;
    private $mbox;
    private $ldap;
    private $specials = ['anyone', 'anonymous'];

    /**
     * Plugin initialization
     */
    function init()
    {
        $this->rc = rcmail::get_instance();

        // Register hooks
        $this->add_hook('folder_form', [$this, 'folder_form']);

        // Plugin actions
        $this->register_action('plugin.acl', [$this, 'acl_actions']);
        $this->register_action('plugin.acl-autocomplete', [$this, 'acl_autocomplete']);
    }

    /**
     * Handler for plugin actions (AJAX)
     */
    function acl_actions()
    {
        $action = trim(rcube_utils::get_input_string('_act', rcube_utils::INPUT_GPC));

        // Connect to IMAP
        $this->rc->storage_init();

        // Load localization and configuration
        $this->add_texts('localization/');
        $this->load_config();

        if ($action == 'save') {
            $this->action_save();
        }
        else if ($action == 'delete') {
            $this->action_delete();
        }
        else if ($action == 'list') {
            $this->action_list();
        }

        // Only AJAX actions
        $this->rc->output->send();
    }

    /**
     * Handler for user login autocomplete request
     */
    function acl_autocomplete()
    {
        $this->load_config();

        $search = rcube_utils::get_input_string('_search', rcube_utils::INPUT_GPC, true);
        $reqid  = rcube_utils::get_input_string('_reqid', rcube_utils::INPUT_GPC);
        $users  = [];
        $keys   = [];

        if ($this->init_ldap()) {
            $max  = (int) $this->rc->config->get('autocomplete_max', 15);
            $mode = (int) $this->rc->config->get('addressbook_search_mode');

            $this->ldap->set_pagesize($max);
            $result = $this->ldap->search('*', $search, $mode);

            foreach ($result->records as $record) {
                $user = $record['uid'];

                if (is_array($user) && !empty($user)) {
                    $user = array_filter($user);
                    $user = $user[0];
                }

                if ($user) {
                    $display = rcube_addressbook::compose_search_name($record);
                    $user    = ['name' => $user, 'display' => $display];
                    $users[] = $user;
                    $keys[]  = $display ?: $user['name'];
                }
            }

            if ($this->rc->config->get('acl_groups')) {
                $prefix      = $this->rc->config->get('acl_group_prefix');
                $group_field = $this->rc->config->get('acl_group_field', 'name');
                $result      = $this->ldap->list_groups($search, $mode);

                foreach ($result as $record) {
                    $group    = $record['name'];
                    $group_id = is_array($record[$group_field]) ? $record[$group_field][0] : $record[$group_field];

                    if ($group) {
                        $users[] = ['name' => ($prefix ?: '') . $group_id, 'display' => $group, 'type' => 'group'];
                        $keys[]  = $group;
                    }
                }
            }
        }

        if (count($users)) {
            // sort users index
            asort($keys, SORT_LOCALE_STRING);
            // re-sort users according to index
            foreach ($keys as $idx => $val) {
                $keys[$idx] = $users[$idx];
            }
            $users = array_values($keys);
        }

        $this->rc->output->command('ksearch_query_results', $users, $search, $reqid);
        $this->rc->output->send();
    }

    /**
     * Handler for 'folder_form' hook
     *
     * @param array $args Hook arguments array (form data)
     *
     * @return array Hook arguments array
     */
    function folder_form($args)
    {
        $mbox_imap = $args['options']['name'] ?? '';
        $myrights  = $args['options']['rights'] ?? '';

        // Edited folder name (empty in create-folder mode)
        if (!strlen($mbox_imap)) {
            return $args;
        }
/*
        // Do nothing on protected folders (?)
        if (!empty($args['options']['protected'])) {
            return $args;
        }
*/
        // Get MYRIGHTS
        if (empty($myrights)) {
            return $args;
        }

        // Load localization and include scripts
        $this->load_config();
        $this->specials = $this->rc->config->get('acl_specials', $this->specials);
        $this->add_texts('localization/', ['deleteconfirm', 'norights',
            'nouser', 'deleting', 'saving', 'newuser', 'editperms']);
        $this->rc->output->add_label('save', 'cancel');
        $this->include_script('acl.js');
        $this->rc->output->include_script('list.js');
        $this->include_stylesheet($this->local_skin_path() . '/acl.css');

        // add Info fieldset if it doesn't exist
        if (!isset($args['form']['props']['fieldsets']['info']))
            $args['form']['props']['fieldsets']['info'] = [
                'name'    => $this->rc->gettext('info'),
                'content' => []
            ];

        // Display folder rights to 'Info' fieldset
        $args['form']['props']['fieldsets']['info']['content']['myrights'] = [
            'label' => rcube::Q($this->gettext('myrights')),
            'value' => $this->acl2text($myrights)
        ];

        // Return if not folder admin
        if (!in_array('a', $myrights)) {
            return $args;
        }

        // The 'Sharing' tab
        $this->mbox = $mbox_imap;
        $this->rc->output->set_env('acl_users_source', (bool) $this->rc->config->get('acl_users_source'));
        $this->rc->output->set_env('mailbox', $mbox_imap);
        $this->rc->output->add_handlers([
                'acltable'  => [$this, 'templ_table'],
                'acluser'   => [$this, 'templ_user'],
                'aclrights' => [$this, 'templ_rights'],
        ]);

        $this->rc->output->set_env('autocomplete_max', (int) $this->rc->config->get('autocomplete_max', 15));
        $this->rc->output->set_env('autocomplete_min_length', $this->rc->config->get('autocomplete_min_length'));
        $this->rc->output->add_label('autocompletechars', 'autocompletemore');

        $args['form']['sharing'] = [
            'name'    => rcube::Q($this->gettext('sharing')),
            'content' => $this->rc->output->parse('acl.table', false, false),
        ];

        return $args;
    }

    /**
     * Creates ACL rights table
     *
     * @param array $attrib Template object attributes
     *
     * @return string HTML Content
     */
    function templ_table($attrib)
    {
        if (empty($attrib['id'])) {
            $attrib['id'] = 'acl-table';
        }

        $out = $this->list_rights($attrib);

        $this->rc->output->add_gui_object('acltable', $attrib['id']);

        return $out;
    }

    /**
     * Creates ACL rights form (rights list part)
     *
     * @param array $attrib Template object attributes
     *
     * @return string HTML Content
     */
    function templ_rights($attrib)
    {
        // Get supported rights
        $supported = $this->rights_supported();

        // give plugins the opportunity to adjust this list
        $data = $this->rc->plugins->exec_hook('acl_rights_supported',
            ['rights' => $supported, 'folder' => $this->mbox, 'labels' => []]
        );
        $supported = $data['rights'];

        // depending on server capability either use 'te' or 'd' for deleting msgs
        $deleteright = implode(array_intersect(str_split('ted'), $supported));

        $out = '';
        $ul  = '';
        $input = new html_checkbox();

        // Advanced rights
        $attrib['id'] = 'advancedrights';
        foreach ($supported as $key => $val) {
            $id = "acl$val";
            $ul .= html::tag('li', null,
                $input->show('', ['name' => "acl[$val]", 'value' => $val, 'id' => $id])
                . html::label(['for' => $id, 'title' => $this->gettext('longacl'.$val)], $this->gettext('acl'.$val))
            );
        }

        $out = html::tag('ul', $attrib, $ul, html::$common_attrib);

        // Simple rights
        $ul = '';
        $attrib['id'] = 'simplerights';
        $items = [
            'read'   => 'lrs',
            'write'  => 'wi',
            'delete' => $deleteright,
            'other'  => preg_replace('/[lrswi'.$deleteright.']/', '', implode($supported)),
        ];

        // give plugins the opportunity to adjust this list
        $data = $this->rc->plugins->exec_hook('acl_rights_simple',
            ['rights' => $items, 'folder' => $this->mbox, 'labels' => [], 'titles' => []]
        );

        foreach ($data['rights'] as $key => $val) {
            $id    = "acl$key";
            $title = !empty($data['titles'][$key]) ? $data['titles'][$key] : $this->gettext('longacl'.$key);
            $label = !empty($data['labels'][$key]) ? $data['labels'][$key] : $this->gettext('acl'.$key);
            $ul   .= html::tag('li', null,
                $input->show('', ['name' => "acl[$val]", 'value' => $val, 'id' => $id])
                . html::label(['for' => $id, 'title' => $title], $label)
            );
        }

        $out .= "\n" . html::tag('ul', $attrib, $ul, html::$common_attrib);

        $this->rc->output->set_env('acl_items', $data['rights']);

        return $out;
    }

    /**
     * Creates ACL rights form (user part)
     *
     * @param array $attrib Template object attributes
     *
     * @return string HTML Content
     */
    function templ_user($attrib)
    {
        // Create username input
        $class = !empty($attrib['class']) ? $attrib['class'] : '';
        $attrib['name']  = 'acluser';
        $attrib['class'] = 'form-control';

        $textfield = new html_inputfield($attrib);

        $label = html::label(['for' => $attrib['id'], 'class' => 'input-group-text'], $this->gettext('username'));
        $fields['user'] = html::div('input-group',
            html::span('input-group-prepend', $label) . ' ' . $textfield->show()
        );

        // Add special entries
        if (!empty($this->specials)) {
            foreach ($this->specials as $key) {
                $fields[$key] = html::label(['for' => 'id' . $key], $this->gettext($key));
            }
        }

        $this->rc->output->set_env('acl_specials', $this->specials);

        // Create list with radio buttons
        if (count($fields) > 1) {
            $ul = '';
            foreach ($fields as $key => $val) {
                $radio = new html_radiobutton(['name' => 'usertype']);
                $radio = $radio->show($key == 'user' ? 'user' : '', ['value' => $key, 'id' => 'id' . $key]);
                $ul .= html::tag('li', null, $radio . $val);
            }

            $out = html::tag('ul', ['id' => 'usertype', 'class' => $class], $ul, html::$common_attrib);
        }
        // Display text input alone
        else {
            $out = html::div($class, $fields['user']);
        }

        return $out;
    }

    /**
     * Creates ACL rights table
     *
     * @param array $attrib Template object attributes
     *
     * @return string HTML Content
     */
    private function list_rights($attrib = [])
    {
        // Get ACL for the folder
        $acl = $this->rc->storage->get_acl($this->mbox);

        if (!is_array($acl)) {
            $acl = [];
        }

        // Keep special entries (anyone/anonymous) on top of the list
        if (!empty($this->specials) && !empty($acl)) {
            foreach ($this->specials as $key) {
                if (isset($acl[$key])) {
                    $acl_special[$key] = $acl[$key];
                    unset($acl[$key]);
                }
            }
        }

        // Sort the list by username
        uksort($acl, 'strnatcasecmp');

        if (!empty($acl_special)) {
            $acl = array_merge($acl_special, $acl);
        }

        // Get supported rights and build column names
        $supported = $this->rights_supported();

        // give plugins the opportunity to adjust this list
        $data = $this->rc->plugins->exec_hook('acl_rights_supported',
            ['rights' => $supported, 'folder' => $this->mbox, 'labels' => []]
        );
        $supported = $data['rights'];

        // depending on server capability either use 'te' or 'd' for deleting msgs
        $deleteright = implode(array_intersect(str_split('ted'), $supported));

        // Use advanced or simple (grouped) rights
        $advanced = $this->rc->config->get('acl_advanced_mode');

        if ($advanced) {
            $items = [];
            foreach ($supported as $sup) {
                $items[$sup] = $sup;
            }
        }
        else {
            $items = [
                'read'   => 'lrs',
                'write'  => 'wi',
                'delete' => $deleteright,
                'other'  => preg_replace('/[lrswi'.$deleteright.']/', '', implode($supported)),
            ];

            // give plugins the opportunity to adjust this list
            $data = $this->rc->plugins->exec_hook('acl_rights_simple',
                ['rights' => $items, 'folder' => $this->mbox, 'labels' => []]
            );
            $items = $data['rights'];
        }

        // Create the table
        $attrib['noheader'] = true;
        $table    = new html_table($attrib);
        $self     = $this->rc->get_user_name();
        $js_table = [];

        // Create table header
        $table->add_header('user', $this->gettext('identifier'));
        foreach (array_keys($items) as $key) {
            $label = !empty($data['labels'][$key]) ? $data['labels'][$key] : $this->gettext('shortacl' . $key);
            $table->add_header(['class' => 'acl' . $key, 'title' => $label], $label);
        }

        foreach ($acl as $user => $rights) {
            if ($user === $self) {
                continue;
            }

            // filter out virtual rights (c or d) the server may return
            $userrights = array_intersect($rights, $supported);
            $userid     = rcube_utils::html_identifier($user);
            $title      = null;

            if (!empty($this->specials) && in_array($user, $this->specials)) {
                $username = $this->gettext($user);
            }
            else {
                $username = $this->resolve_acl_identifier($user, $title);
            }

            $table->add_row(['id' => 'rcmrow' . $userid, 'data-userid' => $user]);
            $table->add(['class' => 'user text-nowrap', 'title' => $title],
                html::a(['id' => 'rcmlinkrow' . $userid], rcube::Q($username))
            );

            foreach ($items as $key => $right) {
                $in = $this->acl_compare($userrights, $right);
                switch ($in) {
                    case 2: $class = 'enabled'; break;
                    case 1: $class = 'partial'; break;
                    default: $class = 'disabled'; break;
                }
                $table->add('acl' . $key . ' ' . $class, '<span></span>');
            }

            $js_table[$userid] = implode($userrights);
        }

        $this->rc->output->set_env('acl', $js_table);
        $this->rc->output->set_env('acl_advanced', $advanced);

        $out = $table->show();

        return $out;
    }

    /**
     * Handler for ACL update/create action
     */
    private function action_save()
    {
        $mbox  = trim(rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST, true)); // UTF7-IMAP
        $user  = trim(rcube_utils::get_input_string('_user', rcube_utils::INPUT_POST));
        $acl   = trim(rcube_utils::get_input_string('_acl', rcube_utils::INPUT_POST));
        $oldid = trim(rcube_utils::get_input_string('_old', rcube_utils::INPUT_POST));

        $acl    = array_intersect(str_split($acl), $this->rights_supported());
        $users  = $oldid ? [$user] : explode(',', $user);
        $result = 0;
        $self   = $this->rc->get_user_name();

        foreach ($users as $user) {
            $user     = trim($user);
            $username = '';
            $prefix   = $this->rc->config->get('acl_groups') ? $this->rc->config->get('acl_group_prefix') : '';

            if ($prefix && strpos($user, $prefix) === 0) {
                $username = $user;
            }
            else if (!empty($this->specials) && in_array($user, $this->specials)) {
                $username = $this->gettext($user);
            }
            else if (!empty($user)) {
                if (!strpos($user, '@') && ($realm = $this->get_realm())) {
                    $user .= '@' . rcube_utils::idn_to_ascii(preg_replace('/^@/', '', $realm));
                }

                // Make sure it's valid email address to prevent from "disappearing folder"
                // issue in Cyrus IMAP e.g. when the acl user identifier contains spaces inside.
                if (strpos($user, '@') && !rcube_utils::check_email($user, false)) {
                    $user = null;
                }

                $username = $user;
            }

            if (!$acl || !$user || !strlen($mbox)) {
                continue;
            }

            $user     = $this->mod_login($user);
            $username = $this->mod_login($username);

            if ($user != $self && $username != $self) {
                if ($this->rc->storage->set_acl($mbox, $user, $acl)) {
                    $display = $this->resolve_acl_identifier($username, $title);
                    $this->rc->output->command('acl_update', [
                            'id'       => rcube_utils::html_identifier($user),
                            'username' => $username,
                            'title'    => $title,
                            'display'  => $display,
                            'acl'      => implode($acl),
                            'old'      => $oldid
                    ]);
                    $result++;
                }
            }
        }

        if ($result) {
            $this->rc->output->show_message($oldid ? 'acl.updatesuccess' : 'acl.createsuccess', 'confirmation');
        }
        else {
            $this->rc->output->show_message($oldid ? 'acl.updateerror' : 'acl.createerror', 'error');
        }
    }

    /**
     * Handler for ACL delete action
     */
    private function action_delete()
    {
        $mbox = trim(rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_POST, true)); //UTF7-IMAP
        $user = trim(rcube_utils::get_input_string('_user', rcube_utils::INPUT_POST));

        $user = explode(',', $user);

        foreach ($user as $u) {
            $u = trim($u);
            if ($this->rc->storage->delete_acl($mbox, $u)) {
                $this->rc->output->command('acl_remove_row', rcube_utils::html_identifier($u));
            }
            else {
                $error = true;
            }
        }

        if (empty($error)) {
            $this->rc->output->show_message('acl.deletesuccess', 'confirmation');
        }
        else {
            $this->rc->output->show_message('acl.deleteerror', 'error');
        }
    }

    /**
     * Handler for ACL list update action (with display mode change)
     */
    private function action_list()
    {
        if (in_array('acl_advanced_mode', (array)$this->rc->config->get('dont_override'))) {
            return;
        }

        $this->mbox = trim(rcube_utils::get_input_string('_mbox', rcube_utils::INPUT_GPC, true)); // UTF7-IMAP
        $advanced   = trim(rcube_utils::get_input_string('_mode', rcube_utils::INPUT_GPC));
        $advanced   = $advanced == 'advanced';

        // Save state in user preferences
        $this->rc->user->save_prefs(['acl_advanced_mode' => $advanced]);

        $out = $this->list_rights();

        $out = preg_replace(['/^<table[^>]+>/', '/<\/table>$/'], '', $out);

        $this->rc->output->command('acl_list_update', $out);
    }

    /**
     * Creates <UL> list with descriptive access rights
     *
     * @param array $rights MYRIGHTS result
     *
     * @return string HTML content
     */
    function acl2text($rights)
    {
        if (empty($rights)) {
            return '';
        }

        $supported = $this->rights_supported();
        $list      = [];
        $attrib    = [
            'name' => 'rcmyrights',
            'style' => 'margin:0; padding:0 15px;',
        ];

        foreach ($supported as $right) {
            if (in_array($right, $rights)) {
                $list[] = html::tag('li', null, rcube::Q($this->gettext('acl' . $right)));
            }
        }

        if (count($list) == count($supported)) {
            return rcube::Q($this->gettext('aclfull'));
        }

        return html::tag('ul', $attrib, implode("\n", $list));
    }

    /**
     * Compares two ACLs (according to supported rights)
     *
     * @param array $acl1 ACL rights array (or string)
     * @param array $acl2 ACL rights array (or string)
     *
     * @return int Comparison result, 2 - full match, 1 - partial match, 0 - no match
     */
    function acl_compare($acl1, $acl2)
    {
        if (!is_array($acl1)) $acl1 = str_split($acl1);
        if (!is_array($acl2)) $acl2 = str_split($acl2);

        $rights = $this->rights_supported();

        $acl1 = array_intersect($acl1, $rights);
        $acl2 = array_intersect($acl2, $rights);
        $res  = array_intersect($acl1, $acl2);

        $cnt1 = count($res);
        $cnt2 = count($acl2);

        if ($cnt1 == $cnt2) {
            return 2;
        }

        if ($cnt1) {
            return 1;
        }

        return 0;
    }

    /**
     * Get list of supported access rights (according to RIGHTS capability)
     *
     * @return array List of supported access rights abbreviations
     */
    function rights_supported()
    {
        if ($this->supported !== null) {
            return $this->supported;
        }

        $capa = $this->rc->storage->get_capability('RIGHTS');

        if (is_array($capa) && !empty($capa)) {
            $rights = strtolower($capa[0]);
        }
        else {
            $rights = 'cd';
        }

        return $this->supported = str_split('lrswi' . $rights . 'pa');
    }

    /**
     * Username realm detection.
     *
     * @return string Username realm (domain)
     */
    private function get_realm()
    {
        // When user enters a username without domain part, realm
        // allows to add it to the username (and display correct username in the table)

        if (isset($_SESSION['acl_username_realm'])) {
            return $_SESSION['acl_username_realm'];
        }

        $self = $this->rc->get_user_name();

        // find realm in username of logged user (?)
        list($name, $domain) = rcube_utils::explode('@', $self);

        // Use (always existent) ACL entry on the INBOX for the user to determine
        // whether or not the user ID in ACL entries need to be qualified and how
        // they would need to be qualified.
        if (empty($domain)) {
            $acl = $this->rc->storage->get_acl('INBOX');
            if (is_array($acl)) {
                $regexp = '/^' . preg_quote($self, '/') . '@(.*)$/';
                foreach (array_keys($acl) as $name) {
                    if (preg_match($regexp, $name, $matches)) {
                        $domain = $matches[1];
                        break;
                    }
                }
            }
        }

        return $_SESSION['acl_username_realm'] = $domain;
    }

    /**
     * Initializes autocomplete LDAP backend
     */
    protected function init_ldap()
    {
        if ($this->ldap) {
            return $this->ldap->ready;
        }

        // get LDAP config
        $config = $this->rc->config->get('acl_users_source');

        if (empty($config)) {
            return false;
        }

        // not an array, use configured ldap_public source
        if (!is_array($config)) {
            $ldap_config = (array) $this->rc->config->get('ldap_public');
            $config      = $ldap_config[$config];
        }

        $uid_field = $this->rc->config->get('acl_users_field', 'mail');
        $filter    = $this->rc->config->get('acl_users_filter');

        if (empty($uid_field) || empty($config)) {
            return false;
        }

        // get name attribute
        if (!empty($config['fieldmap'])) {
            $name_field = $config['fieldmap']['name'];
        }
        // ... no fieldmap, use the old method
        if (empty($name_field)) {
            $name_field = $config['name_field'];
        }

        // add UID field to fieldmap, so it will be returned in a record with name
        $config['fieldmap']['name'] = $name_field;
        $config['fieldmap']['uid']  = $uid_field;

        // search in UID and name fields
        // $name_field can be in a form of <field>:<modifier> (#1490591)
        $name_field = preg_replace('/:.*$/', '', $name_field);
        $search     = array_unique([$name_field, $uid_field]);

        $config['search_fields']   = $search;
        $config['required_fields'] = [$uid_field];

        // set search filter
        if ($filter) {
            $config['filter'] = $filter;
        }

        // disable vlv
        $config['vlv'] = false;

        // Initialize LDAP connection
        $this->ldap = new rcube_ldap(
            $config,
            $this->rc->config->get('ldap_debug'),
            $this->rc->config->mail_domain($_SESSION['imap_host'])
        );

        return $this->ldap->ready;
    }

    /**
     * Modify user login according to 'login_lc' setting
     */
    protected function mod_login($user)
    {
        $login_lc = $this->rc->config->get('login_lc');

        if ($login_lc === true || $login_lc == 2) {
            $user = mb_strtolower($user);
        }
        // lowercase domain name
        else if ($login_lc && strpos($user, '@')) {
            list($local, $domain) = explode('@', $user);
            $user = $local . '@' . mb_strtolower($domain);
        }

        return $user;
    }

    /**
     * Resolve acl identifier to user/group name
     */
    protected function resolve_acl_identifier($id, &$title = null)
    {
        if ($this->init_ldap()) {
            $groups      = $this->rc->config->get('acl_groups');
            $prefix      = $this->rc->config->get('acl_group_prefix');
            $group_field = $this->rc->config->get('acl_group_field', 'name');

            // Unfortunately this works only if group_field=name,
            // list_groups() allows searching by group name only
            if ($groups && $prefix && $group_field === 'name' && strpos($id, $prefix) === 0) {
                $gid    = substr($id, strlen($prefix));
                $result = $this->ldap->list_groups($gid, rcube_addressbook::SEARCH_STRICT);

                if (count($result) === 1 && ($record = $result[0])) {
                    if (isset($record[$group_field]) && $record[$group_field] === $gid) {
                        $display = $record['name'];
                        if ($display != $gid) {
                            $title = sprintf('%s (%s)', $display, $gid);
                        }

                        return $display;
                    }
                }

                return $id;
            }

            $this->ldap->set_pagesize('2');
            // Note: 'uid' works here because we overwrite fieldmap in init_ldap() above
            $result = $this->ldap->search('uid', $id, rcube_addressbook::SEARCH_STRICT);

            if ($result->count === 1 && ($record = $result->first())) {
                if ($record['uid'] === $id) {
                    $title   = rcube_addressbook::compose_search_name($record);
                    $display = rcube_addressbook::compose_list_name($record);

                    return $display;
                }
            }
        }

        return $id;
    }
}
PK|c�\,1:bbacl/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = '共享';
$labels['myrights'] = '访问权限';
$labels['username'] = '用户:';
$labels['advanced'] = '高级模式';
$labels['add'] = '添加';
$labels['newuser'] = '新增条目';
$labels['editperms'] = '编辑权限';
$labels['actions'] = '权限设置...';
$labels['anyone'] = '所有用户(任何人)';
$labels['anonymous'] = '来宾(匿名)';
$labels['identifier'] = '标识符';
$labels['acll'] = '查找';
$labels['aclr'] = '读取消息';
$labels['acls'] = '保存已读状态';
$labels['aclw'] = '写入标志';
$labels['acli'] = '插入(复制至)';
$labels['aclp'] = '发送';
$labels['aclc'] = '创建子文件夹';
$labels['aclk'] = '创建子文件夹';
$labels['acld'] = '删除消息';
$labels['aclt'] = '删除消息';
$labels['acle'] = '清除';
$labels['aclx'] = '删除文件夹';
$labels['acla'] = '管理';
$labels['acln'] = '注释消息';
$labels['aclfull'] = '全部控制';
$labels['aclother'] = '其它';
$labels['aclread'] = '读取';
$labels['aclwrite'] = '写入';
$labels['acldelete'] = '删除';
$labels['shortacll'] = '查找';
$labels['shortaclr'] = '读取';
$labels['shortacls'] = '保存';
$labels['shortaclw'] = '写入';
$labels['shortacli'] = '插入';
$labels['shortaclp'] = '发送';
$labels['shortaclc'] = '新建';
$labels['shortaclk'] = '新建';
$labels['shortacld'] = '删除';
$labels['shortaclt'] = '删除';
$labels['shortacle'] = '清除';
$labels['shortaclx'] = '删除文件夹';
$labels['shortacla'] = '管理';
$labels['shortacln'] = '注释';
$labels['shortaclother'] = '其他';
$labels['shortaclread'] = '读取';
$labels['shortaclwrite'] = '写入';
$labels['shortacldelete'] = '删除';
$labels['longacll'] = '该文件夹在列表上可见且可被订阅';
$labels['longaclr'] = '该文件夹可被打开阅读';
$labels['longacls'] = '已读消息标识可以改变';
$labels['longaclw'] = '除已读和删除表示外其他消息标识可以改变';
$labels['longacli'] = '消息可被标记,撰写或复制至文件夹中';
$labels['longaclp'] = '消息可以发到此文件夹';
$labels['longaclc'] = '文件夹可被创建(或改名)于现有目录下';
$labels['longaclk'] = '文件夹可直接在此目录下创建(或改名)';
$labels['longacld'] = '消息已删除标识可以改变';
$labels['longaclt'] = '消息已删除标识可以改变';
$labels['longacle'] = '消息可被清除';
$labels['longaclx'] = '该文件夹可被删除或重命名';
$labels['longacla'] = '文件夹访问权限可被修改';
$labels['longacln'] = '消息共享元数据(注释)可以改变';
$labels['longaclfull'] = '完全控制,包括文件夹管理';
$labels['longaclread'] = '该文件夹可被打开阅读';
$labels['longaclwrite'] = '消息可被标记,撰写或复制至文件夹中';
$labels['longacldelete'] = '信息可被删除';
$labels['longaclother'] = '其他访问权限';
$labels['ariasummaryacltable'] = '访问权限列表';
$labels['arialabelaclactions'] = '列出操作';
$labels['arialabelaclform'] = '访问权限从';
$messages['deleting'] = '删除访问权限中…';
$messages['saving'] = '保存访问权限中…';
$messages['updatesuccess'] = '成功修改访问权限';
$messages['deletesuccess'] = '成功删除访问权限';
$messages['createsuccess'] = '成功添加访问权限';
$messages['updateerror'] = '无法更新访问权限';
$messages['deleteerror'] = '无法删除访问权限';
$messages['createerror'] = '无法添加访问权限';
$messages['deleteconfirm'] = '您确定要移除选中用户的访问权限吗?';
$messages['norights'] = '没有已指定的权限!';
$messages['nouser'] = '没有已指定的用户名!';
PK|c�\�pxObbacl/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Сумесны доступ';
$labels['myrights'] = 'Правы доступу';
$labels['username'] = 'Карыстальнік:';
$labels['advanced'] = 'Пашыраны рэжым';
$labels['add'] = 'Дадаць';
$labels['newuser'] = 'Дадаць запіс';
$labels['editperms'] = 'Рэдагаваць правы доступу';
$labels['actions'] = 'Дзеянні з правамі доступу...';
$labels['anyone'] = 'Усе карыстальнікі (любыя)';
$labels['anonymous'] = 'Госці (ананімныя)';
$labels['identifier'] = 'Ідэнтыфікатар';
$labels['acll'] = 'Пошук';
$labels['aclr'] = 'Прачытаць лісты';
$labels['acls'] = 'Пакінуць стан прагледжанага';
$labels['aclw'] = 'Запісаць сцягі';
$labels['acli'] = 'Уставіць (капіяваць у)';
$labels['aclp'] = 'Адправіць';
$labels['aclc'] = 'Стварыць укладзеныя каталогі';
$labels['aclk'] = 'Стварыць укладзеныя каталогі';
$labels['acld'] = 'Выдаліць лісты';
$labels['aclt'] = 'Выдаліць лісты';
$labels['acle'] = 'Знішчыць лісты';
$labels['aclx'] = 'Выдаліць каталог';
$labels['acla'] = 'Адміністраваць';
$labels['acln'] = 'Анатаваць лісты';
$labels['aclfull'] = 'Поўны доступ';
$labels['aclother'] = 'Іншае';
$labels['aclread'] = 'Чытанне';
$labels['aclwrite'] = 'Запіс';
$labels['acldelete'] = 'Выдаленне';
$labels['shortacll'] = 'Пошук';
$labels['shortaclr'] = 'Чытанне';
$labels['shortacls'] = 'Пакінуць';
$labels['shortaclw'] = 'Запісванне';
$labels['shortacli'] = 'Даданне';
$labels['shortaclp'] = 'Адпраўленне';
$labels['shortaclc'] = 'Стварэнне';
$labels['shortaclk'] = 'Стварэнне';
$labels['shortacld'] = 'Выдаленне';
$labels['shortaclt'] = 'Выдаленне';
$labels['shortacle'] = 'Знішчэнне';
$labels['shortaclx'] = 'Выдаліць каталог';
$labels['shortacla'] = 'Адміністраванне';
$labels['shortacln'] = 'Анатаваць';
$labels['shortaclother'] = 'Іншае';
$labels['shortaclread'] = 'Чытанне';
$labels['shortaclwrite'] = 'Запіс';
$labels['shortacldelete'] = 'Выдаленне';
$labels['longacll'] = 'Можна пабачыць каталог у спісах і падпісацца на яго';
$labels['longaclr'] = 'Можна адкрыць каталог для чытання';
$labels['longacls'] = 'Можна пераключаць сцяг прагляду лістоў';
$labels['longaclw'] = 'Можна замяняць ключавыя словы і пераключаць сцягі лістоў, апроч прагляду і выдалення';
$labels['longacli'] = 'Можна запісваць альбо капіяваць лісты ў каталог';
$labels['longaclp'] = 'Можна размяшчаць лісты ў гэтым каталозе';
$labels['longaclc'] = 'Можна ствараць каталогі (або змяняць іх назвы) непасрэдна пад гэтым каталогам';
$labels['longaclk'] = 'Можна ствараць каталогі (або змяняць іх назвы) непасрэдна пад гэтым каталогам';
$labels['longacld'] = 'Можна пераключаць сцяг выдалення лістоў';
$labels['longaclt'] = 'Можна пераключаць сцяг выдалення лістоў';
$labels['longacle'] = 'Можна знішчаць лісты';
$labels['longaclx'] = 'Можна выдаляць каталогі альбо змяняць іх назвы';
$labels['longacla'] = 'Можна змяніць правы доступу да каталога';
$labels['longacln'] = 'Можна змяняць анатацыі да лістоў (супольныя метаданыя)';
$labels['longaclfull'] = 'Поўны доступ, уключаючы адмінстраванне каталога';
$labels['longaclread'] = 'Можна адкрываць каталогі для чытання';
$labels['longaclwrite'] = 'Можна пазначаць, запісваць альбо капіяваць лісты ў каталог';
$labels['longacldelete'] = 'Можна выдаляць лісты';
$labels['longaclother'] = 'Іншыя правы доступу';
$labels['ariasummaryacltable'] = 'Спіс правоў доступу';
$labels['arialabelaclactions'] = 'Спіс дзеянняў';
$labels['arialabelaclform'] = 'Форма правоў доступу';
$messages['deleting'] = 'Выдаленне правоў доступу...';
$messages['saving'] = 'Захаванне правоў доступу...';
$messages['updatesuccess'] = 'Правы доступу змененыя';
$messages['deletesuccess'] = 'Правы доступу выдаленыя';
$messages['createsuccess'] = 'Правы доступу дададзеныя';
$messages['updateerror'] = 'Не ўдалося абнавіць правы доступу';
$messages['deleteerror'] = 'Не ўдалося выдаліць правы доступу';
$messages['createerror'] = 'Не ўдалося дадаць правы доступу';
$messages['deleteconfirm'] = 'Сапраўды выдаліць правы доступу для абранага карыстальніка(ў)?';
$messages['norights'] = 'Ніякіх правоў не вызначана!';
$messages['nouser'] = 'Не пазначана імёнаў карыстальнікаў!';
PK|c�\����UUacl/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Споделяне';
$labels['myrights'] = 'Права за достъп';
$labels['username'] = 'Потребител:';
$labels['advanced'] = 'Разширен режим';
$labels['add'] = 'Добави';
$labels['newuser'] = 'Добавяне на запис';
$labels['editperms'] = 'Редакция на права';
$labels['actions'] = 'Действия на права за достъп...';
$labels['anyone'] = 'Всички потребители (който и да е)';
$labels['anonymous'] = 'Гости (анонимни)';
$labels['identifier'] = 'Индентификатор';
$labels['acll'] = 'Претърсване';
$labels['aclr'] = 'Четене на писма';
$labels['acls'] = 'Запазване на Видяно';
$labels['aclw'] = 'Записване на флагове';
$labels['acli'] = 'Вмъкване (Копиране в)';
$labels['aclp'] = 'Изпращане';
$labels['aclc'] = 'Създаване на подпапки';
$labels['aclk'] = 'Създаване на подпапки';
$labels['acld'] = 'Изтриване на писма';
$labels['aclt'] = 'Изтриване на писмо';
$labels['acle'] = 'Заличаване';
$labels['aclx'] = 'Изтриване на папка';
$labels['acla'] = 'Администриране';
$labels['acln'] = 'Анотиране на писма';
$labels['aclfull'] = 'Пълен контрол';
$labels['aclother'] = 'Други';
$labels['aclread'] = 'Четене';
$labels['aclwrite'] = 'Писане';
$labels['acldelete'] = 'Изтриване';
$labels['shortacll'] = 'Търсене';
$labels['shortaclr'] = 'Четене';
$labels['shortacls'] = 'Запазване';
$labels['shortaclw'] = 'Писане';
$labels['shortacli'] = 'Вмъкване';
$labels['shortaclp'] = 'Изпращане';
$labels['shortaclc'] = 'Създаване';
$labels['shortaclk'] = 'Създаване';
$labels['shortacld'] = 'Изтриване';
$labels['shortaclt'] = 'Изтриване';
$labels['shortacle'] = 'Заличаване';
$labels['shortaclx'] = 'Изтриване на папка';
$labels['shortacla'] = 'Администриране';
$labels['shortacln'] = 'Анотирай';
$labels['shortaclother'] = 'Други';
$labels['shortaclread'] = 'Четене';
$labels['shortaclwrite'] = 'Писане';
$labels['shortacldelete'] = 'Изтриване';
$labels['longacll'] = 'Папката е видима в списъците и може да се абонирате';
$labels['longaclr'] = 'Папката може да бъде отворена за четене';
$labels['longacls'] = 'Флаг Видяно може да бъде променен.';
$labels['longaclw'] = 'Флаговете и кл. думи за писмата могат да бъдат променяни, без Видяно и Изтрито.';
$labels['longacli'] = 'Писмата могат да бъдат писани или копирани към папката.';
$labels['longaclp'] = 'Писмата могат да бъдат писани в папката';
$labels['longaclc'] = 'Папките могат да бъдат създавани (или преименувани) директно в тази папка';
$labels['longaclk'] = 'Папките могат да бъдат създавани (или преименувани) в тази основна папка';
$labels['longacld'] = 'Флагът Изтрито може да бъде променян';
$labels['longaclt'] = 'Флагът Изтрито може да бъде променян';
$labels['longacle'] = 'Писмата могат да бъдат заличавани';
$labels['longaclx'] = 'Папката може да бъде изтривана или преименувана';
$labels['longacla'] = 'Правата за достъп до папката могат да бъдат променяни';
$labels['longacln'] = 'Могат да се променят споделените метаданни (антоции) на писмата';
$labels['longaclfull'] = 'Пълен контрол, включително и администриране на папките';
$labels['longaclread'] = 'Папката може да бъде отворена за четене';
$labels['longaclwrite'] = 'Писмата могат да бъдат маркирани, записвани или копирани в папката';
$labels['longacldelete'] = 'Писмата могат да бъдат изтривани';
$labels['longaclother'] = 'Други права за достъп';
$labels['ariasummaryacltable'] = 'Списък с права за достъп';
$labels['arialabelaclactions'] = 'Списък с действия';
$labels['arialabelaclform'] = 'Форма с права за достъп';
$messages['deleting'] = 'Изтриване на права за достъп...';
$messages['saving'] = 'Запазване на права за достъп...';
$messages['updatesuccess'] = 'Правата за достъп са променени успешно';
$messages['deletesuccess'] = 'Правата за достъп са изтрити успешно';
$messages['createsuccess'] = 'Правата за достъп са добавени успешно';
$messages['updateerror'] = 'Невъзможно модифициране на правата за достъп';
$messages['deleteerror'] = 'Невъзможно изтриване на права за достъп';
$messages['createerror'] = 'Невъзможно добавяне на права за достъп';
$messages['deleteconfirm'] = 'Сигурни ли сте, че желаете да премахнате правата за достъп от избраните потребители?';
$messages['norights'] = 'Няма указани права!';
$messages['nouser'] = 'Няма указано потребителско име!';
PK|c�\�!��iiacl/localization/ne_NP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/


$labels['acldelete'] = 'मेटाउनुहोस';
$labels['shortaclc'] = 'बनाउनुहोस';
$labels['shortaclk'] = 'बनाउनुहोस';
$labels['shortacld'] = 'मेटाउनुहोस';
$labels['shortaclt'] = 'मेटाउनुहोस';
$labels['shortacldelete'] = 'मेटाउनुहोस';
PK|c�\ʈv�acl/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Sharing';
$labels['myrights'] = 'Access Rights';
$labels['username'] = 'User:';
$labels['advanced'] = 'Advanced mode';
$labels['add'] = 'Add';
$labels['newuser'] = 'Add entry';
$labels['editperms'] = 'Edit permissions';
$labels['actions'] = 'Access right actions...';
$labels['anyone'] = 'All users (anyone)';
$labels['anonymous'] = 'Guests (anonymous)';
$labels['identifier'] = 'Identifier';

$labels['acll'] = 'Lookup';
$labels['aclr'] = 'Read messages';
$labels['acls'] = 'Keep Seen state';
$labels['aclw'] = 'Write flags';
$labels['acli'] = 'Insert (Copy into)';
$labels['aclp'] = 'Post';
$labels['aclc'] = 'Create subfolders';
$labels['aclk'] = 'Create subfolders';
$labels['acld'] = 'Delete messages';
$labels['aclt'] = 'Delete messages';
$labels['acle'] = 'Expunge';
$labels['aclx'] = 'Delete folder';
$labels['acla'] = 'Administer';
$labels['acln'] = 'Annotate messages';

$labels['aclfull'] = 'Full control';
$labels['aclother'] = 'Other';
$labels['aclread'] = 'Read';
$labels['aclwrite'] = 'Write';
$labels['acldelete'] = 'Delete';

$labels['shortacll'] = 'Lookup';
$labels['shortaclr'] = 'Read';
$labels['shortacls'] = 'Keep';
$labels['shortaclw'] = 'Write';
$labels['shortacli'] = 'Insert';
$labels['shortaclp'] = 'Post';
$labels['shortaclc'] = 'Create';
$labels['shortaclk'] = 'Create';
$labels['shortacld'] = 'Delete';
$labels['shortaclt'] = 'Delete';
$labels['shortacle'] = 'Expunge';
$labels['shortaclx'] = 'Folder delete';
$labels['shortacla'] = 'Administer';
$labels['shortacln'] = 'Annotate';

$labels['shortaclother'] = 'Other';
$labels['shortaclread'] = 'Read';
$labels['shortaclwrite'] = 'Write';
$labels['shortacldelete'] = 'Delete';

$labels['longacll'] = 'The folder is visible on lists and can be subscribed to';
$labels['longaclr'] = 'The folder can be opened for reading';
$labels['longacls'] = 'Messages Seen flag can be changed';
$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted';
$labels['longacli'] = 'Messages can be written or copied to the folder';
$labels['longaclp'] = 'Messages can be posted to this folder';
$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder';
$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder';
$labels['longacld'] = 'Messages Delete flag can be changed';
$labels['longaclt'] = 'Messages Delete flag can be changed';
$labels['longacle'] = 'Messages can be expunged';
$labels['longaclx'] = 'The folder can be deleted or renamed';
$labels['longacla'] = 'The folder access rights can be changed';
$labels['longacln'] = 'Messages shared metadata (annotations) can be changed';

$labels['longaclfull'] = 'Full control including folder administration';
$labels['longaclread'] = 'The folder can be opened for reading';
$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder';
$labels['longacldelete'] = 'Messages can be deleted';
$labels['longaclother'] = 'Other access rights';

$labels['ariasummaryacltable'] = 'List of access rights';
$labels['arialabelaclactions'] = 'List actions';
$labels['arialabelaclform'] = 'Access rights form';

$messages['deleting'] = 'Deleting access rights...';
$messages['saving'] = 'Saving access rights...';
$messages['updatesuccess'] = 'Successfully changed access rights';
$messages['deletesuccess'] = 'Successfully deleted access rights';
$messages['createsuccess'] = 'Successfully added access rights';
$messages['updateerror'] = 'Unable to update access rights';
$messages['deleteerror'] = 'Unable to delete access rights';
$messages['createerror'] = 'Unable to add access rights';
$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?';
$messages['norights'] = 'No rights has been specified!';
$messages['nouser'] = 'No username has been specified!';
PK|c�\��tacl/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Jakaminen';
$labels['myrights'] = 'Käyttöoikeudet';
$labels['username'] = 'Käyttäjä:';
$labels['advanced'] = 'Edistynyt tila';
$labels['add'] = 'Lisää';
$labels['newuser'] = 'LIsää kohde';
$labels['editperms'] = 'Muokkaa oikeuksia';
$labels['actions'] = 'Käyttöoikeuksien toiminnot...';
$labels['anyone'] = 'Kaikki käyttäjät (kuka tahansa)';
$labels['anonymous'] = 'Vieraat (anonyymit)';
$labels['identifier'] = 'Tunniste';
$labels['aclr'] = 'Lue viestit';
$labels['acls'] = 'Säilytä Luettu-tila';
$labels['aclc'] = 'Luo alikansioita';
$labels['aclk'] = 'Luo alikansioita';
$labels['acld'] = 'Poista viestejä';
$labels['aclt'] = 'Poista viestejä';
$labels['acle'] = 'Tiivistä';
$labels['aclx'] = 'Poista kansio';
$labels['acla'] = 'Hallitse';
$labels['aclfull'] = 'Täydet käyttöoikeudet';
$labels['aclother'] = 'Muu';
$labels['aclread'] = 'Luku';
$labels['aclwrite'] = 'Kirjoitus';
$labels['acldelete'] = 'Poisto';
$labels['shortaclr'] = 'Lue';
$labels['shortacls'] = 'Säilytä';
$labels['shortaclw'] = 'Kirjoitus';
$labels['shortacli'] = 'Lisää';
$labels['shortaclc'] = 'Luo';
$labels['shortaclk'] = 'Luo';
$labels['shortacld'] = 'Poista';
$labels['shortaclt'] = 'Poista';
$labels['shortacle'] = 'Tiivistä';
$labels['shortaclx'] = 'Kansion poisto';
$labels['shortacla'] = 'Hallitse';
$labels['shortaclother'] = 'Muu';
$labels['shortaclread'] = 'Luku';
$labels['shortaclwrite'] = 'Kirjoitus';
$labels['shortacldelete'] = 'Poisto';
$labels['longaclr'] = 'Kansion voi avata lukua varten';
$labels['longaclp'] = 'Viestejä voidaan lähettää tähän kansioon';
$labels['longaclc'] = 'Kansioita voidaan luoda (tai uudelleennimetä) suoraan tämän kansion alle';
$labels['longaclk'] = 'Kansioita voidaan luoda (tai uudelleennimetä) suoraan tämän kansion alle';
$labels['longacle'] = 'Viestit voidaan tiivistää';
$labels['longaclx'] = 'Kansio voidaan poistaa tai nimetä uudelleen';
$labels['longacla'] = 'Kansion käyttöoikeuksia voi muuttaa';
$labels['longaclread'] = 'Kansion voi avata lukua varten';
$labels['longacldelete'] = 'Viestit voidaan poistaa';
$labels['longaclother'] = 'Muut käyttöoikeudet';
$labels['ariasummaryacltable'] = 'Lista käyttöoikeuksista';
$labels['arialabelaclactions'] = 'Listatoiminnot';
$messages['deleting'] = 'Poistetaan käyttöoikeuksia...';
$messages['saving'] = 'Tallennetaan käyttöoikeuksia...';
$messages['updatesuccess'] = 'Käyttöoikeuksia muutettiin onnistuneesti';
$messages['deletesuccess'] = 'Käyttöoikeuksia poistettiin onnistuneesti';
$messages['createsuccess'] = 'Käyttöoikeuksia lisättiin onnistuneesti';
$messages['updateerror'] = 'Käyttöoikeuksien päivitys epäonnistui';
$messages['deleteerror'] = 'Käyttöoikeuksien poistaminen epäonnistui';
$messages['createerror'] = 'Käyttöoikeuksien lisääminen epäonnistui';
$messages['deleteconfirm'] = 'Oletko varma että haluat poistaa oikeudet valituilta käyttäjiltä?';
$messages['norights'] = 'Oikeuksia ei ole määritelty!';
$messages['nouser'] = 'Käyttäjänimeä ei ole määritelty!';
PK|c�\GY�'}}acl/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Deling';
$labels['myrights'] = 'Tilgangsrettigheter';
$labels['username'] = 'Bruker:';
$labels['advanced'] = 'Avansert modus';
$labels['add'] = 'Legg til';
$labels['newuser'] = 'Legg til oppføring';
$labels['editperms'] = 'Rediger tilgangsrettigheter';
$labels['actions'] = 'Valg for tilgangsrettigheter.';
$labels['anyone'] = 'Alle brukere (alle)';
$labels['anonymous'] = 'Gjester (anonyme)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Oppslag';
$labels['aclr'] = 'Les meldinger';
$labels['acls'] = 'Behold lesestatus';
$labels['aclw'] = 'Lagre flagg';
$labels['acli'] = 'Lim inn';
$labels['aclp'] = 'Post';
$labels['aclc'] = 'Opprett undermapper';
$labels['aclk'] = 'Opprett undermapper';
$labels['acld'] = 'Slett meldinger';
$labels['aclt'] = 'Slett meldinger';
$labels['acle'] = 'Slett fullstendig';
$labels['aclx'] = 'Slett mappe';
$labels['acla'] = 'Administrer';
$labels['aclfull'] = 'Full kontroll';
$labels['aclother'] = 'Annet';
$labels['aclread'] = 'Les';
$labels['aclwrite'] = 'Skriv';
$labels['acldelete'] = 'Slett';
$labels['shortacll'] = 'Oppslag';
$labels['shortaclr'] = 'Les';
$labels['shortacls'] = 'Behold';
$labels['shortaclw'] = 'Skriv';
$labels['shortacli'] = 'Sett inn';
$labels['shortaclp'] = 'Post';
$labels['shortaclc'] = 'Opprett';
$labels['shortaclk'] = 'Opprett';
$labels['shortacld'] = 'Slett';
$labels['shortaclt'] = 'Slett';
$labels['shortacle'] = 'Slett fullstendig';
$labels['shortaclx'] = 'Slett mappe';
$labels['shortacla'] = 'Administrer';
$labels['shortaclother'] = 'Annet';
$labels['shortaclread'] = 'Les';
$labels['shortaclwrite'] = 'Skriv';
$labels['shortacldelete'] = 'Slett';
$labels['longacll'] = 'Mappen er synlig og kan abonneres på';
$labels['longaclr'] = 'Mappen kan åpnes for lesing';
$labels['longacls'] = 'Meldingenes lesestatusflagg kan endres';
$labels['longaclw'] = 'Meldingsflagg og -nøkkelord kan endres, bortsett fra status for lesing og sletting';
$labels['longacli'] = 'Meldinger kan lagres eller kopieres til mappen';
$labels['longaclp'] = 'Meldinger kan postes til denne mappen';
$labels['longaclc'] = 'Mapper kan opprettes (eller navnes om) direkte under denne mappen';
$labels['longaclk'] = 'Mapper kan opprettes (eller navnes om) direkte under denne mappen';
$labels['longacld'] = 'Meldingenes flagg for sletting kan endres';
$labels['longaclt'] = 'Meldingenes flagg for sletting kan endres';
$labels['longacle'] = 'Meldingen kan slettes for godt';
$labels['longaclx'] = 'Mappen kan slettes eller gis nytt navn';
$labels['longacla'] = 'Mappens tilgangsrettigheter kan endres';
$labels['longaclfull'] = 'Full kontroll, inkludert mappeadministrasjon';
$labels['longaclread'] = 'Mappen kan åpnes for lesing';
$labels['longaclwrite'] = 'Meldinger kan merkes, lagres i eller flyttes til mappen';
$labels['longacldelete'] = 'Meldingen kan slettes';
$labels['longaclother'] = 'Andre tilgangsrettigheter';
$labels['ariasummaryacltable'] = 'List tilgangsrettigheter';
$messages['deleting'] = 'Sletter tilgangsrettigheter';
$messages['saving'] = 'Lagrer tilgangsrettigheter';
$messages['updatesuccess'] = 'Tilgangsrettigheter ble endret';
$messages['deletesuccess'] = 'Tilgangsrettigheter ble slettet';
$messages['createsuccess'] = 'Tilgangsrettigheter ble lagt til';
$messages['updateerror'] = 'Kunne ikke oppdatere tilgangsrettigheter';
$messages['deleteerror'] = 'Kunne ikke fjerne tilgangsrettigheter';
$messages['createerror'] = 'Kunne ikke legge til tilgangsrettigheter';
$messages['deleteconfirm'] = 'Er du sikker på at du vil fjerne tilgangen til  valgte brukere';
$messages['norights'] = 'Ingen rettigheter er spesifisert!';
$messages['nouser'] = 'Brukernavn er ikke spesifisert!';
PK|c�\)�n���acl/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Ndarje Me të Tjerë';
$labels['myrights'] = 'Të drejta Hyrjeje';
$labels['username'] = 'Përdorues:';
$labels['advanced'] = 'Mënyra e përparuar';
$labels['add'] = 'Shtoje';
$labels['newuser'] = 'Shtoni zë';
$labels['editperms'] = 'Përpunoni leje';
$labels['actions'] = 'Veprime të drejtash hyrjeje…';
$labels['anyone'] = 'Krejt përdoruesit (cilido)';
$labels['anonymous'] = 'Mysafirë (në mënyrë anonime)';
$labels['identifier'] = 'Identifikues';
$labels['acll'] = 'Kërkim';
$labels['aclr'] = 'Lexoni mesazhe';
$labels['acls'] = 'Mbaje gjendjen i Parë';
$labels['aclw'] = 'Shkruaju shenjat';
$labels['acli'] = 'Fut (Kopje te)';
$labels['aclp'] = 'Postim';
$labels['aclc'] = 'Krijo nëndosje';
$labels['aclk'] = 'Krijo nëndosje';
$labels['acld'] = 'Fshiji mesazhet';
$labels['aclt'] = 'Fshiji mesazhet';
$labels['acle'] = 'Spastroje';
$labels['aclx'] = 'Fshije dosjen';
$labels['acla'] = 'Administroni';
$labels['acln'] = 'Shto shënime te mesazhet';
$labels['aclfull'] = 'Kontroll i plotë';
$labels['aclother'] = 'Tjetër';
$labels['aclread'] = 'Leximi';
$labels['aclwrite'] = 'Shkrimi';
$labels['acldelete'] = 'Fshije';
$labels['shortacll'] = 'Kërkim';
$labels['shortaclr'] = 'Leximi';
$labels['shortacls'] = 'Mbaje';
$labels['shortaclw'] = 'Shkrimi';
$labels['shortacli'] = 'Fut';
$labels['shortaclp'] = 'Posto';
$labels['shortaclc'] = 'Krijoje';
$labels['shortaclk'] = 'Krijoje';
$labels['shortacld'] = 'Fshije';
$labels['shortaclt'] = 'Fshije';
$labels['shortacle'] = 'Spastro';
$labels['shortaclx'] = 'Fshirje dosjeje';
$labels['shortacla'] = 'Administro';
$labels['shortacln'] = 'Shto shënim';
$labels['shortaclother'] = 'Tjetër';
$labels['shortaclread'] = 'Leximi';
$labels['shortaclwrite'] = 'Shkrimi';
$labels['shortacldelete'] = 'Fshirjeje';
$labels['longacll'] = 'Dosja është e dukshme në lista dhe në të mund të pajtoheni';
$labels['longaclr'] = 'Dosja mund të hapet për lexim';
$labels['longacls'] = 'Mund të ndryshohet shenja Mesazhe të Parë';
$labels['longaclw'] = 'Mund të ndryshohen shenjat dhe fjalëkyçet për mesazhet, hiq të Parë dhe të Fshirë';
$labels['longacli'] = 'Mesazhet mund të shkruhen ose kopjohen në dosje';
$labels['longaclp'] = 'Mesazhet mund të postohen te kjo dosje';
$labels['longaclc'] = 'Dosjet mund të krijohen (ose riemërtohen) drejt e nën këtë dosje';
$labels['longaclk'] = 'Dosjet mund të krijohen (ose riemërtohen) drejt e nën këtë dosje';
$labels['longacld'] = 'Mund të ndryshohet shenja Mesazhe të Fshirë';
$labels['longaclt'] = 'Mund të ndryshohet shenja Mesazhe të Parë';
$labels['longacle'] = 'Mesazhet mund të spastrohen';
$labels['longaclx'] = 'Dosja mund të fshihet ose riemërtohet';
$labels['longacla'] = 'Mund të ndryshohen të drejta hyrjeje te dosja';
$labels['longacln'] = 'Mund të ndryshohen tejtëdhëna të përbashkëta (shënime) mesazhesh';
$labels['longaclfull'] = 'Kontroll i plotë, përfshi administrim dosjesh';
$labels['longaclread'] = 'Dosja mund të hapet për lexim';
$labels['longaclwrite'] = 'Mesazheve mund t’u vihet shenjë, shkruhen ose kopjohen te dosja';
$labels['longacldelete'] = 'Mesazhet mund të fshihen';
$labels['longaclother'] = 'Të tjera të drejta hyrjesh';
$labels['ariasummaryacltable'] = 'Listë të drejtash hyrjeje';
$labels['arialabelaclactions'] = 'Paraqit veprime';
$labels['arialabelaclform'] = 'Formular të drejtash hyrjeje';
$messages['deleting'] = 'Po fshihen të drejta hyrjeje…';
$messages['saving'] = 'Po ruhen të drejtash hyrjeje…';
$messages['updatesuccess'] = 'U ndryshuan me sukses të drejta hyrjeje';
$messages['deletesuccess'] = 'U fshinë me sukses të drejta hyrjeje';
$messages['createsuccess'] = 'U shtuan me sukses të drejta hyrjeje';
$messages['updateerror'] = 'S’arrihet të përditësohen të drejta hyrjeje';
$messages['deleteerror'] = 'S’arrihet të fshihen të drejta hyrjeje';
$messages['createerror'] = 'S’arrihet të shtohen të drejta hyrjeje';
$messages['deleteconfirm'] = 'Jeni i sigurt, doni t’i hiqni të drejta hyrjeje përdoruesit(ve) të përzgjedhur?';
$messages['norights'] = 'S’janë specifikuar të drejta!';
$messages['nouser'] = 'S’është specifikuar emër përdoruesi!';
PK|c�\����{{acl/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Jagamine';
$labels['myrights'] = 'Ligipääsuõigused';
$labels['username'] = 'Kasutaja:';
$labels['advanced'] = 'laiendatud režiim';
$labels['add'] = 'Lisa';
$labels['newuser'] = 'Lisa sissekanne';
$labels['editperms'] = 'Muuda õigusi';
$labels['actions'] = 'Ligipääsuõiguste toimingud...';
$labels['anyone'] = 'Kõik kasutajad';
$labels['anonymous'] = 'Külalised (anonüümsed)';
$labels['identifier'] = 'Tuvastaja';
$labels['acll'] = 'Ülevaade';
$labels['aclr'] = 'Lugeda kirju';
$labels['acls'] = 'Hoia nähtud olekut';
$labels['aclw'] = 'Salvesta lipud';
$labels['acli'] = 'Sisesta (kopeeri)';
$labels['aclp'] = 'Postita';
$labels['aclc'] = 'Luua alamkaustu';
$labels['aclk'] = 'Luua alamkaustu';
$labels['acld'] = 'Kustutada kirju';
$labels['aclt'] = 'Kustutada kirju';
$labels['acle'] = 'Eemalda';
$labels['aclx'] = 'Kustutada kausta';
$labels['acla'] = 'Administreerida';
$labels['acln'] = 'Annoteeri kirja';
$labels['aclfull'] = 'Täis kontroll';
$labels['aclother'] = 'Muu';
$labels['aclread'] = 'Loe';
$labels['aclwrite'] = 'Kirjuta';
$labels['acldelete'] = 'Kustuta';
$labels['shortacll'] = 'Ülevaade';
$labels['shortaclr'] = 'Loe';
$labels['shortacls'] = 'Säilita';
$labels['shortaclw'] = 'Kirjuta';
$labels['shortacli'] = 'Lisa';
$labels['shortaclp'] = 'Postita';
$labels['shortaclc'] = 'Loo';
$labels['shortaclk'] = 'Loo';
$labels['shortacld'] = 'Kustuta';
$labels['shortaclt'] = 'Kustuta';
$labels['shortacle'] = 'Eemalda';
$labels['shortaclx'] = 'Kausta kustutamine';
$labels['shortacla'] = 'Administreerida';
$labels['shortacln'] = 'Annoteeri';
$labels['shortaclother'] = 'Muu';
$labels['shortaclread'] = 'Loe';
$labels['shortaclwrite'] = 'Kirjuta';
$labels['shortacldelete'] = 'Kustuta';
$labels['longacll'] = 'See kaust on nimekirjas nähtav ja seda saab tellida';
$labels['longaclr'] = 'Kausta saab lugemiseks avada';
$labels['longacls'] = 'Kirja loetuse lippu saab muuta';
$labels['longaclw'] = 'Kirja lippe ja otsingusõnu saab muuta, väljaarvatud loetud ja kustutatud';
$labels['longacli'] = 'Kirju saab salvestada ja kopeerida antud kausta';
$labels['longaclp'] = 'Kirju saab postitada antud kausta';
$labels['longaclc'] = 'Kaustasi saab luua (või ümber nimetada) otse siia kausta alla.';
$labels['longaclk'] = 'Kaustu saab luua (või ümber nimetada) otse siia kausta alla';
$labels['longacld'] = 'Kirja kustutamis lippu saab muuta';
$labels['longaclt'] = 'Kirja kustutamis lippu saab muuta';
$labels['longacle'] = 'Kirju saab eemaldada';
$labels['longaclx'] = 'Seda kausta ei saa kustutada ega ümber nimetada';
$labels['longacla'] = 'Selle kausta ligipääsuõigusi saab muuta';
$labels['longacln'] = 'Kirja jagatud metainfot (annotatsioonid) saab muuta';
$labels['longaclfull'] = 'Täielik kontroll koos kaustade haldamisega';
$labels['longaclread'] = 'Kausta saab lugemiseks avada';
$labels['longaclwrite'] = 'Kirju saab märgistada, salvestada või kopeerida kausta';
$labels['longacldelete'] = 'Kirju saab kustutada';
$labels['longaclother'] = 'Muud ligipääsu õigused';
$labels['ariasummaryacltable'] = 'Nimekir ligipääsu õigustest';
$labels['arialabelaclactions'] = 'Näita tegevusi';
$labels['arialabelaclform'] = 'Ligipääsu õiguste vorm';
$messages['deleting'] = 'Ligipääsuõiguste kustutamine...';
$messages['saving'] = 'Ligipääsuõiguste salvestamine...';
$messages['updatesuccess'] = 'Ligipääsuõigused on muudetud';
$messages['deletesuccess'] = 'Ligipääsuõigused on kustutatud';
$messages['createsuccess'] = 'Ligipääsuõigused on lisatud';
$messages['updateerror'] = 'Ligipääsuõiguste uuendamine nurjus';
$messages['deleteerror'] = 'Ligipääsuõiguste kustutamine nurjus';
$messages['createerror'] = 'Ligipääsuõiguste andmine nurjus';
$messages['deleteconfirm'] = 'Oled sa kindel, et sa soovid valitudkasutaja(te) õiguseid kustutada?';
$messages['norights'] = 'Õigusi pole määratud!';
$messages['nouser'] = 'Kasutajanime pole määratud!';
PK|c�\�p���acl/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'هاوبەشکردن';
$labels['username'] = 'بەکارهێنەر:';
$labels['advanced'] = 'شێوازی پێشکەوتوو';
$labels['acldelete'] = 'سڕینەوە';
$labels['shortaclc'] = 'دروستکردن';
$labels['shortaclk'] = 'دروستکردن';
$labels['shortacld'] = 'سڕینەوە';
$labels['shortaclt'] = 'سڕینەوە';
$labels['shortaclx'] = 'سڕینەوەی بوخچە';
$labels['shortacldelete'] = 'سڕینەوە';
PK|c�\..{D��acl/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Partekatzen';
$labels['myrights'] = 'Sarbide-eskubideak';
$labels['username'] = 'Erabiltzailea:';
$labels['advanced'] = 'Modu aurreratua';
$labels['add'] = 'Gehitu';
$labels['newuser'] = 'Gehitu sarrera';
$labels['editperms'] = 'Editatu baimenak';
$labels['actions'] = 'Sarbide-eskubideen ekintzak...';
$labels['anyone'] = 'Erabiltzaile guztiak (edozein)';
$labels['anonymous'] = 'Gonbidatuak (anonimo)';
$labels['identifier'] = 'Identifikatzailea';
$labels['acll'] = 'Bilatu';
$labels['aclr'] = 'Irakurri mezuak';
$labels['acls'] = 'Mantendu ikusita egoera';
$labels['aclw'] = 'Idatzi banderak';
$labels['acli'] = 'Txertatu (kopiatu barnean)';
$labels['aclp'] = 'Posta';
$labels['aclc'] = 'Sortu azpikarpetak';
$labels['aclk'] = 'Sortu azpikarpetak';
$labels['acld'] = 'Ezabatu mezuak';
$labels['aclt'] = 'Ezabatu mezuak';
$labels['acle'] = 'Kendu';
$labels['aclx'] = 'Ezabatu karpeta';
$labels['acla'] = 'Administratu';
$labels['acln'] = 'Idatzi mezuak';
$labels['aclfull'] = 'Kontrol osoa';
$labels['aclother'] = 'Beste';
$labels['aclread'] = 'Irakurri';
$labels['aclwrite'] = 'Idatzi';
$labels['acldelete'] = 'Ezabatu';
$labels['shortacll'] = 'Bilatu';
$labels['shortaclr'] = 'Irakurri';
$labels['shortacls'] = 'Mantendu';
$labels['shortaclw'] = 'Idatzi';
$labels['shortacli'] = 'Txertatu';
$labels['shortaclp'] = 'Bidali';
$labels['shortaclc'] = 'Sortu';
$labels['shortaclk'] = 'Sortu';
$labels['shortacld'] = 'Ezabatu';
$labels['shortaclt'] = 'Ezabatu';
$labels['shortacle'] = 'Kendu';
$labels['shortaclx'] = 'Ezabatu karpeta';
$labels['shortacla'] = 'Administratu';
$labels['shortacln'] = 'Idatzi';
$labels['shortaclother'] = 'Beste';
$labels['shortaclread'] = 'Irakurri';
$labels['shortaclwrite'] = 'Idatzi';
$labels['shortacldelete'] = 'Ezabatu';
$labels['longacll'] = 'Karpeta hau zerrendan ikusgai dago eta harpidetzen ahal zara';
$labels['longaclr'] = 'Karpeta ireki daiteke irakurtzeko';
$labels['longacls'] = 'Mezuen ikusita bandera aldatu daiteke';
$labels['longaclw'] = 'Mezuen banderak eta gako-hitzak alda daitezke, ikusita eta ezabatuta salbu';
$labels['longacli'] = 'Mezuak karpetara idatzi edo kopiatu daitezke';
$labels['longaclp'] = 'Mezuak bidali daitezke karpeta honetara';
$labels['longaclc'] = 'Karpetak sor daitezke (edo berrizendatu) zuzenean karpeta honetan';
$labels['longaclk'] = 'Karpetak sor daitezke (edo berrizendatu) karpeta honetan';
$labels['longacld'] = 'Mezuen ezabatu bandera alda daiteke';
$labels['longaclt'] = 'Mezuen ezabatu bandera alda daiteke';
$labels['longacle'] = 'Mezuak betiko ezaba daitezke';
$labels['longaclx'] = 'Karpeta ezaba edo berrizenda daiteke';
$labels['longacla'] = 'Karpetaren sarbide eskubideak alda daitezke';
$labels['longacln'] = 'Partekatutatko mezuen metadatuak (oharrak) alda daitezke';
$labels['longaclfull'] = 'Kontrol osoa, karpetaren administrazioa barne';
$labels['longaclread'] = 'Karpeta ireki daiteke irakurtzeko';
$labels['longaclwrite'] = 'Mezuak marka, idatzi edo kopia daitezke karpetara';
$labels['longacldelete'] = 'Mezuak ezaba daitezke';
$labels['longaclother'] = 'Beste sarbide-eskubideak';
$labels['ariasummaryacltable'] = 'Sarbide-eskubideen zerrenda';
$labels['arialabelaclactions'] = 'Zerrendatu ekintzak';
$labels['arialabelaclform'] = 'Sarbide-eskubideen formularioa';
$messages['deleting'] = 'Sarbide-eskubideak ezabatzen...';
$messages['saving'] = 'Sarbide-eskubideak gordetzen...';
$messages['updatesuccess'] = 'Sarbide-eskubideak ongi aldatu dira';
$messages['deletesuccess'] = 'Sarbide-eskubideak ongi ezabatu dira';
$messages['createsuccess'] = 'Sarbide-eskubideak ongi gehitu dira';
$messages['updateerror'] = 'Ezin dira eguneratu sarbide-eskubideak';
$messages['deleteerror'] = 'Ezin dira ezabatu sarbide-eskubideak';
$messages['createerror'] = 'Ezin dira gehitu sarbide-eskubideak';
$messages['deleteconfirm'] = 'Seguru zaude hautatutako erabiltzaile(ar)en sarbide-eskubideak ezabatu nahi duzula?';
$messages['norights'] = 'Eskubideak ez dira zehaztu!';
$messages['nouser'] = 'Erabiltzaile-izana ez da zehaztu!';
PK|c�\"���acl/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Paylaşım';
$labels['myrights'] = 'Erişim izinleri';
$labels['username'] = 'Kullanıcı:';
$labels['advanced'] = 'Gelişmiş kip';
$labels['add'] = 'Ekle';
$labels['newuser'] = 'Kayıt ekle';
$labels['editperms'] = 'İzinleri düzenle';
$labels['actions'] = 'Erişim izinleri işlemleri...';
$labels['anyone'] = 'Tüm kullanıcılar (kim olursa)';
$labels['anonymous'] = 'Ziyaretçiler (isimsiz)';
$labels['identifier'] = 'Tanımlayıcı';
$labels['acll'] = 'Arama';
$labels['aclr'] = 'İletileri oku';
$labels['acls'] = 'Okunmuş durumu korunsun';
$labels['aclw'] = 'Yazma işaretleri';
$labels['acli'] = 'Ekle (kopyala)';
$labels['aclp'] = 'Gönder';
$labels['aclc'] = 'Alt klasörler ekle';
$labels['aclk'] = 'Alt klasörler ekle';
$labels['acld'] = 'İletileri sil';
$labels['aclt'] = 'İletileri sil';
$labels['acle'] = 'Sil';
$labels['aclx'] = 'Klasörü sil';
$labels['acla'] = 'Yönet';
$labels['acln'] = 'İletilere not ekle';
$labels['aclfull'] = 'Tam denetim';
$labels['aclother'] = 'Diğer';
$labels['aclread'] = 'Oku';
$labels['aclwrite'] = 'Yaz';
$labels['acldelete'] = 'Sil';
$labels['shortacll'] = 'Arama';
$labels['shortaclr'] = 'Oku';
$labels['shortacls'] = 'Koru';
$labels['shortaclw'] = 'Yaz';
$labels['shortacli'] = 'Ekle';
$labels['shortaclp'] = 'Gönder';
$labels['shortaclc'] = 'Ekle';
$labels['shortaclk'] = 'Ekle';
$labels['shortacld'] = 'Sil';
$labels['shortaclt'] = 'Sil';
$labels['shortacle'] = 'Sil';
$labels['shortaclx'] = 'Klasörü sil';
$labels['shortacla'] = 'Yönet';
$labels['shortacln'] = 'Not ekle';
$labels['shortaclother'] = 'Diğer';
$labels['shortaclread'] = 'Oku';
$labels['shortaclwrite'] = 'Yaz';
$labels['shortacldelete'] = 'Sil';
$labels['longacll'] = 'Klasör listesinde görülebilir ve abone olunabilir';
$labels['longaclr'] = 'Klasör okunmak üzere açılabilir';
$labels['longacls'] = 'İletilerin okunmuş işareti değiştirilebilir';
$labels['longaclw'] = 'Okundu ve Silindi işaretleri dışındaki işaret ve anahtar sözcükler değiştirilebilir';
$labels['longacli'] = 'Klasöre iletiler yazılabilir ya da kopyalanabilir';
$labels['longaclp'] = 'İletiler bu klasöre gönderilebilir';
$labels['longaclc'] = 'Klasörler doğrudan bu klasör altına eklenebilir (ya da yeniden adlandırılabilir).';
$labels['longaclk'] = 'Klasörler doğrudan bu klasör altına eklenebilir (ya da yeniden adlandırılabilir).';
$labels['longacld'] = 'İleti Silindi işareti değiştirilebilir';
$labels['longaclt'] = 'İleti Silindi işareti değiştirilebilir';
$labels['longacle'] = 'İletiler silinebilir';
$labels['longaclx'] = 'Klasör silinebilir ya da yeniden adlandırılabilir';
$labels['longacla'] = 'Klasör erişim izinleri değiştirilebilir';
$labels['longacln'] = 'İletilerin paylaşılan üst verileri (notlar) değiştirilebilir';
$labels['longaclfull'] = 'Klasör yönetimi dahil tam denetim';
$labels['longaclread'] = 'Klasör okunmak üzere açılabilir';
$labels['longaclwrite'] = 'Klasöre iletiler işaretlenebilir, yazılabilir ya da kopyalanabilir';
$labels['longacldelete'] = 'İletiler silinebilir';
$labels['longaclother'] = 'Diğer erişim izinleri';
$labels['ariasummaryacltable'] = 'Erişim izinleri listesi';
$labels['arialabelaclactions'] = 'İşlem listesi';
$labels['arialabelaclform'] = 'Erişim izinleri formu';
$messages['deleting'] = 'Erişim izinleri siliniyor...';
$messages['saving'] = 'Erişim izinleri kaydediliyor...';
$messages['updatesuccess'] = 'Erişim izinleri değiştirildi';
$messages['deletesuccess'] = 'Erişim izinleri silindi';
$messages['createsuccess'] = 'Erişim izinleri eklendi';
$messages['updateerror'] = 'Erişim izinleri güncellenemedi';
$messages['deleteerror'] = 'Erişim izinleri silinemedi';
$messages['createerror'] = 'Erişim izinleri eklenemedi';
$messages['deleteconfirm'] = 'Seçilmiş kullanıcılar için erişim izinlerini silmek istediğinize emin misiniz?';
$messages['norights'] = 'Herhangi bir izin belirtilmemiş!';
$messages['nouser'] = 'Herhangi bir kullanıcı belirtilmemiş!';
PK|c�\��acl/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Compartiendo';
$labels['myrights'] = 'Permisos de acceso';
$labels['username'] = 'Usuario:';
$labels['advanced'] = 'Modo avanzado';
$labels['add'] = 'Agregar';
$labels['newuser'] = 'Agregar entrada';
$labels['editperms'] = 'Editar permisos';
$labels['actions'] = 'Acciones para los permisos de acceso...';
$labels['anyone'] = 'Todos los usuarios (cualquiera)';
$labels['anonymous'] = 'Invitado (anonimo)';
$labels['identifier'] = 'Identificacion';
$labels['acll'] = 'Buscar';
$labels['aclr'] = 'Leer mensajes';
$labels['acls'] = 'Mantener como visualizado';
$labels['aclw'] = 'Escribir marcadores';
$labels['acli'] = 'Insertar (Copiar en)';
$labels['aclp'] = 'Publicar';
$labels['aclc'] = 'Crear subcarpetas';
$labels['aclk'] = 'Crear subcarpetas';
$labels['acld'] = 'Eliminar mensajes';
$labels['aclt'] = 'Eliminar mensajes';
$labels['acle'] = 'Descartar';
$labels['aclx'] = 'Eliminar carpeta';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Anotar mensajes';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Otro';
$labels['aclread'] = 'Leer';
$labels['aclwrite'] = 'Escribir';
$labels['acldelete'] = 'Eliminar';
$labels['shortacll'] = 'Buscar';
$labels['shortaclr'] = 'Leer';
$labels['shortacls'] = 'Mantener';
$labels['shortaclw'] = 'Escribir';
$labels['shortacli'] = 'Insertar';
$labels['shortaclp'] = 'Publicar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Eliminar';
$labels['shortaclt'] = 'Eliminar';
$labels['shortacle'] = 'Descartar';
$labels['shortaclx'] = 'Borrado de carpeta';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Anotar';
$labels['shortaclother'] = 'Otro';
$labels['shortaclread'] = 'Leer';
$labels['shortaclwrite'] = 'Escribir';
$labels['shortacldelete'] = 'Eliminar';
$labels['longacll'] = 'La carpeta es visible en listas y es posible suscribirse a ella';
$labels['longaclr'] = 'La carpeta se puede abirir para lectura';
$labels['longacls'] = 'El marcador de Mensajes Vistos puede ser modificado';
$labels['longaclw'] = 'Los marcadores de mensajes y palabras clave se pueden modificar, excepto Visto y Eliminado';
$labels['longacli'] = 'En esta carpeta se pueden escribir o copiar mensajes';
$labels['longaclp'] = 'En esta carpeta se pueden publicar mensajes';
$labels['longaclc'] = 'Debajo de esta carpeta se puede crear (o renombrar) otras carpetas directamente';
$labels['longaclk'] = 'Debajo de esta carpeta se puede crear (o renombrar) otras carpetas directamente';
$labels['longacld'] = 'El marcador de Mensaje Eliminado puede ser modificado';
$labels['longaclt'] = 'El marcador de Mensaje Eliminado puede ser modificado';
$labels['longacle'] = 'Los mensajes pueden ser descartados';
$labels['longaclx'] = 'La carpeta puede ser eliminada o renombrada';
$labels['longacla'] = 'Los permisos de acceso de esta carpeta pueden ser modificados';
$labels['longacln'] = 'La metainformación de mensajes compartidos (anotaciones) puede ser cambiada';
$labels['longaclfull'] = 'Control total incluyendo la administracion de carpeta';
$labels['longaclread'] = 'La carpeta se puede abrir para lectura';
$labels['longaclwrite'] = 'En esta carpeta los mensajes pueden ser marcados, escritos o copiados';
$labels['longacldelete'] = 'Los mensajes se pueden eliminar';
$labels['longaclother'] = 'Otros permisos de acceso';
$labels['ariasummaryacltable'] = 'Listado de permisos de acceso';
$labels['arialabelaclactions'] = 'Listar acciones';
$labels['arialabelaclform'] = 'Formulario de permisos de acceso';
$messages['deleting'] = 'Eliminando permisos de acceso...';
$messages['saving'] = 'Salvando permisos de acceso...';
$messages['updatesuccess'] = 'Permisos de acceso modificados satisfactoriamente';
$messages['deletesuccess'] = 'Permisos de acceso eliminados correctamente';
$messages['createsuccess'] = 'Permisos de acceso agregados satisfactoriamente';
$messages['updateerror'] = 'No se pudieron actualizar los permisos de acceso';
$messages['deleteerror'] = 'No se pueden eliminar los permisos de acceso';
$messages['createerror'] = 'No se pueden agregar los permisos de acceso';
$messages['deleteconfirm'] = 'Estas seguro que queres remover los permisos de acceso a el/los usuario(s) seleccionado/s?';
$messages['norights'] = 'Ningun permiso ha sido especificado!';
$messages['nouser'] = 'Ningun nombre de usuario ha sido especificado!';
PK|c�\
��acl/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Parvekirin';
$labels['myrights'] = 'Mafên Têketinê';
$labels['username'] = 'Bikarhêner:';
$labels['advanced'] = 'Moda pêşketî';
$labels['add'] = 'Tev bike';
$labels['newuser'] = 'Têketinek zêde bike';
$labels['editperms'] = 'Destûrdayînan Sererast Bike';
$labels['actions'] = 'Digihîje tevgerên çê..';
$labels['anyone'] = 'Hemû bikarhêner (her kes)';
$labels['anonymous'] = 'Mêvan (gelêrî)';
$labels['identifier'] = 'Danasîner';
$labels['acll'] = 'Lê bigere';
$labels['aclr'] = 'Peyaman bixwîne';
$labels['aclw'] = 'Alayan binivîse';
$labels['acli'] = 'Têxe (Heman bike li)';
$labels['aclp'] = 'Şandî';
$labels['aclc'] = 'Bindosyeyan çêke';
$labels['aclk'] = 'Bindosyeyan çêke';
$labels['acld'] = 'Peyaman binivîse';
$labels['aclt'] = 'Peyaman jê bibe';
$labels['acle'] = 'Jê derxîne';
$labels['aclx'] = 'Dosyeyê jê bibe';
$labels['acla'] = 'Birêvebir';
$labels['acln'] = 'Bi nîşeyan peyaman rave bike';
$labels['aclfull'] = 'Tam venêrîn';
$labels['aclother'] = 'Ên din';
$labels['aclread'] = 'Bixwîne';
$labels['aclwrite'] = 'Binivîse';
$labels['acldelete'] = 'Jê bibe';
$labels['shortacll'] = 'Lê bigere';
$labels['shortaclr'] = 'Bixwîne';
$labels['shortacls'] = 'Bihêle';
$labels['shortaclw'] = 'Binivîse';
$labels['shortacli'] = 'Tev bike';
$labels['shortaclp'] = 'Bişîne';
$labels['shortaclc'] = 'Çêke';
$labels['shortaclk'] = 'Çêke';
$labels['shortacld'] = 'Jê bibe';
$labels['shortaclt'] = 'Jê bibe';
$labels['shortacle'] = 'Jê derxîne';
$labels['shortaclx'] = 'Dosye-jêbirin';
$labels['shortacla'] = 'Bikarhêner';
$labels['shortacln'] = 'Bi nîşeyan rave bike';
$labels['shortaclother'] = 'Ên din';
$labels['shortaclread'] = 'Bixwîne';
$labels['shortaclwrite'] = 'Binivîse';
$labels['shortacldelete'] = 'Jê bibe';
$labels['longaclr'] = 'Dosye ji bo xwendinê dikare bê vekirin';
$labels['longacls'] = 'Alaya peyamên Dîtî dikare bête guhartin';
$labels['longaclc'] = 'Dosye dikarin bin vê dosyeyê bêne çêkirin (an jî binavkirin)';
$labels['longaclk'] = 'Dosye dikarin bin vê dosyeyê bêne çêkirin (an jî binavkirin)';
$labels['longaclx'] = 'Dosye dikare bê jêbirin an jî binavkirin';
$labels['longacla'] = 'Mafê gihîştina dosyeyê dikare bê guhartin';
$labels['longaclfull'] = 'Tam venêrîn bi birêvebirina dosyeyê';
$labels['longaclread'] = 'Dosye ji bo xwendinê dikare bê vekirin';
$labels['longaclwrite'] = 'Peyam dikarin kopiyî dosyeyê bên kirin, nîşankirin, nivîsandin.';
$labels['longacldelete'] = 'Hêmî peyam dikarin werin jêbirin';
$labels['longaclother'] = 'Mafên din ên têketinê';
$labels['ariasummaryacltable'] = 'Lîsteya mafên têketinê';
$labels['arialabelaclactions'] = 'Tevgeran liste bike';
$labels['arialabelaclform'] = 'Forma mafên têketinê';
$messages['deleting'] = 'Mafên têketinê tên jêbirin...';
$messages['saving'] = 'Mafên têketinê tên tomarkirin...';
$messages['updatesuccess'] = 'Mafên têketinê bi serkeftin hatin guhartin';
$messages['deletesuccess'] = 'Mafên têketinê bi serkeftin hatin jêbirin';
$messages['createsuccess'] = 'Mafên têketinê bi serkeftin hatin tevkirin';
$messages['updateerror'] = 'Nûkirina mafên têketinê bigire';
$messages['deleteerror'] = 'Jêbirina mafên têketinê bigire';
$messages['createerror'] = 'Tevkirina mafên têketinê bigire';
$messages['deleteconfirm'] = 'Tu ewle yî, dixwazî mafên têketinê yên bikarhênerê(n) bijartî rakî?';
$messages['norights'] = 'Tu maf nehat diyarkirin!';
$messages['nouser'] = 'Tu bikarhêner nehat diyarkirin!';
PK|c�\1�N)��acl/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Compartilhamento';
$labels['myrights'] = 'Permissões de Acesso';
$labels['username'] = 'Usuário:';
$labels['advanced'] = 'Modo avançado';
$labels['add'] = 'Adicionar';
$labels['newuser'] = 'Adicionar entrada';
$labels['editperms'] = 'Editar permissões';
$labels['actions'] = 'Ações de direito de acesso...';
$labels['anyone'] = 'Todos os usuários (qualquer um)';
$labels['anonymous'] = 'Convidados (anônimos)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Pesquisar';
$labels['aclr'] = 'Ler mensagens';
$labels['acls'] = 'Manter estado de enviado';
$labels['aclw'] = 'Salvar marcadores';
$labels['acli'] = 'Inserir (Cópia em)';
$labels['aclp'] = 'Enviar';
$labels['aclc'] = 'Criar subpastas';
$labels['aclk'] = 'Criar subpastas';
$labels['acld'] = 'Apagar mensagens';
$labels['aclt'] = 'Apagar mensagens';
$labels['acle'] = 'Expurgar';
$labels['aclx'] = 'Excluir pasta';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Inserir anotações nas mensagens';
$labels['aclfull'] = 'Controle total';
$labels['aclother'] = 'Outro';
$labels['aclread'] = 'Ler';
$labels['aclwrite'] = 'Salvar';
$labels['acldelete'] = 'Excluir';
$labels['shortacll'] = 'Pesquisar';
$labels['shortaclr'] = 'Ler';
$labels['shortacls'] = 'Manter';
$labels['shortaclw'] = 'Salvar';
$labels['shortacli'] = 'Inserir';
$labels['shortaclp'] = 'Enviar';
$labels['shortaclc'] = 'Criar';
$labels['shortaclk'] = 'Criar';
$labels['shortacld'] = 'Excluir';
$labels['shortaclt'] = 'Excluir';
$labels['shortacle'] = 'Expurgar';
$labels['shortaclx'] = 'Excluir pasta';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Anotar';
$labels['shortaclother'] = 'Outro';
$labels['shortaclread'] = 'Ler';
$labels['shortaclwrite'] = 'Salvar';
$labels['shortacldelete'] = 'Excluir';
$labels['longacll'] = 'A pasta está visível nas listas e pode ser inscrita para';
$labels['longaclr'] = 'A pasta pode ser aberta para leitura';
$labels['longacls'] = 'Marcador de Mensagem Enviada pode ser modificadas';
$labels['longaclw'] = 'Marcadores de mensagens e palavras-chave podem ser modificadas, exceto de Enviadas e Excluídas';
$labels['longacli'] = 'As mensagens podem ser escritas ou copiadas para a pasta';
$labels['longaclp'] = 'As mensagens podem ser enviadas para esta pasta';
$labels['longaclc'] = 'As pastas podem ser criadas (ou renomeadas) diretamente sob esta pasta';
$labels['longaclk'] = 'As pastas podem ser criadas (ou renomeadas) diretamente sob esta pasta';
$labels['longacld'] = 'O marcador de Mensagens Excluídas podem ser modificadas';
$labels['longaclt'] = 'O marcador de Mensagens Excluídas podem ser modificadas';
$labels['longacle'] = 'As mensagens podem ser expurgadas';
$labels['longaclx'] = 'A pasta pode ser apagada ou renomeada';
$labels['longacla'] = 'As permissões de acesso da pasta podem ser alteradas';
$labels['longacln'] = 'Metadados compartilhados das mensagens (anotações) podem ser alterados';
$labels['longaclfull'] = 'Controle total incluindo a pasta de administração';
$labels['longaclread'] = 'A pasta pode ser aberta para leitura';
$labels['longaclwrite'] = 'As mensagens podem ser marcadas, salvas ou copiadas para a pasta';
$labels['longacldelete'] = 'Mensagens podem ser apagadas';
$labels['longaclother'] = 'Outras permissões de acesso';
$labels['ariasummaryacltable'] = 'Lista de permissões de acesso';
$labels['arialabelaclactions'] = 'Lista de ações';
$labels['arialabelaclform'] = 'Formulário de permissões de acesso';
$messages['deleting'] = 'Apagando permissões de acesso...';
$messages['saving'] = 'Salvando permissões de acesso...';
$messages['updatesuccess'] = 'Permissões de acesso alteradas com sucesso';
$messages['deletesuccess'] = 'Permissões de acesso apagadas com sucesso';
$messages['createsuccess'] = 'Permissões de acesso adicionadas com sucesso';
$messages['updateerror'] = 'Não foi possível atualizar as permissões de acesso';
$messages['deleteerror'] = 'Não foi possível apagar as permissões de acesso';
$messages['createerror'] = 'Não foi possível adicionar as permissões de acesso';
$messages['deleteconfirm'] = 'Tem certeza que deseja remover as permissões de acesso do(s) usuário(s) delecionado(s)?';
$messages['norights'] = 'Não foram definidas permissões!';
$messages['nouser'] = 'Nome de usuário não especificado!';
PK|c�\�����acl/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Dalīšanās';
$labels['myrights'] = 'Piekļuves tiesības';
$labels['username'] = 'Lietotājs:';
$labels['advanced'] = 'Paplašinātais režīms';
$labels['add'] = 'Pievienot';
$labels['newuser'] = 'Pievienot ierakstu';
$labels['editperms'] = 'Rediģēt piejas';
$labels['actions'] = 'Darbības ar piekļuves tiesībām...';
$labels['anyone'] = 'Visi lietotāji (ikviens)';
$labels['anonymous'] = 'Viesi (anonīmie)';
$labels['identifier'] = 'Identifikators';
$labels['acll'] = 'Atrast';
$labels['aclr'] = 'Lasīt ziņojumus';
$labels['acls'] = 'Paturēt "Redzētā" statusu';
$labels['aclw'] = 'Saglabāt atzīmes';
$labels['acli'] = 'Ievietot (Iekopēt)';
$labels['aclp'] = 'Nosūtīt';
$labels['aclc'] = 'Izveidot apakšmapes';
$labels['aclk'] = 'Izveidot apakšmapes';
$labels['acld'] = 'Dzēst ziņojumus';
$labels['aclt'] = 'Dzēst ziņojumus';
$labels['acle'] = 'Izdzēst';
$labels['aclx'] = 'Dzēst mapi';
$labels['acla'] = 'Pārvaldīt';
$labels['acln'] = 'Anotēt e-pastus';
$labels['aclfull'] = 'Pilna kontrole';
$labels['aclother'] = 'Cits';
$labels['aclread'] = 'Lasīt';
$labels['aclwrite'] = 'Rakstīt';
$labels['acldelete'] = 'Dzēst';
$labels['shortacll'] = 'Atrast';
$labels['shortaclr'] = 'Lasīt';
$labels['shortacls'] = 'Paturēt';
$labels['shortaclw'] = 'Rakstīt';
$labels['shortacli'] = 'Ievietot';
$labels['shortaclp'] = 'Nosūtīt';
$labels['shortaclc'] = 'Izveidot';
$labels['shortaclk'] = 'Izveidot';
$labels['shortacld'] = 'Dzēst';
$labels['shortaclt'] = 'Dzēst';
$labels['shortacle'] = 'Izdzēst';
$labels['shortaclx'] = 'Mapes dzēšana';
$labels['shortacla'] = 'Pārvaldīt';
$labels['shortacln'] = 'Anotēt';
$labels['shortaclother'] = 'Cits';
$labels['shortaclread'] = 'Lasīt';
$labels['shortaclwrite'] = 'Rakstīt';
$labels['shortacldelete'] = 'Dzēst';
$labels['longacll'] = 'Mape ir redzama kopējā mapju sarakstā un var tikt abonēta';
$labels['longaclr'] = 'Ši mape var tikt atvērta lasīšanai';
$labels['longacls'] = 'Ziņojumu "Redzēts" atzīme var tik mainīta';
$labels['longaclw'] = 'Ziņojumu atzīmes, izņemot "Redzēts" un "Dzēsts", un atslēgvārdi var tik mainīti';
$labels['longacli'] = 'Ziņojumi var tikt  ierakstīti vai pārkopēti uz šo mapi';
$labels['longaclp'] = 'Vēstules var tikt ievietotas šajā mapē';
$labels['longaclc'] = 'Zem šīs mapes pa tiešo var tikt izveidotas (vai pārsauktas) citas mapes';
$labels['longaclk'] = 'Zem šīs mapes pa tiešo var tikt izveidotas (vai pārsauktas) citas mapes';
$labels['longacld'] = 'Ziņojumu "Dzēst" atzīme var tikt mainīta';
$labels['longaclt'] = 'Ziņojumu "Dzēst" atzīme var tikt mainīta';
$labels['longacle'] = 'Vēstules var tikt izdzēstas';
$labels['longaclx'] = 'Mape var tikt gan dzēsta, gan pārdēvēta';
$labels['longacla'] = 'Mapes pieejas tiesības var tikt izmainītas';
$labels['longacln'] = 'E-pastu koplietotie meta dati (anotācijas) var tikt mainīti';
$labels['longaclfull'] = 'Pilna kontrole, iekļaujot arī mapju administrēšanu';
$labels['longaclread'] = 'Mape var tikt atvērta lasīšanai';
$labels['longaclwrite'] = 'Ziņojumi mapē var tikt gan atzīmēti, gan ierakstīti vai arī pārkopēti uz mapi';
$labels['longacldelete'] = 'Vēstules var tikt izdzēstas';
$labels['longaclother'] = 'Pieejas tiesības citiem';
$labels['ariasummaryacltable'] = 'Pieejas tiesību saraksts';
$labels['arialabelaclactions'] = 'Darbību saraksts';
$labels['arialabelaclform'] = 'Pieejas tiesību forma';
$messages['deleting'] = 'Dzēš piekļuves tiesības...';
$messages['saving'] = 'Saglabā piekļuves tiesības...';
$messages['updatesuccess'] = 'Piekļuves tiesības tika veiksmīgi samainītas';
$messages['deletesuccess'] = 'Piekļuves tiesības tika veiksmīgi izdzēstas';
$messages['createsuccess'] = 'Piekļuves tiesības tika veiksmīgi pievienotas';
$messages['updateerror'] = 'Pieejas tiesības nomainīt neizdevās';
$messages['deleteerror'] = 'Piekļuves tiesības izdzēst neizdevās';
$messages['createerror'] = 'Piekļuves tiesības pievienot neizdevās';
$messages['deleteconfirm'] = 'Vai tiešām atzīmētajiem lietotājiem noņemt piekļuves tiesības?';
$messages['norights'] = 'Netika norādītas tiesības!';
$messages['nouser'] = 'Netika norādīts lietotājvārds!';
PK|c�\P�{���acl/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Zdieľanie';
$labels['myrights'] = 'Prístupové oprávnenia';
$labels['username'] = 'Používateľ:';
$labels['advanced'] = 'Režim pre pokročilých';
$labels['add'] = 'Pridať';
$labels['newuser'] = 'Pridať záznam';
$labels['editperms'] = 'Upraviť oprávnenia';
$labels['actions'] = 'Prístupové práva pre akcie...';
$labels['anyone'] = 'Všetci užívatelia (ktokoľvek)';
$labels['anonymous'] = 'Hostia (anonymní)';
$labels['identifier'] = 'Identifikátor';
$labels['acll'] = 'Vyhľadať';
$labels['aclr'] = 'Čítať správy';
$labels['acls'] = 'Ponechať ako prečítané';
$labels['aclw'] = 'Príznaky pre zápis';
$labels['acli'] = 'Vložiť (Skopírovať do)';
$labels['aclp'] = 'Odoslať na';
$labels['aclc'] = 'Vytvoriť podpriečinky';
$labels['aclk'] = 'Vytvoriť podpriečinky';
$labels['acld'] = 'Vymazať správy';
$labels['aclt'] = 'Vymazať správy';
$labels['acle'] = 'Vyčistiť';
$labels['aclx'] = 'Vymazať priečinok';
$labels['acla'] = 'Spravovať';
$labels['acln'] = 'Označiť správy poznámkou';
$labels['aclfull'] = 'Úplný prístup';
$labels['aclother'] = 'Iné';
$labels['aclread'] = 'Čítanie';
$labels['aclwrite'] = 'Zápis';
$labels['acldelete'] = 'Odstránenie';
$labels['shortacll'] = 'Vyhľadať';
$labels['shortaclr'] = 'Čítanie';
$labels['shortacls'] = 'Ponechať';
$labels['shortaclw'] = 'Zápis';
$labels['shortacli'] = 'Vložiť';
$labels['shortaclp'] = 'Odoslať na';
$labels['shortaclc'] = 'Vytvoriť';
$labels['shortaclk'] = 'Vytvoriť';
$labels['shortacld'] = 'Vymazať';
$labels['shortaclt'] = 'Vymazať';
$labels['shortacle'] = 'Vyčistiť';
$labels['shortaclx'] = 'Vymazať priečinok';
$labels['shortacla'] = 'Spravovať';
$labels['shortacln'] = 'Označiť poznámkou';
$labels['shortaclother'] = 'Iné';
$labels['shortaclread'] = 'Čítanie';
$labels['shortaclwrite'] = 'Zápis';
$labels['shortacldelete'] = 'Odstránenie';
$labels['longacll'] = 'Priečinok je v zoznamoch viditeľný a dá sa k nemu prihlásiť';
$labels['longaclr'] = 'Prečinok je možné otvoriť na čítanie';
$labels['longacls'] = 'Príznak "Prečítané" je možné zmeniť';
$labels['longaclw'] = 'Príznaky správ a kľúčové slová je možné zmeniť, okrem "Prečítané" a "Vymazané"';
$labels['longacli'] = 'Do tohto priečinka je možné zapisovať alebo kopírovať správy';
$labels['longaclp'] = 'Do tohto priečinka je možné publikovať správy';
$labels['longaclc'] = 'Priečinky je možné vytvárať (alebo premenovávať) priamo v tomto priečinku';
$labels['longaclk'] = 'Priečinky je možné vytvárať (alebo premenovávať) priamo v tomto priečinku';
$labels['longacld'] = 'Príznak správ "Vymazané" je možné zmeniť';
$labels['longaclt'] = 'Príznak správ "Vymazané" je možné zmeniť';
$labels['longacle'] = 'Správy je možné vyčistiť';
$labels['longaclx'] = 'Priečinok je možné vymazať alebo premenovať';
$labels['longacla'] = 'Prístupové oprávnenia k tomuto priečinku je možné zmeniť';
$labels['longacln'] = 'Meta-dáta (poznámky) zdieľané medzi správami, je možné zmeniť';
$labels['longaclfull'] = 'Úplný prístup, vrátane správy priečinka';
$labels['longaclread'] = 'Prečinok je možné otvoriť na čítanie';
$labels['longaclwrite'] = 'Správy je možné označiť, zapísať alebo skopírovať do prečinka';
$labels['longacldelete'] = 'Správy je možné vymazať';
$labels['longaclother'] = 'Iné prístupové oprávnenia';
$labels['ariasummaryacltable'] = 'Zoznam prístupových oprávnení';
$labels['arialabelaclactions'] = 'Zoznam akcií';
$labels['arialabelaclform'] = 'Formulár pre prístupové oprávnenia';
$messages['deleting'] = 'Odstraňovanie prístupových oprávnení...';
$messages['saving'] = 'Ukladanie prístupových oprávnení...';
$messages['updatesuccess'] = 'Prístupové oprávnenia boli úspešne zmenené';
$messages['deletesuccess'] = 'Prístupové oprávnenia boli úspešne vymazané';
$messages['createsuccess'] = 'Prístupové oprávnenia boli úspešne pridané';
$messages['updateerror'] = 'Nemožno aktualizovať prístupové oprávnenia';
$messages['deleteerror'] = 'Prístupové oprávnenia sa nepodarilo vymazať';
$messages['createerror'] = 'Prístupové oprávnenia sa nepodarilo pridať';
$messages['deleteconfirm'] = 'Naozaj chcete odstrániť prístupové oprávnenia vybraného používateľa?';
$messages['norights'] = 'Neboli určené žiadne oprávnenia!';
$messages['nouser'] = 'Nebolo určené žiadne meno používateľa!';
PK|c�\���9��acl/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Sdílení';
$labels['myrights'] = 'Přístupová práva';
$labels['username'] = 'Uživatel:';
$labels['advanced'] = 'Pokročilý režim';
$labels['add'] = 'Přidej';
$labels['newuser'] = 'Přidat záznam';
$labels['editperms'] = 'Upravit oprávnění';
$labels['actions'] = 'Přístupové právo akce ...';
$labels['anyone'] = 'Všichni uživatelé (kdokoli)';
$labels['anonymous'] = 'Hosté (anonymní)';
$labels['identifier'] = 'Identifikátor';
$labels['acll'] = 'Vyhledat';
$labels['aclr'] = 'Číst zprávy';
$labels['acls'] = 'Ponechat stav Přečteno';
$labels['aclw'] = 'Zapsat označení';
$labels['acli'] = 'Vložit (Kopírovat do)';
$labels['aclp'] = 'Odeslat';
$labels['aclc'] = 'Vytvořit podsložky';
$labels['aclk'] = 'Vytvořit podsložky';
$labels['acld'] = 'Smazat zprávy';
$labels['aclt'] = 'Smazat zprávy';
$labels['acle'] = 'Vyprázdnit';
$labels['aclx'] = 'Smazat složku';
$labels['acla'] = 'Spravovat';
$labels['acln'] = 'Označit zprávy poznámkou';
$labels['aclfull'] = 'Plný přístup';
$labels['aclother'] = 'Ostatní';
$labels['aclread'] = 'Číst';
$labels['aclwrite'] = 'Zapsat';
$labels['acldelete'] = 'Smazat';
$labels['shortacll'] = 'Vyhledat';
$labels['shortaclr'] = 'Číst';
$labels['shortacls'] = 'Zachovat';
$labels['shortaclw'] = 'Zapsat';
$labels['shortacli'] = 'Vložit';
$labels['shortaclp'] = 'Odeslat';
$labels['shortaclc'] = 'Vytvořit';
$labels['shortaclk'] = 'Vytvořit';
$labels['shortacld'] = 'Smazat';
$labels['shortaclt'] = 'Smazat';
$labels['shortacle'] = 'Vyprázdnit';
$labels['shortaclx'] = 'Mazat složky';
$labels['shortacla'] = 'Spravovat';
$labels['shortacln'] = 'Označit poznámkou';
$labels['shortaclother'] = 'Ostatní';
$labels['shortaclread'] = 'Číst';
$labels['shortaclwrite'] = 'Zapsat';
$labels['shortacldelete'] = 'Smazat';
$labels['longacll'] = 'Složka je viditelná v seznamu a může být přihlášena';
$labels['longaclr'] = 'Složka může být otevřena pro čtení';
$labels['longacls'] = 'Označená zpráva byla změněna';
$labels['longaclw'] = 'Značky a klíčová slova u zpráv je možné měnit, kromě příznaku Přečteno a Smazáno';
$labels['longacli'] = 'Zpráva může být napsána nebo zkopírována do složky';
$labels['longaclp'] = 'Zpráva může být odeslána do této složky';
$labels['longaclc'] = 'Složka může být vytvořena (nebo přejmenována) přimo v této složce';
$labels['longaclk'] = 'Složka může být vytvořena (nebo přejmenována) přimo v této složce';
$labels['longacld'] = 'Příznak smazané zprávy může být změněn';
$labels['longaclt'] = 'Příznak smazané zprávy může být změněn';
$labels['longacle'] = 'Zpráva může být smazána';
$labels['longaclx'] = 'Složka může být smazána nebo přejmenována';
$labels['longacla'] = 'Přístupová práva složky mohou být změněna';
$labels['longacln'] = 'Zprávamy sdílené metadata (poznámky) mohou být změněny';
$labels['longaclfull'] = 'Plný přístup včetně správy složky';
$labels['longaclread'] = 'Složka může být otevřena pro čtení';
$labels['longaclwrite'] = 'Zpráva může být označena, napsána nebo zkopírována do složky';
$labels['longacldelete'] = 'Zprávy mohou být smazány';
$labels['longaclother'] = 'Jiná přístupová oprávnění';
$labels['ariasummaryacltable'] = 'Seznam oprávnění';
$labels['arialabelaclactions'] = 'Seznam akcí';
$labels['arialabelaclform'] = 'Formulář pro přístupová oprávnění';
$messages['deleting'] = 'Odstraňuji přístupová práva...';
$messages['saving'] = 'Ukládám přístupová práva...';
$messages['updatesuccess'] = 'Přístupová práva byla změněna';
$messages['deletesuccess'] = 'Přístupová práva byla odstraněna';
$messages['createsuccess'] = 'Přístupová práva byla přidána';
$messages['updateerror'] = 'Úprava přístupových práv se nezdařila';
$messages['deleteerror'] = 'Smazání přístupových práv se nezdařilo';
$messages['createerror'] = 'Přidání přístupových práv se nezdařilo';
$messages['deleteconfirm'] = 'Opravdu si přejete odstranit přístupová práva pro vybrané(ho) uživatele?';
$messages['norights'] = 'Nejsou specifikována žádná práva!';
$messages['nouser'] = 'Není specifikováno uživatelské jméno!';
PK|c�\?�E

acl/localization/ti.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'ንኻልእ';
$labels['myrights'] = 'መሰላት በዓል ዋና';
$labels['username'] = 'በዓል ዋና';
$labels['newuser'] = 'እታዎ ክውስኽ';
$labels['actions'] = 'ንጥፈታት መብት ተጠቃማይነት';
$labels['anyone'] = 'ኩሉም በዓልቲ ዋናታት(ዝኾነ ሰብ)';
$labels['anonymous'] = 'ጋሻ(ሽም አልቦ)';
$labels['identifier'] = 'መለለዪ';
$labels['acll'] = 'አለሻ';
$labels['aclr'] = 'ዝተነበቡ መልእኽታት';
$labels['acls'] = 'ተራእዩ ብዝብል ይጽናሕ';
$labels['aclw'] = 'ምልክታት ምጽሓፍ';
$labels['acli'] = 'ሸጉጥ(አብ..መንጎ አቐምጥ)';
$labels['aclp'] = 'ጠቅዕ';
$labels['aclc'] = 'ማህደር ፍጠር';
$labels['aclk'] = 'ክፍለማህደር ፍጠር';
$labels['acld'] = 'መልእኽታት አጥፍእ';
$labels['aclt'] = 'መልእኽታት አጥፍእ';
$labels['acle'] = 'ንሓዋሩ አጥፍእ';
$labels['aclx'] = 'ማህደር አጥፍእ';
$labels['acla'] = 'ተቖፃፀር';
$labels['aclfull'] = 'ምሉእ ቑጽፅር';
$labels['aclother'] = 'ካሊእ';
$labels['aclread'] = 'ከንብብ';
$labels['aclwrite'] = 'ክጽሕፍ';
$labels['acldelete'] = 'ይጥፈአለይ';
$labels['shortacll'] = 'አለሻ';
$labels['shortaclr'] = 'ዝተነበበ';
$labels['shortacls'] = 'ይፅናሕ';
$labels['shortaclw'] = 'ይጽሓፍ';
$labels['shortacli'] = 'ይሸጎጥ';
$labels['shortaclp'] = 'ይጠቃዕ';
$labels['shortaclc'] = 'ይፈጠር';
$labels['shortaclk'] = 'ይፈጠር';
$labels['shortacld'] = 'ይጥፋእ';
$labels['shortaclt'] = 'ይጥፋእ';
$labels['shortacle'] = 'ንሓዋሩ ይጥፋእ';
$labels['shortaclx'] = 'ዝጠፍእ ማህደር';
$labels['shortacla'] = 'ክቆፃፀር';
$labels['shortaclother'] = 'ካሊእ';
$labels['shortaclread'] = 'ከንብብ';
$labels['shortaclwrite'] = 'ክጽሕፍ';
$labels['shortacldelete'] = 'ይጥፋእ';
$labels['longaclr'] = 'ማህደር ተኸፊቱ ክንበብ ይኽእል';
$labels['longacls'] = 'ተራእዩ ዝብል መልእኽቲ ዕላም ክለወጥ ይኽእል';
$labels['longaclw'] = 'ዕላማትን መፍትሕ ቃላትን መልኽትታት ክልወጡ ይኽእሉ, ብዘይካ ዝተረኣዩን ዝጠፍኡን';
$labels['longacli'] = 'መልእኽቲ ናብዚ ማህደር ክጽሓፍ ወይ ክቕዳሕ ይኽእል';
$labels['longaclp'] = 'መልእኽቲ ናብዚ ማህደር ክኣቱ ይኽእል';
$labels['longaclread'] = 'ማህደር ተኸፊቱ ክንበብ ይኽእል';
PK|c�\&�799acl/localization/ta_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/


$labels['acldelete'] = 'நீக்கு';
$labels['shortaclc'] = 'உருவாக்கு';
$labels['shortaclk'] = 'உருவாக்கு';
$labels['shortacld'] = 'நீக்கு';
$labels['shortaclt'] = 'நீக்கு';
$labels['shortacldelete'] = 'நீக்கு';
PK|c�\L;υ�acl/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Delen';
$labels['myrights'] = 'Toegangsrechten';
$labels['username'] = 'Gebruiker:';
$labels['advanced'] = 'Gevorderde modus';
$labels['add'] = 'Toevoegen';
$labels['newuser'] = 'Invoer toevoegen';
$labels['editperms'] = 'Machtigingen bewerken';
$labels['actions'] = 'Toegang juiste acties...';
$labels['anyone'] = 'Alle gebruikers (iedereen)';
$labels['anonymous'] = 'Gasten (anoniem)';
$labels['identifier'] = 'Identificator';
$labels['acll'] = 'Opzoeken';
$labels['aclr'] = 'Lees berichten';
$labels['acls'] = 'Houd Bekeken status';
$labels['aclw'] = 'Schrijf flags';
$labels['acli'] = 'Invoegen ( Kopieer in)';
$labels['aclp'] = 'Post';
$labels['aclc'] = 'Submappen aanmaken';
$labels['aclk'] = 'Submappen aanmaken';
$labels['acld'] = 'Berichten verwijderen';
$labels['aclt'] = 'Berichten verwijderen';
$labels['acle'] = 'Schrappen';
$labels['aclx'] = 'Map verwijderen';
$labels['acla'] = 'Beheer';
$labels['acln'] = 'Berichten van commentaar voorzien';
$labels['aclfull'] = 'Volledige controle';
$labels['aclother'] = 'Andere';
$labels['aclread'] = 'Lees';
$labels['aclwrite'] = 'Schrijf';
$labels['acldelete'] = 'Verwijderen';
$labels['shortacll'] = 'Opzoeken';
$labels['shortaclr'] = 'Lees';
$labels['shortacls'] = 'Bewaar';
$labels['shortaclw'] = 'Schrijf';
$labels['shortacli'] = 'Voeg in';
$labels['shortaclp'] = 'Post';
$labels['shortaclc'] = 'Aanmaken';
$labels['shortaclk'] = 'Aanmaken';
$labels['shortacld'] = 'Verwijderen';
$labels['shortaclt'] = 'Verwijderen';
$labels['shortacle'] = 'Schrappen';
$labels['shortaclx'] = 'Map verwijderen';
$labels['shortacla'] = 'Beheer';
$labels['shortacln'] = 'Maak aantekeningen';
$labels['shortaclother'] = 'Andere';
$labels['shortaclread'] = 'Lees';
$labels['shortaclwrite'] = 'Schrijf';
$labels['shortacldelete'] = 'Verwijderen';
$labels['longacll'] = 'De map is zichtbaar op lijsten en kan worden ingeschreven op';
$labels['longaclr'] = 'De map kan worden geopend om te lezen';
$labels['longacls'] = 'Berichten Bekeken flag kan worden gewijzigd';
$labels['longaclw'] = 'Berichten flags en sleutelwoorden kunnen worden gewijzigd, behalve Bekeken en Verwijderd';
$labels['longacli'] = 'Berichten kunnen worden geschreven of gekopieerd naar de map';
$labels['longaclp'] = 'Berichten kunnen in deze map worden geplaatst';
$labels['longaclc'] = 'Mappen kunnen rechtstreeks onder deze map worden aangemaakt (of hernoemd).';
$labels['longaclk'] = 'Mappen kunnen rechtstreeks onder deze map worden aangemaakt (of hernoemd).';
$labels['longacld'] = 'Berichten Verwijderen flag kan worden gewijzigd';
$labels['longaclt'] = 'Messages Delete flag can be changed';
$labels['longacle'] = 'Berichten kunnen worden vernietigd';
$labels['longaclx'] = 'De map kan worden verwijderd of hernoemd';
$labels['longacla'] = 'De toegangsrechten voor de map kunnen gewijzigd worden';
$labels['longacln'] = 'Berichten gedeelde metadata ( aantekeningen) kunnen worden gewijzigd';
$labels['longaclfull'] = 'Volledige controle, inclusief mapbeheer';
$labels['longaclread'] = 'De map kan worden geopend om te lezen';
$labels['longaclwrite'] = 'Berichten kunnen worden gemarkeerd, geschreven of gekopieerd naar de map';
$labels['longacldelete'] = 'Berichten kunnen worden verwijderd';
$labels['longaclother'] = 'Andere toegangsrechten';
$labels['ariasummaryacltable'] = 'Lijst toegangsrechten';
$labels['arialabelaclactions'] = 'Lijst acties';
$labels['arialabelaclform'] = 'Formulier toegangsrechten';
$messages['deleting'] = 'Toegangsrechten verwijderen...';
$messages['saving'] = 'Toegangsrechten opslaan...';
$messages['updatesuccess'] = 'Toegangsrechten succesvol gewijzigd';
$messages['deletesuccess'] = 'Toegangsrechten succesvol verwijderd';
$messages['createsuccess'] = 'Toegangsrechten succesvol toegevoegd';
$messages['updateerror'] = 'Kan toegangsrechten niet bijwerken';
$messages['deleteerror'] = 'Kan toegangsrechten niet verwijderen';
$messages['createerror'] = 'Kan geen toegangsrechten toevoegen';
$messages['deleteconfirm'] = 'Weet u zeker dat u de toegangsrechten van de geselecteerde gebruiker(s) wilt verwijderen?';
$messages['norights'] = 'Er zijn geen rechten gespecificeerd!';
$messages['nouser'] = 'Er is geen gebruikersnaam opgegeven!';
PK|c�\�}�		acl/localization/hi_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/


$labels['acldelete'] = 'मिटा';
$labels['shortaclc'] = 'बनाऐं';
$labels['shortaclk'] = 'बनाऐं';
$labels['shortacld'] = 'मिटा';
$labels['shortaclt'] = 'मिटा';
$labels['shortacldelete'] = 'मिटा';
PK|c�\X_#yBBacl/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Поширення';
$labels['myrights'] = 'Права доступу';
$labels['username'] = 'Користувач:';
$labels['advanced'] = 'Розширений режим';
$labels['add'] = 'Додати';
$labels['newuser'] = 'Додати запис';
$labels['editperms'] = 'Редагувати дозволи';
$labels['actions'] = 'Дії з правами доступу…';
$labels['anyone'] = 'Усі користувачі (будь-хто)';
$labels['anonymous'] = 'Гості (аноніми)';
$labels['identifier'] = 'Ідентифікатор';
$labels['acll'] = 'Пошук';
$labels['aclr'] = 'Прочитані повідомлення';
$labels['acls'] = 'Зберегти статус «Прочитано»';
$labels['aclw'] = 'Прапорці написання';
$labels['acli'] = 'Вставити (Копіювати в)';
$labels['aclp'] = 'Допис';
$labels['aclc'] = 'Створити підтеки';
$labels['aclk'] = 'Створити підтеки';
$labels['acld'] = 'Вилучити повідомлення';
$labels['aclt'] = 'Вилучити повідомлення';
$labels['acle'] = 'Викреслити';
$labels['aclx'] = 'Вилучити теку';
$labels['acla'] = 'Адмініструвати';
$labels['acln'] = 'Анотувати повідомлення';
$labels['aclfull'] = 'Повний контроль';
$labels['aclother'] = 'Інше';
$labels['aclread'] = 'Читати';
$labels['aclwrite'] = 'Писати';
$labels['acldelete'] = 'Вилучити';
$labels['shortacll'] = 'Пошук';
$labels['shortaclr'] = 'Читати';
$labels['shortacls'] = 'Залишити';
$labels['shortaclw'] = 'Писати';
$labels['shortacli'] = 'Вставити';
$labels['shortaclp'] = 'Дописати';
$labels['shortaclc'] = 'Створити';
$labels['shortaclk'] = 'Створити';
$labels['shortacld'] = 'Вилучити';
$labels['shortaclt'] = 'Вилучити';
$labels['shortacle'] = 'Викреслити';
$labels['shortaclx'] = 'Вилучити теку';
$labels['shortacla'] = 'Адмініструвати';
$labels['shortacln'] = 'Анотувати';
$labels['shortaclother'] = 'Інше';
$labels['shortaclread'] = 'Читати';
$labels['shortaclwrite'] = 'Писати';
$labels['shortacldelete'] = 'Вилучити';
$labels['longacll'] = 'Тека видима у списках і на неї можна підписатись';
$labels['longaclr'] = 'Теку можна відкрити для читання';
$labels['longacls'] = 'Прапорець «Прочитано» на повідомленнях можна змінити';
$labels['longaclw'] = 'Прапорці і ключові слова повідомлень можна змінити, окрім «Прочитано» і «Вилучено»';
$labels['longacli'] = 'Повідомлення можна записати або копіювати у теку';
$labels['longaclp'] = 'Повідомлення можна публікувати в цю теку';
$labels['longaclc'] = 'Теки можна створювати (чи перейменовувати) прямо під цією текою';
$labels['longaclk'] = 'Теки можна створювати (чи перейменовувати) прямо під цією текою';
$labels['longacld'] = 'Прапорець «Вилучено» на повідомленнях можна змінити';
$labels['longaclt'] = 'Прапорець «Вилучено» на повідомленнях можна змінити';
$labels['longacle'] = 'Повідомлення можна викреслити';
$labels['longaclx'] = 'Теку можна вилучити чи перейменувати';
$labels['longacla'] = 'Права доступу до теки можна змінити';
$labels['longacln'] = 'Поширені метадані (анотації) повідомлень можна змінити';
$labels['longaclfull'] = 'Повний контроль, включно з адмініструванням тек';
$labels['longaclread'] = 'Теку можна відкрити для читання';
$labels['longaclwrite'] = 'Повідомлення можна позначити, записати або копіювати у теку';
$labels['longacldelete'] = 'Повідомлення можна вилучити';
$labels['longaclother'] = 'Інші права доступу';
$labels['ariasummaryacltable'] = 'Список прав доступу';
$labels['arialabelaclactions'] = 'Перелічити дії';
$labels['arialabelaclform'] = 'Форма прав доступу';
$messages['deleting'] = 'Вилучення прав доступу…';
$messages['saving'] = 'Збереження прав доступу…';
$messages['updatesuccess'] = 'Права доступу успішно змінені';
$messages['deletesuccess'] = 'Права доступу успішно вилучені';
$messages['createsuccess'] = 'Права доступу успішно додані';
$messages['updateerror'] = 'Не вдалося оновити права доступу';
$messages['deleteerror'] = 'Не вдалося вилучити права доступу';
$messages['createerror'] = 'Не вдалося додати права доступу';
$messages['deleteconfirm'] = 'Ви дійсно хочете вилучити права доступу обраного користувача(-ів)?';
$messages['norights'] = 'Жодних прав не вказано!';
$messages['nouser'] = 'Жодного імені користувача не вказано!';
PK|c�\�1�L�	�	acl/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Dielen';
$labels['myrights'] = 'Tagong Rjochten';
$labels['username'] = 'Brûker:';
$labels['advanced'] = 'Avansearre modus';
$labels['add'] = 'Tafoegje';
$labels['newuser'] = 'Ynfier taheakje';
$labels['editperms'] = 'Bewurkje tagongsrjochten';
$labels['actions'] = 'Tagong aksjes...';
$labels['anyone'] = 'Alle brûkers (eltsenien)';
$labels['anonymous'] = 'Gasten (anonym)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Opsykje';
$labels['aclr'] = 'Lêzen berjochten';
$labels['acls'] = 'Bewarje Sjoen steat';
$labels['aclw'] = 'Skriuw flaggen';
$labels['acli'] = 'Ynfoegje (Kopiearje yn)';
$labels['aclp'] = 'Pleatse';
$labels['aclc'] = 'Underlizzende mappen oanmeitsje';
$labels['aclk'] = 'Underlizzende mappen oanmeitsje';
$labels['acld'] = 'Berjochten wiskje';
$labels['aclt'] = 'Berjochten wiskje';
$labels['acle'] = 'Level';
$labels['aclx'] = 'Map ferwiderje';
$labels['acla'] = 'Beheare';
$labels['acln'] = 'Annotate berjochten';
$labels['aclfull'] = 'Folsleine kontrôle';
$labels['aclother'] = 'Oars';
$labels['aclread'] = 'Lêze';
$labels['aclwrite'] = 'Skriuwe';
$labels['acldelete'] = 'Ferwiderje';
$labels['shortacll'] = 'Opsykje';
$labels['shortaclr'] = 'Lêze';
$labels['shortacls'] = 'Hâlde';
$labels['shortaclw'] = 'Skriuwe';
$labels['shortacli'] = 'Ynfoegje';
$labels['shortaclp'] = 'Pleatse';
$labels['shortaclc'] = 'Oanmeitsje';
$labels['shortaclk'] = 'Oanmeitsje';
$labels['shortacld'] = 'Ferwiderje';
$labels['shortaclt'] = 'Ferwiderje';
$labels['shortacle'] = 'Level';
$labels['shortaclx'] = 'Map ferwiderje';
$labels['shortacla'] = 'Beheare';
$labels['shortaclother'] = 'Oars';
$labels['shortaclread'] = 'Lêze';
$labels['shortaclwrite'] = 'Skriuwe';
$labels['shortacldelete'] = 'Ferwiderje';
PK|c�\�>FKyyacl/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Freigabe';
$labels['myrights'] = 'Zugriffsrechte';
$labels['username'] = 'Benutzer:';
$labels['advanced'] = 'Expertenmodus';
$labels['add'] = 'Hinzufügen';
$labels['newuser'] = 'Eintrag hinzufügen';
$labels['editperms'] = 'Zugriffsrechte bearbeiten';
$labels['actions'] = 'Zugriffsrechte Aktionen...';
$labels['anyone'] = 'Alle Benutzer (anyone)';
$labels['anonymous'] = 'Gäste (anonymous)';
$labels['identifier'] = 'Bezeichnung';
$labels['acll'] = 'Sichtbar';
$labels['aclr'] = 'Nachrichten lesen';
$labels['acls'] = 'Lesestatus ändern';
$labels['aclw'] = 'Flags schreiben';
$labels['acli'] = 'Nachrichten hinzufügen';
$labels['aclp'] = 'Senden an';
$labels['aclc'] = 'Unterordner erstellen';
$labels['aclk'] = 'Unterordner erstellen';
$labels['acld'] = 'Nachrichten als gelöscht markieren';
$labels['aclt'] = 'Nachrichten als gelöscht markieren';
$labels['acle'] = 'Endgültig löschen';
$labels['aclx'] = 'Ordner löschen';
$labels['acla'] = 'Verwalten';
$labels['acln'] = 'Nachrichten auszeichnen';
$labels['aclfull'] = 'Vollzugriff';
$labels['aclother'] = 'Andere';
$labels['aclread'] = 'Lesen';
$labels['aclwrite'] = 'Schreiben';
$labels['acldelete'] = 'Löschen';
$labels['shortacll'] = 'Sichtbar';
$labels['shortaclr'] = 'Lesen';
$labels['shortacls'] = 'Behalte';
$labels['shortaclw'] = 'Schreiben';
$labels['shortacli'] = 'Hinzufügen';
$labels['shortaclp'] = 'Senden an';
$labels['shortaclc'] = 'Erstellen';
$labels['shortaclk'] = 'Erstellen';
$labels['shortacld'] = 'Löschen';
$labels['shortaclt'] = 'Löschen';
$labels['shortacle'] = 'Endgültig löschen';
$labels['shortaclx'] = 'Ordner löschen';
$labels['shortacla'] = 'Verwalten';
$labels['shortacln'] = 'Auszeichnen';
$labels['shortaclother'] = 'Andere';
$labels['shortaclread'] = 'Lesen';
$labels['shortaclwrite'] = 'Schreiben';
$labels['shortacldelete'] = 'Löschen';
$labels['longacll'] = 'Der Ordner ist sichtbar und kann abonniert werden';
$labels['longaclr'] = 'Der Ordnerinhalt kann gelesen werden';
$labels['longacls'] = 'Der Lesestatus von Nachrichten kann geändert werden';
$labels['longaclw'] = 'Alle Nachrichten-Flags und Schlüsselwörter ausser "Gelesen" und "Gelöscht" können geändert werden';
$labels['longacli'] = 'Nachrichten können in diesen Ordner kopiert oder verschoben werden';
$labels['longaclp'] = 'Nachrichten können an diesen Ordner gesendet werden';
$labels['longaclc'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
$labels['longaclk'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
$labels['longacld'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
$labels['longaclt'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
$labels['longacle'] = 'Als "gelöscht" markierte Nachrichten können entfernt werden';
$labels['longaclx'] = 'Der Ordner kann gelöscht oder umbenannt werden';
$labels['longacla'] = 'Die Zugriffsrechte des Ordners können geändert werden';
$labels['longacln'] = 'Geteilte Nachrichten-Auszeichnungen (Metadaten) können nicht geändert werden';
$labels['longaclfull'] = 'Vollzugriff inklusive Ordner-Verwaltung';
$labels['longaclread'] = 'Der Ordnerinhalt kann gelesen werden';
$labels['longaclwrite'] = 'Nachrichten können markiert, an den Ordner gesendet und in den Ordner kopiert oder verschoben werden';
$labels['longacldelete'] = 'Nachrichten können gelöscht werden';
$labels['longaclother'] = 'Andere Zugriffsrechte ';
$labels['ariasummaryacltable'] = 'Liste der Zugriffsrechte';
$labels['arialabelaclactions'] = 'Listen-Aktionen';
$labels['arialabelaclform'] = 'Zugriffsrechte (Formular)';
$messages['deleting'] = 'Zugriffsrechte werden entzogen...';
$messages['saving'] = 'Zugriffsrechte werden gespeichert...';
$messages['updatesuccess'] = 'Zugriffsrechte erfolgreich geändert';
$messages['deletesuccess'] = 'Zugriffsrechte erfolgreich entzogen';
$messages['createsuccess'] = 'Zugriffsrechte erfolgreich hinzugefügt';
$messages['updateerror'] = 'Zugriffsrechte konnten nicht geändert werden';
$messages['deleteerror'] = 'Zugriffsrechte konnten nicht entzogen werden';
$messages['createerror'] = 'Zugriffsrechte konnten nicht gewährt werden';
$messages['deleteconfirm'] = 'Sind Sie sicher, dass Sie die Zugriffsrechte den ausgewählten Benutzern entziehen möchten?';
$messages['norights'] = 'Es wurden keine Zugriffsrechte ausgewählt!';
$messages['nouser'] = 'Es wurde kein Benutzer ausgewählt!';
PK|c�\_n��  acl/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Compartiendo';
$labels['myrights'] = 'Permisos de acceso';
$labels['username'] = 'Usuario:';
$labels['advanced'] = 'Modo avanzado';
$labels['add'] = 'Agregar';
$labels['newuser'] = 'Añadir entrada';
$labels['editperms'] = 'Editar permisos';
$labels['actions'] = 'Acciones de derecho de acceso...';
$labels['anyone'] = 'Todos los usuarios (cualquiera)';
$labels['anonymous'] = 'Invitados (anónimos)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Búsqueda';
$labels['aclr'] = 'Leer mensajes';
$labels['acls'] = 'Mantener estado de visto';
$labels['aclw'] = 'Etiquetas de escritura';
$labels['acli'] = 'Insertar (copiar a)';
$labels['aclp'] = 'Publicar';
$labels['aclc'] = 'Crear subcarpetas';
$labels['aclk'] = 'Crear subcarpetas';
$labels['acld'] = 'Eliminar mensajes';
$labels['aclt'] = 'Eliminar mensajes';
$labels['acle'] = 'Borrar';
$labels['aclx'] = 'Eliminar carpeta';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Anotar mensajes';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Otro';
$labels['aclread'] = 'Leer';
$labels['aclwrite'] = 'Escribir';
$labels['acldelete'] = 'Eliminar';
$labels['shortacll'] = 'Búsqueda';
$labels['shortaclr'] = 'Leer';
$labels['shortacls'] = 'Mantener';
$labels['shortaclw'] = 'Escribir';
$labels['shortacli'] = 'Insertar';
$labels['shortaclp'] = 'Publicar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Eliminar';
$labels['shortaclt'] = 'Eliminar';
$labels['shortacle'] = 'Borrar';
$labels['shortaclx'] = 'Eliminar carpeta';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Anotar';
$labels['shortaclother'] = 'Otro';
$labels['shortaclread'] = 'Leer';
$labels['shortaclwrite'] = 'Escribir';
$labels['shortacldelete'] = 'Eliminar';
$labels['longacll'] = 'La carpeta es visible en listas y se la puede suscribir';
$labels['longaclr'] = 'La carpeta puede ser abierta para lectura';
$labels['longacls'] = 'Etiqueta de mensajes leídos puede ser cambiada';
$labels['longaclw'] = 'Las etiquetas de mensajes y palabras clave puede ser cambiada, excepto Leídos y Eliminados';
$labels['longacli'] = 'Se pueden escribir o copiar mensajes a la carpeta';
$labels['longaclp'] = 'Los mensajes pueden ser publicados en esta carpeta';
$labels['longaclc'] = 'Las carpetas pueden ser creadas (o renombradas) directamente desde esta carpeta';
$labels['longaclk'] = 'Las carpetas pueden ser creadas (o renombradas) directamente desde esta carpeta';
$labels['longacld'] = 'La etiqueta de mensajes eliminados puede ser cambiada';
$labels['longaclt'] = 'La etiqueta de mensajes eliminados puede ser cambiada';
$labels['longacle'] = 'Los mensajes pueden ser borrados';
$labels['longaclx'] = 'La carpeta puede ser eliminada o renombrada';
$labels['longacla'] = 'Los derechos de acceso de la carpeta pueden ser cambiados';
$labels['longacln'] = 'Los metadatos compartidos de los mensajes (anotaciones) puede ser cambiado';
$labels['longaclfull'] = 'Control total incluyendo administración de carpetas';
$labels['longaclread'] = 'La carpeta puede ser abierta para lectura';
$labels['longaclwrite'] = 'Los mensajes pueden ser marcados, escritos o copiados a la carpeta';
$labels['longacldelete'] = 'Los mensajes pueden ser eliminados';
$labels['longaclother'] = 'Otros derechos de acceso';
$labels['ariasummaryacltable'] = 'Lista de derechos de acceso';
$labels['arialabelaclactions'] = 'Listar acciones';
$labels['arialabelaclform'] = 'Formulario de derechos de acceso';
$messages['deleting'] = 'Derechos de acceso de eliminación...';
$messages['saving'] = 'Guardando derechos de acceso...';
$messages['updatesuccess'] = 'Se han cambiado los derechos de acceso exitosamente';
$messages['deletesuccess'] = 'Se han eliminado los derechos de acceso exitosamente';
$messages['createsuccess'] = 'Se han agregado los derechos de acceso exitosamente';
$messages['updateerror'] = 'No es posible actualizar los derechos de acceso';
$messages['deleteerror'] = 'No es posible eliminar los derechos de acceso';
$messages['createerror'] = 'No es posible agregar los derechos de acceso';
$messages['deleteconfirm'] = '¿Estás seguro de que deseas eliminar los derechos de acceso a usuario(s) seleccionado(s)?';
$messages['norights'] = '¡No se hace especificado un derecho!';
$messages['nouser'] = '¡No se ha especificado un nombre de usuario!';
PK|c�\����""acl/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Bo‘lishish';
$labels['myrights'] = 'Kirish huquqlari';
$labels['username'] = 'Foydalanuvchi:';
$labels['advanced'] = 'Kengaytirilgan rejim';
$labels['add'] = 'Qo`shish';
$labels['newuser'] = 'Qo‘shish';
$labels['editperms'] = 'Ruxsatlarni tahrirlash';
$labels['actions'] = 'Kirish huquqi harakatlari';
$labels['anyone'] = 'Barcha foydalanuvchilar (hamma)';
$labels['anonymous'] = 'Mehmonlar (anonim)';
$labels['identifier'] = 'Identifikatsiya';
$labels['acll'] = 'Qidirish';
$labels['aclr'] = 'Xatlarni o‘qish';
$labels['acli'] = 'Kiritish (...ga nusxalash)';
$labels['aclp'] = 'Xat';
$labels['aclc'] = 'Ichki papkalarni yaratish';
$labels['aclk'] = 'Ichki papkalarni yaratish';
$labels['acld'] = 'Xabarlarni o‘chirish';
$labels['aclt'] = 'Xabarlarni o‘chirish';
$labels['aclx'] = 'Papkani o‘chirish';
$labels['aclother'] = 'Boshqa';
$labels['aclread'] = 'O`qilgan';
$labels['acldelete'] = 'O`chirish';
$labels['shortacll'] = 'Qidirish';
$labels['shortaclr'] = 'O`qilgan';
$labels['shortaclp'] = 'Xat';
$labels['shortaclc'] = 'Yaratish';
$labels['shortaclk'] = 'Yaratish';
$labels['shortacld'] = 'O`chirish';
$labels['shortaclt'] = 'O`chirish';
$labels['shortaclother'] = 'Boshqa';
$labels['shortaclread'] = 'O`qilgan';
$labels['shortacldelete'] = 'O`chirish';
PK|c�\`�(�<<acl/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Կիսվել';
$labels['myrights'] = 'Մուտքի իրավունքներ';
$labels['username'] = 'Օգտատեր`';
$labels['advanced'] = 'Առաջադեմ ռեժիմ';
$labels['add'] = 'Ավելացնել';
$labels['newuser'] = 'Ավելացնել գրառում';
$labels['editperms'] = 'Խմբագրել թույլտվությունները';
$labels['actions'] = 'Մուտքի իրավունքների գործողություններ…';
$labels['anyone'] = 'Բոլոր օգտվողները (ցանկացած)';
$labels['anonymous'] = 'Հյուրերը (անանուն)';
$labels['identifier'] = 'Նկարագրիչ';
$labels['acll'] = 'Փնտրում';
$labels['aclr'] = 'Կարդալ հաղորդագրությունները';
$labels['acls'] = 'Պահպանել դիտման կարգավիճակը';
$labels['aclw'] = 'Գրառման նշումներ';
$labels['acli'] = 'Ներդնել (Պատճենել ներս)';
$labels['aclp'] = 'Հրապարակել';
$labels['aclc'] = 'Ստեղծել ենթապանակներ';
$labels['aclk'] = 'Ստեղծել ենթապանակներ';
$labels['acld'] = 'Ջնջել հաղորդագրությունները';
$labels['aclt'] = 'Ջնջել հաղորդագրությունները';
$labels['acle'] = 'Հեռացնել';
$labels['aclx'] = 'Ջնջել պանակը';
$labels['acla'] = 'Կառավարել';
$labels['acln'] = 'Ծանոթագրել հաղորդագրությունները';
$labels['aclfull'] = 'Լրիվ վերահսկում';
$labels['aclother'] = 'Այլ';
$labels['aclread'] = 'Կարդալ';
$labels['aclwrite'] = 'Գրել';
$labels['acldelete'] = 'Ջնջել';
$labels['shortacll'] = 'Փնտրում';
$labels['shortaclr'] = 'Կարդալ';
$labels['shortacls'] = 'Պահել';
$labels['shortaclw'] = 'Գրել';
$labels['shortacli'] = 'Ներդնել';
$labels['shortaclp'] = 'Հրապարակել';
$labels['shortaclc'] = 'Ստեղծել';
$labels['shortaclk'] = 'Ստեղծել';
$labels['shortacld'] = 'Ջնջել';
$labels['shortaclt'] = 'Ջնջել';
$labels['shortacle'] = 'Հեռացնել';
$labels['shortaclx'] = 'Պանակի ջնջում';
$labels['shortacla'] = 'Կառավարել';
$labels['shortacln'] = 'Ծանոթագրել';
$labels['shortaclother'] = 'Այլ';
$labels['shortaclread'] = 'Կարդալ';
$labels['shortaclwrite'] = 'Գրել';
$labels['shortacldelete'] = 'Ջնջել';
$labels['longacll'] = 'Պանակը երևում է ցուցակներում և նրան հնարավոր է բաժանորդագրվել';
$labels['longaclr'] = 'Պանակը կարող է բացվել ընթերցման համար';
$labels['longacls'] = 'Տեսված հաղորդագրությունների նշումը կարող է փոփոխվել';
$labels['longaclw'] = 'Հաղորդագրությունների նշումները և հիմնաբառերը կարող են փոփոխվել, բացառությամբ Տեսած և Ջնջված նշումների';
$labels['longacli'] = 'Հաղորդագրությունները կարող են գրվել և պատճենվել պանակի մեջ';
$labels['longaclp'] = 'Հաղորդագրությունները կարող են հրապարակվել այս պանակում';
$labels['longaclc'] = 'Պանակները կարող են ստեղծվել (կամ վերանվանվել) այս պանակում';
$labels['longaclk'] = 'Պանակները կարող են ստեղծվել (կամ վերանվանվել) այս պանակում';
$labels['longacld'] = 'Հաղորդագրությունների Ջնջել նշումը կարող է փոփոխվել';
$labels['longaclt'] = 'Հաղորդագրությունների Ջնջել նշումը կարող է փոփոխվել';
$labels['longacle'] = 'Հաղորդագրությունները կարող են հեռացվել';
$labels['longaclx'] = 'Պանակը կարող է ջնջվել կամ վերանվանվել';
$labels['longacla'] = 'Պանակի մուտքի իրավունքները կարող են փոփոխվել';
$labels['longacln'] = 'Հաղորդագրությունների բաշխված տվյալները (ծանոթագրությունները) կարող են փոփոխվել';
$labels['longaclfull'] = 'Լրիվ վերահսկում ներառյալ պանակների կառավարումը';
$labels['longaclread'] = 'Պանակը կարող է բացվել ընթերցման համար';
$labels['longaclwrite'] = 'Հաղորդագրությունները կարող են նշվել, ստեղծվել և պատճենվել այս պանակում';
$labels['longacldelete'] = 'Հաղորդագրությունները կարող են ջնջվել';
$labels['longaclother'] = 'Մուտքի այլ իրավունքները';
$labels['ariasummaryacltable'] = 'Մուտքի իրավունքների ցուցակը';
$labels['arialabelaclactions'] = 'Գործողությունների ցուցակը';
$labels['arialabelaclform'] = 'Մուտքի իրավունքների բլանկ';
$messages['deleting'] = 'Ջնջվում են մուտքի իրավունքները…';
$messages['saving'] = 'Պահպանվում են մուտքի իրավունքները…';
$messages['updatesuccess'] = 'Մուտքի իրավունքները բարեհաջող փոփոխվեցին։';
$messages['deletesuccess'] = 'Մուտքի իրավունքները բարեհաջող ջնջվեցին։';
$messages['createsuccess'] = 'Մուտքի իրավունքները բարեհաջող ավելացվեցվին։';
$messages['updateerror'] = 'Մուտքի իրավունքների թարմացումը անջատել';
$messages['deleteerror'] = 'Մուտքի իրավունքները ջնջումը ձախողվեց։';
$messages['createerror'] = 'Մուտքի իրավունքները ավելացումը ձախողվեց։';
$messages['deleteconfirm'] = 'Դուք վստա՞հ էք, որ ցանկանում եք նշված օգտվողներին զրկել մուտքի իրավունքներից։';
$messages['norights'] = 'Ոչ մի իրավունք չի՛ նշվել։';
$messages['nouser'] = 'Օգտվողի անունը չի՛ նշվել։';
PK|c�\0Y�CCacl/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Sharing';
$labels['myrights'] = 'Access Rights';
$labels['username'] = 'User:';
$labels['advanced'] = 'Advanced mode';
$labels['add'] = 'Add';
$labels['newuser'] = 'Add entry';
$labels['editperms'] = 'Edit permissions';
$labels['actions'] = 'Access right actions...';
$labels['anyone'] = 'All users (anyone)';
$labels['anonymous'] = 'Guests (anonymous)';
$labels['identifier'] = 'Identifier';
$labels['acll'] = 'Lookup';
$labels['aclr'] = 'Read messages';
$labels['acls'] = 'Keep Seen state';
$labels['aclw'] = 'Write flags';
$labels['acli'] = 'Insert (Copy into)';
$labels['aclp'] = 'Post';
$labels['aclc'] = 'Create subfolders';
$labels['aclk'] = 'Create subfolders';
$labels['acld'] = 'Delete messages';
$labels['aclt'] = 'Delete messages';
$labels['acle'] = 'Expunge';
$labels['aclx'] = 'Delete folder';
$labels['acla'] = 'Administer';
$labels['acln'] = 'Annotate messages';
$labels['aclfull'] = 'Full control';
$labels['aclother'] = 'Other';
$labels['aclread'] = 'Read';
$labels['aclwrite'] = 'Write';
$labels['acldelete'] = 'Delete';
$labels['shortacll'] = 'Lookup';
$labels['shortaclr'] = 'Read';
$labels['shortacls'] = 'Keep';
$labels['shortaclw'] = 'Write';
$labels['shortacli'] = 'Insert';
$labels['shortaclp'] = 'Post';
$labels['shortaclc'] = 'Create';
$labels['shortaclk'] = 'Create';
$labels['shortacld'] = 'Delete';
$labels['shortaclt'] = 'Delete';
$labels['shortacle'] = 'Expunge';
$labels['shortaclx'] = 'Folder delete';
$labels['shortacla'] = 'Administer';
$labels['shortacln'] = 'Annotate';
$labels['shortaclother'] = 'Other';
$labels['shortaclread'] = 'Read';
$labels['shortaclwrite'] = 'Write';
$labels['shortacldelete'] = 'Delete';
$labels['longacll'] = 'The folder is visible on lists and can be subscribed to';
$labels['longaclr'] = 'The folder can be opened for reading';
$labels['longacls'] = 'Messages Seen flag can be changed';
$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted';
$labels['longacli'] = 'Messages can be written or copied to the folder';
$labels['longaclp'] = 'Messages can be posted to this folder';
$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder';
$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder';
$labels['longacld'] = 'Messages Delete flag can be changed';
$labels['longaclt'] = 'Messages Delete flag can be changed';
$labels['longacle'] = 'Messages can be expunged';
$labels['longaclx'] = 'The folder can be deleted or renamed';
$labels['longacla'] = 'The folder access rights can be changed';
$labels['longacln'] = 'Messages shared metadata (annotations) can be changed';
$labels['longaclfull'] = 'Full control including folder administration';
$labels['longaclread'] = 'The folder can be opened for reading';
$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder';
$labels['longacldelete'] = 'Messages can be deleted';
$messages['deleting'] = 'Deleting access rights...';
$messages['saving'] = 'Saving access rights...';
$messages['updatesuccess'] = 'Successfully changed access rights';
$messages['deletesuccess'] = 'Successfully deleted access rights';
$messages['createsuccess'] = 'Successfully added access rights';
$messages['updateerror'] = 'Unable to update access rights';
$messages['deleteerror'] = 'Unable to delete access rights';
$messages['createerror'] = 'Unable to add access rights';
$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?';
$messages['norights'] = 'No rights has been specified!';
$messages['nouser'] = 'No username has been specified!';
PK|c�\�;t��acl/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = '共享';
$labels['myrights'] = '存取權限';
$labels['username'] = '使用者:';
$labels['advanced'] = '進階模式';
$labels['add'] = '加入';
$labels['newuser'] = '新增項目';
$labels['editperms'] = '編輯權限';
$labels['actions'] = '權限設定...';
$labels['anyone'] = '所有使用者 (任何人)';
$labels['anonymous'] = '訪客 (匿名)';
$labels['identifier'] = '識別碼';
$labels['acll'] = '尋找';
$labels['aclr'] = '讀取郵件';
$labels['acls'] = '保持上線狀態';
$labels['aclw'] = '寫入旗標';
$labels['acli'] = '插入 (複製到這裡)';
$labels['aclp'] = '發表';
$labels['aclc'] = '建立子資料夾';
$labels['aclk'] = '建立子資料夾';
$labels['acld'] = '刪除郵件';
$labels['aclt'] = '刪除郵件';
$labels['acle'] = '刪去';
$labels['aclx'] = '刪除資料夾';
$labels['acla'] = '管理者';
$labels['acln'] = '評注郵件';
$labels['aclfull'] = '完全控制';
$labels['aclother'] = '其他';
$labels['aclread'] = '讀取';
$labels['aclwrite'] = '寫入';
$labels['acldelete'] = '刪除';
$labels['shortacll'] = '尋找';
$labels['shortaclr'] = '讀取';
$labels['shortacls'] = '保存';
$labels['shortaclw'] = '寫入';
$labels['shortacli'] = '插入';
$labels['shortaclp'] = '發表';
$labels['shortaclc'] = '建立';
$labels['shortaclk'] = '建立';
$labels['shortacld'] = '刪除';
$labels['shortaclt'] = '刪除';
$labels['shortacle'] = '刪去';
$labels['shortaclx'] = '資料夾刪除';
$labels['shortacla'] = '管理者';
$labels['shortacln'] = '評注';
$labels['shortaclother'] = '其他';
$labels['shortaclread'] = '讀取';
$labels['shortaclwrite'] = '寫入';
$labels['shortacldelete'] = '刪除';
$labels['longacll'] = '此資料夾可以觀看和訂閱';
$labels['longaclr'] = '此資料夾可以開啟並讀取';
$labels['longacls'] = '能修改郵件旗標';
$labels['longaclw'] = '郵件旗標和關鍵字可以變更,不包含已檢視和刪除的';
$labels['longacli'] = '郵件能寫入或複製到資料夾';
$labels['longaclp'] = '郵件能發表到此資料夾';
$labels['longaclc'] = '這個資料夾之下可以建子資料夾 (或重新命名)';
$labels['longaclk'] = '這個資料夾之下可以建子資料夾 (或重新命名)';
$labels['longacld'] = '能修改郵件刪除旗標';
$labels['longaclt'] = '能修改郵件刪除旗標';
$labels['longacle'] = '能刪去郵件';
$labels['longaclx'] = '資料夾能刪除或重新命名';
$labels['longacla'] = '能變更資料夾權限';
$labels['longacln'] = '郵件共享的元資料 (評注) 能更改';
$labels['longaclfull'] = '完全控制包含資料夾管理';
$labels['longaclread'] = '資料夾能開啟並讀取';
$labels['longaclwrite'] = '郵件可以標記、寫入或複製到資料夾';
$labels['longacldelete'] = '郵件能刪除';
$labels['longaclother'] = '其他權限';
$labels['ariasummaryacltable'] = '權限清單';
$labels['arialabelaclactions'] = '清單動作';
$labels['arialabelaclform'] = '權限表單';
$messages['deleting'] = '刪除權限...';
$messages['saving'] = '儲存權限...';
$messages['updatesuccess'] = '權限變更完成';
$messages['deletesuccess'] = '權限刪除完成';
$messages['createsuccess'] = '權限新增完成';
$messages['updateerror'] = '無法更新權限';
$messages['deleteerror'] = '無法刪除權限';
$messages['createerror'] = '無法新增權限';
$messages['deleteconfirm'] = '確定要刪除所選使用者的權限嗎?';
$messages['norights'] = '沒有指定任何權限';
$messages['nouser'] = '沒有指定用戶名稱';
PK|c�\�R�EEacl/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Comparteix';
$labels['myrights'] = 'Permisos d\'accés';
$labels['username'] = 'Usuari:';
$labels['advanced'] = 'Mode Avançat';
$labels['add'] = 'Afegeix';
$labels['newuser'] = 'Afegeix una entrada';
$labels['editperms'] = 'Edita Permisos';
$labels['actions'] = 'Accions dels permisos d\'accés...';
$labels['anyone'] = 'Tots els usuaris (qualsevol)';
$labels['anonymous'] = 'Convidats (anònim)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Cerca';
$labels['aclr'] = 'Llegeix missatges';
$labels['acls'] = 'Conserva\'l com a llegit';
$labels['aclw'] = 'Marques d\'escriptura';
$labels['acli'] = 'Insereix (Copia dins)';
$labels['aclp'] = 'Envia l\'entrada';
$labels['aclc'] = 'Crea subcarpetes';
$labels['aclk'] = 'Crea subcarpetes';
$labels['acld'] = 'Suprimeix missatges';
$labels['aclt'] = 'Suprimeix missatges';
$labels['acle'] = 'Buida';
$labels['aclx'] = 'Suprimeix carpeta';
$labels['acla'] = 'Administra';
$labels['acln'] = 'Anota missatges';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Un altre';
$labels['aclread'] = 'Lectura';
$labels['aclwrite'] = 'Escriptura';
$labels['acldelete'] = 'Suprimeix';
$labels['shortacll'] = 'Cerca';
$labels['shortaclr'] = 'Lectura';
$labels['shortacls'] = 'Conserva';
$labels['shortaclw'] = 'Escriptura';
$labels['shortacli'] = 'Insereix';
$labels['shortaclp'] = 'Envia l\'entrada';
$labels['shortaclc'] = 'Crea';
$labels['shortaclk'] = 'Crea';
$labels['shortacld'] = 'Suprimeix';
$labels['shortaclt'] = 'Suprimeix';
$labels['shortacle'] = 'Buida';
$labels['shortaclx'] = 'Suprimeix carpeta';
$labels['shortacla'] = 'Administra';
$labels['shortacln'] = 'Anota';
$labels['shortaclother'] = 'Un altre';
$labels['shortaclread'] = 'Lectura';
$labels['shortaclwrite'] = 'Escriptura';
$labels['shortacldelete'] = 'Suprimeix';
$labels['longacll'] = 'La carpeta és visible a les llistes i s\'hi pot subscriure';
$labels['longaclr'] = 'La carpeta pot ser oberta per llegir';
$labels['longacls'] = 'Els missatges marcats com a Llegit poden ser canviats';
$labels['longaclw'] = 'Les marques i les paraules clau dels missatges poden ser canviats, excepte els Llegit i Suprimit';
$labels['longacli'] = 'Els missatges poden ser escrits i copiats a la carpeta';
$labels['longaclp'] = 'Els missatges poden ser enviats a aquesta carpeta';
$labels['longaclc'] = 'Es poden crear (or reanomenar) carpetes directament sota aquesta carpeta';
$labels['longaclk'] = 'Es poden crear (or reanomenar) carpetes directament sota aquesta carpeta';
$labels['longacld'] = 'Els missatges amb l\'indicador Suprimit poden ser canviats';
$labels['longaclt'] = 'Els missatges amb l\'indicador Suprimit poden ser canviats';
$labels['longacle'] = 'Els missatges poden ser purgats';
$labels['longaclx'] = 'La carpeta pot ser suprimida o reanomenada';
$labels['longacla'] = 'Els permisos d\'accés a la carpeta poden ser canviats';
$labels['longacln'] = 'Les metadades compartides dels missatges (anotacions) poden ser canviades';
$labels['longaclfull'] = 'Control total fins i tot la gestió de carpetes';
$labels['longaclread'] = 'La carpeta pot ser oberta per llegir';
$labels['longaclwrite'] = 'Els missatges poden ser marcats, escrits o copiats a la carpeta';
$labels['longacldelete'] = 'Els missatges poden ser suprimits';
$labels['longaclother'] = 'Altres drets d\'accés';
$labels['ariasummaryacltable'] = 'Llista els drets d\'accés';
$labels['arialabelaclactions'] = 'Llista les accions';
$labels['arialabelaclform'] = 'Formulari de drets d\'accés';
$messages['deleting'] = 'S\'estan suprimint els permisos d\'accés...';
$messages['saving'] = 'S\'estan desant els permisos d\'accés...';
$messages['updatesuccess'] = 'Els permisos d\'accés han estat canviats correctament';
$messages['deletesuccess'] = 'Els permisos d\'accés han estat suprimits correctament';
$messages['createsuccess'] = 'Els permisos d\'accés han estat afegits correctament';
$messages['updateerror'] = 'No s\'han pogut actualitzar els permisos d\'accés';
$messages['deleteerror'] = 'No s\'han pogut suprimir els permisos d\'accés';
$messages['createerror'] = 'No s\'han pogut afegir els permisos d\'accés';
$messages['deleteconfirm'] = 'Esteu segur de voler suprimir els permisos d\'accés de l\'usuari o usuaris seleccionats?';
$messages['norights'] = 'No s\'ha especificat cap permís';
$messages['nouser'] = 'No s\'ha especificat cap nom d\'usuari';
PK|c�\bi3��acl/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Uso in commun';
$labels['myrights'] = 'Derectos de accesso';
$labels['username'] = 'Usator:';
$labels['advanced'] = 'Modo avantiate';
$labels['add'] = 'Adder';
$labels['newuser'] = 'Adder entrata';
$labels['editperms'] = 'Modificar permissiones';
$labels['actions'] = 'Actiones de derecto de accesso...';
$labels['anyone'] = 'Tote le usatores (non importa qui)';
$labels['anonymous'] = 'Hospites (anonyme)';
$labels['identifier'] = 'Identificator';
$labels['acll'] = 'Cercar';
$labels['aclr'] = 'Leger messages';
$labels['acls'] = 'Retener le stato Vidite';
$labels['aclw'] = 'Signales de scriptura';
$labels['acli'] = 'Inserer (copiar in)';
$labels['aclp'] = 'Inviar';
$labels['aclc'] = 'Crear subdossieres';
$labels['aclk'] = 'Crear subdossieres';
$labels['acld'] = 'Deler messages';
$labels['aclt'] = 'Deler messages';
$labels['acle'] = 'Expunger';
$labels['aclx'] = 'Deler dossier';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Annotar messages';
$labels['aclfull'] = 'Controlo total';
$labels['aclother'] = 'Altere';
$labels['aclread'] = 'Leger';
$labels['aclwrite'] = 'Scriber';
$labels['acldelete'] = 'Deler';
$labels['shortacll'] = 'Cercar';
$labels['shortaclr'] = 'Leger';
$labels['shortacls'] = 'Retener';
$labels['shortaclw'] = 'Scriber';
$labels['shortacli'] = 'Inserer';
$labels['shortaclp'] = 'Inviar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Deler';
$labels['shortaclt'] = 'Deler';
$labels['shortacle'] = 'Expunger';
$labels['shortaclx'] = 'Deletion de dossier';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Annotar';
$labels['shortaclother'] = 'Altere';
$labels['shortaclread'] = 'Leger';
$labels['shortaclwrite'] = 'Scriber';
$labels['shortacldelete'] = 'Deler';
$labels['longacll'] = 'Le dossier es visibile in listas e on pote subscriber se a illo';
$labels['longaclr'] = 'Le dossier pote esser aperite pro lectura';
$labels['longacls'] = 'Le signal "Vidite" de messages pote esser cambiate';
$labels['longaclw'] = 'Le signales e parolas-clave de messages pote esser cambiate, excepte "Vidite" e "Delite"';
$labels['longacli'] = 'Messages pote esser scribite o copiate al dossier';
$labels['longaclp'] = 'Messages pote esser inviate a iste dossier';
$labels['longaclc'] = 'Dossieres pote esser create (o renominate) directemente sub iste dossier';
$labels['longaclk'] = 'Dossieres pote esser create (o renominate) directemente sub iste dossier';
$labels['longacld'] = 'Le signal "Deler" de messages pote esser cambiate';
$labels['longaclt'] = 'Le signal "Deler" de messages pote esser cambiate';
$labels['longacle'] = 'Messages pote esser expungite';
$labels['longaclx'] = 'Le dossier pote esser delite o renominate';
$labels['longacla'] = 'Le derectos de accesso del dossier pote esser cambiate';
$labels['longacln'] = 'Le metadatos commun (annotationes) de messages pote esser cambiate';
$labels['longaclfull'] = 'Controlo total incluse le administration de dossieres';
$labels['longaclread'] = 'Le dossier pote esser aperite pro lectura';
$labels['longaclwrite'] = 'Messages pote esser marcate, scribite o copiate al dossier';
$labels['longacldelete'] = 'Messages pote esser delite';
$labels['longaclother'] = 'Altere derectos de accesso';
$labels['ariasummaryacltable'] = 'Lista de derectos de accesso';
$labels['arialabelaclactions'] = 'Listar actiones';
$labels['arialabelaclform'] = 'Formulario de derectos de accesso';
$messages['deleting'] = 'A deler derectos de accesso...';
$messages['saving'] = 'A salveguardar derectos de accesso...';
$messages['updatesuccess'] = 'Le derectos de accesso ha essite cambiate';
$messages['deletesuccess'] = 'Le derectos de accesso ha essite delite';
$messages['createsuccess'] = 'Le derectos de accesso ha essite addite';
$messages['updateerror'] = 'Impossibile actualisar le derectos de accesso';
$messages['deleteerror'] = 'Impossibile deler derectos de accesso';
$messages['createerror'] = 'Impossibile adder derectos de accesso';
$messages['deleteconfirm'] = 'Es vos secur de voler remover le derectos de accesso del usator(es) seligite?';
$messages['norights'] = 'Nulle derecto ha essite specificate.';
$messages['nouser'] = 'Nulle nomine de usator ha essite specificate.';
PK|c�\)�%�,,acl/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Razmjena';
$labels['myrights'] = 'Prava pristupa';
$labels['username'] = 'Korisnik:';
$labels['advanced'] = 'Napredni mod';
$labels['add'] = 'Dodaj';
$labels['newuser'] = 'Dodaj unos';
$labels['editperms'] = 'Uredi dozvole';
$labels['actions'] = 'Akcije za prava pristupa...';
$labels['anyone'] = 'Svi korisnici (bilo ko)';
$labels['anonymous'] = 'Gosti (anonimno)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Pronađi';
$labels['aclr'] = 'Pročitaj poruke';
$labels['acls'] = 'Zadrži stanje pregleda';
$labels['aclw'] = 'Oznake za pisanje';
$labels['acli'] = 'Umetni (Kopiraj u)';
$labels['aclp'] = 'Objavi';
$labels['aclc'] = 'Napravi podfoldere';
$labels['aclk'] = 'Napravi podfoldere';
$labels['acld'] = 'Obriši poruke';
$labels['aclt'] = 'Obriši poruke';
$labels['acle'] = 'Izbriši';
$labels['aclx'] = 'Obriši folder';
$labels['acla'] = 'Administracija';
$labels['acln'] = 'Obilježi poruke';
$labels['aclfull'] = 'Puna kontrola';
$labels['aclother'] = 'Ostalo';
$labels['aclread'] = 'Pročitano';
$labels['aclwrite'] = 'Piši';
$labels['acldelete'] = 'Obriši';
$labels['shortacll'] = 'Pronađi';
$labels['shortaclr'] = 'Pročitano';
$labels['shortacls'] = 'Zadrži';
$labels['shortaclw'] = 'Piši';
$labels['shortacli'] = 'Umetni';
$labels['shortaclp'] = 'Objavi';
$labels['shortaclc'] = 'Kreiraj';
$labels['shortaclk'] = 'Kreiraj';
$labels['shortacld'] = 'Obriši';
$labels['shortaclt'] = 'Obriši';
$labels['shortacle'] = 'Izbriši';
$labels['shortaclx'] = 'Brisanje foldera';
$labels['shortacla'] = 'Administracija';
$labels['shortacln'] = 'Obilježli';
$labels['shortaclother'] = 'Ostalo';
$labels['shortaclread'] = 'Pročitano';
$labels['shortaclwrite'] = 'Piši';
$labels['shortacldelete'] = 'Obriši';
$labels['longacll'] = 'Ovaj folder je vidljiv u listama i moguće je izvršiti pretplatu na njega';
$labels['longaclr'] = 'Folder je moguće otvoriti radi čitanja';
$labels['longacls'] = 'Oznaka čitanja za poruke se može promijeniti';
$labels['longaclw'] = 'Oznake za poruke i ključne riječi je moguće promijeniti, osim za pregledano i obrisano';
$labels['longacli'] = 'Moguće je kopirati i zapisivati poruke u folder';
$labels['longaclp'] = 'Moguće je objavljivati poruke u ovaj folder';
$labels['longaclc'] = 'Moguće je kreirati (ili preimenovati) foldere diretno ispod ovog foldera';
$labels['longaclk'] = 'Moguće je kreirati (ili preimenovati) foldere diretno ispod ovog foldera';
$labels['longacld'] = 'Oznaka za obrisane poruke se može mijenjati';
$labels['longaclt'] = 'Oznaka za obrisane poruke se može mijenjati';
$labels['longacle'] = 'Poruke je moguće obrisati';
$labels['longaclx'] = 'Folder je moguće obrisati ili preimenovati';
$labels['longacla'] = 'Pristupna prava foldera je moguće promijeniti';
$labels['longacln'] = 'Dijeljeni podaci (obilježavanja) poruka mogu se mijenjati';
$labels['longaclfull'] = 'Puna kontrola uključujući i administraciju foldera';
$labels['longaclread'] = 'Folder je moguće otvoriti radi čitanja';
$labels['longaclwrite'] = 'Moguće je označavati, zapisivati i kopirati poruke u folder';
$labels['longacldelete'] = 'Moguće je obrisati poruke';
$labels['longaclother'] = 'Ostala prava pristupa';
$labels['ariasummaryacltable'] = 'Lista prava pristupa';
$labels['arialabelaclactions'] = 'Lista akcija';
$labels['arialabelaclform'] = 'Obrazac za prava pristupa';
$messages['deleting'] = 'Brišem prava pristupa...';
$messages['saving'] = 'Snimam prava pristupa...';
$messages['updatesuccess'] = 'Prava pristupa su uspješno promijenjena';
$messages['deletesuccess'] = 'Prava pristupa su uspješno obrisana';
$messages['createsuccess'] = 'Prava pristupa su uspješno dodana';
$messages['updateerror'] = 'Nije moguće ažurirati prava pristupa';
$messages['deleteerror'] = 'Nije moguće obrisati prava pristupa';
$messages['createerror'] = 'Nije moguće dodati prava pristupa';
$messages['deleteconfirm'] = 'Jeste li sigurni da želite ukloniti prava pristupa za odabrane korisnike?';
$messages['norights'] = 'Niste odabrali prava pristupa!';
$messages['nouser'] = 'Niste odabrali korisničko ime!';
PK|c�\h��acl/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Совместный доступ';
$labels['myrights'] = 'Права доступа';
$labels['username'] = 'Пользователь:';
$labels['advanced'] = 'Экспертный режим';
$labels['add'] = 'Добавить';
$labels['newuser'] = 'Добавить поле';
$labels['editperms'] = 'Редактировать права';
$labels['actions'] = 'Действия с правами доступа...';
$labels['anyone'] = 'Все пользователи (любые)';
$labels['anonymous'] = 'Гости (анонимные)';
$labels['identifier'] = 'Идентификатор';
$labels['acll'] = 'Просмотр';
$labels['aclr'] = 'Чтение сообщений';
$labels['acls'] = 'Сохранение состояния Прочитано';
$labels['aclw'] = 'Запись флагов';
$labels['acli'] = 'Вставка (копирование в...)';
$labels['aclp'] = 'Отправить';
$labels['aclc'] = 'Создание вложенных папок';
$labels['aclk'] = 'Создание вложенных папок';
$labels['acld'] = 'Удаление сообщений';
$labels['aclt'] = 'Удаление сообщений';
$labels['acle'] = 'Уничтожение сообщений';
$labels['aclx'] = 'Удаление папки';
$labels['acla'] = 'Администрировать';
$labels['acln'] = 'Комментировать сообщения';
$labels['aclfull'] = 'Полный доступ';
$labels['aclother'] = 'Другое';
$labels['aclread'] = 'Чтение';
$labels['aclwrite'] = 'Запись';
$labels['acldelete'] = 'Удаление';
$labels['shortacll'] = 'Поиск';
$labels['shortaclr'] = 'Чтение';
$labels['shortacls'] = 'Прочитано';
$labels['shortaclw'] = 'Запись';
$labels['shortacli'] = 'Вставить';
$labels['shortaclp'] = 'Отправить';
$labels['shortaclc'] = 'Создать';
$labels['shortaclk'] = 'Создать';
$labels['shortacld'] = 'Удаление';
$labels['shortaclt'] = 'Удаление';
$labels['shortacle'] = 'Уничтожение';
$labels['shortaclx'] = 'Удаление папки';
$labels['shortacla'] = 'Администрировать';
$labels['shortacln'] = 'Комментировать';
$labels['shortaclother'] = 'Другое';
$labels['shortaclread'] = 'Чтение';
$labels['shortaclwrite'] = 'Запись';
$labels['shortacldelete'] = 'Удаление';
$labels['longacll'] = 'Папка видима в списках и доступна для подписки';
$labels['longaclr'] = 'Эта папка может быть открыта для чтения';
$labels['longacls'] = 'Флаг Прочитано может быть изменен';
$labels['longaclw'] = 'Флаги и ключевые слова, кроме Прочитано и Удалено, могут быть изменены';
$labels['longacli'] = 'Сообщения могут быть записаны или скопированы в папку';
$labels['longaclp'] = 'Сообщения могут быть отправлены в эту папку';
$labels['longaclc'] = 'Подпапки могут быть созданы или переименованы прямо в этой папке';
$labels['longaclk'] = 'Подпапки могут быть созданы или переименованы прямо в этой папке';
$labels['longacld'] = 'Флаг Удалено может быть изменен';
$labels['longaclt'] = 'Флаг Удалено может быть изменен';
$labels['longacle'] = 'Сообщения могут быть уничтожены';
$labels['longaclx'] = 'Эта папка может быть переименована или удалена';
$labels['longacla'] = 'Права доступа к папке могут быть изменены';
$labels['longacln'] = 'Совместные медаданные сообщений (комментарии) могут быть изменены';
$labels['longaclfull'] = 'Полный доступ, включая управление папкой';
$labels['longaclread'] = 'Эта папка может быть открыта для чтения';
$labels['longaclwrite'] = 'Сообщения можно помечать, записывать или копировать в папку';
$labels['longacldelete'] = 'Сообщения можно удалять';
$labels['longaclother'] = 'Прочие права доступа';
$labels['ariasummaryacltable'] = 'Список прав доступа';
$labels['arialabelaclactions'] = 'Список действий';
$labels['arialabelaclform'] = 'Форма прав доступа';
$messages['deleting'] = 'Удаление прав доступа...';
$messages['saving'] = 'Сохранение прав доступа...';
$messages['updatesuccess'] = 'Права доступа успешно изменены';
$messages['deletesuccess'] = 'Права доступа успешно удалены';
$messages['createsuccess'] = 'Успешно добавлены права доступа';
$messages['updateerror'] = 'Невозможно обновить права доступа';
$messages['deleteerror'] = 'Невозможно удалить права доступа';
$messages['createerror'] = 'Невозможно добавить права доступа';
$messages['deleteconfirm'] = 'Вы уверены в том, что хотите удалить права доступа выбранных пользователей?';
$messages['norights'] = 'Права доступа не установлены!';
$messages['nouser'] = 'Не определено имя пользователя!';
PK|c�\ߗoggacl/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'اشتراک‌گذاری';
$labels['myrights'] = 'حقوق دسترسی';
$labels['username'] = 'کاربر:';
$labels['advanced'] = 'حالت پیشرفته';
$labels['add'] = 'افزودن';
$labels['newuser'] = 'افزودن ورودی';
$labels['editperms'] = 'ویرایش مجوزها';
$labels['actions'] = 'فعالیت‌های حق دسترسی...';
$labels['anyone'] = 'همه‌ی کاربران (هر کسی)';
$labels['anonymous'] = 'مهمان‌ها (ناشناس)';
$labels['identifier'] = 'شناساگر';
$labels['acll'] = 'یافتن';
$labels['aclr'] = 'پیام‌های خوانده شده';
$labels['acls'] = 'نگه داشتن حالت بازدید';
$labels['aclw'] = 'پرچم‌های نوشتن';
$labels['acli'] = 'وارد کردن (رونوشت در)';
$labels['aclp'] = 'نوشته';
$labels['aclc'] = 'ایجاد زیرپوشه‌ها';
$labels['aclk'] = 'ایجاد زیرپوشه‌ها';
$labels['acld'] = 'حذف پیام‌ها';
$labels['aclt'] = 'حذف پیام‌ها';
$labels['acle'] = 'پاک کردن';
$labels['aclx'] = 'حذف پوشه';
$labels['acla'] = 'اداره کردن';
$labels['acln'] = 'حاشیه نویسی پیام ها';
$labels['aclfull'] = 'کنترل کامل';
$labels['aclother'] = 'دیگر';
$labels['aclread'] = 'خواندن';
$labels['aclwrite'] = 'نوشتن';
$labels['acldelete'] = 'حذف کردن';
$labels['shortacll'] = 'یافتن';
$labels['shortaclr'] = 'خواندن';
$labels['shortacls'] = 'نگه داشتن';
$labels['shortaclw'] = 'نوشتن';
$labels['shortacli'] = 'جاگذارى';
$labels['shortaclp'] = 'پست کردن';
$labels['shortaclc'] = 'ایجاد';
$labels['shortaclk'] = 'ایجاد';
$labels['shortacld'] = 'حذف';
$labels['shortaclt'] = 'حذف';
$labels['shortacle'] = 'پاک کردن';
$labels['shortaclx'] = 'حذف پوشه';
$labels['shortacla'] = 'اداره کردن';
$labels['shortacln'] = 'حاشیه نویسی';
$labels['shortaclother'] = 'دیگر';
$labels['shortaclread'] = 'خواندن';
$labels['shortaclwrite'] = 'نوشتن';
$labels['shortacldelete'] = 'حذف کردن';
$labels['longacll'] = 'پوشه در فهرست‌ها قابل مشاهده است و می‌تواند مشترک آن شد';
$labels['longaclr'] = 'پوشه می‌تواند برای خواندن باز شود';
$labels['longacls'] = 'پرچم بازدید پیام‌ها می‌تواند تغییر داده شود';
$labels['longaclw'] = 'پرچم و کلیدواژه پیام‌ها می‌تواند تغییر داده شود، به غیر از بازدید و حذف';
$labels['longacli'] = 'پیام‌ها می‌توانند کپی یا نوشته شوند به پوشه';
$labels['longaclp'] = 'پیام‌ها می‌توانند پست شوند به این پوشه';
$labels['longaclc'] = 'پوشه‌ها می‌توانند ایجاد شوند (تغییر نام داد شوند) به طور مستقیم در این پوشه';
$labels['longaclk'] = 'پوشه‌ها می‌توانند ایجاد شوند (تغییر نام داد شوند) به طور مستقیم در این پوشه';
$labels['longacld'] = 'پرچم حذف پیام‌ها می‌تواند تغییر داده شود';
$labels['longaclt'] = 'پرچم حذف پیام‌ها می‌تواند تغییر داده شود';
$labels['longacle'] = 'پیام‌ها می‌توانند حذف شوند';
$labels['longaclx'] = 'پوشه می‌تواند حذف یا تغییر نام داده شود';
$labels['longacla'] = 'حقوق دسترسی پوشه می‌تواند تغییر داده شود';
$labels['longacln'] = 'اطلاعات متا اشتراک گذاشته شده پیام‌ها (حاشیه‌ها) می‌تواند تغییر داده شوند';
$labels['longaclfull'] = 'کنترل کامل شما مدیریت پوشه';
$labels['longaclread'] = 'پوشه می‌تواند برای خواندن باز شود';
$labels['longaclwrite'] = 'پیام‌ها می‌توانند علامتگذاری، نوشته و یا کپی شوند در پوشه';
$labels['longacldelete'] = 'پیام‌ها می‌توانند حذف شوند';
$labels['longaclother'] = 'قوانین دسترسی دیگر';
$labels['ariasummaryacltable'] = 'فهرست قوانین دسترسی';
$labels['arialabelaclactions'] = 'فهرست کنش‌ها';
$labels['arialabelaclform'] = 'فرم قوانین دسترسی';
$messages['deleting'] = 'حذف کردن حقوق دسترسی...';
$messages['saving'] = 'ذخیره حقوق دسترسی...';
$messages['updatesuccess'] = 'حقوق دسترسی با کام‌یابی تغییر کردند';
$messages['deletesuccess'] = 'حقوق دسترسی با کام‌یابی حذف شدند';
$messages['createsuccess'] = 'حقوق دسترسی با کام‌یابی اضافه شدند';
$messages['updateerror'] = 'ناتوانی در روزآمد کردن حقوق دسترسی';
$messages['deleteerror'] = 'ناتوانی در حذف حقوق دسترسی';
$messages['createerror'] = 'ناتوانی در اضافه کردن حقوق دسترسی';
$messages['deleteconfirm'] = 'آیا شما مطمئن هستید که می‌خواهید حقوق دسترسی را برای کاربر(ان) انتخاب شده حذف نمایید؟';
$messages['norights'] = 'هیچ حقی مشخص نشده است!';
$messages['nouser'] = 'هیج نام‌کاربری‌ای مشخص نشده است!';
PK|c�\�!�(�	�	acl/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Deiling';
$labels['myrights'] = 'Aðgangsheimildir';
$labels['username'] = 'Notandi:';
$labels['advanced'] = 'Flóknari hamur';
$labels['add'] = 'Bæta við';
$labels['newuser'] = 'Bæta við færslu';
$labels['editperms'] = 'Breyta heimildum';
$labels['anyone'] = 'Allir notendur (hver sem er)';
$labels['anonymous'] = 'Gestir (nafnlausir)';
$labels['identifier'] = 'Auðkenni';
$labels['acll'] = 'Uppfletting';
$labels['aclr'] = 'Lesa skilaboð';
$labels['acli'] = 'Setja inn (afrita inn í)';
$labels['aclc'] = 'Búa til undirmöppur';
$labels['aclk'] = 'Búa til undirmöppur';
$labels['acld'] = 'Eyða skilaboðum';
$labels['aclt'] = 'Eyða skilaboðum';
$labels['aclx'] = 'Eyða möppu';
$labels['acla'] = 'Stjórna';
$labels['aclfull'] = 'Full stjórn';
$labels['aclother'] = 'Annað';
$labels['aclread'] = 'Lesið';
$labels['aclwrite'] = 'Skrifa';
$labels['acldelete'] = 'Eyða';
$labels['shortacll'] = 'Uppfletting';
$labels['shortaclr'] = 'Lesið';
$labels['shortacls'] = 'Halda';
$labels['shortaclw'] = 'Skrifa';
$labels['shortacli'] = 'Setja inn';
$labels['shortaclc'] = 'Búa til';
$labels['shortaclk'] = 'Búa til';
$labels['shortacld'] = 'Eyða';
$labels['shortaclt'] = 'Eyða';
$labels['shortaclx'] = 'Eyða möppu';
$labels['shortacla'] = 'Stjórna';
$labels['shortaclother'] = 'Annað';
$labels['shortaclread'] = 'Lesið';
$labels['shortaclwrite'] = 'Skrifa';
$labels['shortacldelete'] = 'Eyða';
$labels['longaclc'] = 'Hægt er að útbúa (eða endurnefna) möppur beint inni í þessari möppu';
$labels['longaclk'] = 'Hægt er að útbúa (eða endurnefna) möppur beint inni í þessari möppu';
$labels['arialabelaclactions'] = 'Telja upp aðgerðir';
PK|c�\yŤ��acl/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Chia sẻ';
$labels['myrights'] = 'Quyền truy cập';
$labels['username'] = 'Người dùng:';
$labels['advanced'] = 'Chế độ tính năng cao hơn';
$labels['add'] = 'Thêm';
$labels['newuser'] = 'Thêm bài viết';
$labels['editperms'] = 'Sửa đổi quyền sử dụng';
$labels['actions'] = 'Các thao tác quyền truy cập';
$labels['anyone'] = 'Tất cả người dùng (bất kỳ ai)';
$labels['anonymous'] = 'Khách (nặc danh)';
$labels['identifier'] = 'Định danh';
$labels['acll'] = 'Tìm kiếm';
$labels['aclr'] = 'Đọc thư';
$labels['acls'] = 'Giữ trạng thái đã xem qua';
$labels['aclw'] = 'Cờ đánh dấu cho mục viết';
$labels['acli'] = 'Chèn thêm (sao chép vào)';
$labels['aclp'] = 'Đăng bài';
$labels['aclc'] = 'Tạo giữ liệu con';
$labels['aclk'] = 'Tạo giữ liệu con';
$labels['acld'] = 'Xóa thư';
$labels['aclt'] = 'Xóa thư';
$labels['acle'] = 'Thải bỏ';
$labels['aclx'] = 'Xóa giữ liệu';
$labels['acla'] = 'Quản lý';
$labels['acln'] = 'Thông tin chú thích';
$labels['aclfull'] = 'Quản lý toàn bộ';
$labels['aclother'] = 'Loại khác';
$labels['aclread'] = 'Đọc';
$labels['aclwrite'] = 'Viết';
$labels['acldelete'] = 'Xoá';
$labels['shortacll'] = 'Tìm kiếm';
$labels['shortaclr'] = 'Đọc';
$labels['shortacls'] = 'Giữ';
$labels['shortaclw'] = 'Viết';
$labels['shortacli'] = 'Chèn';
$labels['shortaclp'] = 'Đăng bài';
$labels['shortaclc'] = 'Tạo mới';
$labels['shortaclk'] = 'Tạo mới';
$labels['shortacld'] = 'Xoá';
$labels['shortaclt'] = 'Xoá';
$labels['shortacle'] = 'Thải bỏ';
$labels['shortaclx'] = 'Giữ liệu được xóa';
$labels['shortacla'] = 'Quản lý';
$labels['shortacln'] = 'Chú thích';
$labels['shortaclother'] = 'Loại khác';
$labels['shortaclread'] = 'Đọc';
$labels['shortaclwrite'] = 'Viết';
$labels['shortacldelete'] = 'Xoá';
$labels['longacll'] = 'Thư mục đã được hiển thị và có thể đăng ký sử dụng';
$labels['longaclr'] = 'Thư mục có thể được mở để đọc';
$labels['longacls'] = 'Cờ đánh dấu thư đã xem qua có thể thay đổi';
$labels['longaclw'] = 'Cờ thư và từ khóa có thể thay đổi, ngoại trừ đã xem qua và bị xóa';
$labels['longacli'] = 'Thư có thể được ghi hoặc sao chép vào giữ liệu';
$labels['longaclp'] = 'Thư có thể bỏ vào trong giữ liệu này';
$labels['longaclc'] = 'Các giữ liệu có thể được tạo (hoặc đặt lại tên) trực tiếp dưới giữ liệu này';
$labels['longaclk'] = 'Các giữ liệu có thể được tạo (hoặc đặt lại tên) trực tiếp dưới giữ liệu này';
$labels['longacld'] = 'Cờ đánh dấu thư xóa có thể thay đổi';
$labels['longaclt'] = 'Cờ đánh dấu thư xóa có thể thay đổi';
$labels['longacle'] = 'Thư có thể thải bỏ';
$labels['longaclx'] = 'Giữ liệu có thể xóa được hoặc đặt lại tên';
$labels['longacla'] = 'Quyên truy cập giữ liệu có thể thay đổi';
$labels['longacln'] = 'Dữ liệu thông tin (chú thích) của thư có thể thay đổi';
$labels['longaclfull'] = 'Quản lý toàn bộ bao gồm cả sự thi hành giữ liệu';
$labels['longaclread'] = 'Giữ liệu có thể được mở để đọc';
$labels['longaclwrite'] = 'Thư có thể được đánh dấu, ghi hoăc sao chép vào giữ liệu';
$labels['longacldelete'] = 'Thư có thể bị xóa';
$labels['longaclother'] = 'Quyền truy cập khác';
$labels['ariasummaryacltable'] = 'Danh sách quyền truy cập';
$labels['arialabelaclactions'] = 'Danh sách hành động';
$labels['arialabelaclform'] = 'Bảng khai quyền truy cập';
$messages['deleting'] = 'Xóa quyền truy cập...';
$messages['saving'] = 'Lưu quyền truy cập...';
$messages['updatesuccess'] = 'Thay đổi quyền truy cập thành công...';
$messages['deletesuccess'] = 'Xóa quyền truy cập thành công...';
$messages['createsuccess'] = 'Thêm quyền truy cập thành công...';
$messages['updateerror'] = 'Không thể cập nhật quyền truy cập';
$messages['deleteerror'] = 'Khôngthể xóa quyền truy cập';
$messages['createerror'] = 'Không thể thêm quyền truy cập';
$messages['deleteconfirm'] = 'Bạn có chắc là muốn xóa bỏ quyền truy cập của người dùng được chọn?';
$messages['norights'] = 'Chưa có quyền nào được chỉ định!';
$messages['nouser'] = 'Chưa có tên truy nhập được chỉ định!';
PK|c�\��2h>
>
acl/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'การแชร์ข้อมูล';
$labels['myrights'] = 'สิทธิ์การเข้าใช้';
$labels['username'] = 'ผู้ใช้งาน:';
$labels['add'] = 'เพิ่ม';
$labels['newuser'] = 'เพิ่มรายการ';
$labels['anyone'] = 'ผู้ใช้งานทั้งหมด (ใครก็ได้)';
$labels['anonymous'] = 'ผู้เยี่ยมชม (คนแปลกหน้า)';
$labels['acll'] = 'ดู';
$labels['aclr'] = 'อ่านข้อความ';
$labels['acli'] = 'แทรก (คัดลอกไปไว้)';
$labels['aclp'] = 'โพสต์';
$labels['aclc'] = 'สร้างโฟลเดอร์ย่อย';
$labels['aclk'] = 'สร้างโฟลเดอร์ย่อย';
$labels['acld'] = 'ลบข้อความ';
$labels['aclt'] = 'ลบข้อความ';
$labels['aclx'] = 'ลบโฟลเดอร์';
$labels['acla'] = 'Administer';
$labels['aclfull'] = 'Full control';
$labels['aclother'] = 'อื่นๆ';
$labels['aclread'] = 'อ่าน';
$labels['aclwrite'] = 'เขียน';
$labels['acldelete'] = 'ลบ';
$labels['shortacll'] = 'ดู';
$labels['shortaclr'] = 'อ่าน';
$labels['shortacls'] = 'เก็บ';
$labels['shortaclw'] = 'เขียน';
$labels['shortacli'] = 'แทรก';
$labels['shortaclp'] = 'โพสต์';
$labels['shortaclc'] = 'สร้าง';
$labels['shortaclk'] = 'สร้าง';
$labels['shortacld'] = 'ลบ';
$labels['shortaclt'] = 'ลบ';
$labels['shortaclx'] = 'ลบโฟลเดอร์';
$labels['shortacla'] = 'Administer';
$labels['shortaclother'] = 'อื่นๆ';
$labels['shortaclread'] = 'อ่าน';
$labels['shortaclwrite'] = 'เขียน';
$labels['shortacldelete'] = 'ลบ';
PK|c�\a5<�xxacl/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'مشاركة';
$labels['myrights'] = 'حقوق الوصول';
$labels['username'] = 'مستخدم:';
$labels['advanced'] = 'وضع متقدم';
$labels['add'] = 'إضافة';
$labels['newuser'] = 'اضافة مدخل';
$labels['editperms'] = 'تعديل الصلاحيات';
$labels['actions'] = 'اجراءات حقوق الوصول...';
$labels['anyone'] = 'كل المستخدمين(اي شخص)';
$labels['anonymous'] = 'ضيف (مجهول)';
$labels['identifier'] = 'معرف';
$labels['acll'] = 'بحث';
$labels['aclr'] = 'قراءة الرسائل';
$labels['acls'] = 'ابقاء حالة الزيارة';
$labels['aclw'] = 'اكتب رمز';
$labels['acli'] = 'ادخل (نسخ الى)';
$labels['aclp'] = 'نشر';
$labels['aclc'] = 'إنشاء مجلدات فرعية';
$labels['aclk'] = 'إنشاء مجلدات فرعية';
$labels['acld'] = 'حذف الرسائل';
$labels['aclt'] = 'حذف الرسائل';
$labels['acle'] = 'حُذف';
$labels['aclx'] = 'حذف المجلد';
$labels['acla'] = 'ادارة';
$labels['acln'] = 'التعليق على الرسائل';
$labels['aclfull'] = 'تحكم كامل';
$labels['aclother'] = 'اخرى';
$labels['aclread'] = 'قراءة ';
$labels['aclwrite'] = 'كتابة';
$labels['acldelete'] = 'حذف';
$labels['shortacll'] = 'بحث';
$labels['shortaclr'] = 'قراءة ';
$labels['shortacls'] = 'ابقاء';
$labels['shortaclw'] = 'قراءة';
$labels['shortacli'] = 'ادراج';
$labels['shortaclp'] = 'نشر';
$labels['shortaclc'] = 'أنشئ';
$labels['shortaclk'] = 'أنشئ';
$labels['shortacld'] = 'حذف';
$labels['shortaclt'] = 'حذف';
$labels['shortacle'] = 'حُذف';
$labels['shortaclx'] = 'حذف المجلد';
$labels['shortacla'] = 'ادارة';
$labels['shortacln'] = 'كتابة تعليق';
$labels['shortaclother'] = 'اخرى';
$labels['shortaclread'] = 'قراءة ';
$labels['shortaclwrite'] = 'كتابة';
$labels['shortacldelete'] = 'حذف';
$labels['longacll'] = 'المجلد مرئي في القائمة وبالامكان ايضا الاشتراك';
$labels['longaclr'] = 'من الممكن فتح المجلد للقراءة';
$labels['longacls'] = 'وسم الزيارة في الرسائل بالامكان تغييره';
$labels['longaclw'] = 'وسم والكلمات الرئيسية في الرسائل يمكن تغييره, ماعدا الزيارة والحذف ';
$labels['longacli'] = 'بالامكان كتابة الرسائل ونسخها الى هذا المجلد';
$labels['longaclp'] = 'بالامكان نشر الرسائل الى هذ المجلد';
$labels['longaclc'] = 'بالامكان انشاء المجلدات ( او اعادة التسمية ) مباشرة تحت هذا المجلد';
$labels['longaclk'] = 'بالامكان انشاء المجلدات ( او اعادة التسمية ) مباشرة تحت هذا المجلد';
$labels['longacld'] = 'حذف وسم الرسائل من الممكن تغييرة';
$labels['longaclt'] = 'حذف وسم الرسائل من الممكن تغييرة';
$labels['longacle'] = 'بالامكان شطب الرسائل';
$labels['longaclx'] = 'هذا المجلد بالامكان حذفة او اعادة تسميته';
$labels['longacla'] = 'حقوق الوصول لهذا المجلد بالامكان تغييره';
$labels['longacln'] = 'يمكن تغيير البيانات الوصفية (التعليقات) المشتركة بين الرسائل';
$labels['longaclfull'] = 'التحكم الكامل يتضمن ادارة المجلدات';
$labels['longaclread'] = 'من الممكن فتح المجلد للقراءة';
$labels['longaclwrite'] = 'لا يمكن وضع علامة على الرسائل, كتبت او نسخة الى هذا المجلد';
$labels['longacldelete'] = 'لا يمكن حذف الرسائل';
$labels['longaclother'] = 'حقوق الوصول الأخرى';
$labels['ariasummaryacltable'] = 'قائمة حقوق الوصول';
$labels['arialabelaclactions'] = 'قائمة الإجراءات';
$labels['arialabelaclform'] = 'نموذج حقوق الوصول';
$messages['deleting'] = 'جاري حذف حقوق الوصول...';
$messages['saving'] = 'جاري حفظ حقوق الوصول...';
$messages['updatesuccess'] = 'تم تغيير حقوق الوصول بنجاح';
$messages['deletesuccess'] = 'تم حذف حقوق الوصول بنجاح';
$messages['createsuccess'] = 'تم اضافة حقوق الوصول بنجاح';
$messages['updateerror'] = 'لا يمكن تحديث حقوق الوصول';
$messages['deleteerror'] = 'لا يمكن حذف حقوق الوصول';
$messages['createerror'] = 'لا يمكن اضافة حقوق الوصول';
$messages['deleteconfirm'] = 'هل تريد فعلاً حذف حقوق الوصول لـ المستخدمين المحددين ؟';
$messages['norights'] = 'لم يتم تحديد حقوق وصول!';
$messages['nouser'] = 'لم يتم تحديد اسم مستخدم!';
PK|c�\a�n��acl/localization/ms_MY.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/


$labels['acldelete'] = 'Padam';
$labels['shortaclc'] = 'Cipta';
$labels['shortaclk'] = 'Cipta';
$labels['shortacld'] = 'Padam';
$labels['shortaclt'] = 'Padam';
$labels['shortacldelete'] = 'Padam';
PK|c�\]Cg��acl/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Paylaşma';
$labels['myrights'] = 'Giriş hüququ';
$labels['username'] = 'İstifadəçi:';
$labels['advanced'] = 'Ekspert rejimi';
$labels['add'] = 'Əlavə et';
$labels['newuser'] = 'Sahə əlavə et';
$labels['editperms'] = 'Cavabları redaktə et';
$labels['actions'] = 'Giriş hüququ ilə hərəkət...';
$labels['anyone'] = 'Bütün istifadəçilər (istənilən)';
$labels['anonymous'] = 'Qonaqlar (anonimlər)';
$labels['identifier'] = 'İdentifikator';
$labels['acll'] = 'Baxış';
$labels['aclr'] = 'Məktubu oxu';
$labels['acls'] = 'Oxunulan kimi saxla';
$labels['aclw'] = 'Yazı bayrağı';
$labels['acli'] = 'Əlavə et (kopyala)';
$labels['aclp'] = 'Yazı';
$labels['aclc'] = 'Qovluqaltı yarat';
$labels['aclk'] = 'Qovluqaltı yarat';
$labels['acld'] = 'Məktubu sil';
$labels['aclt'] = 'Məktubu sil';
$labels['acle'] = 'Poz';
$labels['aclx'] = 'Qovluğu sil';
$labels['acla'] = 'İdarə';
$labels['acln'] = 'Mesajl şərh et';
$labels['aclfull'] = 'Tam idarə';
$labels['aclother'] = 'Digər';
$labels['aclread'] = 'Oxu';
$labels['aclwrite'] = 'Yaz';
$labels['acldelete'] = 'Sil';
$labels['shortacll'] = 'Baxış';
$labels['shortaclr'] = 'Oxu';
$labels['shortacls'] = 'Saxla';
$labels['shortaclw'] = 'Yaz';
$labels['shortacli'] = 'Yerləşdir';
$labels['shortaclp'] = 'Yazı';
$labels['shortaclc'] = 'Yarat';
$labels['shortaclk'] = 'Yarat';
$labels['shortacld'] = 'Sil';
$labels['shortaclt'] = 'Sil';
$labels['shortacle'] = 'Poz';
$labels['shortaclx'] = 'Qovluğun silinməsi';
$labels['shortacla'] = 'İdarə';
$labels['shortacln'] = 'Şərh';
$labels['shortaclother'] = 'Digər';
$labels['shortaclread'] = 'Oxu';
$labels['shortaclwrite'] = 'Yaz';
$labels['shortacldelete'] = 'Sil';
$labels['longacll'] = 'Qovluq siyahıda görünür və yazılmağa hazırdır';
$labels['longaclr'] = 'Bu qovluq oxunmaq üçün açıla bilər';
$labels['longacls'] = 'Oxunulan flaqı dəyişdirilə bilər';
$labels['longaclw'] = 'Oxunulan və silinənlərdən başqa flaqlar və açar sözləri dəyişdirilə bilər';
$labels['longacli'] = 'Məktub qovluğa yazıla və ya saxlanıla bilər';
$labels['longaclp'] = 'Məktub bu qovluğa göndərilə bilər';
$labels['longaclc'] = 'Qovluqaltları bu qovluqda yaradıla və ya adı dəyişdirilə bilər';
$labels['longaclk'] = 'Qovluqaltları bu qovluqda yaradıla və ya adı dəyişdirilə bilər';
$labels['longacld'] = 'Silinən flaqı dəyişdirilə bilər';
$labels['longaclt'] = 'Silinən flaqı dəyişdirilə bilər';
$labels['longacle'] = 'Məktublar pozula bilər';
$labels['longaclx'] = 'Bu qovluq silinə və ya adı dəyişdirilə bilər';
$labels['longacla'] = 'Bu qovluğa giriş hüququ dəyişdirilə bilər';
$labels['longacln'] = 'Müştərək metaməlumatlar (şərhlər) dəyişdirilə bilər';
$labels['longaclfull'] = 'Qovluğun idarəsi ilə birlikdə, tam giriş.';
$labels['longaclread'] = 'Bu qovluq oxunmaq üçün açıla bilər';
$labels['longaclwrite'] = 'Məktubu bu qovluğa qeyd etmək, yazmaq və kopyalamaq olar';
$labels['longacldelete'] = 'Məktubu silmək olar';
$labels['longaclother'] = 'Digər giriş hüquqları';
$labels['ariasummaryacltable'] = 'Giriş hüquqlarının siyahısı';
$labels['arialabelaclactions'] = 'Hərəkət siyahısı';
$labels['arialabelaclform'] = 'Giriş hüquqlarının forması';
$messages['deleting'] = 'Giriş hüququnun silinməsi...';
$messages['saving'] = 'Giriş hüququnun saxlanılması...';
$messages['updatesuccess'] = 'Giriş hüququ dəyişdirildi';
$messages['deletesuccess'] = 'Giriş hüququ silindi';
$messages['createsuccess'] = 'Giriş hüququ əlavə edildi';
$messages['updateerror'] = 'Hüquqları yeniləmək alınmadı';
$messages['deleteerror'] = 'Giriş hüququnu silmək mümkün deyil';
$messages['createerror'] = 'Giriş hüququnu əlavə etmək mümkün deyil';
$messages['deleteconfirm'] = 'Seçilmiş istifadəçilərin giriş hüququnu silməkdə əminsiniz?';
$messages['norights'] = 'Giriş hüquqları göstərilməyib!';
$messages['nouser'] = 'İstifadəçi adı təyin olunmayıb!';
PK|c�\E���acl/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Berbagi';
$labels['myrights'] = 'Hak Akses';
$labels['username'] = 'Pengguna:';
$labels['advanced'] = 'Mode Lanjut';
$labels['add'] = 'Tambah';
$labels['newuser'] = 'Tambahkan entri';
$labels['editperms'] = 'Ubah izin';
$labels['actions'] = 'Aksi hak akses...';
$labels['anyone'] = 'Semua pengguna (siapa saja)';
$labels['anonymous'] = 'Para tamu (anonim)';
$labels['identifier'] = 'Yang mengidentifikasi';
$labels['acll'] = 'Cari';
$labels['aclr'] = 'Baca pesan';
$labels['acls'] = 'Jaga status terbaca';
$labels['aclw'] = 'Membuat tanda';
$labels['acli'] = 'Sisipkan (Salin kedalam)';
$labels['aclp'] = 'Tulisan';
$labels['aclc'] = 'Buat subfolder';
$labels['aclk'] = 'Buat subfolder';
$labels['acld'] = 'Hapus pesan';
$labels['aclt'] = 'Hapus pesan';
$labels['acle'] = 'Menghapus';
$labels['aclx'] = 'Hapus folder';
$labels['acla'] = 'Kelola';
$labels['acln'] = 'Berikan keterangan pesan';
$labels['aclfull'] = 'Kendali penuh';
$labels['aclother'] = 'Lainnya';
$labels['aclread'] = 'Baca';
$labels['aclwrite'] = 'Tulis';
$labels['acldelete'] = 'Hapus';
$labels['shortacll'] = 'Cari';
$labels['shortaclr'] = 'Baca';
$labels['shortacls'] = 'Simpan';
$labels['shortaclw'] = 'Tulis';
$labels['shortacli'] = 'Sisipkan';
$labels['shortaclp'] = 'Tulisan';
$labels['shortaclc'] = 'Buat';
$labels['shortaclk'] = 'Buat';
$labels['shortacld'] = 'Hapus';
$labels['shortaclt'] = 'Hapus';
$labels['shortacle'] = 'Buang';
$labels['shortaclx'] = 'Hapus folder';
$labels['shortacla'] = 'Kelola';
$labels['shortacln'] = 'Berikan keterangan';
$labels['shortaclother'] = 'Lainnya';
$labels['shortaclread'] = 'Baca';
$labels['shortaclwrite'] = 'Tulis';
$labels['shortacldelete'] = 'Hapus';
$labels['longacll'] = 'Folder terlihat di daftar dan dapat dijadikan langganan';
$labels['longaclr'] = 'Folder dapat dibuka untuk dibaca';
$labels['longacls'] = 'Tanda pesan terbaca dapat diubah';
$labels['longaclw'] = 'Tanda pesan dan kata kunci dapat diubah, kecuali Terbaca dan Terhapus';
$labels['longacli'] = 'Pesan dapat ditulis atau disalin kedalam folder';
$labels['longaclp'] = 'Pesan dapat dikirim ke folder ini';
$labels['longaclc'] = 'Folder dapat dibuat (atau diubah namanya) langsung dari folder ini';
$labels['longaclk'] = 'Folder dapat dibuat (atau diubah namanya) langsung dari folder ini';
$labels['longacld'] = 'Tanda hapus pesan dapat diubah';
$labels['longaclt'] = 'Tanda hapus pesan dapat diubah';
$labels['longacle'] = 'Pesan dapat dibuang';
$labels['longaclx'] = 'Folder dapat dihapus atau diubah namanya';
$labels['longacla'] = 'Hak akses folder dapat diubah';
$labels['longacln'] = 'Metadata pesan bersama (penjelasan) dapat diubah';
$labels['longaclfull'] = 'Kendali penuh penuh termasuk administrasi';
$labels['longaclread'] = 'Folder dapat dibuka untuk dibaca';
$labels['longaclwrite'] = 'Pesan dapat ditandai, ditulis atau disalin kedalam folder';
$labels['longacldelete'] = 'Pesan dapat dihapus';
$labels['longaclother'] = 'Hak akses lainnya';
$labels['ariasummaryacltable'] = 'Daftar hak akses';
$labels['arialabelaclactions'] = 'Aksi daftar';
$labels['arialabelaclform'] = 'Formulir hak akses';
$messages['deleting'] = 'Menghapus hak akses...';
$messages['saving'] = 'Menyimpan hak akses...';
$messages['updatesuccess'] = 'Hak akses berhasil diubah';
$messages['deletesuccess'] = 'Hak akses berhasil dihapus';
$messages['createsuccess'] = 'Hak akses berhasil ditambahkan';
$messages['updateerror'] = 'Tidak dapat memperbaharui hak akses';
$messages['deleteerror'] = 'Tidak dapat menghapus hak akses';
$messages['createerror'] = 'Tidak dapat menambah hak akses';
$messages['deleteconfirm'] = 'Apakah Anda yakin ingin menghapus hak akses dari user terpilih?';
$messages['norights'] = 'Hak belum ditentukan!';
$messages['nouser'] = 'Username belum ditentukan!';
PK|c�\�Y��VVacl/localization/tzl.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['username'] = 'Uçeir:';
$labels['anonymous'] = 'Gästs (anonimös)';
$labels['aclread'] = 'Lirarh';
$labels['acldelete'] = 'Zeletarh';
$labels['shortaclr'] = 'Lirarh';
$labels['shortacld'] = 'Zeletarh';
$labels['shortaclt'] = 'Zeletarh';
$labels['shortaclread'] = 'Lirarh';
$labels['shortacldelete'] = 'Zeletarh';
PK|c�\�N�4vvacl/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Megosztás';
$labels['myrights'] = 'Hozzáférési jogok';
$labels['username'] = 'Felhasználó:';
$labels['advanced'] = 'Haladó mód';
$labels['add'] = 'Hozzáadás';
$labels['newuser'] = 'Elem hozzáadása';
$labels['editperms'] = 'Jogosultságok szerkesztése';
$labels['actions'] = 'Hozzáférési jogok müveletei..';
$labels['anyone'] = 'Minden felhasználó (bárki)';
$labels['anonymous'] = 'Vendégek (névtelen)';
$labels['identifier'] = 'Azonosító';
$labels['acll'] = 'Keresés';
$labels['aclr'] = 'Üzenetek olvasása';
$labels['acls'] = 'Olvasottsági állapot megtartása';
$labels['aclw'] = 'Üzenet jelölése';
$labels['acli'] = 'Beillesztés (Bemásolás)';
$labels['aclp'] = 'Bejegyzés';
$labels['aclc'] = 'Almappa létrehozás';
$labels['aclk'] = 'Almappa létrehozás';
$labels['acld'] = 'Üzenetek törlése';
$labels['aclt'] = 'Üzenetek törlése';
$labels['acle'] = 'Törölt üzenetek eltávolítása';
$labels['aclx'] = 'Mappa törlés';
$labels['acla'] = 'Adminisztrátor';
$labels['acln'] = 'Üzenetekhez címkézés';
$labels['aclfull'] = 'Teljes hozzáférés';
$labels['aclother'] = 'Egyéb';
$labels['aclread'] = 'Olvasás';
$labels['aclwrite'] = 'Írás';
$labels['acldelete'] = 'Törlés';
$labels['shortacll'] = 'Keresés';
$labels['shortaclr'] = 'Olvasás';
$labels['shortacls'] = 'Megtartás';
$labels['shortaclw'] = 'Írás';
$labels['shortacli'] = 'Beszúrás';
$labels['shortaclp'] = 'Bejegyzés';
$labels['shortaclc'] = 'Létrehozás';
$labels['shortaclk'] = 'Létrehozás';
$labels['shortacld'] = 'Törlés';
$labels['shortaclt'] = 'Törlés';
$labels['shortacle'] = 'Törölt üzenetek eltávolítása';
$labels['shortaclx'] = 'Mappa törlése';
$labels['shortacla'] = 'Adminisztrátor';
$labels['shortacln'] = 'Cimkézés';
$labels['shortaclother'] = 'Egyéb';
$labels['shortaclread'] = 'Olvasás';
$labels['shortaclwrite'] = 'Írás';
$labels['shortacldelete'] = 'Törlés';
$labels['longacll'] = 'A mappa látható a listán és fel tudsz rá iratkozni.';
$labels['longaclr'] = 'A mappa olvasásra megnyitható';
$labels['longacls'] = 'Az üzenet megtekintési állapota módosítható';
$labels['longaclw'] = 'Az üzenetek jelölései és kulcsszavai módosíthatóak, kivéve az olvasottsági állapotot és az üzenet törölt állapotát.';
$labels['longacli'] = 'Üzenetek irhatóak és máolshatóak a mappába.';
$labels['longaclp'] = 'Ebbe a mappába tudsz  üzeneteket tenni.';
$labels['longaclc'] = 'Mappák létrehozhazóak (átnevezhetőek) ez alatt a mappa alatt.';
$labels['longaclk'] = 'Mappák létrehozhazóak (átnevezhetőek) ez alatt a mappa alatt.';
$labels['longacld'] = 'Üzenet törölve jelző módositható.';
$labels['longaclt'] = 'Üzenet törölve jelző módositható.';
$labels['longacle'] = 'Az üzenetek véglegesen eltávolíthatóak';
$labels['longaclx'] = 'A mappa törölhető vagy átnevezhető';
$labels['longacla'] = 'A mappa hozzáférési jogai módosíthatóak';
$labels['longacln'] = 'Üzenetek megosztott metaadatai(cimkéi) módosíthatoak';
$labels['longaclfull'] = 'Teljes hozzáférés beleértve a mappák kezelését';
$labels['longaclread'] = 'A mappa olvasásra megnyitható';
$labels['longaclwrite'] = 'Az üzenetek megjelölhetök, irhatók és másolhatók ebbe a mappába';
$labels['longacldelete'] = 'Az üzenetek törölhetőek';
$labels['longaclother'] = 'Egyébb hozzáférési jogok';
$labels['ariasummaryacltable'] = 'Hozzáférési jogok listája';
$labels['arialabelaclactions'] = 'Listázási müveletek';
$labels['arialabelaclform'] = 'Hozzáférési jogok űrlap';
$messages['deleting'] = 'Hozzáférési jogok törlése...';
$messages['saving'] = 'Hozzáférési jogok mentése...';
$messages['updatesuccess'] = 'A hozzáférési jogok sikeresen módosultak.';
$messages['deletesuccess'] = 'A hozzáférési jogok törlése sikeresen megtörtént.';
$messages['createsuccess'] = 'A hozzáférési jogok hozzáadása sikeresen megtörtént.';
$messages['updateerror'] = 'Nem sikerült módosítani a hozzáférési jogokat.';
$messages['deleteerror'] = 'Nem sikerült törölni a hozzáférési jogokat.';
$messages['createerror'] = 'Nem sikerült a hozzáférési jogok hozzáadása';
$messages['deleteconfirm'] = 'Biztosan eltávolítja a kiválasztott felhasználó(k) hozzáférési jogait?';
$messages['norights'] = 'Nincsennek jogok megadva.';
$messages['nouser'] = 'A felhasználónév nincs megadva.';
PK|c�\���ssacl/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Partajare';
$labels['myrights'] = 'Drepturi de acces';
$labels['username'] = 'Utilizator:';
$labels['advanced'] = 'Modul avansat';
$labels['add'] = 'Adauga';
$labels['newuser'] = 'Adăugare intrare';
$labels['editperms'] = 'Editare permisiuni';
$labels['actions'] = 'Acțiunea drepturilor de acces...';
$labels['anyone'] = 'Toți utilizatori (oricare)';
$labels['anonymous'] = 'Vizitator';
$labels['identifier'] = 'Identificator';
$labels['acll'] = 'Caută';
$labels['aclr'] = 'Citire mesaje';
$labels['acls'] = 'Menține starea citirii';
$labels['aclw'] = 'Indicator scriere';
$labels['acli'] = 'Inserare (copiere în)';
$labels['aclp'] = 'Postează';
$labels['aclc'] = 'Creează subdirectoare';
$labels['aclk'] = 'Creează subdirectoare';
$labels['acld'] = 'Ștergere mesaje';
$labels['aclt'] = 'Ștergere mesaje';
$labels['acle'] = 'Elimină';
$labels['aclx'] = 'Ștergere dosar';
$labels['acla'] = 'Administrează';
$labels['acln'] = 'Adnotează mesajele';
$labels['aclfull'] = 'Control complet';
$labels['aclother'] = 'Altul';
$labels['aclread'] = 'Citeşte';
$labels['aclwrite'] = 'Scrie';
$labels['acldelete'] = 'Șterge';
$labels['shortacll'] = 'Caută';
$labels['shortaclr'] = 'Citeşte';
$labels['shortacls'] = 'Păstrează';
$labels['shortaclw'] = 'Scrie';
$labels['shortacli'] = 'Inserează';
$labels['shortaclp'] = 'Postează';
$labels['shortaclc'] = 'Creează';
$labels['shortaclk'] = 'Creează';
$labels['shortacld'] = 'Șterge';
$labels['shortaclt'] = 'Șterge';
$labels['shortacle'] = 'Elimină';
$labels['shortaclx'] = 'Ștergere dosar';
$labels['shortacla'] = 'Administrează';
$labels['shortacln'] = 'Adnotă';
$labels['shortaclother'] = 'Altul';
$labels['shortaclread'] = 'Citeşte';
$labels['shortaclwrite'] = 'Scrie';
$labels['shortacldelete'] = 'Șterge';
$labels['longacll'] = 'Dosarul este vizibil pe liste și se poate subscrie la acesta';
$labels['longaclr'] = 'Dosarul se poate deschide pentru citire';
$labels['longacls'] = 'Indicatorul de Văzut a fost schimbat';
$labels['longaclw'] = 'Indicatoarele și cuvintele cheie ale mesajelor se pot schimba cu excepția Văzut și Șters';
$labels['longacli'] = 'Mesajul se poate scrie sau copia într-un dosar';
$labels['longaclp'] = 'Mesajele se pot trimite către acest dosar';
$labels['longaclc'] = 'Dosarele se pot crea (sau redenumi) direct sub acest dosar';
$labels['longaclk'] = 'Dosarele se pot crea (sau redenumi) direct sub acest dosar';
$labels['longacld'] = 'Indicatorul de Șters al mesajelor se poate modifica';
$labels['longaclt'] = 'Indicatorul de Șters al mesajelor se poate modifica';
$labels['longacle'] = 'Mesajele se pot elimina';
$labels['longaclx'] = 'Dosarul se poate șterge sau redenumi';
$labels['longacla'] = 'Drepturile de acces la dosar se pot schimba';
$labels['longacln'] = 'Metadatele (adnotarile) impartite ale mesajelor pot fi schimbate';
$labels['longaclfull'] = 'Control complet include și administrare dosar';
$labels['longaclread'] = 'Dosarul se poate deschide pentru citire';
$labels['longaclwrite'] = 'Mesajul se poate marca, scrie sau copia într-un dosar';
$labels['longacldelete'] = 'Mesajele se pot șterge';
$labels['longaclother'] = 'Alte drepturi de acces';
$labels['ariasummaryacltable'] = 'Listă drepturi de acces';
$labels['arialabelaclactions'] = 'Arată acțiuni';
$labels['arialabelaclform'] = 'Drepturi de acces de la';
$messages['deleting'] = 'Șterg drepturile de access...';
$messages['saving'] = 'Salvez drepturi accesare...';
$messages['updatesuccess'] = 'Drepturile de acces au fost schimbate cu succes';
$messages['deletesuccess'] = 'Drepturile de acces au fost șterse cu succes';
$messages['createsuccess'] = 'Drepturile de acces au fost adăugate cu succes';
$messages['updateerror'] = 'Nu s-au putut actualiza drepturile de acces';
$messages['deleteerror'] = 'Nu s-au putut șterge drepturile de acces';
$messages['createerror'] = 'Nu s-au putut adăuga drepturi de acces';
$messages['deleteconfirm'] = 'Sunteți sigur că doriți să ștergeți drepturile de acces la utilizatorul (ii) selectați?';
$messages['norights'] = 'Nu au fost specificate drepturi!';
$messages['nouser'] = 'Nu a fost specificat niciun utilizator!';
PK|c�\L���*
*
acl/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Kunhavigado';
$labels['myrights'] = 'Atingrajtoj';
$labels['username'] = 'Uzanto:';
$labels['add'] = 'Aldoni';
$labels['newuser'] = 'Aldoni eron';
$labels['actions'] = 'Agoj de atingrajtoj...';
$labels['anyone'] = 'Ĉiuj uzantoj (iu ajn)';
$labels['anonymous'] = 'Gasto (sennome)';
$labels['identifier'] = 'Identigilo';
$labels['acll'] = 'Elserĉo';
$labels['aclr'] = 'Legi mesaĝojn';
$labels['acls'] = 'Manteni legitan staton';
$labels['acli'] = 'Enmeti (alglui)';
$labels['aclp'] = 'Afiŝi';
$labels['aclc'] = 'Krei subdosierujojn';
$labels['aclk'] = 'Krei subdosierujojn';
$labels['acld'] = 'Forigi mesaĝojn';
$labels['aclt'] = 'Forigi mesaĝojn';
$labels['aclx'] = 'Forigi dosierujon';
$labels['acla'] = 'Administri';
$labels['aclfull'] = 'Plena kontrolo';
$labels['aclother'] = 'Alia';
$labels['aclread'] = 'Legi';
$labels['aclwrite'] = 'Skribi';
$labels['acldelete'] = 'Forigi';
$labels['shortacll'] = 'Elserĉo';
$labels['shortaclr'] = 'Legi';
$labels['shortacls'] = 'Manteni';
$labels['shortaclw'] = 'Skribi';
$labels['shortacli'] = 'Enmeti';
$labels['shortaclp'] = 'Afiŝi';
$labels['shortaclc'] = 'Krei';
$labels['shortaclk'] = 'Krei';
$labels['shortacld'] = 'Forigi';
$labels['shortaclt'] = 'Forigi';
$labels['shortaclx'] = 'Forigo de dosierujo';
$labels['shortacla'] = 'Administri';
$labels['shortaclother'] = 'Alia';
$labels['shortaclread'] = 'Legi';
$labels['shortaclwrite'] = 'Skribi';
$labels['shortacldelete'] = 'Forigi';
$labels['longacll'] = 'La dosierujo videblas en listoj kaj oni povas aboni al ĝi';
$labels['longaclr'] = 'La dosierujo malfermeblas por legado';
$labels['longacli'] = 'Mesaĝoj skribeblas aŭ kopieblas en la dosierujo';
$labels['longaclp'] = 'Mesaĝoj afiŝeblas en ĉi tiu dosierujo';
$labels['longaclread'] = 'La dosierujo malfermeblas por legado';
PK|c�\_b�R��acl/localization/bn_BD.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/


$labels['aclread'] = 'পড়';
$labels['acldelete'] = 'ফেলে দিন';
$labels['shortaclr'] = 'পড়';
$labels['shortaclc'] = 'প্রস্তুত করুন';
$labels['shortaclk'] = 'প্রস্তুত করুন';
$labels['shortacld'] = 'ফেলে দিন';
$labels['shortaclt'] = 'ফেলে দিন';
$labels['shortaclread'] = 'পড়';
$labels['shortacldelete'] = 'ফেলে দিন';
PK|c�\�,�`��acl/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Partage';
$labels['myrights'] = 'Droits d’accès';
$labels['username'] = 'Utilisateur :';
$labels['advanced'] = 'Mode avancé';
$labels['add'] = 'Ajouter';
$labels['newuser'] = 'Ajouter une entrée';
$labels['editperms'] = 'Modifier les permissions';
$labels['actions'] = 'Actions des droits d’accès…';
$labels['anyone'] = 'Tous les utilisateurs (n’importe qui)';
$labels['anonymous'] = 'Invités (anonyme)';
$labels['identifier'] = 'Identifiant';
$labels['acll'] = 'Consultation';
$labels['aclr'] = 'Lire les courriels';
$labels['acls'] = 'Garder l’état « vu »';
$labels['aclw'] = 'Drapeaux d’écriture';
$labels['acli'] = 'Insérer (copier dans)';
$labels['aclp'] = 'Publier';
$labels['aclc'] = 'Créer des sous-dossiers';
$labels['aclk'] = 'Créer des sous-dossiers';
$labels['acld'] = 'Supprimer des courriels';
$labels['aclt'] = 'Supprimer des courriels';
$labels['acle'] = 'Purger';
$labels['aclx'] = 'Supprimer un dossier';
$labels['acla'] = 'Administrer';
$labels['acln'] = 'Annoter les courriels';
$labels['aclfull'] = 'Contrôle total';
$labels['aclother'] = 'Autre';
$labels['aclread'] = 'Lecture';
$labels['aclwrite'] = 'Écriture';
$labels['acldelete'] = 'Supprimer';
$labels['shortacll'] = 'Consultation';
$labels['shortaclr'] = 'Lecture';
$labels['shortacls'] = 'Conserver';
$labels['shortaclw'] = 'Écriture';
$labels['shortacli'] = 'Insérer';
$labels['shortaclp'] = 'Publier';
$labels['shortaclc'] = 'Créer';
$labels['shortaclk'] = 'Créer';
$labels['shortacld'] = 'Supprimer';
$labels['shortaclt'] = 'Supprimer';
$labels['shortacle'] = 'Purger';
$labels['shortaclx'] = 'Suppression de dossier';
$labels['shortacla'] = 'Administrer';
$labels['shortacln'] = 'Annoter';
$labels['shortaclother'] = 'Autre';
$labels['shortaclread'] = 'Lecture';
$labels['shortaclwrite'] = 'Écriture';
$labels['shortacldelete'] = 'Supprimer';
$labels['longacll'] = 'Ce dossier est visible dans les listes et on peut s’y abonner';
$labels['longaclr'] = 'Le dossier peut-être ouvert en lecture';
$labels['longacls'] = 'Le drapeau Vu des courriels peut-être changée';
$labels['longaclw'] = 'Les drapeaux et mots-clés des courriels peuvent être changés, sauf pour Vu et Supprimé';
$labels['longacli'] = 'Les courriels peuvent-être écrits ou copiés dans le dossier';
$labels['longaclp'] = 'Les courriels peuvent-être publiés dans ce dossier';
$labels['longaclc'] = 'Les dossiers peuvent-être créés (ou renommés) directement depuis ce dossier';
$labels['longaclk'] = 'Les dossiers peuvent-être créés (ou renommés) directement depuis ce dossier';
$labels['longacld'] = 'Le drapeau de suppression des courriels peut-être modifiée';
$labels['longaclt'] = 'Le drapeau de suppression des courriels peut-être modifiée';
$labels['longacle'] = 'Les courriels peuvent-être purgés';
$labels['longaclx'] = 'Le dossier peut-être supprimé ou renommé';
$labels['longacla'] = 'Les droits d’accès du dossier peuvent être modifiés';
$labels['longacln'] = 'Les métadonnées partagées des courriels (annotations) peuvent être changées';
$labels['longaclfull'] = 'Contrôle total, incluant l’administration des dossiers';
$labels['longaclread'] = 'Le dossier peut-être ouvert en lecture';
$labels['longaclwrite'] = 'Les courriels peuvent-être marqués, écrits ou copiés dans ce dossier';
$labels['longacldelete'] = 'Les courriels peuvent être supprimés';
$labels['longaclother'] = 'Autres droits d’accès';
$labels['ariasummaryacltable'] = 'Liste de droits d’accès';
$labels['arialabelaclactions'] = 'Actions de listage';
$labels['arialabelaclform'] = 'Formulaire de droits d’accès';
$messages['deleting'] = 'Suppression des droits d’accès…';
$messages['saving'] = 'Enregistrement des droits d’accès…';
$messages['updatesuccess'] = 'Les droits d’accès ont été changés avec succès';
$messages['deletesuccess'] = 'Les droits d’accès ont été supprimés avec succès';
$messages['createsuccess'] = 'Les droits d’accès ont été ajoutés avec succès';
$messages['updateerror'] = 'Impossible de mettre à jour les droits d’accès';
$messages['deleteerror'] = 'Impossible de supprimer les droits d’accès';
$messages['createerror'] = 'Impossible d’ajouter des droits d’accès';
$messages['deleteconfirm'] = 'Êtes-vous certain de vouloir retirer les droits d’accès des utilisateurs sélectionnés ?';
$messages['norights'] = 'Aucun droit n’a été indiqué';
$messages['nouser'] = 'Aucun nom d’utilisateur n’a été indiqué';
PK|c�\RԨ�iiacl/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Dijeljenje';
$labels['myrights'] = 'Prava pristupa';
$labels['username'] = 'Korisnik:';
$labels['advanced'] = 'Napredni način';
$labels['add'] = 'Dodaj';
$labels['newuser'] = 'Dodaj unos/pravilo';
$labels['editperms'] = 'Uredi dozvole';
$labels['actions'] = 'Akcije prava pristupa...';
$labels['anyone'] = 'Svi korisnici (anyone)';
$labels['anonymous'] = 'Gosti (anonymous)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Pretraga';
$labels['aclr'] = 'Pročitaj poruke';
$labels['acls'] = 'Zadrži u stanju "Viđeno"';
$labels['aclw'] = 'Zapiši oznake';
$labels['acli'] = 'Umetni (kopiraj u)';
$labels['aclp'] = 'Pošalji';
$labels['aclc'] = 'Napravi podmapu';
$labels['aclk'] = 'Napravi podmapu';
$labels['acld'] = 'Obriši poruke';
$labels['aclt'] = 'Obriši poruke';
$labels['acle'] = 'Trajno obriši';
$labels['aclx'] = 'Obriši mapu';
$labels['acla'] = 'Administriraj';
$labels['acln'] = 'Zabilježi poruke';
$labels['aclfull'] = 'Potpuna kontrola';
$labels['aclother'] = 'Drugo';
$labels['aclread'] = 'Čitanje';
$labels['aclwrite'] = 'Pisanje';
$labels['acldelete'] = 'Obriši';
$labels['shortacll'] = 'Pretraži';
$labels['shortaclr'] = 'Čitaj';
$labels['shortacls'] = 'Zadrži';
$labels['shortaclw'] = 'Piši';
$labels['shortacli'] = 'Umetni';
$labels['shortaclp'] = 'Pošalji';
$labels['shortaclc'] = 'Stvori';
$labels['shortaclk'] = 'Stvori';
$labels['shortacld'] = 'Obriši';
$labels['shortaclt'] = 'Obriši';
$labels['shortacle'] = 'Trajno obriši';
$labels['shortaclx'] = 'Obriši mapu';
$labels['shortacla'] = 'Administriraj';
$labels['shortacln'] = 'Zabilježi';
$labels['shortaclother'] = 'Drugo';
$labels['shortaclread'] = 'Čitanje';
$labels['shortaclwrite'] = 'Pisanje';
$labels['shortacldelete'] = 'Brisanje';
$labels['longacll'] = 'Mapa je vidljiva u listi i može se na nju pretplatiti';
$labels['longaclr'] = 'Mapa može biti otvorena za čitanje';
$labels['longacls'] = 'Oznaku "Viđeno" je moguće mijenjati u porukama';
$labels['longaclw'] = 'Oznake i ključne riječi, osim oznaka "Viđeno" i "Obrisano", se mogu mijenjati';
$labels['longacli'] = 'Poruke mogu biti pohranjene ili kopirane u mapu';
$labels['longaclp'] = 'Poruke mogu biti postavljene u mapu';
$labels['longaclc'] = 'Mape pod ovom mapom se mogu stvarati (i preimenovati)';
$labels['longaclk'] = 'Mape pod ovom mapom se mogu stvarati (i preimenovati)';
$labels['longacld'] = 'Oznaku "Obrisano" je moguće mijenjati u porukama';
$labels['longaclt'] = 'Oznaku "Obrisano" je moguće mijenjati u porukama';
$labels['longacle'] = 'Poruke mogu biti izbrisane';
$labels['longaclx'] = 'Mapa može biti obrisana ili preimenovana';
$labels['longacla'] = 'Prava pristupa nad mapom se mogu mijenjati';
$labels['longaclfull'] = 'Potpuna kontrola uključujući administraciju mapa';
$labels['longaclread'] = 'Mapa može biti otvorena za čitanje';
$labels['longaclwrite'] = 'Poruke mogu biti označene, pohranjene ili kopirane u mapu';
$labels['longacldelete'] = 'Poruke mogu biti obrisane';
$labels['longaclother'] = 'Ostala prava pristupa';
$labels['ariasummaryacltable'] = 'Popis prava pristupa';
$labels['arialabelaclactions'] = 'Popis radnji';
$labels['arialabelaclform'] = 'Obrazac prava pristupa';
$messages['deleting'] = 'Brišem prava pristupa...';
$messages['saving'] = 'Pohranjujem prava pristupa';
$messages['updatesuccess'] = 'Prava pristupa uspješno promjenjena';
$messages['deletesuccess'] = 'Prava pristupa uspješno obrisana';
$messages['createsuccess'] = 'Prava pristupa uspješno dodana';
$messages['updateerror'] = 'Ne mogu pohraniti vCard';
$messages['deleteerror'] = 'Ne mogu obrisati prava pristupa';
$messages['createerror'] = 'Ne mogu dodati prava pristupa';
$messages['deleteconfirm'] = 'Jeste li sigurni da želite obrisati prava pristupa za odabranog korisnika(e)?';
$messages['norights'] = 'Nije navedeno pravo pristupa!';
$messages['nouser'] = 'Nije navedeno korisničko ime!';
PK|c�\�;�ѭ�acl/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Udostępnianie';
$labels['myrights'] = 'Prawa dostępu';
$labels['username'] = 'Użytkownik:';
$labels['advanced'] = 'Tryb zaawansowany';
$labels['add'] = 'Dodaj';
$labels['newuser'] = 'Dodaj rekord';
$labels['editperms'] = 'Edytuj zezwolenia';
$labels['actions'] = 'Akcje na prawach...';
$labels['anyone'] = 'Wszyscy (anyone)';
$labels['anonymous'] = 'Goście (anonymous)';
$labels['identifier'] = 'Identyfikator';
$labels['acll'] = 'Podgląd';
$labels['aclr'] = 'Odczyt (Read)';
$labels['acls'] = 'Zmiana stanu wiadomości (Keep)';
$labels['aclw'] = 'Zmiana flag wiadomości (Write)';
$labels['acli'] = 'Dodawanie/Kopiowanie do (Insert)';
$labels['aclp'] = 'Wysyłanie';
$labels['aclc'] = 'Tworzenie podfolderów (Create)';
$labels['aclk'] = 'Tworzenie podfolderów (Create)';
$labels['acld'] = 'Usuwanie wiadomości (Delete)';
$labels['aclt'] = 'Usuwanie wiadomości (Delete)';
$labels['acle'] = 'Porządkowanie';
$labels['aclx'] = 'Usuwanie folderu (Delete)';
$labels['acla'] = 'Administracja';
$labels['acln'] = 'Adnotacje wiadomości';
$labels['aclfull'] = 'Wszystkie';
$labels['aclother'] = 'Pozostałe';
$labels['aclread'] = 'Odczyt';
$labels['aclwrite'] = 'Zapis';
$labels['acldelete'] = 'Usuwanie';
$labels['shortacll'] = 'Podgląd';
$labels['shortaclr'] = 'Odczyt';
$labels['shortacls'] = 'Zmiana';
$labels['shortaclw'] = 'Zapis';
$labels['shortacli'] = 'Dodawanie';
$labels['shortaclp'] = 'Wysyłanie';
$labels['shortaclc'] = 'Tworzenie';
$labels['shortaclk'] = 'Tworzenie';
$labels['shortacld'] = 'Usuwanie';
$labels['shortaclt'] = 'Usuwanie';
$labels['shortacle'] = 'Porządkowanie';
$labels['shortaclx'] = 'Usuwanie folderu';
$labels['shortacla'] = 'Administracja';
$labels['shortacln'] = 'Adnotacje';
$labels['shortaclother'] = 'Pozostałe';
$labels['shortaclread'] = 'Odczyt';
$labels['shortaclwrite'] = 'Zapis';
$labels['shortacldelete'] = 'Usuwanie';
$labels['longacll'] = 'Pozwala na subskrybowanie folderu i powoduje, że jest on widoczny na liście';
$labels['longaclr'] = 'Folder może być otwarty w trybie do odczytu';
$labels['longacls'] = 'Pozwala na zmienę stanu wiadomości';
$labels['longaclw'] = 'Pozwala zmieniać wszystkie flagi wiadomości, oprócz "Przeczytano" i "Usunięto';
$labels['longacli'] = 'Pozwala zapisywać wiadomości i kopiować do folderu';
$labels['longaclp'] = 'Pozwala wysyłać wiadomości do folderu';
$labels['longaclc'] = 'Pozwala tworzyć (lub zmieniać nazwę) podfoldery';
$labels['longaclk'] = 'Pozwala tworzyć (lub zmieniać nazwę) podfoldery';
$labels['longacld'] = 'Pozwala zmianiać flagę "Usunięto" wiadomości';
$labels['longaclt'] = 'Pozwala zmianiać flagę "Usunięto" wiadomości';
$labels['longacle'] = 'Pozwala na usuwanie wiadomości oznaczonych do usunięcia';
$labels['longaclx'] = 'Pozwala na zmianę nazwy lub usunięcie folderu';
$labels['longacla'] = 'Pozwala na zmiane praw dostępu do folderu';
$labels['longacln'] = 'Pozwala na zmianę współdzielonych meta-danych wiadomości (adnotacji)';
$labels['longaclfull'] = 'Pełna kontrola włącznie z administrowaniem folderem';
$labels['longaclread'] = 'Folder może być otwarty w trybie do odczytu';
$labels['longaclwrite'] = 'Wiadomości mogą być oznaczane, zapisywane i kopiowane do folderu';
$labels['longacldelete'] = 'Wiadomości mogą być usuwane';
$labels['longaclother'] = 'Inne prawa dostępu';
$labels['ariasummaryacltable'] = 'Spis praw dostępu';
$labels['arialabelaclactions'] = 'Lista działań';
$labels['arialabelaclform'] = 'Formularz praw dostępu';
$messages['deleting'] = 'Usuwanie praw dostępu...';
$messages['saving'] = 'Zapisywanie praw dostępu...';
$messages['updatesuccess'] = 'Pomyślnie zmieniono prawa dostępu';
$messages['deletesuccess'] = 'Pomyślnie usunięto prawa dostępu';
$messages['createsuccess'] = 'Pomyślnie dodano prawa dostępu';
$messages['updateerror'] = 'Nie udało się zaktualizować praw dostępu';
$messages['deleteerror'] = 'Nie udało się usunąć praw dostępu';
$messages['createerror'] = 'Nie udało się dodać praw dostępu';
$messages['deleteconfirm'] = 'Czy na pewno chcesz usunąć prawa wybranym użytkownikom?';
$messages['norights'] = 'Nie wybrano praw dostępu!';
$messages['nouser'] = 'Nie podano nazwy użytkownika!';
PK|c�\i��׺�acl/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['add'] = 'समावेश करा';
$labels['aclother'] = 'इतर';
$labels['acldelete'] = 'नष्ट करा';
$labels['shortaclc'] = 'तयार करा';
$labels['shortaclk'] = 'तयार करा';
$labels['shortacld'] = 'नष्ट करा';
$labels['shortaclt'] = 'नष्ट करा';
$labels['shortaclother'] = 'इतर';
$labels['shortacldelete'] = 'नष्ट करा';
PK|c�\��t��acl/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = '共有';
$labels['myrights'] = 'アクセス権';
$labels['username'] = 'ユーザー:';
$labels['advanced'] = '詳細なモード';
$labels['add'] = '追加';
$labels['newuser'] = '項目を追加';
$labels['editperms'] = '編集の権限';
$labels['actions'] = 'アクセス権の動作...';
$labels['anyone'] = '(誰でも)すべてのユーザー';
$labels['anonymous'] = 'ゲスト(匿名)';
$labels['identifier'] = '識別子';
$labels['acll'] = '検索';
$labels['aclr'] = 'メッセージを読む';
$labels['acls'] = '既読の状態を保持';
$labels['aclw'] = '書き込みフラッグ';
$labels['acli'] = '挿入(中に複製)';
$labels['aclp'] = '投稿';
$labels['aclc'] = 'サブフォルダを作成';
$labels['aclk'] = 'サブフォルダを作成';
$labels['acld'] = 'メッセージを削除';
$labels['aclt'] = 'メッセージを削除';
$labels['acle'] = '抹消';
$labels['aclx'] = 'フォルダーを削除';
$labels['acla'] = '管理';
$labels['acln'] = 'メッセージに注釈';
$labels['aclfull'] = '完全な制御';
$labels['aclother'] = 'その他';
$labels['aclread'] = '読み込み';
$labels['aclwrite'] = '書き込み';
$labels['acldelete'] = '削除';
$labels['shortacll'] = '検索';
$labels['shortaclr'] = '読み込み';
$labels['shortacls'] = '保持';
$labels['shortaclw'] = '書き込み';
$labels['shortacli'] = '挿入';
$labels['shortaclp'] = '投稿';
$labels['shortaclc'] = '作成';
$labels['shortaclk'] = '作成';
$labels['shortacld'] = '削除';
$labels['shortaclt'] = '削除';
$labels['shortacle'] = '抹消';
$labels['shortaclx'] = 'フォルダーの削除';
$labels['shortacla'] = '管理';
$labels['shortacln'] = '注釈';
$labels['shortaclother'] = 'その他';
$labels['shortaclread'] = '読み込み';
$labels['shortaclwrite'] = '書き込み';
$labels['shortacldelete'] = '削除';
$labels['longacll'] = 'フォルダーをリストに見えるようにして登録可能:';
$labels['longaclr'] = 'フォルダーを読むことを可能';
$labels['longacls'] = 'メッセージの既読のフラッグの変更を可能';
$labels['longaclw'] = '既読と削除のフラッグを除く、メッセージのフラッグとキーワードの変更を可能';
$labels['longacli'] = 'メッセージに書き込みとフォルダーへの複製を可能';
$labels['longaclp'] = 'メッセージをこのフォルダーに投稿を可能';
$labels['longaclc'] = 'このフォルダーの直下にフォルダーの作成と名前の変更を可能';
$labels['longaclk'] = 'このフォルダーの直下にフォルダーの作成と名前の変更を可能';
$labels['longacld'] = 'メッセージの削除フラッグの変更を可能';
$labels['longaclt'] = 'メッセージの削除フラッグの変更を可能';
$labels['longacle'] = 'メッセージの抹消を可能';
$labels['longaclx'] = 'このフォルダーの削除や名前の変更を可能';
$labels['longacla'] = 'フォルダーのアクセス権の変更を可能';
$labels['longacln'] = 'メッセージの共有されるメタデータ(注釈)の変更を可能';
$labels['longaclfull'] = 'フォルダーの管理を含めた完全な制御を可能';
$labels['longaclread'] = 'フォルダーを読むことを可能';
$labels['longaclwrite'] = 'メッセージにマークの設定、書き込み、フォルダーに複製を可能';
$labels['longacldelete'] = 'メッセージの削除を可能';
$labels['longaclother'] = '他のアクセス権';
$labels['ariasummaryacltable'] = 'アクセス権の一覧';
$labels['arialabelaclactions'] = '動作を一覧';
$labels['arialabelaclform'] = 'アクセス権の欄';
$messages['deleting'] = 'アクセス権を削除中...';
$messages['saving'] = 'アクセス権を保存中...';
$messages['updatesuccess'] = 'アクセス権を変更しました。';
$messages['deletesuccess'] = 'アクセス権を削除しました。';
$messages['createsuccess'] = 'アクセス権を追加しました。';
$messages['updateerror'] = 'アクセス権を更新できません。';
$messages['deleteerror'] = 'アクセス権を削除できません。';
$messages['createerror'] = 'アクセス権を追加できません。';
$messages['deleteconfirm'] = '選択したユーザーのアクセス件を本当に削除したいですか?';
$messages['norights'] = '何の権限も指定されていません!';
$messages['nouser'] = 'ユーザー名を指定していません!';
PK|c�\�eq))acl/localization/ps.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/


$labels['acldelete'] = 'ړنګول';
$labels['shortaclc'] = 'جوړول، رامنځ ته کول';
$labels['shortaclk'] = 'جوړول، رامنځ ته کول';
$labels['shortacld'] = 'ړنګول';
$labels['shortaclt'] = 'ړنګول';
$labels['shortacldelete'] = 'ړنګول';
PK|c�\�t���acl/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Deling';
$labels['myrights'] = 'Tilgangsrettar';
$labels['username'] = 'Brukar:';
$labels['add'] = 'Legg til';
$labels['newuser'] = 'Legg til oppføring';
$labels['editperms'] = 'Endr innstillingar for tilgong';
$labels['actions'] = 'Val for tilgangsrettar...';
$labels['anyone'] = 'Alle brukarar (alle)';
$labels['anonymous'] = 'Gjester (anonyme)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Oppslag';
$labels['aclr'] = 'Les meldingar';
$labels['acls'] = 'Behald lesestatus';
$labels['aclw'] = 'Skriveflagg';
$labels['acli'] = 'Lim inn';
$labels['aclp'] = 'Post';
$labels['aclc'] = 'Opprett undermapper';
$labels['aclk'] = 'Opprett undermapper';
$labels['acld'] = 'Slett meldingar';
$labels['aclt'] = 'Slett meldingar';
$labels['acle'] = 'Slett fullstendig';
$labels['aclx'] = 'Slett mappe';
$labels['acla'] = 'Administrér';
$labels['aclfull'] = 'Full kontroll';
$labels['aclother'] = 'Anna';
$labels['aclread'] = 'Les';
$labels['aclwrite'] = 'Skriv';
$labels['acldelete'] = 'Slett';
$labels['shortacll'] = 'Oppslag';
$labels['shortaclr'] = 'Les';
$labels['shortacls'] = 'Behald';
$labels['shortaclw'] = 'Skriv';
$labels['shortacli'] = 'Sett inn';
$labels['shortaclp'] = 'Post';
$labels['shortaclc'] = 'Opprett';
$labels['shortaclk'] = 'Opprett';
$labels['shortacld'] = 'Slett';
$labels['shortaclt'] = 'Slett';
$labels['shortacle'] = 'Slett fullstendig';
$labels['shortaclx'] = 'Slett mappe';
$labels['shortacla'] = 'Administrér';
$labels['shortaclother'] = 'Anna';
$labels['shortaclread'] = 'Les';
$labels['shortaclwrite'] = 'Skriv';
$labels['shortacldelete'] = 'Slett';
$labels['longacll'] = 'Mappa er synleg og kan abonnerast på';
$labels['longaclr'] = 'Mappa kan opnast for lesing';
$labels['longacls'] = 'Meldingane sine lesestatusflagg kan endrast';
$labels['longaclw'] = 'Meldingsflagg og -nøkkelord kan endrast, bortsett frå status for lesing og sletting';
$labels['longacli'] = 'Meldingar kan lagrast eller kopierast til mappa';
$labels['longaclp'] = 'Meldingar kan postast til denne mappa';
$labels['longaclc'] = 'Mapper kan opprettast (eller namnast om) direkte under denne mappa';
$labels['longaclk'] = 'Mapper kan opprettast (eller namnast om) direkte under denne mappa';
$labels['longacld'] = 'Meldingane sine flagg for sletting kan endrast';
$labels['longaclt'] = 'Meldingane sine flagg for sletting kan endrast';
$labels['longacle'] = 'Meldinga kan slettast for godt';
$labels['longaclx'] = 'Mappa kan slettast eller få nytt namn';
$labels['longacla'] = 'Mappa sine tilgangsrettar kan endrast';
$labels['longaclfull'] = 'Full kontroll, inkludert mappeadministrasjon';
$labels['longaclread'] = 'Mappa kan opnast for lesing';
$labels['longaclwrite'] = 'Meldingar kan merkast, lagrast i eller flyttast til mappa';
$labels['longacldelete'] = 'Meldinga kan slettast';
$messages['deleting'] = 'Slettar tilgangsrettar…';
$messages['saving'] = 'Lagrar tilgangsrettar…';
$messages['updatesuccess'] = 'Tilgangsrettiar vart endra';
$messages['deletesuccess'] = 'Tilgangsretter vart sletta';
$messages['createsuccess'] = 'Tilgangsrettar vart legne til';
$messages['deleteerror'] = 'Kunne ikkje fjerne tilgangsrettar';
$messages['createerror'] = 'Kunne ikkje leggje til tilgangsrettar';
$messages['deleteconfirm'] = 'Er du sikker på at du vil fjerne tilgangen til  valde brukarar?';
$messages['norights'] = 'Ingen rettar er spesifisert!';
$messages['nouser'] = 'Brukarnamn er ikkje spesifisert!';
PK|c�\������acl/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Compartición';
$labels['myrights'] = 'Drechos d\'accesu';
$labels['username'] = 'Usuariu:';
$labels['advanced'] = 'Mou avanzáu';
$labels['add'] = 'Amestar';
$labels['newuser'] = 'Amestar entrada';
$labels['editperms'] = 'Editar permisos';
$labels['actions'] = 'Aición de drechos d\'accesu...';
$labels['anyone'] = 'Tolos usuarios (toos)';
$labels['anonymous'] = 'Convidaos (anónimos)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Guetar';
$labels['aclr'] = 'Lleer mensaxes';
$labels['acls'] = 'Estáu Caltener Vistu';
$labels['aclw'] = 'Escribir banderes';
$labels['acli'] = 'Inxertar (copiar a)';
$labels['aclc'] = 'Crear subcarpetes';
$labels['aclk'] = 'Crear subcarpetes';
$labels['acld'] = 'Desaniciar mensaxes';
$labels['aclt'] = 'Desaniciar mensaxes';
$labels['acle'] = 'Desanciar';
$labels['aclx'] = 'Desaniciar carpeta';
$labels['acla'] = 'Alministrar';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Otru';
$labels['aclread'] = 'Lleer';
$labels['aclwrite'] = 'Escribir';
$labels['acldelete'] = 'Desaniciar';
$labels['shortacll'] = 'Guetar';
$labels['shortaclr'] = 'Lleer';
$labels['shortacls'] = 'Caltener';
$labels['shortaclw'] = 'Escribir';
$labels['shortacli'] = 'Inxertar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Desaniciar';
$labels['shortaclt'] = 'Desaniciar';
$labels['shortacle'] = 'Desaniciar';
$labels['shortaclx'] = 'Desaniciu de carpeta';
$labels['shortacla'] = 'Alministrar';
$labels['shortaclother'] = 'Otru';
$labels['shortaclread'] = 'Lleer';
$labels['shortaclwrite'] = 'Escribir';
$labels['shortacldelete'] = 'Desaniciar';
$labels['longacll'] = 'La carpeta ye visible nes llistes y pue soscribise a';
$labels['longaclr'] = 'La carpeta nun pue abrise pa leer';
$labels['longaclx'] = 'La carpeta pue desaniciase o renomase';
$labels['longacla'] = 'Puen camudase los drechos d\'accesu de la carpeta';
$labels['longaclfull'] = 'Control completu incluyendo l\'alminitración de carpeta';
$labels['longaclread'] = 'La carpeta pue abrise pa llectura';
$labels['longaclwrite'] = 'Los mensaxes puen conseñase, escribise o copiase a la carpeta';
$labels['longacldelete'] = 'Los mensaxes puen desaniciase';
$labels['longaclother'] = 'Otros drechos d\'accesu';
$labels['ariasummaryacltable'] = 'Llista de drechos d\'accesu';
$messages['deleting'] = 'Desaniciando los drechos d\'accesu...';
$messages['saving'] = 'Guardando los drechos d\'accesu...';
$messages['updatesuccess'] = 'Camudaos con ésitu los drechos d\'accesu';
$messages['deletesuccess'] = 'Desaniciaos con ésitu los drechos d\'accesu';
$messages['createsuccess'] = 'Amestaos con ésitu los drechos d\'accesu';
$messages['updateerror'] = 'Nun puen anovase los drechos d\'accesu';
$messages['deleteerror'] = 'Nun puen desaniciase los drechos d\'accesu';
$messages['createerror'] = 'Nun puen amestase los drechos d\'accesu';
$messages['deleteconfirm'] = '¿De xuru quies desaniciar los drechos d\'accesu al(a los) usuariu(os) esbilláu(os)?';
PK|c�\�@���acl/localization/kab.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Beṭṭu';
$labels['myrights'] = 'Izerfan n unekcum';
$labels['username'] = 'Aseqdac:';
$labels['advanced'] = 'Askar leqqayen';
$labels['newuser'] = 'Rnu anekcam';
$labels['editperms'] = 'Ẓreg tisirag';
$labels['actions'] = 'Tigawin n izerfan n unekcum...';
$labels['anyone'] = 'Akk iseqdacen (yal yiwen)';
$labels['anonymous'] = 'Inebgawen (udrigen)';
$labels['identifier'] = 'Sulu';
$labels['acll'] = 'Nadi';
$labels['aclr'] = 'Ɣer iznan';
$labels['aclp'] = 'Aru izen';
$labels['aclc'] = 'Rnu ikaramen isnawanen';
$labels['aclk'] = 'Rnu ikaramen isnawanen';
$labels['acld'] = 'Kkes iznan';
$labels['aclt'] = 'Ɣer iznan';
$labels['acle'] = 'Sfeḍ';
$labels['aclx'] = 'Kkes akaram';
$labels['acla'] = 'Sefrek';
$labels['acln'] = 'Rnu tizmilin i yiznan';
$labels['aclother'] = 'Ayen-nniḍen';
$labels['aclread'] = 'Ɣeṛ';
$labels['aclwrite'] = 'Aru';
$labels['acldelete'] = 'Kkes';
$labels['shortacll'] = 'Nadi';
$labels['shortaclr'] = 'Ɣeṛ';
$labels['shortaclw'] = 'Aru';
$labels['shortaclp'] = 'Aru izen';
$labels['shortaclc'] = 'Rnu';
$labels['shortaclk'] = 'Rnu';
$labels['shortacld'] = 'Kkes';
$labels['shortaclt'] = 'Kkes';
$labels['shortacle'] = 'Sfeḍ';
$labels['shortacla'] = 'Sefrek';
$labels['shortacln'] = 'Rnu tazmilt';
$labels['shortaclother'] = 'Ayen-nniḍen';
$labels['shortaclread'] = 'Ɣeṛ';
$labels['shortaclwrite'] = 'Aru';
$labels['shortacldelete'] = 'Kkes';
$messages['deleting'] = 'Kkes akk izerfan n unekcum...';
PK|c�\� GO
O
acl/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Дељење';
$labels['myrights'] = 'Права приступа';
$labels['username'] = 'Корисник:';
$labels['advanced'] = 'Напредни режим';
$labels['add'] = 'Додај';
$labels['newuser'] = 'Додај унос';
$labels['editperms'] = 'Уреди дозволе';
$labels['actions'] = 'Радње права приступа...';
$labels['anyone'] = 'Сви корисници (било ко)';
$labels['anonymous'] = 'Гости (анонимно)';
$labels['identifier'] = 'Идентификатор';
$labels['acll'] = 'Потражи';
$labels['aclr'] = 'Прочитане поруке';
$labels['acls'] = 'Очувај стање прегледаности';
$labels['acli'] = 'Убаци (копирај у)';
$labels['aclc'] = 'Направи потфасцикле';
$labels['aclk'] = 'Направи потфасцикле';
$labels['acld'] = 'Обриши поруке';
$labels['aclt'] = 'Обриши поруке';
$labels['aclx'] = 'Обриши фасциклу';
$labels['acla'] = 'Администрирај';
$labels['aclfull'] = 'Пуна контрола';
$labels['aclother'] = 'Друго';
$labels['aclread'] = 'Читање';
$labels['aclwrite'] = 'Упис';
$labels['acldelete'] = 'Обриши';
$labels['shortacll'] = 'Потражи';
$labels['shortaclr'] = 'Прочитана';
$labels['shortacls'] = 'Задржи';
$labels['shortaclw'] = 'Пиши';
$labels['shortacli'] = 'Убаци';
$labels['shortaclc'] = 'Направи';
$labels['shortaclk'] = 'Направи';
$labels['shortacld'] = 'Обриши';
$labels['shortaclt'] = 'Обриши';
$labels['shortacla'] = 'Администрирај';
$labels['shortaclother'] = 'Друго';
$labels['shortaclread'] = 'Читање';
$labels['shortaclwrite'] = 'Упис';
$labels['shortacldelete'] = 'Брисање';
PK|c�\$���
�
acl/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Deelen';
$labels['myrights'] = 'Zougrëffsrechter';
$labels['username'] = 'Benotzer:';
$labels['advanced'] = 'Avancéierte Modus';
$labels['add'] = 'Dobäisetzen';
$labels['newuser'] = 'Element dobäisetzen';
$labels['editperms'] = 'Zougrëffsrechter beaarbechten';
$labels['actions'] = 'Optioune fir d\'Zougrëffsrechter';
$labels['anyone'] = 'All d\'Benotzer (jiddwereen)';
$labels['anonymous'] = 'Gaascht (anonym)';
$labels['identifier'] = 'Identifiant';
$labels['acll'] = 'Noschloen';
$labels['aclr'] = 'Messagë liesen';
$labels['acls'] = 'Lies-Status behalen';
$labels['aclp'] = 'Schécken';
$labels['aclc'] = 'Ënnerdossieren erstellen';
$labels['aclk'] = 'Ënnerdossieren erstellen';
$labels['acld'] = 'Messagë läschen';
$labels['aclt'] = 'Messagë läschen';
$labels['acle'] = 'Ausläschen';
$labels['aclx'] = 'Dossier läschen';
$labels['acla'] = 'Administréieren';
$labels['aclfull'] = 'Voll Kontroll';
$labels['aclother'] = 'Aner';
$labels['aclread'] = 'Liesen';
$labels['aclwrite'] = 'Schreiwen';
$labels['acldelete'] = 'Läschen';
$labels['shortacll'] = 'Noschloen';
$labels['shortaclr'] = 'Liesen';
$labels['shortacls'] = 'Halen';
$labels['shortaclw'] = 'Schreiwen';
$labels['shortacli'] = 'Drasetze';
$labels['shortaclp'] = 'Schécken';
$labels['shortaclc'] = 'Erstellen';
$labels['shortaclk'] = 'Erstellen';
$labels['shortacld'] = 'Läschen';
$labels['shortaclt'] = 'Läschen';
$labels['shortacle'] = 'Ausläschen';
$labels['shortaclx'] = 'Dossier läschen';
$labels['shortacla'] = 'Administréieren';
$labels['shortacln'] = 'Kommentéieren';
$labels['shortaclother'] = 'Aner';
$labels['shortaclread'] = 'Liesen';
$labels['shortaclwrite'] = 'Schreiwen';
$labels['shortacldelete'] = 'Läschen';
$labels['longacldelete'] = 'Messagë kënne geläscht ginn';
$labels['longaclother'] = 'Aner Zougrëffsrechter';
$labels['ariasummaryacltable'] = 'Lëscht vun Zougrëffsrechter';
$messages['deleting'] = 'Zougrëffsrechter gi geläscht...';
$messages['saving'] = 'Zougrëffsrechter gi gespäichert...';
$messages['updatesuccess'] = 'Rechter erfollegräich geännert';
$messages['deletesuccess'] = 'Rechter erfollegräich geläscht';
$messages['createsuccess'] = 'Rechter erfollegräich dobäigesat';
$messages['updateerror'] = 'D\'Zougrëffsrechter kënnen net aktualiséiert ginn';
$messages['deleteerror'] = 'Rechter kënnen net geläscht ginn';
$messages['createerror'] = 'Zougrëffsrechter kënnen net dobäigesat ginn';
$messages['deleteconfirm'] = 'Bass du dir sécher, dass du d\'Zougrëffsrechter fir déi ausgewielte Benotzer wëlls ewechhuelen?';
$messages['norights'] = 'Et goufe keng Rechter uginn! ';
$messages['nouser'] = 'Et gouf kee Benotzernumm uginn!';
PK|c�\1V��==acl/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'اشتراک گذاری';
$labels['username'] = 'کاربر:';
$labels['add'] = 'افزودن';
$labels['newuser'] = 'افزودن مدخل';
$labels['aclw'] = 'نوشتن نشانه ها';
$labels['aclp'] = 'ارسال';
$labels['acla'] = 'مدیر';
$labels['aclfull'] = 'کنترل کامل';
$labels['aclother'] = 'دیگر';
$labels['aclread'] = 'خواندن';
$labels['acldelete'] = 'حذف';
$labels['shortaclr'] = 'خواندن';
$labels['shortaclp'] = 'ارسال';
$labels['shortaclc'] = 'ایجاد کردن';
$labels['shortaclk'] = 'ایجاد کردن';
$labels['shortacld'] = 'حذف';
$labels['shortaclt'] = 'حذف';
$labels['shortacla'] = 'مدیر';
$labels['shortaclother'] = 'دیگر';
$labels['shortaclread'] = 'خواندن';
$labels['shortacldelete'] = 'حذف';
PK|c�\Vn�0HHacl/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Rannañ';
$labels['myrights'] = 'Aotreoù mont e-barzh';
$labels['username'] = 'Implijer:';
$labels['advanced'] = 'Mod kempleshoc\'h';
$labels['add'] = 'Ouzhpennañ';
$labels['newuser'] = 'Ouzhpennañ un elfenn';
$labels['editperms'] = 'Embann an aotreoù';
$labels['actions'] = 'Aotreoù mont e-barzh';
$labels['anyone'] = 'An holl implijerien (neb hini)';
$labels['anonymous'] = 'Kouvidi (dizanv)';
$labels['identifier'] = 'Naoudi';
$labels['acll'] = 'Taol sell';
$labels['aclr'] = 'Kemennadennoù lennet';
$labels['acls'] = 'Derc\'hel ar stad "Gwelet"';
$labels['aclw'] = 'Bannieloù skrivañ';
$labels['acli'] = 'Enlakaat (Eilañ an digoradur)';
$labels['aclp'] = 'Postañ';
$labels['aclc'] = 'Krouiñ isteuliadoù';
$labels['aclk'] = 'Krouiñ isteuliadoù';
$labels['acld'] = 'Dilemel kemennadennoù';
$labels['aclt'] = 'Dilemel kemennadennoù';
$labels['acle'] = 'Skarzhañ';
$labels['aclx'] = 'Dilemel an teuliad';
$labels['acla'] = 'Ardeiñ';
$labels['acln'] = 'Notennaouiñ kemennadennoù';
$labels['aclfull'] = 'Reoliadur a-bezh';
$labels['aclother'] = 'All';
$labels['aclread'] = 'Lenn';
$labels['aclwrite'] = 'Skrivañ';
$labels['acldelete'] = 'Dilemel';
$labels['shortacll'] = 'Teurel ur sell';
$labels['shortaclr'] = 'Lenn';
$labels['shortacls'] = 'Derc\'hel';
$labels['shortaclw'] = 'Skrivañ';
$labels['shortacli'] = 'Enlakaat';
$labels['shortaclp'] = 'Postañ';
$labels['shortaclc'] = 'Krouiñ';
$labels['shortaclk'] = 'Krouiñ';
$labels['shortacld'] = 'Dilemel';
$labels['shortaclt'] = 'Dilemel';
$labels['shortacle'] = 'Skarzhañ';
$labels['shortaclx'] = 'Dilemel an teuliad';
$labels['shortacla'] = 'Ardeiñ';
$labels['shortacln'] = 'Notennaouiñ';
$labels['shortaclother'] = 'Traoù all';
$labels['shortaclread'] = 'Lenn';
$labels['shortaclwrite'] = 'Skrivañ';
$labels['shortacldelete'] = 'Dilemel';
$labels['longacll'] = 'Gwelus eo an teuliad-se er rolloù ha gallout a reer bezañ koumanantet dezhañ';
$labels['longaclr'] = 'Gallout a reer digeriñ an teuliad-mañ evit e lenn';
$labels['longacls'] = 'Gallout a reer kemmañ ar bannieloù "Kemennadenn gwelet"';
$labels['longaclw'] = 'Gallout a reer kemmañ an bannieloù kemennadennoù hag ar gerioù-alc\'hwez, war-bouez "Gwelet" ha "Dilamet"';
$labels['longacli'] = 'Gallout a ra ar c\'hemennadennoù bezañ skrivet be eilet en teuliad';
$labels['longaclp'] = 'Gallout a reer postañ kemennadennoù d\'an teuliad-mañ';
$labels['longaclc'] = 'Gallout a reer krouiñ (pe adenvel) teuliadoù en teuliad war-eeun';
$labels['longaclk'] = 'Gallout a reer krouiñ (pe adenvel) teuliadoù en teuliad war-eeun';
$labels['longacld'] = 'Gallout a reer kemmañ ar banniel ""Kemennadenn dilamet"';
$labels['longaclt'] = 'Gallout a reer kemmañ ar banniel ""Kemennadenn dilamet"';
$labels['longacle'] = 'Gallout a reer skarzhañ ar c\'hemennadennoù';
$labels['longaclx'] = 'Gallout a ra bezañ dilamet pe adanvet an teuliad';
$labels['longacla'] = 'Gallout a reer kemmañ aotreoù haeziñ an teuliad';
$labels['longacln'] = 'Metaroadennoù rannet (notennoù) ar c\'hemennadennoù a c\'hell bezañ kemmet';
$labels['longaclfull'] = 'Reoliadur a-bezh, ardeiñ an teuliad en o zouez';
$labels['longaclread'] = 'Gallout a reer digeriñ an teuliad evit e lenn';
$labels['longaclwrite'] = 'Gallout a reer merkañ, skrivañ pe eilañ kemennadennoù d\'an teuliad';
$labels['longacldelete'] = 'Gallout a reer dilemel ar c\'hemennadennoù';
$labels['longaclother'] = 'Aotreoù haeziñ all';
$labels['ariasummaryacltable'] = 'Roll an aotreoù haeziñ';
$labels['arialabelaclactions'] = 'Roll ar gweredoù';
$labels['arialabelaclform'] = 'Aotreoù haeziñ a-berzh';
$messages['deleting'] = 'O tilemel an aotreoù haeziñ...';
$messages['saving'] = 'Oc\'h enrollañ an aotreoù haeziñ...';
$messages['updatesuccess'] = 'Kemmet an aotreoù haeziñ gant berzh';
$messages['deletesuccess'] = 'Dilamet an aotreoù haeziñ gant berzh';
$messages['createsuccess'] = 'Ouzhpennet an aotreoù haeziñ gant berzh';
$messages['updateerror'] = 'N\'haller ket hizivaat an aotreoù haeziñ';
$messages['deleteerror'] = 'N\'haller ket dilemel an aotreoù haeziñ';
$messages['createerror'] = 'N\'haller ket ouzhpennañ aotreoù haeziñ';
$messages['deleteconfirm'] = 'Sur oc\'h e fell deoc\'h dilemel aotreoù haeziñ an arveriaded diuzet?';
$messages['norights'] = 'Aotre ebet erspizet!';
$messages['nouser'] = 'Anv arveriad ebet erspizet!';
PK|c�\�ͬ22acl/localization/ka_GE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['add'] = 'დამატება';
$labels['aclother'] = 'სხვა';
$labels['aclread'] = 'წაკითხვა';
$labels['acldelete'] = 'წაშლა';
$labels['shortaclr'] = 'წაკითხვა';
$labels['shortaclc'] = 'შექმნა';
$labels['shortaclk'] = 'შექმნა';
$labels['shortacld'] = 'წაშლა';
$labels['shortaclt'] = 'წაშლა';
$labels['shortaclother'] = 'სხვა';
$labels['shortaclread'] = 'წაკითხვა';
$labels['shortacldelete'] = 'წაშლა';
PK|c�\&�7�!!acl/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Сподели';
$labels['myrights'] = 'Право на пристап';
$labels['username'] = 'Корисник';
$labels['advanced'] = 'Напредно ниво';
$labels['add'] = 'Додај';
$labels['newuser'] = 'Додади запис';
$labels['editperms'] = 'Уреди одобрение';
$labels['actions'] = 'Правото на пристапување';
$labels['anyone'] = 'Сите корисници (секој)';
$labels['anonymous'] = 'Гости (анонимен)';
$labels['identifier'] = 'Идентификатор';
$labels['acll'] = 'Пронајди';
$labels['aclr'] = 'Прочитај пораките';
$labels['acls'] = 'Задржи статус прегледано';
$labels['aclw'] = 'Напиши знамиња';
$labels['acli'] = 'Вметни (копирај)';
$labels['aclp'] = 'Објави';
$labels['aclc'] = 'Создај подпапка';
$labels['aclk'] = 'Креирај подпапка';
$labels['acld'] = 'Избриши пораки ';
$labels['aclt'] = 'Избриши пораки';
$labels['acle'] = 'Испразни ';
$labels['aclx'] = 'Избриши папка ';
$labels['acla'] = 'Управувај ';
$labels['acln'] = 'Коментирај пораки ';
$labels['aclfull'] = 'Целосна контрола ';
$labels['aclother'] = 'Друго ';
$labels['aclread'] = 'Читај ';
$labels['aclwrite'] = 'Пишувај ';
$labels['acldelete'] = 'Бришај ';
$labels['shortacll'] = 'Пребарувај ';
$labels['shortaclr'] = 'Чита';
$labels['shortacls'] = 'Задржи';
$labels['shortaclw'] = 'Пишивај';
$labels['shortacli'] = 'Внеси ';
$labels['shortaclp'] = 'Постирај';
$labels['shortaclc'] = 'Креирај ';
$labels['shortaclk'] = 'Создај';
$labels['shortacld'] = 'Избриши ';
$labels['shortaclt'] = 'Избриши';
$labels['shortacle'] = 'Избриши трајно ';
$labels['shortaclx'] = 'Бришај папка ';
$labels['shortacla'] = 'Управувај ';
$labels['shortacln'] = 'Дај коментар ';
$labels['shortaclother'] = 'Друго ';
$labels['shortaclread'] = 'Читај';
$labels['shortaclwrite'] = 'Пичувај';
$labels['shortacldelete'] = 'Избриши';
$labels['longacll'] = 'Папката е видлива на листите и може да се претплати на неа ';
$labels['longaclr'] = 'Папката може да се отвори за читање ';
$labels['longacls'] = 'Знамето за прегледани пораки може да се смени ';
$labels['longaclw'] = 'Знамињата за пораки и клучните зборови може да се сменат, освен прегледани и избришани';
$labels['longacli'] = 'Пораките можат да се впишаат или ископираат во папката ';
$labels['longaclp'] = 'Пораки може да бидат објавени во оваа папка';
$labels['longaclc'] = 'Папките може да се креираат (или преименуваат) директно под оваа папка ';
$labels['longaclk'] = 'Папките може да се креираат (или преименуваат) директно под оваа папка ';
$labels['longacld'] = 'Знамето за избришани пораки може да се смени';
$labels['longaclt'] = 'Знамето за избришани пораки може да се смени';
$labels['longacle'] = 'Пораките може трајно да се избришаат ';
$labels['longaclx'] = 'Папката може да се избрише или преименува ';
$labels['longacla'] = 'Правата за пристап кон папката може да бидат променети ';
$labels['longacln'] = 'Метадата (прибелешки) на споделени пораки може да се промени ';
$labels['longaclfull'] = 'Целосна контрола вклучувајќи и администрација на папка ';
$labels['longaclread'] = 'Папката може да биде отворена за читање ';
$labels['longaclwrite'] = 'Пораките може да бидат штиклирани, запишани или копирани во папката ';
$labels['longacldelete'] = 'Пораките може да бидат избришани ';
$labels['longaclother'] = 'Други правила за пристап ';
$labels['ariasummaryacltable'] = 'Листа од правила за пристап ';
$labels['arialabelaclactions'] = 'Листа на акции ';
$labels['arialabelaclform'] = 'Форма за правила на пристап ';
$messages['deleting'] = 'Бришење на правата за пристап ';
$messages['saving'] = 'Зачувување на правата за пристап ';
$messages['updatesuccess'] = 'Успешно променети правила на пристап ';
$messages['deletesuccess'] = 'Успешно избришани правила на пристап';
$messages['createsuccess'] = 'Успешно додадени правила на пристап';
$messages['updateerror'] = 'Не може да се ажурират правата за пристап';
$messages['deleteerror'] = 'Не може да се избришаат правата за пристап';
$messages['createerror'] = 'Не може да се додадат правата за пристап';
$messages['deleteconfirm'] = 'Дали сте сигурни дека сакате да ги тргнете правата за пристап на избраниот корисник(ци)? ';
$messages['norights'] = 'Нема наведени права! ';
$messages['nouser'] = 'Нема неведено корисничко име! ';
PK|c�\zO8��acl/localization/kn_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['add'] = 'ಸೇರಿಸು';
$labels['shortaclc'] = 'ರಚಿಸು';
$labels['shortaclk'] = 'ರಚಿಸು';
PK|c�\��N
acl/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'ការ​ចែក​រំលែក';
$labels['myrights'] = 'សិទ្ធិ​ចូល';
$labels['username'] = 'អ្នក​ប្រើ៖';
$labels['advanced'] = 'បែប​កម្រិត​ខ្ពស់';
$labels['add'] = 'បន្ថែម';
$labels['newuser'] = 'បន្ថែម​ធាតុ';
$labels['actions'] = 'សកម្មភាព​សិទ្ធិ​ចូល...';
$labels['anyone'] = 'អ្នក​ប្រើ​ទាំង​អស់ (នរណា​ម្នាក់)';
$labels['anonymous'] = 'ភ្ញៀវ (អនាមិក)';
$labels['acll'] = 'ស្វែងរក';
$labels['aclr'] = 'អាន​សារ';
$labels['acli'] = 'បញ្ចូល (ចម្លង​មក​ដាក់)';
$labels['aclp'] = 'ប្រកាស';
$labels['aclc'] = 'បង្កើត​ថត​រង';
$labels['aclk'] = 'បង្កើត​ថត​រង';
$labels['acld'] = 'លុប​សារ';
$labels['aclt'] = 'លុប​សារ';
$labels['acle'] = 'ដកចេញ';
$labels['aclx'] = 'លុប​ថត';
$labels['acla'] = 'អភិបាល';
$labels['aclfull'] = 'បញ្ជា​ទាំង​អស់';
$labels['aclother'] = 'ផ្សេងៗ';
$labels['aclread'] = 'អាន';
$labels['aclwrite'] = 'សរសេរ';
$labels['acldelete'] = 'លុប';
$labels['shortacll'] = 'ស្វែងរក';
$labels['shortaclr'] = 'អាន';
$labels['shortacls'] = 'រក្សា';
$labels['shortaclw'] = 'សរសេរ';
$labels['shortacli'] = 'បញ្ចូល';
$labels['shortaclp'] = 'ប្រកាស';
$labels['shortaclc'] = 'បង្កើត';
$labels['shortaclk'] = 'បង្កើត';
$labels['shortacld'] = 'លុប';
$labels['shortaclt'] = 'លុប';
$labels['shortacle'] = 'ដកចេញ';
$labels['shortaclx'] = 'ការ​លុប​ថត';
$labels['shortacla'] = 'អភិបាល';
$labels['shortaclother'] = 'ផ្សេងៗ';
$labels['shortaclread'] = 'អាន';
$labels['shortaclwrite'] = 'សរសេរ';
$labels['shortacldelete'] = 'លុប';
$labels['longaclr'] = 'ថត​នេះ​អាច​បើក​សម្រាប់​អាន';
$labels['longacle'] = 'សារ​នេះ​អាច​ត្រូវ​បាន​ដក​ចេញ';
$labels['longaclx'] = 'ថត​នេះ អាច​ត្រូវ​បាន​លុប ឬ​ ប្ដូរ​ឈ្មោះ';
$labels['longacla'] = 'សិទ្ធិ​ចូល​ទៅ​កាន់​ថត​នេះ​អាច​ត្រូវ​បាន​​ផ្លាស់​ប្ដូរ​';
$labels['longaclread'] = 'ថត​នេះ​អាច​បើក​សម្រាប់​អាន';
$labels['longacldelete'] = 'សារ​នេះ​អាច​ត្រូវ​បាន​លុប';
$messages['deleting'] = 'កំពុង​លុប​សិទ្ធិ​ចូល...';
$messages['saving'] = 'រក្សា​ទុក​សិទ្ធិ​ចូល...';
$messages['deletesuccess'] = 'លុប​សិទ្ធិ​ចូល​ដោយ​ជោគជ័យ​';
$messages['createsuccess'] = 'បន្ថែម​សិទ្ធិ​ចូល​ដោយ​ជោគជ័យ';
$messages['updateerror'] = 'មិន​អាច​ធ្វើ​បច្ចុប្បន្នភាព​សិទ្ធិ​ចូល';
$messages['deleteerror'] = 'មិន​អាច​លុប​សិទ្ធិ​ចូល';
$messages['createerror'] = 'មិន​អាច​បន្ថែម​សិទ្ធិ​ចូល';
$messages['deleteconfirm'] = 'តើ​អ្នក​ពិត​ជា​ចង់​ដក​សិទ្ធ​ចូល​ពី​អ្នក​ប្រើប្រាស់​ដែល​បាន​រើស​មែនទេ?';
$messages['norights'] = 'មិន​បាន​បញ្ជាក់​សិទ្ធិ​ច្បាស់​លាស់!';
$messages['nouser'] = 'មិន​បាន​បញ្ជាក់​ឈ្មោះ​អ្នក​ប្រើ!';
PK|c�\Z餐�
�
acl/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Хуваалцах';
$labels['myrights'] = 'Нэвтрэлтийн зөвшөөрлүүд';
$labels['username'] = 'Хэрэглэгч:';
$labels['advanced'] = 'Дэлгэрэнгүй горим';
$labels['newuser'] = 'Нэмэх';
$labels['editperms'] = 'Зөвшөөрлүүдийг засах';
$labels['actions'] = 'Нэвтрэлтийн зөвшөөрлийн үйлдлүүд...';
$labels['anyone'] = 'Бүх хэрэглэгч (хүн бүр)';
$labels['anonymous'] = '(Үл таних) зочин';
$labels['identifier'] = 'Таних мэдээлэл';
$labels['acll'] = 'Хайх';
$labels['aclr'] = 'Зурвас унших';
$labels['acls'] = 'Харсан төлөвт хадгалах';
$labels['aclw'] = 'Тэмдэглэгээ хийх';
$labels['acli'] = 'Оруулах (хуулж)';
$labels['aclp'] = 'Бичлэг';
$labels['aclc'] = 'Дэд хавтас үүсгэх';
$labels['aclk'] = 'Дэд хавтас үүсгэх';
$labels['acld'] = 'Захиануудыг устгах';
$labels['aclt'] = 'Захиануудыг устгах';
$labels['acle'] = 'Устгах';
$labels['aclx'] = 'Хавтас устгах';
$labels['acla'] = 'Зохицуулагч';
$labels['acln'] = 'Тайлбар зурвас';
$labels['aclfull'] = 'Бүрэн удирдлага';
$labels['aclother'] = 'Бусад';
$labels['aclread'] = 'Уншсан';
$labels['aclwrite'] = 'Бичих';
$labels['acldelete'] = 'Устгах';
$labels['shortacll'] = 'Хайх';
$labels['shortaclr'] = 'Унших';
$labels['shortaclw'] = 'Бичих';
$labels['shortaclp'] = 'Бичлэг';
$labels['shortacld'] = 'Устгах';
$labels['shortaclt'] = 'Устгах';
$labels['shortacle'] = 'Устгах';
$labels['shortacla'] = 'Зохицуулагч';
$labels['shortaclother'] = 'Бусад';
$labels['shortaclread'] = 'Унших';
$labels['shortaclwrite'] = 'Бичих';
$labels['shortacldelete'] = 'Устгах';
PK|c�\�t$$acl/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'שיתוף';
$labels['myrights'] = 'זכויות גישה';
$labels['username'] = 'משתמש:';
$labels['advanced'] = 'מצב מתקדם';
$labels['add'] = 'הוספה';
$labels['newuser'] = 'הוסף ערך';
$labels['editperms'] = 'עריכת הרשאות';
$labels['actions'] = 'פעולות על זכויות גישה...';
$labels['anyone'] = 'כל המשתמשים (כל אחד)';
$labels['anonymous'] = 'אורחים (אנונימי)';
$labels['identifier'] = 'מזהה';
$labels['acll'] = 'חיפוש';
$labels['aclr'] = 'קריאת הודעות';
$labels['acls'] = 'שמירה על סטטוס נראה';
$labels['aclw'] = 'דגלי כתיבה';
$labels['acli'] = 'הוספה בין ערכים (העתקה לתוך)';
$labels['aclp'] = 'פרסום';
$labels['aclc'] = 'יצירת תת־תיקיות';
$labels['aclk'] = 'יצירת תת־תיקיות';
$labels['acld'] = 'מחיקת הודעות';
$labels['aclt'] = 'מחיקת הודעות';
$labels['acle'] = 'ניקוי רשומות שבוטלו';
$labels['aclx'] = 'מחיקת תיקיה';
$labels['acla'] = 'מנהל';
$labels['acln'] = 'הוספה של הערת תיוג להודעות';
$labels['aclfull'] = 'שליטה מלאה';
$labels['aclother'] = 'אחר';
$labels['aclread'] = 'קריאה';
$labels['aclwrite'] = 'כתיבה';
$labels['acldelete'] = 'מחיקה';
$labels['shortacll'] = 'חיפוש';
$labels['shortaclr'] = 'קריאה';
$labels['shortacls'] = 'להשאיר';
$labels['shortaclw'] = 'כתיבה';
$labels['shortacli'] = 'הוספה בין ערכים';
$labels['shortaclp'] = 'פרסום';
$labels['shortaclc'] = 'יצירה';
$labels['shortaclk'] = 'יצירה';
$labels['shortacld'] = 'מחיקה';
$labels['shortaclt'] = 'מחיקה';
$labels['shortacle'] = 'ניקוי רשומות שבוטלו';
$labels['shortaclx'] = 'מחיקת תיקיה';
$labels['shortacla'] = 'מנהל';
$labels['shortacln'] = 'הוספה של הערת תיוג';
$labels['shortaclother'] = 'אחר';
$labels['shortaclread'] = 'קריאה';
$labels['shortaclwrite'] = 'כתיבה';
$labels['shortacldelete'] = 'מחיקה';
$labels['longacll'] = 'התיקיה תראה ברשימות וניתן יהיה להרשם אליה';
$labels['longaclr'] = 'ניתן לפתוח את התיקיה ולקרוא בה';
$labels['longacls'] = 'ניתן לשנות דגל נראה בהודעות';
$labels['longaclw'] = 'ניתן לשנות דגלים ומילות מפתח בהודעות, למעט נראה ונמחק';
$labels['longacli'] = 'ניתן לכתוב הודעות לתיקיה או למוחקן';
$labels['longaclp'] = 'ניתן לפרסם הודעות לתוך תיקיה זו';
$labels['longaclc'] = 'ניתן ליצור (או לשנות שם) תיקיות, ישירות תחת תיקיה זו';
$labels['longaclk'] = 'ניתן ליצור (או לשנות שם) תיקיות, ישירות תחת תיקיה זו';
$labels['longacld'] = 'ניתן לשנות דגל נמחק של הודעות';
$labels['longaclt'] = 'ניתן לשנות דגל נמחק של הודעות';
$labels['longacle'] = 'ניתן לנקות הודעות שסומנו כמבוטלות';
$labels['longaclx'] = 'ניתן למחוק תיקיה זו או לשנות שמה';
$labels['longacla'] = 'ניתן לשנות זכויות גישה של תיקיה זו';
$labels['longacln'] = 'ניתן לשנות הערות תיוג המשותפות להודעות';
$labels['longaclfull'] = 'שליטה מלאה כולל ניהול התיקיה';
$labels['longaclread'] = 'ניתן לפתוח את התיקיה ולקרוא בה';
$labels['longaclwrite'] = 'ניתן לסמן, לכתוב או להעתיק הודעות לתיקיה זו';
$labels['longacldelete'] = 'ניתן למחוק הודעות';
$labels['longaclother'] = 'זכויות גישה אחרות';
$labels['ariasummaryacltable'] = 'רשימת זכויות גישה';
$labels['arialabelaclactions'] = 'רשימת פעולות';
$labels['arialabelaclform'] = 'טופס זכויות גישה';
$messages['deleting'] = 'זכויות גישה נמחקות...';
$messages['saving'] = 'זכויות גישה נשמרות...';
$messages['updatesuccess'] = 'זכויות גישה שונו בהצלחה';
$messages['deletesuccess'] = 'זכויות גישה נמחקו בהצלחה';
$messages['createsuccess'] = 'זכויות גישה נוספו בהצלחה';
$messages['updateerror'] = 'לא ניתן לעדכן הרשאות גישה';
$messages['deleteerror'] = 'לא ניתן למחוק זכויות גישה';
$messages['createerror'] = 'לא ניתן להוסיף זכויות גישה';
$messages['deleteconfirm'] = 'האם ודאי שברצונך להסיר זכויות גישה של המשתמש(ים) שנבחרו?';
$messages['norights'] = 'לא צוינו זכויות גישה כלשהן !';
$messages['nouser'] = 'לא צוין שם משתמש כלשהו!';
PK|c�\={���acl/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Comhroinnt';
$labels['myrights'] = 'Cearta rochtana';
$labels['username'] = 'An tÚsáideoir:';
$labels['advanced'] = 'Mód le hardroghanna';
$labels['add'] = 'Cuir leis';
$labels['newuser'] = 'Cuir iontráil leis';
$labels['editperms'] = 'Cuir na ceadanna in eagar';
$labels['actions'] = 'Gníomhartha maidir le cearta rochtana...';
$labels['anyone'] = 'Gach duine';
$labels['anonymous'] = 'Aíonna (gan ainm)';
$labels['identifier'] = 'Aitheantóir';
$labels['acll'] = 'Cuardaigh';
$labels['aclr'] = 'Léigh teachtaireachtaí';
$labels['acls'] = 'Coinnigh an staid Feicthe';
$labels['aclw'] = 'Scríobh bratacha';
$labels['acli'] = 'Ionsáigh (macasamhlaigh isteach ann)';
$labels['aclp'] = 'Foilsigh';
$labels['aclc'] = 'Cruthaigh fófhillteáin';
$labels['aclk'] = 'Cruthaigh fofhillteáin';
$labels['acld'] = 'Scrios teachtaireachtaí';
$labels['aclt'] = 'Scrios teachtaireachtaí';
$labels['acle'] = 'Scrios';
$labels['aclx'] = 'Scrios an fillteán';
$labels['acla'] = 'Riar';
$labels['acln'] = 'Cuir nótaí le teachtaireachtaí';
$labels['aclfull'] = 'Smacht iomlán';
$labels['aclother'] = 'Eile';
$labels['aclread'] = 'Léite';
$labels['aclwrite'] = ' Cum';
$labels['acldelete'] = 'Scrios';
$labels['shortacll'] = 'Féach';
$labels['shortaclr'] = 'Léite';
$labels['shortacls'] = 'Coinnigh';
$labels['shortaclw'] = 'Cum';
$labels['shortacli'] = 'Ionsáigh';
$labels['shortaclp'] = 'Foilsigh';
$labels['shortaclc'] = 'Cruthaigh';
$labels['shortaclk'] = 'Cruthaigh';
$labels['shortacld'] = 'Scrios';
$labels['shortaclt'] = 'Scrios';
$labels['shortacle'] = 'Bain den liosta';
$labels['shortaclx'] = 'Scrios an fillteán';
$labels['shortacla'] = 'Riaraigh';
$labels['shortacln'] = 'Cuir nóta leis';
$labels['shortaclother'] = 'Eile';
$labels['shortaclread'] = 'Léite';
$labels['shortaclwrite'] = 'Scríobh';
$labels['shortacldelete'] = 'Scrios';
$labels['longacll'] = 'Tá an fillteán infheicthe ar liostaí agus is féidir sintiúis leis a ghlacadh';
$labels['longaclr'] = 'Is féidir an fillteán a oscailt chun é a léam';
$labels['longacls'] = 'Is féidir bratach Teachtaireachtaí Feicthe a athrú';
$labels['longaclw'] = 'Is féidir bratacha agus treoirfhocail na dteachtaireachtaí a athrú, cé is moite de Feicthe agus Scriosta';
$labels['longacli'] = 'Is féidir teachtaireachtaí a scríobh nó a mhacasamhlú chuig an bhfillteán';
$labels['longaclp'] = 'Is féidir teachtaireachtaí a fhoilsiú chuig an bhfillteán seo';
$labels['longaclc'] = 'Is féidir fillteáin a chruthú (nó iad a athainmniú) go díreach faoin bhfillteán sin';
$labels['longaclk'] = 'Is féidir fillteáin a chruthú (nó iad a athainmniú) go díreach faoin bhfillteán sin';
$labels['longacld'] = 'Is féidir bratach Scrios Teachétaireachtaí a athrú';
$labels['longaclt'] = 'Is féidir bratach Scrios Teachétaireachtaí a athrú';
$labels['longacle'] = 'Is féidir teachtaireachtaí a bhaint de';
$labels['longaclx'] = 'Is féidir an fillteán seo a scriosadh nó é athainmniú';
$labels['longacla'] = 'Is féidir cearta rochtana an fhillteáin a athrú';
$labels['longacln'] = 'Is féidir meiteashonraí comhroinnte na dteachtaireachtaí (nótaí mínithe) a athrú';
$labels['longaclfull'] = 'Smacht iomlán lena n-áirítear riar an fhillteáin';
$labels['longaclread'] = 'Is féidir an fillteán a oscailt chun é a léamh';
$labels['longaclwrite'] = 'Is féidir teachtaireachtaí a rianú, a scríobh nó a mhacasamhlú chuig an bhfillteán';
$labels['longacldelete'] = 'Is féidir teachtaireachtaí a scriosadh';
$labels['longaclother'] = 'Cearta rochtana eile';
$labels['ariasummaryacltable'] = 'Liosta de na cearta rochtana';
$labels['arialabelaclactions'] = 'Sonraigh na gníomhartha';
$labels['arialabelaclform'] = 'Cearta rochtana ó';
$messages['deleting'] = 'Ag scriosadh cearta rochtana...';
$messages['saving'] = 'Ag taisceadh cearta rochtana...';
$messages['updatesuccess'] = 'Athraíodh go rathúil na cearta rochtana';
$messages['deletesuccess'] = 'Scriosadh go rathúil na cearta rochtana';
$messages['createsuccess'] = 'Cuireadh na cearta rochtana go rathúil leis';
$messages['updateerror'] = 'Ní féidir na cearta rochtana a nuashonrú';
$messages['deleteerror'] = 'Ní féidir na cearta rochtana a scriosadh';
$messages['createerror'] = 'Ní féidir cearta rochtana a chur leis';
$messages['deleteconfirm'] = 'An bhfuil tú cinnte gur mian leat na cearta rochtana a bhaint den úsáideoir(í) roghnaithe?';
$messages['norights'] = 'Níor sonraíodh aon chearta!';
$messages['nouser'] = 'Níor sonraíodh aon ainm úsáideora!';
PK|c�\�_�!QQacl/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Deling';
$labels['myrights'] = 'Adgangrettigheder';
$labels['username'] = 'Bruger:';
$labels['advanced'] = 'Avanceret tilstand';
$labels['add'] = 'Tilføje';
$labels['newuser'] = 'Tilføj indgang';
$labels['editperms'] = 'Rediger tilladelser';
$labels['actions'] = 'Tilgangsrettigheder...';
$labels['anyone'] = 'Alle brugere';
$labels['anonymous'] = 'Gæst (anonym)';
$labels['identifier'] = 'Identifikator';
$labels['acll'] = 'Slå op';
$labels['aclr'] = 'Læs beskeder';
$labels['acls'] = 'Behold læst-status';
$labels['aclw'] = 'Skriv flag';
$labels['acli'] = 'Indsæt (kopier ind i)';
$labels['aclp'] = 'Send';
$labels['aclc'] = 'Opret undermapper';
$labels['aclk'] = 'Opret undermapper';
$labels['acld'] = 'Slet beskeder';
$labels['aclt'] = 'Slet beskeder';
$labels['acle'] = 'Udslet';
$labels['aclx'] = 'Slet mappe';
$labels['acla'] = 'Administrer';
$labels['acln'] = 'Annoter beskeder';
$labels['aclfull'] = 'Fuld kontrol';
$labels['aclother'] = 'Andet';
$labels['aclread'] = 'Læse';
$labels['aclwrite'] = 'Skrive';
$labels['acldelete'] = 'Slet';
$labels['shortacll'] = 'Slå op';
$labels['shortaclr'] = 'Læse';
$labels['shortacls'] = 'Behold';
$labels['shortaclw'] = 'Skrive';
$labels['shortacli'] = 'Indsæt';
$labels['shortaclp'] = 'Send';
$labels['shortaclc'] = 'Opret';
$labels['shortaclk'] = 'Opret';
$labels['shortacld'] = 'Slet';
$labels['shortaclt'] = 'Slet';
$labels['shortacle'] = 'Udslet';
$labels['shortaclx'] = 'Slet mappe';
$labels['shortacla'] = 'Administrer';
$labels['shortacln'] = 'Annoter';
$labels['shortaclother'] = 'Andet';
$labels['shortaclread'] = 'Læse';
$labels['shortaclwrite'] = 'Skrive';
$labels['shortacldelete'] = 'Slet';
$labels['longacll'] = 'Mappen er synlig på listen og kan abonneres på';
$labels['longaclr'] = 'Mappen kan åbnes for læsning';
$labels['longacls'] = 'Beskeders Læst-flag kan ændres';
$labels['longaclw'] = 'Beskeders flag og nøgleord kan ændres med undtagelse af Læst og Slettet';
$labels['longacli'] = 'Beskeder kan blive skrevet eller kopieret til mappen';
$labels['longaclp'] = 'Beskeder kan sendes til denne mappe';
$labels['longaclc'] = 'Mapper kan blive oprettet (eller omdøbt) direkte under denne mappe';
$labels['longaclk'] = 'Mapper kan blive oprettet (eller omdøbt) direkte under denne mappe';
$labels['longacld'] = 'Beskeders Slet-flag kan ændres';
$labels['longaclt'] = 'Beskeders Slet-flag kan ændres';
$labels['longacle'] = 'Beskeder kan slettes';
$labels['longaclx'] = 'Mappen kan blive slettet eller omdøbt';
$labels['longacla'] = 'Mappen adgangsrettigheder kan ændres';
$labels['longacln'] = 'Meddelte delte metadata (annoteringer) kan ændres';
$labels['longaclfull'] = 'Fuld kontrol inklusiv mappeadministration';
$labels['longaclread'] = 'Mappen kan åbnes for læsning';
$labels['longaclwrite'] = 'Beskeder kan blive markeret, skrevet eller kopieret til mappen';
$labels['longacldelete'] = 'Beskeder kan slettes';
$labels['longaclother'] = 'Andre adgangsrettigheder';
$labels['ariasummaryacltable'] = 'Liste over adgangsrettigheder';
$labels['arialabelaclactions'] = 'Liste handlinger';
$labels['arialabelaclform'] = 'Adgangsret form';
$messages['deleting'] = 'Slette rettigheder...';
$messages['saving'] = 'Gemme rettigheder...';
$messages['updatesuccess'] = 'Tilgangsrettighederne blev ændret';
$messages['deletesuccess'] = 'Sletterettigheder blev ændret';
$messages['createsuccess'] = 'Tilgangsrettigheder blev tilføjet';
$messages['updateerror'] = 'Kunne ikke opdatere adgangsrettigheder';
$messages['deleteerror'] = 'Kunne ikke slette tilgangsrettigheder';
$messages['createerror'] = 'Kunne ikke tilføje tilgangsrettigheder';
$messages['deleteconfirm'] = 'Er du sikker på, at du vil slette tilgangsrettigheder fra de(n) valgte bruger(e)?';
$messages['norights'] = 'Der er ikke specificeret nogle rettigheder!';
$messages['nouser'] = 'Der er ikke angiver et brugernavn!';
PK|c�\��T���acl/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Skupna raba';
$labels['myrights'] = 'Pravice dostopa';
$labels['username'] = 'Uporabnik:';
$labels['advanced'] = 'Napredni način';
$labels['add'] = 'Dodaj';
$labels['newuser'] = 'Dodaj vnos';
$labels['editperms'] = 'Uredi pravice';
$labels['actions'] = 'Nastavitve pravic dostopa';
$labels['anyone'] = 'Vsi uporabniki';
$labels['anonymous'] = 'Gosti';
$labels['identifier'] = 'Označevalnik';
$labels['acll'] = 'Iskanje';
$labels['aclr'] = 'Prebrana sporočila';
$labels['acls'] = 'Ohrani status \'Prebrano\'';
$labels['aclw'] = 'Označi pisanje sporočila';
$labels['acli'] = 'Vstavi (Kopiraj v)';
$labels['aclp'] = 'Objava';
$labels['aclc'] = 'Ustvari podmape';
$labels['aclk'] = 'Ustvari podmape';
$labels['acld'] = 'Izbriši sporočila';
$labels['aclt'] = 'Izbriši sporočila';
$labels['acle'] = 'Izbriši';
$labels['aclx'] = 'Izbriši mapo';
$labels['acla'] = 'Uredi';
$labels['acln'] = 'Komentarji';
$labels['aclfull'] = 'Popolno upravljanje';
$labels['aclother'] = 'Ostalo';
$labels['aclread'] = 'Preberi';
$labels['aclwrite'] = 'Sestavi';
$labels['acldelete'] = 'Izbriši';
$labels['shortacll'] = 'Iskanje';
$labels['shortaclr'] = 'Preberi';
$labels['shortacls'] = 'Ohrani';
$labels['shortaclw'] = 'Sestavi';
$labels['shortacli'] = 'Vstavi';
$labels['shortaclp'] = 'Objava';
$labels['shortaclc'] = 'Ustvari';
$labels['shortaclk'] = 'Ustvari';
$labels['shortacld'] = 'Izbriši';
$labels['shortaclt'] = 'Izbriši';
$labels['shortacle'] = 'Izbriši';
$labels['shortaclx'] = 'Izbriši mapo';
$labels['shortacla'] = 'Uredi';
$labels['shortacln'] = 'Dodaj komentar';
$labels['shortaclother'] = 'Ostalo';
$labels['shortaclread'] = 'Preberi';
$labels['shortaclwrite'] = 'Sestavi';
$labels['shortacldelete'] = 'Izbriši';
$labels['longacll'] = 'Mapa je vidna na seznamih in jo lahko naročite';
$labels['longaclr'] = 'Mapa je na voljo za branje';
$labels['longacls'] = 'Oznaka \'Prebrano sporočilo\' je lahko spremenjena';
$labels['longaclw'] = 'Oznake sporočil in ključne besede je mogoče spremeniti, z izjemo oznak "Prebrano" in "Izbrisano';
$labels['longacli'] = 'Sporočilo je lahko poslano ali kopirano v mapo';
$labels['longaclp'] = 'Sporočilo je lahko poslano v to mapo';
$labels['longaclc'] = 'V tej mapi so lahko ustvarjene (ali preimenovane) podmape';
$labels['longaclk'] = 'V tej mapi so lahko ustvarjene (ali preimenovane) podmape';
$labels['longacld'] = 'Oznako sporočila  \'Izbrisano\' je mogoče spremeniti';
$labels['longaclt'] = 'Oznako sporočila  \'Izbrisano\' je mogoče spremeniti';
$labels['longacle'] = 'Sporočila so lahko izbrisana';
$labels['longaclx'] = 'Mapa je lahko izbrisana ali preimenovana';
$labels['longacla'] = 'Pravice na mapi so lahko spremenjene';
$labels['longacln'] = 'Metapodatke (komentarjev), ki so v skupni rabi, je mogoče spremeniti';
$labels['longaclfull'] = 'Popolno upravljanje, vključno z urejanjem map';
$labels['longaclread'] = 'Mapa je na voljo za branje';
$labels['longaclwrite'] = 'Sporočila je mogoče označiti, sestaviti ali kopirati v mapo';
$labels['longacldelete'] = 'Sporočila so lahko izbrisana';
$labels['longaclother'] = 'Ostale pravice dostopa';
$labels['ariasummaryacltable'] = 'Seznam pravic dostopa';
$labels['arialabelaclactions'] = 'Prikaži možnosti';
$labels['arialabelaclform'] = 'Obrazec za nastavitve pravic dostopa';
$messages['deleting'] = 'Brisanje pravic';
$messages['saving'] = 'Shranjevanje pravic';
$messages['updatesuccess'] = 'Pravice so bile uspešno spremenjene';
$messages['deletesuccess'] = 'Pravice so bile uspešno izbrisane';
$messages['createsuccess'] = 'Pravice so bile uspešno dodane';
$messages['updateerror'] = 'Pravic ni mogoče posodobiti';
$messages['deleteerror'] = 'Pravic ni mogoče izbrisati';
$messages['createerror'] = 'Pravic ni bilo mogoče dodati';
$messages['deleteconfirm'] = 'Ste prepričani, da želite odstraniti pravice dostopa za izbrane uporabnike?';
$messages['norights'] = 'Pravic niste določili';
$messages['nouser'] = 'Niste določili uporabnišlega imena';
PK|c�\�-I$$acl/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['username'] = 'المستخدم :';
$labels['advanced'] = 'الوضع المتقدم';
$labels['add'] = 'إضافة';
$labels['acld'] = 'حذف الرسائل';
$labels['aclt'] = 'حذف الرسائل';
$labels['aclx'] = 'حذف المجلد';
$labels['aclother'] = 'آخر';
$labels['acldelete'] = 'حذف';
$labels['shortaclc'] = 'أنشئ';
$labels['shortaclk'] = 'أنشئ';
$labels['shortacld'] = 'حذف';
$labels['shortaclt'] = 'حذف';
$labels['shortaclother'] = 'آخر';
$labels['shortacldelete'] = 'حذف';
PK|c�\�w�**acl/localization/si_LK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['add'] = 'එක් කරන්න';
$labels['aclother'] = 'වෙනත්';
$labels['aclread'] = 'කියවන්න';
$labels['acldelete'] = 'මකන්න';
$labels['shortaclr'] = 'කියවන්න';
$labels['shortaclc'] = 'තනන්න';
$labels['shortaclk'] = 'තනන්න';
$labels['shortacld'] = 'මකන්න';
$labels['shortaclt'] = 'මකන්න';
$labels['shortaclother'] = 'වෙනත්';
$labels['shortaclread'] = 'කියවන්න';
$labels['shortacldelete'] = 'මකන්න';
PK}c�\.1Z�ffacl/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Freigabe';
$labels['myrights'] = 'Zugriffsrechte';
$labels['username'] = 'Benutzer:';
$labels['advanced'] = 'Erweiterter Modus';
$labels['add'] = 'Hinzufügen';
$labels['newuser'] = 'Eintrag hinzufügen';
$labels['editperms'] = 'Zugriffsrechte bearbeiten';
$labels['actions'] = 'Zugriffsrechteaktionen …';
$labels['anyone'] = 'Alle Benutzer (anyone)';
$labels['anonymous'] = 'Gäste (anonymous)';
$labels['identifier'] = 'Bezeichnung';
$labels['acll'] = 'Sichtbar';
$labels['aclr'] = 'Nachrichten lesen';
$labels['acls'] = 'Lesestatus ändern';
$labels['aclw'] = 'Flags schreiben';
$labels['acli'] = 'Nachrichten hinzufügen';
$labels['aclp'] = 'Senden an';
$labels['aclc'] = 'Unterordner erstellen';
$labels['aclk'] = 'Unterordner erstellen';
$labels['acld'] = 'Nachrichten als gelöscht markieren';
$labels['aclt'] = 'Nachrichten als gelöscht markieren';
$labels['acle'] = 'Endgültig löschen';
$labels['aclx'] = 'Ordner löschen';
$labels['acla'] = 'Verwalten';
$labels['acln'] = 'Nachrichten kommentieren';
$labels['aclfull'] = 'Vollzugriff';
$labels['aclother'] = 'Andere';
$labels['aclread'] = 'Lesen';
$labels['aclwrite'] = 'Schreiben';
$labels['acldelete'] = 'Löschen';
$labels['shortacll'] = 'Sichtbar';
$labels['shortaclr'] = 'Lesen';
$labels['shortacls'] = 'Lesestatus';
$labels['shortaclw'] = 'Schreiben';
$labels['shortacli'] = 'Hinzufügen';
$labels['shortaclp'] = 'Senden an';
$labels['shortaclc'] = 'Erstellen';
$labels['shortaclk'] = 'Erstellen';
$labels['shortacld'] = 'Löschen';
$labels['shortaclt'] = 'Löschen';
$labels['shortacle'] = 'Endgültig löschen';
$labels['shortaclx'] = 'Ordner löschen';
$labels['shortacla'] = 'Verwalten';
$labels['shortacln'] = 'Kommentieren';
$labels['shortaclother'] = 'Andere';
$labels['shortaclread'] = 'Lesen';
$labels['shortaclwrite'] = 'Schreiben';
$labels['shortacldelete'] = 'Löschen';
$labels['longacll'] = 'Der Ordner ist sichtbar und kann abonniert werden';
$labels['longaclr'] = 'Der Ordnerinhalt kann gelesen werden';
$labels['longacls'] = 'Der Lesestatus von Nachrichten kann geändert werden';
$labels['longaclw'] = 'Alle Nachrichten-Flags und Schlüsselwörter außer "Gelesen" und "Gelöscht" können geändert werden';
$labels['longacli'] = 'Nachrichten können in diesen Ordner kopiert oder verschoben werden';
$labels['longaclp'] = 'Nachrichten können an diesen Ordner gesendet werden';
$labels['longaclc'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
$labels['longaclk'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden';
$labels['longacld'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
$labels['longaclt'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden';
$labels['longacle'] = 'Als "gelöscht" markiert Nachrichten können gelöscht werden.';
$labels['longaclx'] = 'Der Ordner kann gelöscht oder umbenannt werden';
$labels['longacla'] = 'Die Zugriffsrechte des Ordners können geändert werden';
$labels['longacln'] = 'Nachrichten Metadaten (Vermerke) können geändert werden';
$labels['longaclfull'] = 'Vollzugriff inklusive Ordner-Verwaltung';
$labels['longaclread'] = 'Der Ordnerinhalt kann gelesen werden';
$labels['longaclwrite'] = 'Nachrichten können markiert, an den Ordner gesendet und in den Ordner kopiert oder verschoben werden';
$labels['longacldelete'] = 'Nachrichten können gelöscht werden';
$labels['longaclother'] = 'Andere Zugriffsrechte';
$labels['ariasummaryacltable'] = 'Liste von Zugriffsrechten';
$labels['arialabelaclactions'] = 'Aktionen anzeigen';
$labels['arialabelaclform'] = 'Zugriffsrechteformular';
$messages['deleting'] = 'Zugriffsrechte werden entzogen...';
$messages['saving'] = 'Zugriffsrechte werden gewährt...';
$messages['updatesuccess'] = 'Zugriffsrechte erfolgreich geändert';
$messages['deletesuccess'] = 'Zugriffsrechte erfolgreich entzogen';
$messages['createsuccess'] = 'Zugriffsrechte erfolgreich gewährt';
$messages['updateerror'] = 'Zugriffsrechte konnten nicht geändert werden';
$messages['deleteerror'] = 'Zugriffsrechte konnten nicht entzogen werden';
$messages['createerror'] = 'Zugriffsrechte konnten nicht gewährt werden';
$messages['deleteconfirm'] = 'Sind Sie sicher, daß Sie die Zugriffsrechte den ausgewählten Benutzern entziehen möchten?';
$messages['norights'] = 'Es wurden keine Zugriffsrechte ausgewählt!';
$messages['nouser'] = 'Es wurde kein Benutzer ausgewählt!';
PK}c�\��3��acl/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Utdelning';
$labels['myrights'] = 'Åtkomsträttigheter';
$labels['username'] = 'Användare:';
$labels['advanced'] = 'Avancerat läge';
$labels['add'] = 'Lägg till';
$labels['newuser'] = 'Lägg till';
$labels['editperms'] = 'Ändra rättigheter';
$labels['actions'] = 'Hantera åtkomsträttigheter...';
$labels['anyone'] = 'Alla användare (vem som helst)';
$labels['anonymous'] = 'Gäster (anonyma)';
$labels['identifier'] = 'Identifikation';
$labels['acll'] = 'Uppslagning';
$labels['aclr'] = 'Läs meddelanden';
$labels['acls'] = 'Behåll status Läst';
$labels['aclw'] = 'Skriv flaggor';
$labels['acli'] = 'Infoga (kopiera in)';
$labels['aclp'] = 'Posta';
$labels['aclc'] = 'Skapa undermappar';
$labels['aclk'] = 'Skapa undermappar';
$labels['acld'] = 'Ta bort meddelanden';
$labels['aclt'] = 'Ta bort meddelanden';
$labels['acle'] = 'Utplåna';
$labels['aclx'] = 'Ta bort mapp';
$labels['acla'] = 'Administrera';
$labels['acln'] = 'Kommentera meddelanden';
$labels['aclfull'] = 'Full kontroll';
$labels['aclother'] = 'Övrig';
$labels['aclread'] = 'Läs';
$labels['aclwrite'] = 'Skriv';
$labels['acldelete'] = 'Ta bort';
$labels['shortacll'] = 'Uppslagning';
$labels['shortaclr'] = 'Läs';
$labels['shortacls'] = 'Behåll';
$labels['shortaclw'] = 'Skriv';
$labels['shortacli'] = 'Infoga';
$labels['shortaclp'] = 'Posta';
$labels['shortaclc'] = 'Skapa';
$labels['shortaclk'] = 'Skapa';
$labels['shortacld'] = 'Ta bort';
$labels['shortaclt'] = 'Ta bort';
$labels['shortacle'] = 'Utplåna';
$labels['shortaclx'] = 'Ta bort mapp';
$labels['shortacla'] = 'Administrera';
$labels['shortacln'] = 'Kommentera';
$labels['shortaclother'] = 'Övrig';
$labels['shortaclread'] = 'Läs';
$labels['shortaclwrite'] = 'Skriv';
$labels['shortacldelete'] = 'Ta bort';
$labels['longacll'] = 'Mappen är synlig i listor och den kan prenumereras på';
$labels['longaclr'] = 'Mappen kan öppnas för läsning';
$labels['longacls'] = 'Meddelandeflagga Läst kan ändras';
$labels['longaclw'] = 'Meddelandeflaggor och nyckelord kan ändras, undantaget Läst och Borttagen';
$labels['longacli'] = 'Meddelanden kan skrivas eller kopieras till mappen';
$labels['longaclp'] = 'Meddelanden kan postas till denna mapp';
$labels['longaclc'] = 'Mappar kan skapas (eller ges annat namn) direkt i denna mapp';
$labels['longaclk'] = 'Mappar kan skapas (eller ges annat namn) direkt i denna mapp';
$labels['longacld'] = 'Meddelandeflagga Borttaget kan ändras';
$labels['longaclt'] = 'Meddelandeflagga Borttaget kan ändras';
$labels['longacle'] = 'Meddelanden kan utplånas';
$labels['longaclx'] = 'Mappen kan tas bort eller ges annat namn';
$labels['longacla'] = 'Mappens åtkomsträttigheter kan ändras';
$labels['longacln'] = 'Delad information om meddelanden (kommentarer) kan ändras';
$labels['longaclfull'] = 'Full kontroll inklusive mappadministration';
$labels['longaclread'] = 'Mappen kan öppnas för läsning';
$labels['longaclwrite'] = 'Meddelanden kan markeras, skrivas eller kopieras till mappen';
$labels['longacldelete'] = 'Meddelanden kan tas bort';
$labels['longaclother'] = 'Övriga åtkomsträttigheter';
$labels['ariasummaryacltable'] = 'Lista med åtkomsträttigheter';
$labels['arialabelaclactions'] = 'Hantera listor';
$labels['arialabelaclform'] = 'Formulär för åtkomsträttigheter';
$messages['deleting'] = 'Tar bort åtkomsträttigheter...';
$messages['saving'] = 'Sparar åtkomsträttigheter...';
$messages['updatesuccess'] = 'Åtkomsträttigheterna är ändrade';
$messages['deletesuccess'] = 'Åtkomsträttigheterna är borttagna';
$messages['createsuccess'] = 'Åtkomsträttigheterna är tillagda';
$messages['updateerror'] = 'Åtkomsträttigheterna kunde inte ändras';
$messages['deleteerror'] = 'Åtkomsträttigheterna kunde inte tas bort';
$messages['createerror'] = 'Åtkomsträttigheterna kunde inte läggas till';
$messages['deleteconfirm'] = 'Vill du verkligen ta bort åtkomsträttigheterna för markerade användare?';
$messages['norights'] = 'Inga åtkomsträttigheter angavs!';
$messages['nouser'] = 'Inget användarnamn angavs!';
PK}c�\yw�qBBacl/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'ھەمبەھىرلەش';
$labels['myrights'] = 'ئىشلىتىش ھوقوقلىرى';
$labels['username'] = 'ئىشلەتكۈچى:';
$labels['advanced'] = 'ئالىي ھالەت';
$labels['add'] = 'قۇشۇش';
$labels['newuser'] = 'قۇر قېتىش';
$labels['editperms'] = 'ئىجازەتلەرنى تەھرىرلەش';
$labels['actions'] = 'كىرىش ھوقوقى ھەركەتلىرى';
$labels['anyone'] = 'ھەممە ئىشلەتكۈچىلەر (ھەرقانداق ئادەم)';
$labels['anonymous'] = 'مىھمان (نامسىز)';
$labels['identifier'] = 'بېكىتكۈچ';
$labels['acll'] = 'قاراش';
$labels['aclr'] = 'خەتلەرنى ئۇقۇش';
$labels['acls'] = 'ئۇقۇغان ھالىتىنى ساقلاش';
$labels['aclw'] = 'بايراقلىرى قىستۇرۇش';
$labels['acli'] = 'كىرگۈزۈش (كۆچۈرۈلگەن)';
$labels['aclp'] = 'ئېلان قىلىش';
$labels['aclc'] = 'بالا-قىسقۇچ قۇرۇش';
$labels['aclk'] = 'بالا-قىسقۇچ قۇرۇش';
$labels['acld'] = 'خەتلەرنى ئۆچۈرۈش';
$labels['aclt'] = 'خەتلەرنى ئۆچۈرۈش';
$labels['acle'] = 'ئۆچۈرۈش';
$labels['aclx'] = 'قىسقۇچنى ئۆچۈرۈش';
$labels['acla'] = 'باشقۇرغۇچى';
$labels['acln'] = 'خەتلەرنى ئىزاھلاش';
$labels['aclfull'] = 'تۇلۇق ھوقوق';
$labels['aclother'] = 'باشقا';
$labels['aclread'] = 'ئۇقۇش';
$labels['aclwrite'] = 'يېزىش';
$labels['acldelete'] = 'ئۆچۈرۈش';
$labels['shortacll'] = 'قاراش';
$labels['shortaclr'] = 'ئۇقۇش';
$labels['shortacls'] = 'ساقلاش';
$labels['shortaclw'] = 'يېزىش';
$labels['shortacli'] = 'كىرگۈزۈش';
$labels['shortaclp'] = 'ئېلان قىلىش';
$labels['shortaclc'] = 'قۇرۇش';
$labels['shortaclk'] = 'قۇرۇش';
$labels['shortacld'] = 'ئۆچۈرۈش';
$labels['shortaclt'] = 'ئۆچۈرۈش';
$labels['shortacle'] = 'ئۆچۈرۈش';
$labels['shortaclx'] = 'قىسقۇچ ئۆچۈرۈش';
$labels['shortacla'] = 'باشقۇرغۇچى';
$labels['shortacln'] = 'ئىزاھلاش';
$labels['shortaclother'] = 'باشقا';
$labels['shortaclread'] = 'ئۇقۇش';
$labels['shortaclwrite'] = 'يېزىش';
$labels['shortacldelete'] = 'ئۆچۈرۈش';
$labels['longacll'] = 'بۇ قىسقۇچ تىزىملىكلەردە كۆرۈنىدۇ ھەمدە مۇشتەرى بولغىلى بۇلىدۇ';
$labels['longaclr'] = 'بۇ قىسقۇچنى ئۇقۇش ئۈچۈن ئاچقىلى بۇلىدۇ';
$labels['longacls'] = 'خەت ئۇقۇغانلىق بايرىقىنى ئۆزگەرتكىلى بۇلىدۇ';
$labels['longaclw'] = 'خەت بايراقلىرى ھەمدە ئاچقۇچلۇق سۆزلەرنى ئۆزگەرتكىلى بۇلىدۇ، كۆرگەن ۋە ئۆچۈرگەندىن باشقىسىنى';
$labels['longacli'] = 'خەتلەرنى يازغىلى ياكى قىسقۇچقا كۆچۈرگىلى بۇلىدۇ';
$labels['longaclp'] = 'خەتلەرنى بۇ قىسقۇچقا ئېلان قىلغىلى بۇلىدۇ';
$labels['longaclc'] = 'قىسقۇچلارنى بۇ قىسقۇچنىڭ ئىچىگە قۇرغىلى (ياكى يېڭى ئىسىم قويغىلى) بۇلىدۇ ';
$labels['longaclk'] = 'قىسقۇچلارنى بۇ قىسقۇچنىڭ ئىچىگە قۇرغىلى (ياكى يېڭى ئىسىم قويغىلى) بۇلىدۇ ';
$labels['longacld'] = 'ئۇچۇر ئۆچۈرگەنلىك بايرىقىنى ئۆزگەرتكىلى بۇلىدۇ';
$labels['longaclt'] = 'خەتنى ئۆچۈرگەنلىك بايرىقىنى ئۆزگەرتكىلى بۇلىدۇ';
$labels['longacle'] = 'خەتنى ئۆچۈرگىلى بۇلىدۇ';
$labels['longaclx'] = 'قىسقۇچنى ئۆچۈرگىلى ياكى يېڭى ئىسىم قويغىلى بۇلىدۇ';
$labels['longacla'] = 'قىسقۇچقا كىرىش ھوقوقىنى ئۆزگەرتكىلى بۇلىدۇ';
$labels['longacln'] = 'خەت ھەمبەھىرلىگەن ئىزاھ ئۇچۇرىنى (ئىزھاتلار) ئۆزگەرتىشكە بۇلىدۇ';
$labels['longaclfull'] = 'قىسقۇچنى باشقۇرۇشنى ئۆز-ئىچىگە ئالغان تۇلۇق ھوقوق';
$labels['longaclread'] = 'بۇ قىسقۇچنى ئۇقۇش ئۈچۈن ئاچقىلى بۇلىدۇ';
$labels['longaclwrite'] = 'خەتنى يازغىلى ياكى بۇ قىسقۇچقا كۆچۈرگىلى ياكى بەلگە قويغىلى بۇلىدۇ';
$labels['longacldelete'] = 'خەتنى ئۆچۈرگىلى بۇلىدۇ';
$labels['longaclother'] = 'باشقا كىرىش ھوقوقلىرى';
$labels['ariasummaryacltable'] = 'كىرىش ھوقوقلىرى تىزىملىكى';
$labels['arialabelaclactions'] = 'ھەركەتلەرنى تىزىش';
$labels['arialabelaclform'] = 'كىرىش ھوقوقلىرى جەدىۋېلى';
$messages['deleting'] = 'كىرىش ھوقوقلىرىنى ئۆچۈرۋاتىدۇ...';
$messages['saving'] = 'كىرىش ھوقوقلىرىنى ساقلاۋاتىدۇ...';
$messages['updatesuccess'] = 'كىرىش ھوقوقلىرىنى ئۆزگەرتىش مۇۋاپىقىيەتلىك بولدى';
$messages['deletesuccess'] = 'كىرىش ھوقوقلىرىنى ئۆچۈرۈش مۇۋاپىقىيەتلىك بولدى';
$messages['createsuccess'] = 'كىرىش ھوقوقلىرىنى قېتىش مۇۋاپىقىيەتلىك بولدى';
$messages['updateerror'] = 'كىرىش ھوقوقلىرىنى يېڭىلاشقا بولمىدى';
$messages['deleteerror'] = 'كىرىش ھوقوقلىرىنى ئۆچۈرۈشكە بولمىدى';
$messages['createerror'] = 'كىرىش ھوقوقلىرىنى قېتىشقا بولمىدى';
$messages['deleteconfirm'] = 'تاللانغان ئىشلەتكۈچى(لەر)نىڭ كىرىش ھوقوقلىرىنى ئۆچۈرۈشنى جەزىملەشتۈرەمسىز؟';
$messages['norights'] = 'ھېچقانداق ھوقوق كۆرسىتىلمىدى!';
$messages['nouser'] = 'ھېچقانداق ئىشلەتكۈچى ئىسمى تېپىلمىدى!';
PK}c�\��KO��acl/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = '공유';
$labels['myrights'] = '접근 권한';
$labels['username'] = '사용자:';
$labels['advanced'] = '고급 모드';
$labels['add'] = '추가';
$labels['newuser'] = '입력내용 추가';
$labels['editperms'] = '권한 수정';
$labels['actions'] = '접근 권한 동작...';
$labels['anyone'] = '모든 사용자 (아무나)';
$labels['anonymous'] = '방문자 (익명)';
$labels['identifier'] = '식별자';
$labels['acll'] = '조회';
$labels['aclr'] = '읽은 메시지';
$labels['acls'] = '읽은 상태 유지';
$labels['aclw'] = '쓰기 깃발';
$labels['acli'] = '삽입 (복사할 위치)';
$labels['aclp'] = '게시';
$labels['aclc'] = '하위 폴더 생성';
$labels['aclk'] = '하위 폴더 생성';
$labels['acld'] = '메시지 삭제';
$labels['aclt'] = '메시지 삭제';
$labels['acle'] = '영구 제거';
$labels['aclx'] = '폴더 삭제';
$labels['acla'] = '관리';
$labels['acln'] = '메시지에 주석 추가';
$labels['aclfull'] = '전체 제어 권한';
$labels['aclother'] = '기타';
$labels['aclread'] = '읽음';
$labels['aclwrite'] = '쓰기';
$labels['acldelete'] = '삭제';
$labels['shortacll'] = '조회';
$labels['shortaclr'] = '읽음';
$labels['shortacls'] = '보관';
$labels['shortaclw'] = '쓰기';
$labels['shortacli'] = '삽입';
$labels['shortaclp'] = '게시';
$labels['shortaclc'] = '생성';
$labels['shortaclk'] = '생성';
$labels['shortacld'] = '삭제';
$labels['shortaclt'] = '삭제';
$labels['shortacle'] = '지움';
$labels['shortaclx'] = '폴더 삭제';
$labels['shortacla'] = '관리';
$labels['shortacln'] = '주석 추가';
$labels['shortaclother'] = '기타';
$labels['shortaclread'] = '읽기';
$labels['shortaclwrite'] = '쓱';
$labels['shortacldelete'] = '삭제';
$labels['longacll'] = '폴더가 목록에 나타나고 다음 사용자가 구독할 수 있음:';
$labels['longaclr'] = '읽기 위해 폴더를 열 수 있음';
$labels['longacls'] = '읽은 메시지 깃발이 변경될 수 있음';
$labels['longaclw'] = '메시지 깃발 및 키워드를 변경할 수 있음, 다만 읽음 및 삭제됨은 제외됨';
$labels['longacli'] = '메시지를 폴더에 복사하거나 작성할 수 있음';
$labels['longaclp'] = '메시지가 이 폴더에 게시될 수 있음';
$labels['longaclc'] = '이 폴더의 바로 아래에 폴더를 생성(또는 이름 변경)할 수 있음';
$labels['longaclk'] = '이 폴더의 바로 아래에 폴더를 생성(또는 이름 변경)할 수 있음';
$labels['longacld'] = '메시지 삭제 깃발이 변경될 수 있음';
$labels['longaclt'] = '메시지 삭제 깃발이 변경될 수 있음';
$labels['longacle'] = '메시지가 영구 제거될 수 있음';
$labels['longaclx'] = '폴더를 삭제하거나 이름을 변경 할 수 있음';
$labels['longacla'] = '폴더의 접근 권한을 변경할 수 있음';
$labels['longacln'] = '공유된 메타데이터(주석)은 변경될 수 있습니다';
$labels['longaclfull'] = '폴더 관리를 포함한 전체 제어 권한';
$labels['longaclread'] = '폴더를 열어 읽을 수 있음';
$labels['longaclwrite'] = '메시지를 표시하거나, 폴더로 이동 또는 복사할 수 있음';
$labels['longacldelete'] = '메시지를 삭제할 수 있음';
$labels['longaclother'] = '기타 접근 권한';
$labels['ariasummaryacltable'] = '접근 권한 목록';
$labels['arialabelaclactions'] = '목록 동작';
$labels['arialabelaclform'] = '접근 권한 양식';
$messages['deleting'] = '접근 권한을 삭제하는 중...';
$messages['saving'] = '접근 권한을 저장하는 중...';
$messages['updatesuccess'] = '접근 권한을 성공적으로 변경함';
$messages['deletesuccess'] = '접근 권한을 성공적으로 삭제함.';
$messages['createsuccess'] = '접근 권한을 성공적으로 추가함.';
$messages['updateerror'] = '접근 권한을 업데이트 할 수 없음';
$messages['deleteerror'] = '접근 권한을 삭제할 수 없음';
$messages['createerror'] = '접근 권한을 추가할 수 없음';
$messages['deleteconfirm'] = '정말로 선택한 사용자의 접근 권한을 삭제하시겠습니까?';
$messages['norights'] = '지정된 권한이 없음!';
$messages['nouser'] = '지정된 사용자명이 없음!';
PK}c�\KX,���acl/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Compartindo';
$labels['myrights'] = 'Permisos de acceso';
$labels['username'] = 'Utente:';
$labels['advanced'] = 'Modo avanzado';
$labels['add'] = 'Engadir';
$labels['newuser'] = 'Engadir entrada';
$labels['editperms'] = 'Editar permisos';
$labels['actions'] = 'Accións sobre os Permisos de acceso...';
$labels['anyone'] = 'Todas as persoas usuarias (calquera)';
$labels['anonymous'] = 'Persoas convidadas (anónimo)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Bloquear';
$labels['aclr'] = 'Ler mensaxes';
$labels['acls'] = 'Manter estado actividade';
$labels['aclw'] = 'Marcas de lectura';
$labels['acli'] = 'Engadir (Copiar en)';
$labels['aclp'] = 'Envío';
$labels['aclc'] = 'Crear subcartafoles';
$labels['aclk'] = 'Crear subcartafoles';
$labels['acld'] = 'Borrar mensaxes';
$labels['aclt'] = 'Borrar mensaxes';
$labels['acle'] = 'Expurga';
$labels['aclx'] = 'Eliminar cartafol';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Crear anotacións para as mensaxes';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Outros';
$labels['aclread'] = 'Lectura';
$labels['aclwrite'] = 'Escritura';
$labels['acldelete'] = 'Borrado';
$labels['shortacll'] = 'Buscar';
$labels['shortaclr'] = 'Ler';
$labels['shortacls'] = 'Manter';
$labels['shortaclw'] = 'Escribir';
$labels['shortacli'] = 'Inserir';
$labels['shortaclp'] = 'Publicar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Eliminar';
$labels['shortaclt'] = 'Eliminar';
$labels['shortacle'] = 'Expurga';
$labels['shortaclx'] = 'Eliminar cartafol';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Crear anotación';
$labels['shortaclother'] = 'Outros';
$labels['shortaclread'] = 'Lectura';
$labels['shortaclwrite'] = 'Escritura';
$labels['shortacldelete'] = 'Eliminar';
$labels['longacll'] = 'O cartafol é visíbel e pode ser subscrito';
$labels['longaclr'] = 'Pódese abrir o cartafol para lectura';
$labels['longacls'] = 'Pódese mudar o marcador de Mensaxes Enviadas';
$labels['longaclw'] = 'Pódense mudar marcadores e palabras chave agás Vistas e Borradas';
$labels['longacli'] = 'Pódense escreber ou copiar as mensaxes a este cartafol';
$labels['longaclp'] = 'Pódense enviar as mensaxes a este cartafol';
$labels['longaclc'] = 'Pódense crear (ou renomear) os cartafoles directamente baixo deste cartafol';
$labels['longaclk'] = 'Pódense crear (ou renomear) os cartafoles directamente baixo deste cartafol';
$labels['longacld'] = 'Pódense mudar as mensaxes coa marca Eliminar';
$labels['longaclt'] = 'Pódense mudar as mensaxes coa marca Eliminar';
$labels['longacle'] = 'As mensaxes poden ser expurgadas';
$labels['longaclx'] = 'Pódese borrar ou renomear o cartafol';
$labels['longacla'] = 'Pódense mudar os permisos de acceso ao cartafol';
$labels['longacln'] = 'Pódense trocar as anotacións das mensaxes';
$labels['longaclfull'] = 'Control total inclúe administración de cartafoles';
$labels['longaclread'] = 'Pódese abrir o cartafol para lectura';
$labels['longaclwrite'] = 'Pódense marcar, escribir ou copiar as mensaxes no cartafol';
$labels['longacldelete'] = 'Pódense borrar as mensaxes';
$labels['longaclother'] = 'Outros dereitos de acceso';
$labels['ariasummaryacltable'] = 'Lista de dereitos de acceso';
$labels['arialabelaclactions'] = 'Accións de lista';
$labels['arialabelaclform'] = 'Formulario de dereitos de acceso';
$messages['deleting'] = 'Borrando permisos de acceso...';
$messages['saving'] = 'Gardando permisos de acceso...';
$messages['updatesuccess'] = 'Mudados con éxito os permisos de acceso';
$messages['deletesuccess'] = 'Borrados con éxito os permisos de acceso';
$messages['createsuccess'] = 'Engadidos con éxito os permisos de acceso';
$messages['updateerror'] = 'Non se poden actualizar os permisos de acceso';
$messages['deleteerror'] = 'Non se poden borrar os permisos de acceso';
$messages['createerror'] = 'Non se poden engadir permisos de acceso';
$messages['deleteconfirm'] = 'De certo que queres eliminar os permisos de acceso da(s) persoa(s) usuaria(s) escollida(s)?';
$messages['norights'] = 'Non se especificaron permisos!';
$messages['nouser'] = 'Non se especificou o nome da persoa usuaria!';
PK}c�\�x=���acl/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Condivisione';
$labels['myrights'] = 'Diritti d\'accesso';
$labels['username'] = 'Utente:';
$labels['advanced'] = 'Modalità avanzata';
$labels['add'] = 'Aggiungi';
$labels['newuser'] = 'Aggiungi voce';
$labels['editperms'] = 'Modifica permessi';
$labels['actions'] = 'Azioni permessi d\'accesso...';
$labels['anyone'] = 'Tutti gli utenti';
$labels['anonymous'] = 'Osptiti (anonimi)';
$labels['identifier'] = 'Identificatore';
$labels['acll'] = 'Ricerca';
$labels['aclr'] = 'Leggi messaggi';
$labels['acls'] = 'Mantieni lo stato Visto';
$labels['aclw'] = 'Flag di scrittura';
$labels['acli'] = 'Inserisci (Copia in)';
$labels['aclp'] = 'Invio';
$labels['aclc'] = 'Crea sottocartelle';
$labels['aclk'] = 'Crea sottocartelle';
$labels['acld'] = 'Elimina messaggi';
$labels['aclt'] = 'Elimina messaggi';
$labels['acle'] = 'Elimina';
$labels['aclx'] = 'Elimina cartella';
$labels['acla'] = 'Amministra';
$labels['acln'] = 'Annota messaggi';
$labels['aclfull'] = 'Controllo completo';
$labels['aclother'] = 'Altro';
$labels['aclread'] = 'Lettura';
$labels['aclwrite'] = 'Scrittura';
$labels['acldelete'] = 'Elimina';
$labels['shortacll'] = 'Ricerca';
$labels['shortaclr'] = 'Lettura';
$labels['shortacls'] = 'Mantieni';
$labels['shortaclw'] = 'Scrivi';
$labels['shortacli'] = 'Inserisci';
$labels['shortaclp'] = 'Invio';
$labels['shortaclc'] = 'Crea';
$labels['shortaclk'] = 'Crea';
$labels['shortacld'] = 'Elimina';
$labels['shortaclt'] = 'Elimina';
$labels['shortacle'] = 'Elimina';
$labels['shortaclx'] = 'Elimina cartella';
$labels['shortacla'] = 'Amministra';
$labels['shortacln'] = 'Annota';
$labels['shortaclother'] = 'Altro';
$labels['shortaclread'] = 'Lettura';
$labels['shortaclwrite'] = 'Scrittura';
$labels['shortacldelete'] = 'Elimina';
$labels['longacll'] = 'La cartella è visibile sulle liste e può essere sottoscritta';
$labels['longaclr'] = 'Questa cartella può essere aperta in lettura';
$labels['longacls'] = 'Il flag Messaggio Visto può essere cambiato';
$labels['longaclw'] = 'I flag dei messaggi e le keywords possono essere cambiati, ad esclusione di Visto ed Eliminato';
$labels['longacli'] = 'I messaggi possono essere scritti o copiati nella cartella';
$labels['longaclp'] = 'I messaggi possono essere inviati a questa cartella';
$labels['longaclc'] = 'Possono essere create (o rinominata) cartelle direttamente in questa cartella.';
$labels['longaclk'] = 'Possono essere create (o rinominata) cartelle direttamente in questa cartella.';
$labels['longacld'] = 'Il flag Messaggio Eliminato può essere cambiato';
$labels['longaclt'] = 'Il flag Messaggio Eliminato può essere cambiato';
$labels['longacle'] = 'I messaggi possono essere cancellati';
$labels['longaclx'] = 'La cartella può essere eliminata o rinominata';
$labels['longacla'] = 'I diritti di accesso della cartella possono essere cambiati';
$labels['longacln'] = 'I metadati (annotazioni) dei messaggi condivisi possono essere modificati';
$labels['longaclfull'] = 'Controllo completo incluso cartella di amministrazione';
$labels['longaclread'] = 'Questa cartella può essere aperta in lettura';
$labels['longaclwrite'] = 'I messaggi possono essere marcati, scritti o copiati nella cartella';
$labels['longacldelete'] = 'I messaggi possono essere eliminati';
$labels['longaclother'] = 'Altri diritti di accesso';
$labels['ariasummaryacltable'] = 'Elenco dei diritti di accesso';
$labels['arialabelaclactions'] = 'Lista azioni';
$labels['arialabelaclform'] = 'Modulo di accesso';
$messages['deleting'] = 'Sto eliminando i diritti di accesso...';
$messages['saving'] = 'Sto salvando i diritti di accesso...';
$messages['updatesuccess'] = 'I diritti d\'accesso sono stati cambiati';
$messages['deletesuccess'] = 'I diritti d\'accesso sono stati eliminati';
$messages['createsuccess'] = 'I diritti d\'accesso sono stati aggiunti';
$messages['updateerror'] = 'Impossibile aggiornare i diritti d\'accesso';
$messages['deleteerror'] = 'Impossibile eliminare i diritti d\'accesso';
$messages['createerror'] = 'Impossibile aggiungere i diritti d\'accesso';
$messages['deleteconfirm'] = 'Sei sicuro di voler rimuovere i diritti d\'accesso degli utenti selezionati?';
$messages['norights'] = 'Nessun diritto specificato!';
$messages['nouser'] = 'Lo username non è stato specificato!';
PK}c�\=�?���acl/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Compartir';
$labels['myrights'] = 'Permisos de acceso';
$labels['username'] = 'Usuario:';
$labels['advanced'] = 'Modo avanzado';
$labels['add'] = 'Añadir';
$labels['newuser'] = 'Añadir una entrada';
$labels['editperms'] = 'Editar permisos';
$labels['actions'] = 'Acciones sobre los permisos de acceso…';
$labels['anyone'] = 'Todos los usuarios (cualquiera)';
$labels['anonymous'] = 'Invitados (anónimo)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Búsqueda';
$labels['aclr'] = 'Leer mensajes';
$labels['acls'] = 'Mantener como "Leído';
$labels['aclw'] = 'Escribir etiquetas';
$labels['acli'] = 'Insertar (Copiar dentro)';
$labels['aclp'] = 'Enviar';
$labels['aclc'] = 'Crear subcarpetas';
$labels['aclk'] = 'Crear subcarpetas';
$labels['acld'] = 'Borrar mensajes';
$labels['aclt'] = 'Borrar mensajes';
$labels['acle'] = 'Expurgar';
$labels['aclx'] = 'Borrar carpeta';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Anotar mensajes';
$labels['aclfull'] = 'Control total';
$labels['aclother'] = 'Otro';
$labels['aclread'] = 'Leer';
$labels['aclwrite'] = 'Escribir';
$labels['acldelete'] = 'Borrar';
$labels['shortacll'] = 'Búsqueda';
$labels['shortaclr'] = 'Leer';
$labels['shortacls'] = 'Conservar';
$labels['shortaclw'] = 'Escribir';
$labels['shortacli'] = 'Insertar';
$labels['shortaclp'] = 'Enviar';
$labels['shortaclc'] = 'Crear';
$labels['shortaclk'] = 'Crear';
$labels['shortacld'] = 'Borrar';
$labels['shortaclt'] = 'Borrar';
$labels['shortacle'] = 'Expurgar';
$labels['shortaclx'] = 'Borrar carpeta';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Anotar';
$labels['shortaclother'] = 'Otro';
$labels['shortaclread'] = 'Leer';
$labels['shortaclwrite'] = 'Escribir';
$labels['shortacldelete'] = 'Borrar';
$labels['longacll'] = 'La carpeta es visible en las listas y es posible suscribirse a ella';
$labels['longaclr'] = 'Se puede abrir la carpeta para leer';
$labels['longacls'] = 'Se pueden cambiar los mensajes con la etiqueta "Leído';
$labels['longaclw'] = 'Las etiquetas de mensaje y las palabras clave se pueden cambiar, excepto "Leído" y "Borrado';
$labels['longacli'] = 'Se pueden escribir mensajes o copiarlos a la carpeta';
$labels['longaclp'] = 'Se pueden enviar mensajes a esta carpeta';
$labels['longaclc'] = 'Se pueden crear (o renombrar) carpetas directamente bajo esta carpeta';
$labels['longaclk'] = 'Se pueden crear (o renombrar) carpetas directamente bajo esta carpeta';
$labels['longacld'] = 'No se pueden cambiar los mensajes etiquetados como "Borrado';
$labels['longaclt'] = 'No se pueden cambiar los mensajes etiquetados como "Borrado';
$labels['longacle'] = 'No se pueden expurgar los mensajes';
$labels['longaclx'] = 'La carpeta se puede borrar o renombrar';
$labels['longacla'] = 'Se pueden cambiar los permisos de acceso';
$labels['longacln'] = 'Los metadatos compartidos de los mensajes (anotaciones) pueden cambiarse';
$labels['longaclfull'] = 'Control total, incluyendo la gestión de carpetas';
$labels['longaclread'] = 'Se puede abrir la carpeta para leer';
$labels['longaclwrite'] = 'Se pueden etiquetar, escribir o copiar mensajes a la carpeta';
$labels['longacldelete'] = 'Los mensajes se pueden borrar';
$labels['longaclother'] = 'Otros derechos de acceso';
$labels['ariasummaryacltable'] = 'Lista de derechos de acceso';
$labels['arialabelaclactions'] = 'Lista de acciones';
$labels['arialabelaclform'] = 'Formulario de derechos de acceso';
$messages['deleting'] = 'Borrando permisos de acceso…';
$messages['saving'] = 'Guardando permisos de acceso…';
$messages['updatesuccess'] = 'Se han cambiado los permisos de acceso';
$messages['deletesuccess'] = 'Se han borrado los permisos de acceso';
$messages['createsuccess'] = 'Se han añadido los permisos de acceso';
$messages['updateerror'] = 'No ha sido posible actualizar los derechos de acceso';
$messages['deleteerror'] = 'No se han podido borrar los permisos de acceso';
$messages['createerror'] = 'No se han podido añadir los permisos de acceso';
$messages['deleteconfirm'] = '¿Seguro que quiere borrar los permisos de acceso del usuairo seleccionado?';
$messages['norights'] = 'No se han especificado los permisos de acceso';
$messages['nouser'] = 'No se ha especificado un nombre de usuario';
PK}c�\M+Qccacl/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['add'] = 'ചേര്‍ക്കു';
$labels['aclother'] = 'മറ്റുള്ളത്';
$labels['aclread'] = 'വായിച്ചവ';
$labels['acldelete'] = 'നീക്കം ചെയ്യുക';
$labels['shortaclr'] = 'വായിച്ചവ';
$labels['shortacld'] = 'നീക്കം ചെയ്യുക';
$labels['shortaclt'] = 'നീക്കം ചെയ്യുക';
$labels['shortaclother'] = 'മറ്റുള്ളത്';
$labels['shortaclread'] = 'വായിച്ചവ';
$labels['shortacldelete'] = 'നീക്കം ചെയ്യുക';
PK}c�\p�&�acl/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Delen';
$labels['myrights'] = 'Toegangsrechten';
$labels['username'] = 'Gebruiker:';
$labels['advanced'] = 'Geavanceerde modus';
$labels['add'] = 'Toevoegen';
$labels['newuser'] = 'Item toevoegen';
$labels['editperms'] = 'Rechten bewerken';
$labels['actions'] = 'Toegangsrechtenopties...';
$labels['anyone'] = 'Alle gebruikers (iedereen)';
$labels['anonymous'] = 'Gasten (anoniem)';
$labels['identifier'] = 'Identificatie';
$labels['acll'] = 'Opzoeken';
$labels['aclr'] = 'Berichten lezen';
$labels['acls'] = 'Onthoud gelezen-status';
$labels['aclw'] = 'Markeringen instellen';
$labels['acli'] = 'Invoegen (kopiëren naar)';
$labels['aclp'] = 'Plaatsen';
$labels['aclc'] = 'Submappen aanmaken';
$labels['aclk'] = 'Submappen aanmaken';
$labels['acld'] = 'Berichten verwijderen';
$labels['aclt'] = 'Berichten verwijderen';
$labels['acle'] = 'Vernietigen';
$labels['aclx'] = 'Map verwijderen';
$labels['acla'] = 'Beheren';
$labels['acln'] = 'Annoteer berichten';
$labels['aclfull'] = 'Volledige toegang';
$labels['aclother'] = 'Overig';
$labels['aclread'] = 'Lezen';
$labels['aclwrite'] = 'Schrijven';
$labels['acldelete'] = 'Verwijderen';
$labels['shortacll'] = 'Opzoeken';
$labels['shortaclr'] = 'Lezen';
$labels['shortacls'] = 'Behouden';
$labels['shortaclw'] = 'Schrijven';
$labels['shortacli'] = 'Invoegen';
$labels['shortaclp'] = 'Plaatsen';
$labels['shortaclc'] = 'Aanmaken';
$labels['shortaclk'] = 'Aanmaken';
$labels['shortacld'] = 'Verwijderen';
$labels['shortaclt'] = 'Verwijderen';
$labels['shortacle'] = 'Vernietigen';
$labels['shortaclx'] = 'Map verwijderen';
$labels['shortacla'] = 'Beheren';
$labels['shortacln'] = 'Annoteren';
$labels['shortaclother'] = 'Overig';
$labels['shortaclread'] = 'Lezen';
$labels['shortaclwrite'] = 'Schrijven';
$labels['shortacldelete'] = 'Verwijderen';
$labels['longacll'] = 'De map is zichtbaar in lijsten en het is mogelijk om te abonneren op deze map';
$labels['longaclr'] = 'De map kan geopend worden om te lezen';
$labels['longacls'] = 'De berichtmarkering \'Gelezen\' kan aangepast worden';
$labels['longaclw'] = 'Berichtmarkeringen en labels kunnen aangepast worden, behalve \'Gelezen\' en \'Verwijderd\'';
$labels['longacli'] = 'Berichten kunnen opgesteld worden of gekopieerd worden naar deze map';
$labels['longaclp'] = 'Berichten kunnen geplaatst worden in deze map';
$labels['longaclc'] = 'Mappen kunnen aangemaakt of hernoemd worden rechtstreeks onder deze map';
$labels['longaclk'] = 'Mappen kunnen aangemaakt of hernoemd worden rechtstreeks onder deze map';
$labels['longacld'] = 'De berichtmarkering \'Verwijderd\' kan aangepast worden';
$labels['longaclt'] = 'De berichtmarkering \'Verwijderd\' kan aangepast worden';
$labels['longacle'] = 'Berichten kunnen vernietigd worden';
$labels['longaclx'] = 'De map kan verwijderd of hernoemd worden';
$labels['longacla'] = 'De toegangsrechten voor deze map kunnen veranderd worden';
$labels['longacln'] = 'Gedeelde metadata (annotaties) van berichten kan aangepast worden';
$labels['longaclfull'] = 'Volledige controle inclusief mappenbeheer';
$labels['longaclread'] = 'De map kan geopend worden om te lezen';
$labels['longaclwrite'] = 'Berichten kunnen gemarkeerd worden, opgesteld worden of gekopieerd worden naar deze map';
$labels['longacldelete'] = 'Berichten kunnen verwijderd worden';
$labels['longaclother'] = 'Overige toegangsrechten';
$labels['ariasummaryacltable'] = 'Lijst van toegangsrechten';
$labels['arialabelaclactions'] = 'Lijstacties';
$labels['arialabelaclform'] = 'Formulier voor toegangsrechten';
$messages['deleting'] = 'Toegangsrechten worden verwijderd...';
$messages['saving'] = 'Toegangsrechten worden opgeslagen...';
$messages['updatesuccess'] = 'Toegangsrechten succesvol veranderd';
$messages['deletesuccess'] = 'Toegangsrechten succesvol verwijderd';
$messages['createsuccess'] = 'Toegangsrechten succesvol toegevoegd';
$messages['updateerror'] = 'Toegangsrechten kunnen niet bijgewerkt worden';
$messages['deleteerror'] = 'Toegangsrechten kunnen niet verwijderd worden';
$messages['createerror'] = 'Toegangsrechten kunnen niet toegevoegd worden';
$messages['deleteconfirm'] = 'Weet u zeker dat u de toegangsrechten van de geselecteerde gebruiker(s) wilt verwijderen?';
$messages['norights'] = 'Er zijn geen toegangsrechten opgegeven!';
$messages['nouser'] = 'Er is geen gebruikersnaam opgegeven!';
PK}c�\�H���acl/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Rhannu';
$labels['myrights'] = 'Hawliau Mynediad';
$labels['username'] = 'Defnyddiwr:';
$labels['advanced'] = 'Modd uwch';
$labels['add'] = 'Ychwanegu';
$labels['newuser'] = 'Ychwanegu cofnod';
$labels['editperms'] = 'Golygu hawliau';
$labels['actions'] = 'Gweithredoedd hawl mynediad...';
$labels['anyone'] = 'Pob defnyddiwr (unrhywun)';
$labels['anonymous'] = 'Gwestai (anhysbys)';
$labels['identifier'] = 'Dynodwr';
$labels['acll'] = 'Chwilio';
$labels['aclr'] = 'Darllen negeseuon';
$labels['acls'] = 'Cadw stad Gwelwyd';
$labels['aclw'] = 'Fflagiau ysgrifennu';
$labels['acli'] = 'Mewnosod (Copïo fewn i)';
$labels['aclp'] = 'Postio';
$labels['aclc'] = 'Creu is-ffolderi';
$labels['aclk'] = 'Creu is-ffolderi';
$labels['acld'] = 'Dileu negeseuon';
$labels['aclt'] = 'Dileu negeseuon';
$labels['acle'] = 'Dileu';
$labels['aclx'] = 'Dileu ffolder';
$labels['acla'] = 'Gweinyddu';
$labels['acln'] = 'Anodi negeseuon';
$labels['aclfull'] = 'Rheolaeth lawn';
$labels['aclother'] = 'Arall';
$labels['aclread'] = 'Darllen';
$labels['aclwrite'] = 'Ysgrifennu';
$labels['acldelete'] = 'Dileu';
$labels['shortacll'] = 'Chwilio';
$labels['shortaclr'] = 'Darllen';
$labels['shortacls'] = 'Cadw';
$labels['shortaclw'] = 'Ysgrifennu';
$labels['shortacli'] = 'Mewnosod';
$labels['shortaclp'] = 'Postio';
$labels['shortaclc'] = 'Creu';
$labels['shortaclk'] = 'Creu';
$labels['shortacld'] = 'Dileu';
$labels['shortaclt'] = 'Dileu';
$labels['shortacle'] = 'Dileu';
$labels['shortaclx'] = 'Dileu ffolder';
$labels['shortacla'] = 'Gweinyddu';
$labels['shortacln'] = 'Anodi';
$labels['shortaclother'] = 'Arall';
$labels['shortaclread'] = 'Darllen';
$labels['shortaclwrite'] = 'Ysgrifennu';
$labels['shortacldelete'] = 'Dileu';
$labels['longacll'] = 'Mae\'r ffolder hwn i\'w weld ar y rhestrau a mae\'n bosib tanysgrifio iddo';
$labels['longaclr'] = 'Gellir agor y ffolder hwn i\'w ddarllen';
$labels['longacls'] = 'Gellir newid y fflag negeseuon Gwelwyd';
$labels['longaclw'] = 'Gellir newid y fflagiau negeseuon a allweddeiriau, heblaw Gwelwyd a Dilëuwyd';
$labels['longacli'] = 'Gellir ysgrifennu neu copïo negeseuon i\'r ffolder';
$labels['longaclp'] = 'Gellir postio negeseuon i\'r ffolder hwn';
$labels['longaclc'] = 'Gellir creu (neu ail-enwi) ffolderi yn uniongyrchol o dan y ffolder hwn';
$labels['longaclk'] = 'Gellir creu (neu ail-enwi) ffolderi yn uniongyrchol o dan y ffolder hwn';
$labels['longacld'] = 'Gellir newid fflag neges Dileu';
$labels['longaclt'] = 'Gellir newid fflag neges Dileu';
$labels['longacle'] = 'Gellir gwaredu negeseuon';
$labels['longaclx'] = 'Gellir dileu neu ail-enwi\'r ffolder';
$labels['longacla'] = 'Gellir newid hawliau mynediad y ffolder';
$labels['longacln'] = 'Gellir newid negeseuon metadata (anodiadau) a rannwyd';
$labels['longaclfull'] = 'Rheolaeth lawn yn cynnwys rheolaeth ffolderi';
$labels['longaclread'] = 'Gellir agor y ffolder hwn i\'w ddarllen';
$labels['longaclwrite'] = 'Gellir nodi, ysgrifennu neu copïo negeseuon i\'r ffolder';
$labels['longacldelete'] = 'Gellir dileu negeseuon';
$labels['longaclother'] = 'Hawliau mynediad eraill';
$labels['ariasummaryacltable'] = 'Rhestr o hawliau mynediad';
$labels['arialabelaclactions'] = 'Rhestru gweithrediadau';
$labels['arialabelaclform'] = 'Ffurflen hawliau mynediad';
$messages['deleting'] = 'Yn dileu hawliau mynediad...';
$messages['saving'] = 'Yn cadw hawliau mynediad...';
$messages['updatesuccess'] = 'Wedi newid hawliau mynediad yn llwyddiannus';
$messages['deletesuccess'] = 'Wedi dileu hawliau mynediad yn llwyddiannus';
$messages['createsuccess'] = 'Wedi ychwanegu hawliau mynediad yn llwyddiannus';
$messages['updateerror'] = 'Methwyd diweddaru hawliau mynediad';
$messages['deleteerror'] = 'Methwyd dileu hawliau mynediad';
$messages['createerror'] = 'Methwyd ychwanegu hawliau mynediad';
$messages['deleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu hawliau mynediad y defnyddiwr/wyr ddewiswyd?';
$messages['norights'] = 'Nid oes hawliau wedi eu nodi!';
$messages['nouser'] = 'Nid oes enw defnyddiwr wedi ei nodi!';
PK}c�\�֭7acl/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Sharing';
$labels['myrights'] = 'Access Rights';
$labels['username'] = 'User:';
$labels['advanced'] = 'Advanced mode';
$labels['add'] = 'Add';
$labels['newuser'] = 'Add entry';
$labels['editperms'] = 'Edit permissions';
$labels['actions'] = 'Access right actions...';
$labels['anyone'] = 'All users (anyone)';
$labels['anonymous'] = 'Guests (anonymous)';
$labels['identifier'] = 'Identifier';
$labels['acll'] = 'Look-up';
$labels['aclr'] = 'Read messages';
$labels['acls'] = 'Keep Seen state';
$labels['aclw'] = 'Write flags';
$labels['acli'] = 'Insert (copy into)';
$labels['aclp'] = 'Post';
$labels['aclc'] = 'Create sub-folders';
$labels['aclk'] = 'Create sub-folders';
$labels['acld'] = 'Delete messages';
$labels['aclt'] = 'Delete messages';
$labels['acle'] = 'Expunge';
$labels['aclx'] = 'Delete folder';
$labels['acla'] = 'Administer';
$labels['acln'] = 'Annotate messages';
$labels['aclfull'] = 'Full control';
$labels['aclother'] = 'Other';
$labels['aclread'] = 'Read';
$labels['aclwrite'] = 'Write';
$labels['acldelete'] = 'Delete';
$labels['shortacll'] = 'Look-up';
$labels['shortaclr'] = 'Read';
$labels['shortacls'] = 'Keep';
$labels['shortaclw'] = 'Write';
$labels['shortacli'] = 'Insert';
$labels['shortaclp'] = 'Post';
$labels['shortaclc'] = 'Create';
$labels['shortaclk'] = 'Create';
$labels['shortacld'] = 'Delete';
$labels['shortaclt'] = 'Delete';
$labels['shortacle'] = 'Expunge';
$labels['shortaclx'] = 'Folder delete';
$labels['shortacla'] = 'Administer';
$labels['shortacln'] = 'Annotate';
$labels['shortaclother'] = 'Other';
$labels['shortaclread'] = 'Read';
$labels['shortaclwrite'] = 'Write';
$labels['shortacldelete'] = 'Delete';
$labels['longacll'] = 'The folder is visible on lists and can be subscribed to.';
$labels['longaclr'] = 'The folder can be opened for reading';
$labels['longacls'] = 'Messages Seen flag can be changed';
$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted.';
$labels['longacli'] = 'Messages can be written or copied to the folder';
$labels['longaclp'] = 'Messages can be posted to this folder';
$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder';
$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder';
$labels['longacld'] = 'Messages Delete flag can be changed';
$labels['longaclt'] = 'Messages Delete flag can be changed';
$labels['longacle'] = 'Messages can be expunged';
$labels['longaclx'] = 'The folder can be deleted or renamed';
$labels['longacla'] = 'The folder access rights can be changed';
$labels['longacln'] = 'Messages shared metadata (annotations) can be changed';
$labels['longaclfull'] = 'Full control including folder administration';
$labels['longaclread'] = 'The folder can be opened for reading';
$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder';
$labels['longacldelete'] = 'Messages can be deleted';
$labels['longaclother'] = 'Other access rights';
$labels['ariasummaryacltable'] = 'List of access rights';
$labels['arialabelaclactions'] = 'List actions';
$labels['arialabelaclform'] = 'Access rights form';
$messages['deleting'] = 'Deleting access rights...';
$messages['saving'] = 'Saving access rights...';
$messages['updatesuccess'] = 'Successfully changed access rights';
$messages['deletesuccess'] = 'Successfully deleted access rights';
$messages['createsuccess'] = 'Successfully added access rights';
$messages['updateerror'] = 'Unable to update access rights';
$messages['deleteerror'] = 'Unable to delete access rights';
$messages['createerror'] = 'Unable to add access rights';
$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?';
$messages['norights'] = 'No rights has been specified!';
$messages['nouser'] = 'No username has been specified!';
PK}c�\e�s���acl/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Deiling';
$labels['myrights'] = 'Atgongdar-rættindi';
$labels['username'] = 'Brúkari:';
$labels['advanced'] = 'Víðkað útgáva';
$labels['add'] = 'Legg aftrat';
$labels['newuser'] = 'Legg inn';
$labels['editperms'] = 'Broyt atgonguloyvi';
$labels['actions'] = 'Stillingar til atgongu-rættindi';
$labels['anyone'] = 'Allir brúkarir (øll)';
$labels['anonymous'] = 'Gestir (dulnevnd)';
$labels['identifier'] = 'dátuheiti';
$labels['acll'] = 'Slá upp';
$labels['aclr'] = 'Les boð';
$labels['acls'] = 'Varveit lisna støðu';
$labels['aclw'] = 'Hvít Fløgg';
$labels['acli'] = 'Set inn (Copy into)';
$labels['aclp'] = 'Send';
$labels['aclc'] = 'Ger undurmappur';
$labels['aclk'] = 'Ger undurmappur';
$labels['acld'] = 'Strika boð';
$labels['aclt'] = 'Strika boð';
$labels['acle'] = 'Strika út';
$labels['aclx'] = 'Strika mappu';
$labels['acla'] = 'Umsit';
$labels['acln'] = 'Viðmerk boð';
$labels['aclfull'] = 'Full stýring';
$labels['aclother'] = 'Annað';
$labels['aclread'] = 'Les';
$labels['aclwrite'] = 'Skriva';
$labels['acldelete'] = 'Strika';
$labels['shortacll'] = 'Leita';
$labels['shortaclr'] = 'Les';
$labels['shortacls'] = 'Varveit';
$labels['shortaclw'] = 'Skriva';
$labels['shortacli'] = 'Legg inn';
$labels['shortaclp'] = 'Send';
$labels['shortaclc'] = 'Stovna';
$labels['shortaclk'] = 'Stovna';
$labels['shortacld'] = 'Strika';
$labels['shortaclt'] = 'Strika';
$labels['shortacle'] = 'Strika út';
$labels['shortaclx'] = 'Strika mappu';
$labels['shortacla'] = 'Umsit';
$labels['shortacln'] = 'Viðmerk';
$labels['shortaclother'] = 'Annað';
$labels['shortaclread'] = 'Les';
$labels['shortaclwrite'] = 'Skriva';
$labels['shortacldelete'] = 'Strika';
$labels['longacll'] = 'Mappan er sjónlig á listum og til ber at tekna seg fyri hana';
$labels['longaclr'] = 'Mappan kann verða opna til lesná';
$labels['longacls'] = 'Viðmerki ið vísur á lisin boð kann broytast';
$labels['longaclw'] = 'Boð viðmerki og lyklaorð kunnu øll broytast, undantikið Sæð og Strika';
$labels['longacli'] = 'Boð kunnu verða skriva og flutt til eina aðra mappu';
$labels['longaclp'] = 'Boð kunnu verða send til hesa mappu';
$labels['longaclc'] = 'Mappur kunnu verða stovnaðar (ella umdoyptar) beinleiðis undir hesu mappu';
$labels['longaclk'] = 'Mappur kunnu verða stovnaðar (ella umdoyptar) beinleiðis undir hesu mappu';
$labels['longacld'] = 'Viðmerki ið vísur á strika boð kann broytast';
$labels['longaclt'] = 'Viðmerki ið vísur á strika boð kann broytast';
$labels['longacle'] = 'Boð kunnu verða strika út';
$labels['longaclx'] = 'Mappan kann verða strika ella umdoypt';
$labels['longacla'] = 'Atgongdu-rættindini til hesa mappu kunnu broytast';
$labels['longacln'] = '"Metadata" (viðmerking) av boðum kann broytast';
$labels['longaclfull'] = 'Full stýring, írokna mappu-umsiting';
$labels['longaclread'] = 'Mappan kann latast upp til lesná';
$labels['longaclwrite'] = 'Boð kunnu verða viðmerkt, skriva ella avritast til mappuna';
$labels['longacldelete'] = 'Boð kunnu verða strikað';
$labels['longaclother'] = 'Aðrar heimildir';
$labels['ariasummaryacltable'] = 'Listi yvir brúkara heimildum';
$labels['arialabelaclactions'] = 'Vís gerðir';
$labels['arialabelaclform'] = 'Heimilda frymil';
$messages['deleting'] = 'Strikar atgongu-rættindi...';
$messages['saving'] = 'Goymur atgongu-rættindi...';
$messages['updatesuccess'] = 'Atgongu-rættindi broytt væleyndað';
$messages['deletesuccess'] = 'Atgongu-rættindi strika væleyndað';
$messages['createsuccess'] = 'Atgongu-rættindi stovna væleyndað';
$messages['updateerror'] = 'Til ber ikki at dagføra atgongu-rættindi';
$messages['deleteerror'] = 'Til ber ikki at strika atgongu-rættindi';
$messages['createerror'] = 'Til ber ikki at leggja aftrat atgongu-rættindi';
$messages['deleteconfirm'] = 'Ert tú vís/ur í at tú ynskir at strika atgongu-rættindini hjá valdum brúkar(um)?';
$messages['norights'] = 'Eingi rættindi tilskilað!';
$messages['nouser'] = 'Einki brúkaranavn var tilskilað!';
PK}c�\a�7���acl/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Dalinimasis';
$labels['myrights'] = 'Prieigos teisės';
$labels['username'] = 'Vartotojas:';
$labels['advanced'] = 'Pažengusio vartotojo rėžimas';
$labels['add'] = 'Pridėti';
$labels['newuser'] = 'Pridėti įrašą';
$labels['editperms'] = 'Tvarkyti leidimus';
$labels['actions'] = 'Prieigos teisių veiksmai...';
$labels['anyone'] = 'Visi vartotojai (bet kas)';
$labels['anonymous'] = 'Svečias (anonimas)';
$labels['identifier'] = 'Identifikatorius';
$labels['acll'] = 'Paieška';
$labels['aclr'] = 'Perskaityti pranešimus';
$labels['acls'] = 'Palikti būseną "Žiūrėtas"';
$labels['aclw'] = 'Įrašyti vėliavėles';
$labels['acli'] = 'Įterpti (kopijuoti į)';
$labels['aclp'] = 'Įrašas';
$labels['aclc'] = 'Kurti poaplankius';
$labels['aclk'] = 'Kurti poaplankius';
$labels['acld'] = 'Ištrinti žinutes';
$labels['aclt'] = 'Ištrinti žinutes';
$labels['acle'] = 'Išbraukti';
$labels['aclx'] = 'Ištrinti aplanką';
$labels['acla'] = 'Valdyti';
$labels['acln'] = 'Anotuoti laiškus';
$labels['aclfull'] = 'Visiška kontrolė';
$labels['aclother'] = 'Kita';
$labels['aclread'] = 'Skaityti';
$labels['aclwrite'] = 'Įrašyti';
$labels['acldelete'] = 'Trinti';
$labels['shortacll'] = 'Paieška';
$labels['shortaclr'] = 'Skaityti';
$labels['shortacls'] = 'Palikti';
$labels['shortaclw'] = 'Įrašyti';
$labels['shortacli'] = 'Įterpti';
$labels['shortaclp'] = 'Įrašas';
$labels['shortaclc'] = 'Sukurti';
$labels['shortaclk'] = 'Sukurti';
$labels['shortacld'] = 'Trinti';
$labels['shortaclt'] = 'Trinti';
$labels['shortacle'] = 'Išbraukti';
$labels['shortaclx'] = 'Ištrinti aplanką';
$labels['shortacla'] = 'Valdyti';
$labels['shortacln'] = 'Anotuoti';
$labels['shortaclother'] = 'Kita';
$labels['shortaclread'] = 'Skaityti';
$labels['shortaclwrite'] = 'Įrašyti';
$labels['shortacldelete'] = 'Trinti';
$labels['longacll'] = 'Aplankas yra matomas sąrašuose ir gali būti prenumeruojamas';
$labels['longaclr'] = 'Aplanką galima peržiūrėti';
$labels['longacls'] = 'Pranešimų vėliavėlė "Matyta" gali būti pakeista';
$labels['longaclw'] = 'Pranešimų vėliavėlės ir raktažodžiai gali būti pakeisti, išskyrus "Matytas" ir "Ištrintas"';
$labels['longacli'] = 'Pranešimai gali būti įrašyti arba nukopijuoti į aplanką';
$labels['longaclp'] = 'Į šį aplanką galima dėti laiškus.';
$labels['longaclc'] = 'Nauji aplankai gali būti kuriami (arba pervadinami) šioje direktorijoje';
$labels['longaclk'] = 'Nauji aplankai gali būti kuriami (arba pervadinami) šioje direktorijoje';
$labels['longacld'] = 'Pranešimų vėliavėlė "Ištrintas" gali būti pakeista';
$labels['longaclt'] = 'Pranešimų vėliavėlė "Ištrintas" gali būti pakeista';
$labels['longacle'] = 'Pranešimai gali būti išbraukti';
$labels['longaclx'] = 'Aplankas gali būti pašalintas arba pervadintas';
$labels['longacla'] = 'Aplanko prieigos teisės gali būti pakeistos';
$labels['longacln'] = 'Bendrieji laiškų meta-duomenys (anotacijos) gali būti pakeisti';
$labels['longaclfull'] = 'Visiška kontrolė įskaitant aplanko administravimą';
$labels['longaclread'] = 'Aplanką galima peržiūrėti';
$labels['longaclwrite'] = 'Pranešimai gali būti pažymėti, įrašyti arba nukopijuoti į aplanką';
$labels['longacldelete'] = 'Pranešimai gali būti ištrinti';
$labels['longaclother'] = 'Kitos prieigos teisės';
$labels['ariasummaryacltable'] = 'Prieigos teisių sąrašas';
$labels['arialabelaclactions'] = 'Rodyti veiksmus';
$labels['arialabelaclform'] = 'Prieigos teisių forma';
$messages['deleting'] = 'Panaikinamos prieigos teisės';
$messages['saving'] = 'Išsaugomos prieigos teisės';
$messages['updatesuccess'] = 'Prieigos teisės sėkmingai pakeistos';
$messages['deletesuccess'] = 'Prieigos teisės sėkmingai panaikintos';
$messages['createsuccess'] = 'Prieigos teisės sėkmingai pridėtos';
$messages['updateerror'] = 'Nepavyko pakeisti prieigos teisių';
$messages['deleteerror'] = 'Neįmanoma panaikinti prieigos teises';
$messages['createerror'] = 'Neišeina pridėti prieigos teises';
$messages['deleteconfirm'] = 'Ar jūs esate įsitikinę, jog norite panaikinti prieigos teises pažymėtiems vartotojams(-ui)?';
$messages['norights'] = 'Nenurodytos jokios teisės!';
$messages['nouser'] = 'Nenurodytas joks vartotojas!';
PK}c�\�H��acl/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Partilhar';
$labels['myrights'] = 'Permissões de acesso';
$labels['username'] = 'Utilizador:';
$labels['advanced'] = 'Modo avançado';
$labels['add'] = 'Adicionar';
$labels['newuser'] = 'Adicionar entrada';
$labels['editperms'] = 'Editar permissões';
$labels['actions'] = 'Acções de permissão de acesso...';
$labels['anyone'] = 'Todos os utilizadores (todos)';
$labels['anonymous'] = 'Convidados (anónimo)';
$labels['identifier'] = 'Identificador';
$labels['acll'] = 'Pesquisar';
$labels['aclr'] = 'Ler mensagens';
$labels['acls'] = 'Manter estado Visto';
$labels['aclw'] = 'Guardar marcadores';
$labels['acli'] = 'Inserir (Copiar para)';
$labels['aclp'] = 'Publicar';
$labels['aclc'] = 'Criar subpastas';
$labels['aclk'] = 'Criar subpastas';
$labels['acld'] = 'Eliminar mensagens';
$labels['aclt'] = 'Eliminar mensagens';
$labels['acle'] = 'Purgar';
$labels['aclx'] = 'Eliminar pasta';
$labels['acla'] = 'Administrar';
$labels['acln'] = 'Anotar mensagens';
$labels['aclfull'] = 'Controlo total';
$labels['aclother'] = 'Outro';
$labels['aclread'] = 'Ler';
$labels['aclwrite'] = 'Escrever';
$labels['acldelete'] = 'Eliminar';
$labels['shortacll'] = 'Pesquisar';
$labels['shortaclr'] = 'Ler';
$labels['shortacls'] = 'Manter';
$labels['shortaclw'] = 'Escrever';
$labels['shortacli'] = 'Inserir';
$labels['shortaclp'] = 'Publicar';
$labels['shortaclc'] = 'Criar';
$labels['shortaclk'] = 'Criar';
$labels['shortacld'] = 'Eliminar';
$labels['shortaclt'] = 'Eliminar';
$labels['shortacle'] = 'Purgar';
$labels['shortaclx'] = 'Eliminar pasta';
$labels['shortacla'] = 'Administrar';
$labels['shortacln'] = 'Anotar';
$labels['shortaclother'] = 'Outro';
$labels['shortaclread'] = 'Ler';
$labels['shortaclwrite'] = 'Escrever';
$labels['shortacldelete'] = 'Eliminar';
$labels['longacll'] = 'A pasta está visível em listas e pode subscrita';
$labels['longaclr'] = 'A pasta pode ser aberta para leitura';
$labels['longacls'] = 'O marcador Mensagens Vistas pode ser alterado';
$labels['longaclw'] = 'Marcadores de mensagens e palavras-chave podem ser alterados, excepto Vistas e Eliminadas';
$labels['longacli'] = 'As mensagens podem ser escritas ou copiadas para a pasta';
$labels['longaclp'] = 'As mensagens podem ser publicadas para esta pasta';
$labels['longaclc'] = 'As pastas podem ser criadas (ou renomeadas) directamente debaixo desta pasta';
$labels['longaclk'] = 'As pastas podem ser criadas (ou renomeadas) directamente debaixo desta pasta';
$labels['longacld'] = 'O marcador Apagar Mensagens pode ser alterado';
$labels['longaclt'] = 'O marcador Apagar Mensagens pode ser alterado';
$labels['longacle'] = 'As mensagens podem ser purgadas';
$labels['longaclx'] = 'A pasta pode ser eliminada ou renomeada';
$labels['longacla'] = 'As permissões de acesso da pasta podem ser alteradas';
$labels['longacln'] = 'Mensagens de metadados (anotações) partilhadas podem ser alteradas';
$labels['longaclfull'] = 'Controlo total incluindo administração de pastas';
$labels['longaclread'] = 'A pasta pode ser aberta para leitura';
$labels['longaclwrite'] = 'As mensagens podem ser marcadas, guardadas ou copiadas para a pasta';
$labels['longacldelete'] = 'As mensagens podem ser eliminadas';
$labels['longaclother'] = 'Outros direitos de acesso';
$labels['ariasummaryacltable'] = 'Lista de direitos de acesso';
$labels['arialabelaclactions'] = 'Lista de acções';
$labels['arialabelaclform'] = 'Formulário de direitos de acesso';
$messages['deleting'] = 'A eliminar permissões de acesso...';
$messages['saving'] = 'A guardar permissões de acesso...';
$messages['updatesuccess'] = 'Permissões de acesso alteradas com sucesso';
$messages['deletesuccess'] = 'Permissões de acesso eliminadas com sucesso';
$messages['createsuccess'] = 'Permissões de acesso adicionadas com sucesso';
$messages['updateerror'] = 'Não foi possível actualizar os direitos de acesso';
$messages['deleteerror'] = 'Não foi possível eliminar permissões de acesso';
$messages['createerror'] = 'Não foi possível adicionar permissões de acesso';
$messages['deleteconfirm'] = 'Tem a certeza que pretende remover as permissões de acesso do(s) utilizador(es) seleccionado(s)?';
$messages['norights'] = 'Não foram especificadas quaisquer permissões!';
$messages['nouser'] = 'Não foi especificado nenhum nome de utilizador!';
PK}c�\Vy�:FFacl/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail ACL plugin                 |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/
*/

$labels['sharing'] = 'Κοινή χρήση';
$labels['myrights'] = 'Δικαιώματα Πρόσβασης ';
$labels['username'] = 'Χρήστης:';
$labels['advanced'] = 'Προηγμένη λειτουργία';
$labels['add'] = 'Προσθήκη';
$labels['newuser'] = 'Προσθήκη καταχώρησης ';
$labels['editperms'] = 'Μεταβολή δικαιωμάτων';
$labels['actions'] = 'Ενέργειες δικαιωμάτων πρόσβασης...';
$labels['anyone'] = 'Όλοι οι χρήστες (οποιοσδήποτε)';
$labels['anonymous'] = 'Επισκέπτες (ανώνυμοι)';
$labels['identifier'] = 'Αναγνωριστικό';
$labels['acll'] = 'Αναζήτηση';
$labels['aclr'] = 'Διαβάστε τα μηνύματα ';
$labels['acls'] = 'Διατήρηση κατάστασης ανάγνωσης';
$labels['aclw'] = 'Ρυθμίσεις εγγραφής';
$labels['acli'] = 'Εισάγωγη (Αντιγραφή σε) ';
$labels['aclp'] = 'Καταχώρηση';
$labels['aclc'] = 'Δημιουργία υποφακέλων';
$labels['aclk'] = 'Δημιουργία υποφακέλων';
$labels['acld'] = 'Διαγραφή μηνυμάτων';
$labels['aclt'] = 'Διαγραφή μηνυμάτων';
$labels['acle'] = 'Απαλοιφή';
$labels['aclx'] = 'Διαγραφή φακέλου';
$labels['acla'] = 'Διαχείριση';
$labels['acln'] = 'Προσθήκη υπομνήματος στα μηνύματα';
$labels['aclfull'] = 'Πλήρης πρόσβαση';
$labels['aclother'] = 'Άλλο';
$labels['aclread'] = 'Ανάγνωση';
$labels['aclwrite'] = 'Εγγραφή';
$labels['acldelete'] = 'Διαγραφή';
$labels['shortacll'] = 'Αναζήτηση';
$labels['shortaclr'] = 'Ανάγνωση';
$labels['shortacls'] = 'Τήρηση';
$labels['shortaclw'] = 'Εγγραφή';
$labels['shortacli'] = 'Εισαγωγή';
$labels['shortaclp'] = 'Καταχώρηση';
$labels['shortaclc'] = 'Δημιουργία';
$labels['shortaclk'] = 'Δημιουργία';
$labels['shortacld'] = 'Διαγραφή';
$labels['shortaclt'] = 'Διαγραφή';
$labels['shortacle'] = 'Απαλοιφή';
$labels['shortaclx'] = 'Διαγραφή φακέλου';
$labels['shortacla'] = 'Διαχείριση';
$labels['shortacln'] = 'Προσθήκη υπομνήματος';
$labels['shortaclother'] = 'Άλλο';
$labels['shortaclread'] = 'Ανάγνωση';
$labels['shortaclwrite'] = 'Εγγραφή';
$labels['shortacldelete'] = 'Διαγραφή';
$labels['longacll'] = 'Ο φάκελος είναι ορατός στους καταλόγους και μπορείτε να εγγραφείτε σε αυτόν';
$labels['longaclr'] = 'Ο φάκελος μπορεί να προσπελαστεί για ανάγνωση ';
$labels['longacls'] = 'Η κατάσταση ανάγνωσης μηνυμάτων μπορεί να αλλαχθεί';
$labels['longaclw'] = 'Μπορούν να μεταβληθούν οι καταστάσεις μηνυμάτων και οι λέξεις κλειδιά, εκτός από τις καταστάσεις Ανάγνωσης και Διαγραφής';
$labels['longacli'] = 'Τα μηνύματα μπορούν να εγγραφούν ή να αντιγραφούν στον φάκελο ';
$labels['longaclp'] = 'Τα μηνύματα μπορούν να τοποθετηθούν σε αυτόν το φάκελο ';
$labels['longaclc'] = 'Μπορούν να δημιουργηθούν (ή να μετονομαστούν) φάκελοι ακριβώς κάτω από αυτόν τον φάκελο ';
$labels['longaclk'] = 'Μπορούν να δημιουργηθούν (ή να μετονομαστούν) φάκελοι ακριβώς κάτω από αυτόν τον φάκελο ';
$labels['longacld'] = 'Η κατάσταση διαγραφής μηνυμάτων μπορεί να μεταβληθεί';
$labels['longaclt'] = 'Η κατάσταση διαγραφής μηνυμάτων μπορεί να μεταβληθεί';
$labels['longacle'] = 'Τα μηνύματα μπορούν να απαλειφθούν';
$labels['longaclx'] = 'Ο φάκελος μπορεί να μετονομασθεί ή να διαγραφεί';
$labels['longacla'] = 'Τα δικαιώματα πρόσβασης στον φάκελο μπορούν να μεταβληθούν';
$labels['longacln'] = 'Το διαμοιραζόμενο υπόμνημα των μηνυμάτων είναι δυνατό να μεταβληθεί';
$labels['longaclfull'] = 'Πλήρης έλεγχος συμπεριλαμβανόμενης της διαχείρισης φακέλων';
$labels['longaclread'] = 'Ο φάκελος είναι δυνατό να προσπελαστεί για ανάγνωση';
$labels['longaclwrite'] = 'Τα μηνύματα μπορούν να σημαδεύονται, να εγγράφονται ή να αντιγράφονται στον φάκελο';
$labels['longacldelete'] = 'Τα μηνύματα μπορούν να διαγραφούν';
$labels['longaclother'] = 'Άλλα δικαιώματα πρόσβασης';
$labels['ariasummaryacltable'] = 'Λίστα δικαιωμάτων πρόσβασης';
$labels['arialabelaclactions'] = 'Λίστα ενεργειών';
$labels['arialabelaclform'] = 'Φόρμα δικαιωμάτων πρόσβασης';
$messages['deleting'] = 'Διαγραφή των δικαιωμάτων πρόσβασης...';
$messages['saving'] = 'Αποθήκευση δικαιώματων πρόσβασης...';
$messages['updatesuccess'] = 'Επιτυχής μεταβολή των δικαιωμάτων πρόσβασης';
$messages['deletesuccess'] = 'Επιτυχής διαγραφή των δικαιωμάτων πρόσβασης';
$messages['createsuccess'] = 'Επιτυχής προσθήκη δικαιωμάτων πρόσβασης';
$messages['updateerror'] = 'Δεν είναι δυνατή η ενημέρωση των δικαιωμάτων πρόσβασης';
$messages['deleteerror'] = 'Δεν είναι δυνατή η διαγραφή των δικαιωμάτων πρόσβασης ';
$messages['createerror'] = 'Δεν είναι δυνατή η προσθήκη δικαιωμάτων πρόσβασης ';
$messages['deleteconfirm'] = 'Είστε βέβαιοι ότι θέλετε να καταργήσετε τα δικαιώματα πρόσβασης του επιλεγμένου(ων) χρήστη(ών);';
$messages['norights'] = 'Κανένα δικαίωμα δεν έχει καθοριστεί!';
$messages['nouser'] = 'Το όνομα χρήστη δεν έχει καθοριστεί! ';
PK}c�\g8[[acl/config.inc.php.distnu�[���<?php

// Default look of access rights table
// In advanced mode all access rights are displayed separately
// In simple mode access rights are grouped into four groups: read, write, delete, full 
$config['acl_advanced_mode'] = false;

// LDAP addressbook that would be searched for user names autocomplete.
// That should be an array referring to the $config['ldap_public'] array key
// or complete addressbook configuration array.
$config['acl_users_source'] = '';

// The LDAP attribute which will be used as ACL user identifier
$config['acl_users_field'] = 'mail';

// The LDAP search filter will be &'d with search queries
$config['acl_users_filter'] = '';

// Enable LDAP groups in user autocompletion.
// Note: LDAP addressbook defined in acl_users_source must include groups config
$config['acl_groups'] = false;

// Prefix added to the group name to build IMAP ACL identifier
$config['acl_group_prefix'] = 'group:';

// The LDAP attribute (or field name) which will be used as ACL group identifier
$config['acl_group_field'] = 'name';

// Include the following 'special' access control subjects in the ACL dialog;
// Defaults to array('anyone', 'anonymous') (not when set to an empty array)
// Example: array('anyone') to exclude 'anonymous'.
// Set to an empty array to exclude all special aci subjects.
$config['acl_specials'] = array('anyone', 'anonymous');
PK}c�\���..
acl/acl.jsnu�[���/**
 * ACL plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

if (window.rcmail) {
    rcmail.addEventListener('init', function() {
        if (rcmail.gui_objects.acltable) {
            rcmail.acl_list_init();
            // enable autocomplete on user input
            if (rcmail.env.acl_users_source) {
                var inst = rcmail.is_framed() ? parent.rcmail : rcmail;
                inst.init_address_input_events($('#acluser'), {action:'settings/plugin.acl-autocomplete'});

                // pass config settings and localized texts to autocomplete context
                inst.set_env({ autocomplete_max:rcmail.env.autocomplete_max, autocomplete_min_length:rcmail.env.autocomplete_min_length });
                inst.add_label('autocompletechars', rcmail.labels.autocompletechars);
                inst.add_label('autocompletemore', rcmail.labels.autocompletemore);

                // fix inserted value
                inst.addEventListener('autocomplete_insert', function(e) {
                    if (e.field.id != 'acluser')
                        return;

                    e.field.value = e.insert.replace(/[ ,;]+$/, '');
                });
            }
        }

        rcmail.enable_command('acl-create', 'acl-save', 'acl-cancel', 'acl-mode-switch', true);
        rcmail.enable_command('acl-delete', 'acl-edit', false);

        if (rcmail.env.acl_advanced)
            $('#acl-switch').addClass('selected').find('input').prop('checked', true);
    });
}

// Display new-entry form
rcube_webmail.prototype.acl_create = function()
{
    this.acl_init_form();
}

// Display ACL edit form
rcube_webmail.prototype.acl_edit = function()
{
    // @TODO: multi-row edition
    var id = this.acl_list.get_single_selection();
    if (id)
        this.acl_init_form(id);
}

// ACL entry delete
rcube_webmail.prototype.acl_delete = function()
{
    var users = this.acl_get_usernames();

    if (users && users.length) {
        this.confirm_dialog(this.get_label('acl.deleteconfirm'), 'delete', function(e, ref) {
            ref.http_post('settings/plugin.acl', {
                _act: 'delete',
                _user: users.join(','),
                _mbox: rcmail.env.mailbox
            }, ref.set_busy(true, 'acl.deleting'));
        });
    }
}

// Save ACL data
rcube_webmail.prototype.acl_save = function()
{
    var data, type, rights = '', user = $('#acluser', this.acl_form).val();

    $((this.env.acl_advanced ? '#advancedrights :checkbox' : '#simplerights :checkbox'), this.acl_form).map(function() {
        if (this.checked)
            rights += this.value;
    });

    if (type = $('input:checked[name=usertype]', this.acl_form).val()) {
        if (type != 'user')
            user = type;
    }

    if (!user) {
        this.alert_dialog(this.get_label('acl.nouser'));
        return;
    }
    if (!rights) {
        this.alert_dialog(this.get_label('acl.norights'));
        return;
    }

    data = {
        _act: 'save',
        _user: user,
        _acl: rights,
        _mbox: this.env.mailbox
    }

    if (this.acl_id) {
        data._old = this.acl_id;
    }

    this.http_post('settings/plugin.acl', data, this.set_busy(true, 'acl.saving'));
}

// Cancel/Hide form
rcube_webmail.prototype.acl_cancel = function()
{
    this.ksearch_blur();
    this.acl_popup.dialog('close');
}

// Update data after save (and hide form)
rcube_webmail.prototype.acl_update = function(o)
{
    // delete old row
    if (o.old)
        this.acl_remove_row(o.old);
    // make sure the same ID doesn't exist
    else if (this.env.acl[o.id])
        this.acl_remove_row(o.id);

    // add new row
    this.acl_add_row(o, true);
    // hide autocomplete popup
    this.ksearch_blur();
    // hide form
    this.acl_popup.dialog('close');
}

// Switch table display mode
rcube_webmail.prototype.acl_mode_switch = function(elem)
{
    this.env.acl_advanced = !this.env.acl_advanced;
    this.enable_command('acl-delete', 'acl-edit', false);
    this.http_request('settings/plugin.acl', '_act=list'
        + '&_mode='+(this.env.acl_advanced ? 'advanced' : 'simple')
        + '&_mbox='+urlencode(this.env.mailbox),
        this.set_busy(true, 'loading'));
}

// ACL table initialization
rcube_webmail.prototype.acl_list_init = function()
{
    var method = this.env.acl_advanced ? 'addClass' : 'removeClass';

    $('#acl-switch')[method]('selected');
    $(this.gui_objects.acltable)[method]('advanced');

    this.acl_list = new rcube_list_widget(this.gui_objects.acltable,
        {multiselect: true, draggable: false, keyboard: true});
    this.acl_list.addEventListener('select', function(o) { rcmail.acl_list_select(o); })
        .addEventListener('dblclick', function(o) { rcmail.acl_list_dblclick(o); })
        .addEventListener('keypress', function(o) { rcmail.acl_list_keypress(o); })
        .init();
}

// ACL table row selection handler
rcube_webmail.prototype.acl_list_select = function(list)
{
    rcmail.enable_command('acl-delete', list.get_selection().length > 0);
    rcmail.enable_command('acl-edit', list.get_selection().length == 1);
    list.focus();
}

// ACL table double-click handler
rcube_webmail.prototype.acl_list_dblclick = function(list)
{
    this.acl_edit();
}

// ACL table keypress handler
rcube_webmail.prototype.acl_list_keypress = function(list)
{
    if (list.key_pressed == list.ENTER_KEY)
        this.command('acl-edit');
    else if (list.key_pressed == list.DELETE_KEY || list.key_pressed == list.BACKSPACE_KEY)
        if (!this.acl_form || !this.acl_form.is(':visible'))
            this.command('acl-delete');
}

// Reloads ACL table
rcube_webmail.prototype.acl_list_update = function(html)
{
    $(this.gui_objects.acltable).html(html);
    this.acl_list_init();
}

// Returns names of users in selected rows
rcube_webmail.prototype.acl_get_usernames = function()
{
    var users = [], n, len, id, row,
        list = this.acl_list,
        selection = list.get_selection();

    for (n=0, len=selection.length; n<len; n++) {
        if (this.env.acl_specials.length && $.inArray(selection[n], this.env.acl_specials) >= 0) {
            users.push(selection[n]);
        }
        else if ((row = list.rows[selection[n]]) && (id = $(row.obj).data('userid'))) {
            users.push(id);
        }
    }

    return users;
}

// Removes ACL table row
rcube_webmail.prototype.acl_remove_row = function(id)
{
    var list = this.acl_list;

    list.remove_row(id);
    list.clear_selection();

    // we don't need it anymore (remove id conflict)
    $('#rcmrow'+id).remove();
    this.env.acl[id] = null;

    this.enable_command('acl-delete', list.get_selection().length > 0);
    this.enable_command('acl-edit', list.get_selection().length == 1);
}

// Adds ACL table row
rcube_webmail.prototype.acl_add_row = function(o, sel)
{
    var n, len, ids = [], spec = [], id = o.id, list = this.acl_list,
        items = this.env.acl_advanced ? [] : this.env.acl_items,
        table = this.gui_objects.acltable,
        row = $('thead > tr', table).clone();

    // Update new row
    $('th', row).map(function() {
        var td = $('<td>'),
            title = $(this).attr('title'),
            cl = this.className.replace(/^acl/, '');

        if (title)
            td.attr('title', title);

        if (items && items[cl])
            cl = items[cl];

        if (cl == 'user')
            td.addClass(cl).attr('title', o.title).append($('<a>').text(o.display));
        else
            td.addClass(this.className + ' ' + rcmail.acl_class(o.acl, cl)).html('<span/>');

        $(this).replaceWith(td);
    });

    row = row.attr({id: 'rcmrow' + id, 'data-userid': o.username}).get(0);

    this.env.acl[id] = o.acl;

    // sorting... (create an array of user identifiers, then sort it)
    for (n in this.env.acl) {
        if (this.env.acl[n]) {
            if (this.env.acl_specials.length && $.inArray(n, this.env.acl_specials) >= 0)
                spec.push(n);
            else
                ids.push(n);
        }
    }
    ids.sort();
    // specials on the top
    ids = spec.concat(ids);

    // find current id
    for (n=0, len=ids.length; n<len; n++)
        if (ids[n] == id)
            break;

    // add row
    if (n && n < len) {
        $('#rcmrow'+ids[n-1]).after(row);
        list.init_row(row);
        list.rowcount++;
    }
    else
        list.insert_row(row);

    if (sel)
        list.select_row(o.id);
}

// Initializes and shows ACL create/edit form
rcube_webmail.prototype.acl_init_form = function(id)
{
    var ul, row, td, val = '', type = 'user', li_elements, body = $('body'),
        adv_ul = $('#advancedrights'), sim_ul = $('#simplerights'),
        name_input = $('#acluser'), type_list = $('#usertype');

    if (!this.acl_form) {
        var fn = function () { $('input[value="user"]').prop('checked', true); };
        name_input.click(fn).keypress(fn);
    }

    this.acl_form = $('#aclform');

    // Hide unused items
    if (this.env.acl_advanced) {
        adv_ul.show();
        sim_ul.hide();
        ul = adv_ul;
    }
    else {
        sim_ul.show();
        adv_ul.hide();
        ul = sim_ul;
    }

    // initialize form fields
    li_elements = $(':checkbox', ul);
    li_elements.attr('checked', false);

    if (id && (row = this.acl_list.rows[id])) {
        row = row.obj;
        li_elements.map(function() {
            td = $('td.'+this.id, row);
            if (td.length && td.hasClass('enabled'))
                this.checked = true;
        });

        if (!this.env.acl_specials.length || $.inArray(id, this.env.acl_specials) < 0)
            val = $(row).data('userid');
        else
            type = id;
    }
    // mark read (lrs) rights by default
    else {
        li_elements.filter(function() { return this.id.match(/^acl([lrs]|read)$/); }).prop('checked', true);
    }

    name_input.val(val);
    $('input[value='+type+']').prop('checked', true);

    this.acl_id = id;

    var buttons = {}, me = this, body = document.body;

    buttons[this.get_label('save')] = function(e) { me.command('acl-save'); };
    buttons[this.get_label('cancel')] = function(e) { me.command('acl-cancel'); };

    // display it as popup
    this.acl_popup = this.show_popup_dialog(
        this.acl_form.show(),
        id ? this.get_label('acl.editperms') : this.get_label('acl.newuser'),
        buttons,
        {
            button_classes: ['mainaction submit', 'cancel'],
            modal: true,
            closeOnEscape: true,
            close: function(e, ui) {
                (me.is_framed() ? parent.rcmail : me).ksearch_hide();
                me.acl_form.appendTo(body).hide();
                $(this).remove();
                window.focus(); // focus iframe
            }
        }
    );

    if (type == 'user')
        name_input.focus();
    else
        $('input:checked', type_list).focus();
}

// Returns class name according to ACL comparison result
rcube_webmail.prototype.acl_class = function(acl1, acl2)
{
    var i, len, found = 0;

    acl1 = String(acl1);
    acl2 = String(acl2);

    for (i=0, len=acl2.length; i<len; i++)
        if (acl1.indexOf(acl2[i]) > -1)
            found++;

    if (found == len)
        return 'enabled';
    else if (found)
        return 'partial';

    return 'disabled';
}
PK}c�\�dG9qq#squirrelmail_usercopy/composer.jsonnu�[���{
    "name": "roundcube/squirrelmail_usercopy",
    "type": "roundcube-plugin",
    "description": "Copy a new users identity and settings from a nearby Squirrelmail installation",
    "license": "GPL-3.0-or-later",
    "version": "1.6",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PK}c�\�{D�*�*/squirrelmail_usercopy/squirrelmail_usercopy.phpnu�[���<?php

/**
 * Copy a new users identities and contacts from a nearby Squirrelmail installation
 *
 * @version 1.6
 * @author Thomas Bruederli, Johannes Hessellund, pommi, Thomas Lueder
 */
class squirrelmail_usercopy extends rcube_plugin
{
    public $task = 'login';

    private $prefs            = null;
    private $identities_level = 0;
    private $abook            = [];

    public function init()
    {
        $this->add_hook('user_create', [$this, 'create_user']);
        $this->add_hook('identity_create', [$this, 'create_identity']);
    }

    public function create_user($p)
    {
        $rcmail = rcmail::get_instance();

        // Read plugin's config
        $this->initialize();

        // read prefs and add email address
        $this->read_squirrel_prefs($p['user']);

        if (
            ($this->identities_level == 0 || $this->identities_level == 2)
            && $rcmail->config->get('squirrelmail_set_alias')
            && !empty($this->prefs['email_address'])
        ) {
            $p['user_email'] = $this->prefs['email_address'];
        }

        return $p;
    }

    public function create_identity($p)
    {
        $rcmail = rcmail::get_instance();

        // prefs are set in create_user()
        if ($this->prefs) {
            if (!empty($this->prefs['full_name'])) {
                $p['record']['name'] = $this->prefs['full_name'];
            }

            if (
                ($this->identities_level == 0 || $this->identities_level == 2)
                && !empty($this->prefs['email_address'])
            ) {
                $p['record']['email'] = $this->prefs['email_address'];
            }

            if (!empty($this->prefs['___signature___'])) {
                $p['record']['signature'] = $this->prefs['___signature___'];
            }

            if (!empty($this->prefs['reply_to'])) {
                $p['record']['reply-to'] = $this->prefs['reply_to'];
            }

            if (
                ($this->identities_level == 0 || $this->identities_level == 1)
                && isset($this->prefs['identities']) && $this->prefs['identities'] > 1
            ) {
                for ($i = 1; $i < $this->prefs['identities']; $i++) {
                    unset($ident_data);
                    $ident_data = ['name' => '', 'email' => '']; // required data

                    if (!empty($this->prefs['full_name'.$i])) {
                        $ident_data['name'] = $this->prefs['full_name'.$i];
                    }

                    if ($this->identities_level == 0 && !empty($this->prefs['email_address'.$i])) {
                        $ident_data['email'] = $this->prefs['email_address'.$i];
                    }
                    else {
                        $ident_data['email'] = $p['record']['email'];
                    }

                    if (!empty($this->prefs['reply_to'.$i])) {
                        $ident_data['reply-to'] = $this->prefs['reply_to'.$i];
                    }

                    if (!empty($this->prefs['___sig'.$i.'___'])) {
                        $ident_data['signature'] = $this->prefs['___sig'.$i.'___'];
                    }

                    // insert identity
                    $rcmail->user->insert_identity($ident_data);
                }
            }

            // copy address book
            $contacts  = $rcmail->get_address_book(null, true);
            $addresses = [];
            $groups    = [];

            if ($contacts && !empty($this->abook)) {
                foreach ($this->abook as $rec) {
                    // #1487096: handle multi-address and/or too long items
                    // #1487858: convert multi-address contacts into groups
                    $emails   = preg_split('/[;,]/', $rec['email'], -1, PREG_SPLIT_NO_EMPTY);
                    $group_id = null;

                    // create group for addresses
                    if (count($emails) > 1) {
                        if (!empty($groups[$rec['name']])) {
                            $group_id = $groups[$rec['name']];
                        }
                        else if ($group = $contacts->create_group($rec['name'])) {
                            $group_id = $group['id'];
                            $groups[$rec['name']] = $group_id;
                        }
                    }

                    // create contacts
                    foreach ($emails as $email) {
                        $contact_id = null;

                        if (!empty($addresses[$email])) {
                            $contact_id = $addresses[$email];
                        }
                        else if (rcube_utils::check_email(rcube_utils::idn_to_ascii($email))) {
                            $rec['email'] = rcube_utils::idn_to_utf8($email);
                            if ($contact_id = $contacts->insert($rec, true)) {
                                $addresses[$email] = $contact_id;
                            }
                        }

                        if (!empty($group_id) && !empty($contact_id)) {
                            $contacts->add_to_group($group_id, [$contact_id]);
                        }
                    }
                }
            }

            // mark identity as complete for following hooks
            $p['complete'] = true;
        }

        return $p;
    }

    private function initialize()
    {
        $rcmail = rcmail::get_instance();

        // Load plugin's config file
        $this->load_config();

        // Set identities_level for operations of this plugin
        $ilevel = $rcmail->config->get('squirrelmail_identities_level');
        if ($ilevel === null) {
            $ilevel = $rcmail->config->get('identities_level', 0);
        }

        $this->identities_level = intval($ilevel);
    }

    private function read_squirrel_prefs($uname)
    {
        $rcmail = rcmail::get_instance();

        /**** File based backend ****/
        if ($rcmail->config->get('squirrelmail_driver') == 'file' && ($srcdir = $rcmail->config->get('squirrelmail_data_dir'))) {
            if (($hash_level = $rcmail->config->get('squirrelmail_data_dir_hash_level')) > 0) {
                $srcdir = slashify($srcdir).chunk_split(substr(base_convert(crc32($uname), 10, 16), 0, $hash_level), 1, '/');
            }
            $file_charset = $rcmail->config->get('squirrelmail_file_charset');
            $prefsfile = slashify($srcdir) . $uname . '.pref';
            $abookfile = slashify($srcdir) . $uname . '.abook';
            $sigfile   = slashify($srcdir) . $uname . '.sig';
            $sigbase   = slashify($srcdir) . $uname . '.si';

            if (is_readable($prefsfile)) {
                $this->prefs = [];
                foreach (file($prefsfile) as $line) {
                    list($key, $value) = rcube_utils::explode('=', $line);
                    $this->prefs[$key] = $this->convert_charset(rtrim($value), $file_charset);
                }

                // also read signature file if exists
                if (is_readable($sigfile)) {
                    $sig = file_get_contents($sigfile);
                    $this->prefs['___signature___'] = $this->convert_charset($sig, $file_charset);
                }

                if (isset($this->prefs['identities']) && $this->prefs['identities'] > 1) {
                    for ($i=1; $i < $this->prefs['identities']; $i++) {
                        // read signature file if exists
                        if (is_readable($sigbase.$i)) {
                            $sig = file_get_contents($sigbase.$i);
                            $this->prefs['___sig'.$i.'___'] = $this->convert_charset($sig, $file_charset);
                        }
                    }
                }

                // parse address book file
                if (filesize($abookfile)) {
                    foreach (file($abookfile) as $line) {
                        $line = $this->convert_charset(rtrim($line), $file_charset);
                        $line = str_getcsv($line, "|");

                        $rec = [
                            'name'      => $line[0],
                            'firstname' => $line[1],
                            'surname'   => $line[2],
                            'email'     => $line[3],
                            'notes'     => $line[4],
                        ];

                        if ($rec['name'] && $rec['email']) {
                            $this->abook[] = $rec;
                        }
                    }
                }
            }
        }
        // Database backend
        else if ($rcmail->config->get('squirrelmail_driver') == 'sql') {
            $this->prefs = [];

            // connect to squirrelmail database
            $db = rcube_db::factory($rcmail->config->get('squirrelmail_dsn'));

            $db->set_debug($rcmail->config->get('sql_debug'));
            $db->db_connect('r'); // connect in read mode

            // retrieve prefs
            $userprefs_table = $rcmail->config->get('squirrelmail_userprefs_table');
            $address_table   = $rcmail->config->get('squirrelmail_address_table');
            $db_charset      = $rcmail->config->get('squirrelmail_db_charset');

            if ($db_charset) {
                $db->query('SET NAMES ' . $db_charset);
            }

            $sql_result = $db->query('SELECT * FROM ' . $db->quote_identifier($userprefs_table)
                .' WHERE `user` = ?', $uname); // ? is replaced with emailaddress

            while ($sql_array = $db->fetch_assoc($sql_result) ) { // fetch one row from result
                $this->prefs[$sql_array['prefkey']] = rcube_charset::convert(rtrim($sql_array['prefval']), $db_charset);
            }

            // retrieve address table data
            $sql_result = $db->query('SELECT * FROM ' . $db->quote_identifier($address_table)
                .' WHERE `owner` = ?', $uname); // ? is replaced with emailaddress

            // parse address book
            while ($sql_array = $db->fetch_assoc($sql_result) ) { // fetch one row from result
                $rec['name']      = rcube_charset::convert(rtrim($sql_array['nickname']), $db_charset);
                $rec['firstname'] = rcube_charset::convert(rtrim($sql_array['firstname']), $db_charset);
                $rec['surname']   = rcube_charset::convert(rtrim($sql_array['lastname']), $db_charset);
                $rec['email']     = rcube_charset::convert(rtrim($sql_array['email']), $db_charset);
                $rec['notes']     = rcube_charset::convert(rtrim($sql_array['label']), $db_charset);

                if ($rec['name'] && $rec['email']) {
                    $this->abook[] = $rec;
                }
            }
        } // end if 'sql'-driver
    }

    private function convert_charset($str, $charset = null)
    {
        if (!$charset) {
            return utf8_encode($str);
        }

        return rcube_charset::convert($str, $charset, RCUBE_CHARSET);
    }
}
PK}c�\�Q��@@)squirrelmail_usercopy/config.inc.php.distnu�[���<?php

// Driver - 'file' or 'sql'
$config['squirrelmail_driver'] = 'sql';

// full path to the squirrelmail data directory
$config['squirrelmail_data_dir'] = '';
$config['squirrelmail_data_dir_hash_level'] = 0;

// file charset - e.g. 'EUC-JP'. Leave empty for ASCII.
$config['squirrelmail_file_charset'] = '';

// 'mysql://dbuser:dbpass@localhost/database'
$config['squirrelmail_dsn'] = 'mysql://user:password@localhost/webmail';
$config['squirrelmail_db_charset'] = 'iso-8859-1';

$config['squirrelmail_address_table'] = 'address';
$config['squirrelmail_userprefs_table'] = 'userprefs';

// identities_level option value for squirrelmail plugin
// With this you can bypass/change identities_level checks
// for operations inside this plugin. See #1486773
$config['squirrelmail_identities_level'] = null;

// Set to false if you don't want the email address of the default identity
// (squirrelmail preference "email_address") to be saved as alias.
// Recommended: set to false if your squirrelmail config setting $edit_identity has been true.
$config['squirrelmail_set_alias'] = true;
PK}c�\���2
2
identicon/identicon.phpnu�[���<?php

/**
 * Identicon
 *
 * Plugin to display a unique github-like identification icons
 * for contacts/addresses that do not have a photo image.
 *
 * @todo: Make it optional and configurable via user preferences
 * @todo: Make color palettes match the current skin
 * @todo: Implement optional SVG generator
 *
 * @license GNU GPLv3+
 * @author Aleksander Machniak <alec@alec.pl>
 * @website http://roundcube.net
 */
class identicon extends rcube_plugin
{
    public $task = 'addressbook';


    /**
     * Plugin initialization.
     */
    function init()
    {
        $this->add_hook('contact_photo', [$this, 'contact_photo']);
    }

    /**
     * 'contact_photo' hook handler to inject an identicon image
     */
    function contact_photo($args)
    {
        // pre-conditions, exit if photo already exists or invalid input
        if (!empty($args['url']) || !empty($args['data'])
            || (empty($args['record']) && empty($args['email']))
        ) {
            return $args;
        }

        $rcmail = rcmail::get_instance();

        // supporting edit/add action may be tricky, let's not do this
        if ($rcmail->action == 'show' || $rcmail->action == 'photo') {
            $email = !empty($args['email']) ? $args['email'] : null;

            if (!$email && $args['record']) {
                $addresses = rcube_addressbook::get_col_values('email', $args['record'], true);
                if (!empty($addresses)) {
                    $email = $addresses[0];
                }
            }

            if ($email) {
                require_once __DIR__ . '/identicon_engine.php';

                if (!empty($args['attrib']['bg-color'])) {
                    $bgcolor = $args['attrib']['bg-color'];
                }
                else {
                    $bgcolor = rcube_utils::get_input_string('_bgcolor', rcube_utils::INPUT_GET);
                }

                $identicon = new identicon_engine($email, null, $bgcolor);

                if ($rcmail->action == 'show') {
                    // set photo URL using data-uri
                    if (($icon = $identicon->getBinary()) && ($icon = base64_encode($icon))) {
                        $mimetype    = $identicon->getMimetype();
                        $args['url'] = sprintf('data:%s;base64,%s', $mimetype, $icon);
                    }
                }
                else {
                    // send the icon to the browser
                    if ($identicon->sendOutput()) {
                        exit;
                    }
                }
            }
        }

        return $args;
    }
}
PK}c�\��yyidenticon/composer.jsonnu�[���{
    "name": "roundcube/identicon",
    "type": "roundcube-plugin",
    "description": "Displays Github-like identicons for contacts/addresses without photo specified.",
    "license": "GPL-3.0-or-later",
    "version": "0.1",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "php-gd": "*",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PK}c�\h�]��identicon/identicon_engine.phpnu�[���<?php

/**
 * @license GNU GPLv3+
 * @author Aleksander Machniak <alec@alec.pl>
 */
class identicon_engine
{
    private $ident;
    private $width;
    private $height;
    private $margin;
    private $binary;
    private $color;
    private $bgcolor  = '#F9F9F9';
    private $mimetype = 'image/png';
    private $palette  = [
        '#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3',
        '#03A9F4', '#00BCD4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39',
        '#FFEB3B', '#FFC107', '#FF9800', '#FF5722', '#795548', '#607D8B',
    ];
    private $grid = [
         0,  1,  2,  1,  0,
         3,  4,  5,  4,  3,
         6,  7,  8,  7,  6,
         9, 10, 11, 10,  9,
        12, 13, 14, 13, 12,
    ];

    const GRID_SIZE = 5;
    const ICON_SIZE = 150;


    /**
     * Class constructor
     *
     * @param string $ident   Unique identifier (email address)
     * @param int    $size    Icon size in pixels
     * @param string $bgcolor Icon background color
     */
    public function __construct($ident, $size = null, $bgcolor = null)
    {
        if (!$size) {
            $size = self::ICON_SIZE;
        }

        $this->ident  = $ident;
        $this->margin = (int) round($size / 10);
        $this->width  = (int) round(($size - $this->margin * 2) / self::GRID_SIZE) * self::GRID_SIZE + $this->margin * 2;
        $this->height = $this->width;

        if ($bgcolor) {
            if (preg_match('/^#?[0-9a-f]{6}$/', $bgcolor)) {
                if ($bgcolor[0] != '#') {
                    $bgcolor = "#{$bgcolor}";
                }
                $this->bgcolor = $bgcolor;
            }
            else if ($bgcolor === 'transparent') {
                $this->bgcolor = $bgcolor;
            }
        }

        $this->generate();
    }

    /**
     * Returns image mimetype
     */
    public function getMimetype()
    {
        return $this->mimetype;
    }

    /**
     * Returns the image in binary form
     */
    public function getBinary()
    {
        return $this->binary;
    }

    /**
     * Sends the image to the browser
     */
    public function sendOutput()
    {
        if ($this->binary) {
            $rcmail = rcmail::get_instance();
            $rcmail->output->future_expire_header(10 * 60);

            header('Content-Type: ' . $this->mimetype);
            header('Content-Size: ' . strlen($this->binary));
            echo $this->binary;

            return true;
        }

        return false;
    }

    /**
     * Icon generator
     */
    private function generate()
    {
        $ident = md5($this->ident, true);

        // set icon color
        $div         = intval(255/count($this->palette));
        $index       = intval(ord($ident[0]) / $div);
        $this->color = $this->palette[$index] ?? $this->palette[0];

        // set cell size
        $cell_width  = ($this->width - $this->margin * 2) / self::GRID_SIZE;
        $cell_height = ($this->height - $this->margin * 2) / self::GRID_SIZE;

        // create a grid
        foreach ($this->grid as $i => $idx) {
            $row_num    = intval($i / self::GRID_SIZE);
            $cell_num_h = $i - $row_num * self::GRID_SIZE;

            $this->grid[$i] = [
                'active' => ord($ident[$idx]) % 2 > 0,
                'x1'     => $cell_width * $cell_num_h + $this->margin,
                'y1'     => $cell_height * $row_num + $this->margin,
                'x2'     => $cell_width * ($cell_num_h + 1) + $this->margin,
                'y2'     => $cell_height * ($row_num + 1) + $this->margin,
            ];
        }

        // really generate the image using supported methods
        if (function_exists('imagepng')) {
            $this->generateGD();
        }
        else {
            // log an error
            $error = [
                'code'    => 500,
                'message' => "PHP-GD module not found. It's required by identicon plugin.",
            ];

            rcube::raise_error($error, true, false);
        }
    }

    /**
     * GD-based icon generation worker
     */
    private function generateGD()
    {
        // create an image, setup colors
        $image = imagecreate($this->width, $this->height);

        $color = $this->toRGB($this->color);
        $color = imagecolorallocate($image, $color[0], $color[1], $color[2]);

        if ($this->bgcolor === 'transparent') {
            $bgcolor = imagecolorallocatealpha($image, 0, 0, 0, 127);
            imagesavealpha($image, true);
        }
        else {
            $bgcolor = $this->toRGB($this->bgcolor);
            $bgcolor = imagecolorallocate($image, $bgcolor[0], $bgcolor[1], $bgcolor[2]);
        }

        imagefilledrectangle($image, 0, 0, $this->width, $this->height, $bgcolor);

        // draw the grid created in self::generate()
        foreach ($this->grid as $item) {
            if (!empty($item['active'])) {
                imagefilledrectangle($image, $item['x1'], $item['y1'], $item['x2'], $item['y2'], $color);
            }
        }

        // generate an image and save it to a variable
        ob_start();
        imagepng($image, null, 6, PNG_ALL_FILTERS);
        $this->binary = ob_get_contents();
        ob_end_clean();

        // cleanup
        imagedestroy($image);
    }

    /**
     * Convert #FFFFFF color format to 3-value RGB
     */
    private function toRGB($color)
    {
        preg_match('/^#?([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})/i', $color, $m);

        return [hexdec($m[1]), hexdec($m[2]), hexdec($m[3])];
    }
}
PK}c�\�e�-��userinfo/composer.jsonnu�[���{
    "name": "roundcube/userinfo",
    "type": "roundcube-plugin",
    "description": "Sample plugin that adds a new tab to the settings section to display some information about the current user.",
    "license": "GPL-3.0-or-later",
    "version": "1.2",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PK}c�\KFNc��userinfo/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = '用户信息';
$labels['created'] = '创建于';
$labels['lastlogin'] = '最近登录';
$labels['defaultidentity'] = '默认身份';
$labels['userid'] = 'ID';
PK}c�\��W��userinfo/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Асабістыя звесткі';
$labels['created'] = 'Створаны';
$labels['lastlogin'] = 'Апошні ўваход';
$labels['defaultidentity'] = 'Стандартная тоеснасць';
PK}c�\^/�Pkkuserinfo/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Потребителска информация';
$labels['infoforuser'] = 'Информация за $user';
$labels['created'] = 'Създаден';
$labels['lastlogin'] = 'Последен вход';
$labels['defaultidentity'] = 'Самоличност по подразбиране';
$labels['userid'] = 'ИН';
PK}c�\X�\��userinfo/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'User info';
$labels['infoforuser'] = 'Info for $user';
$labels['created'] = 'Created';
$labels['lastlogin'] = 'Last Login';
$labels['defaultidentity'] = 'Default Identity';
$labels['userid'] = 'ID';
PK}c�\��Nuserinfo/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Käyttäjätiedot';
$labels['infoforuser'] = 'Tietoja käyttäjästä $user';
$labels['created'] = 'Luotu';
$labels['lastlogin'] = 'Viimeisin kirjautuminen';
$labels['defaultidentity'] = 'Oletushenkilöys';
$labels['userid'] = 'Tunniste';
PK}c�\�
luserinfo/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Brukerinformasjon';
$labels['infoforuser'] = 'Informasjon for $user';
$labels['created'] = 'Opprettet';
$labels['lastlogin'] = 'Sist logget inn';
$labels['defaultidentity'] = 'Standard identitet';
$labels['userid'] = 'ID';
PK}c�\�,,userinfo/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Të dhëna Përdoruesi';
$labels['infoforuser'] = 'Të dhëna mbi $user';
$labels['created'] = 'Krijuar më';
$labels['lastlogin'] = 'Hyrja e Fundit';
$labels['defaultidentity'] = 'Identitet Parazgjedhje';
$labels['userid'] = 'ID';
PK}c�\����userinfo/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Kasutaja info';
$labels['created'] = 'Loodud';
$labels['lastlogin'] = 'Viimane logimine';
$labels['defaultidentity'] = 'Vaikeidentiteet';
$labels['userid'] = 'ID';
PK}c�\�/���userinfo/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'زانیاری بەکارهێنەر';
$labels['created'] = 'دروستکرا';
$labels['lastlogin'] = 'دوایین چوونەژوورەوە';
$labels['defaultidentity'] = 'ناسنامەی بنەڕەتی';
PK}c�\���&&userinfo/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Erabiltzailearen informazioa';
$labels['infoforuser'] = '$Erabiltzailearentzako informazioa';
$labels['created'] = 'Sortua';
$labels['lastlogin'] = 'Azken saioa';
$labels['defaultidentity'] = 'Lehenetsitako identitatea';
$labels['userid'] = 'ID';
PK}c�\�8�Tuserinfo/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Kullanıcı bilgileri';
$labels['infoforuser'] = '$user bilgileri';
$labels['created'] = 'Eklendi';
$labels['lastlogin'] = 'Son oturum açma';
$labels['defaultidentity'] = 'Varsayılan kimlik';
$labels['userid'] = 'Kod';
PK}c�\Ucԋuserinfo/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Información de usuario';
$labels['infoforuser'] = 'Información para $user';
$labels['created'] = 'Creado';
$labels['lastlogin'] = 'Ultimo ingreso';
$labels['defaultidentity'] = 'Identidad por defecto';
$labels['userid'] = 'ID';
PK}c�\0e����userinfo/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'nawnişani bakar henar';
$labels['created'] = 'Hat afirandin';
$labels['lastlogin'] = 'axrin hatna jurawa';
$labels['defaultidentity'] = 'Nasnameya Pêşsalixbûyî';
PK}c�\�5	userinfo/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informações do usuário';
$labels['infoforuser'] = 'Informações de $user';
$labels['created'] = 'Criado';
$labels['lastlogin'] = 'Último Login';
$labels['defaultidentity'] = 'Identidade Padrão';
$labels['userid'] = 'ID';
PK}c�\���juserinfo/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informācija par lietotāju';
$labels['infoforuser'] = 'Info par $user';
$labels['created'] = 'Izveidots';
$labels['lastlogin'] = 'Pēdējā pieteikšanās';
$labels['defaultidentity'] = 'Noklusētā identitāte';
$labels['userid'] = 'ID';
PK}c�\gRz�44userinfo/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informácie o používateľovi';
$labels['infoforuser'] = 'Informácia pre používateľa $user';
$labels['created'] = 'Vytvorené';
$labels['lastlogin'] = 'Posledné prihlásenie';
$labels['defaultidentity'] = 'Predvolená identita';
$labels['userid'] = 'ID';
PK}c�\�z{�userinfo/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Uživatel';
$labels['infoforuser'] = 'Informace pro $user';
$labels['created'] = 'Vytvořen';
$labels['lastlogin'] = 'Naspoledy přihlášen';
$labels['defaultidentity'] = 'Výchozí identita';
$labels['userid'] = 'ID';
PK}c�\NC'k��userinfo/localization/ti.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'ሓብሬታ በዓል ዋና ';
$labels['created'] = 'እዋን ፍጥረት';
$labels['lastlogin'] = 'እዋን እታው';
$labels['defaultidentity'] = 'ዘይተለወጠ መለለይ መንነት';
PK}c�\�\3[��userinfo/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Gebruikersinformatie';
$labels['created'] = 'Aangemaakt';
$labels['lastlogin'] = 'Laatste aanmelding';
$labels['defaultidentity'] = 'Standaard identiteit';
PK}c�\�!userinfo/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Інформація';
$labels['created'] = 'Створено';
$labels['lastlogin'] = 'Останнє входження';
$labels['defaultidentity'] = 'Типовий профіль';
$labels['userid'] = 'ID';
PK}c�\T�����userinfo/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Brûkersynformaasje';
$labels['created'] = 'Oanmakke';
$labels['lastlogin'] = 'Lêste kear ynlogge';
$labels['defaultidentity'] = 'Standert Identiteit';
PK}c�\�7HTuserinfo/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Benutzerinfo';
$labels['infoforuser'] = 'Informationen zu $user';
$labels['created'] = 'Erstellt';
$labels['lastlogin'] = 'Letztes Login';
$labels['defaultidentity'] = 'Standard-Absender';
$labels['userid'] = 'ID';
PK}c�\�J  userinfo/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Información del usuario';
$labels['infoforuser'] = 'Información para $user';
$labels['created'] = 'Creado';
$labels['lastlogin'] = 'Último ingreso';
$labels['defaultidentity'] = 'Identidad predeterminada';
$labels['userid'] = 'ID';
PK}c�\$g�(��userinfo/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Foydalanuvchi haqida axborot';
$labels['created'] = 'Yaratildi';
$labels['lastlogin'] = 'So‘nggi kirish';
$labels['defaultidentity'] = 'Odatdagi identifikator';
PK}c�\gL��userinfo/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Օգտվողի տվյալներ';
$labels['created'] = 'Ստեղծված';
$labels['lastlogin'] = 'Վերջին մուտքը`';
$labels['defaultidentity'] = 'Լռելյալ ինքնությունն';
PK}c�\��N0��userinfo/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'User info';
$labels['created'] = 'Created';
$labels['lastlogin'] = 'Last Login';
$labels['defaultidentity'] = 'Default Identity';
PK}c�\���userinfo/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = '使用者資訊';
$labels['infoforuser'] = '$user 的資訊';
$labels['created'] = '建立時間';
$labels['lastlogin'] = '上次登入';
$labels['defaultidentity'] = '預設身份';
$labels['userid'] = 'ID';
PK}c�\U�N�userinfo/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informació de l\'usuari';
$labels['infoforuser'] = 'Informació per a $user';
$labels['created'] = 'Creat';
$labels['lastlogin'] = 'Darrera connexió';
$labels['defaultidentity'] = 'Identitat per defecte';
$labels['userid'] = 'ID';
PK}c�\U����userinfo/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Information de usator';
$labels['created'] = 'Create';
$labels['lastlogin'] = 'Ultime session';
$labels['defaultidentity'] = 'Identitate predefinite';
$labels['userid'] = 'ID';
PK}c�\9#� ��userinfo/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Korisničke informacije';
$labels['created'] = 'Kreirano';
$labels['lastlogin'] = 'Zadnja prijava';
$labels['defaultidentity'] = 'Glavni identitet';
PK}c�\MxJ@@userinfo/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Информация';
$labels['infoforuser'] = 'Информация для $user';
$labels['created'] = 'Создан';
$labels['lastlogin'] = 'Последний вход';
$labels['defaultidentity'] = 'Профиль по умолчанию';
$labels['userid'] = 'ID';
PK}c�\Օ�;��userinfo/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'اطلاعات کاربر';
$labels['created'] = 'ایجاد شده';
$labels['lastlogin'] = 'آخرین ورود';
$labels['defaultidentity'] = 'شناسه پیش‌فرض';
PK}c�\uN��##userinfo/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Notandaupplýsingar';
$labels['infoforuser'] = 'Upplýsingar um $user';
$labels['created'] = 'Búið til';
$labels['lastlogin'] = 'Síðasta innskráning';
$labels['defaultidentity'] = 'Sjálfgefið auðkenni';
$labels['userid'] = 'Auðkenni';
PK}c�\���\��userinfo/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Thông tin người dùng';
$labels['created'] = 'Được tạo';
$labels['lastlogin'] = 'Lần đăng nhập cuối';
$labels['defaultidentity'] = 'Nhận diện mặc định';
PK}c�\���  userinfo/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'ข้อมูลผู้ใช้';
$labels['created'] = 'สร้าง';
$labels['lastlogin'] = 'เข้าระบบล่าสุด';
$labels['defaultidentity'] = 'รหัสประจำตัวเริ่มต้น';
PK}c�\�]FbQQuserinfo/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'معلومات المستخدم';
$labels['infoforuser'] = 'معلومات المستخدم $user';
$labels['created'] = 'أُنشئ في';
$labels['lastlogin'] = 'آخر دخول';
$labels['defaultidentity'] = 'الهوية الافتراضية';
$labels['userid'] = 'المُعَرّف';
PK}c�\�SQ���userinfo/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Məlumat';
$labels['created'] = 'Yaradılma tarixi';
$labels['lastlogin'] = 'Sonuncu giriş';
$labels['defaultidentity'] = 'Default profil';
PK}c�\L�����userinfo/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informasi pengguna';
$labels['created'] = 'Telah dibuat';
$labels['lastlogin'] = 'Masuk Terakhir';
$labels['defaultidentity'] = 'Identitas Standar';
$labels['userid'] = 'ID';
PK}c�\M���22userinfo/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Felhasználói információ';
$labels['infoforuser'] = 'Információ $user számára';
$labels['created'] = 'Létrehozva';
$labels['lastlogin'] = 'Utolsó bejelentkezés';
$labels['defaultidentity'] = 'Alapértelmezett azonosító';
$labels['userid'] = 'ID';
PK}c�\'w���userinfo/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informații utilizator';
$labels['created'] = 'Data creării';
$labels['lastlogin'] = 'Ultima autentificare';
$labels['defaultidentity'] = 'Identitate principală';
$labels['userid'] = 'ID';
PK}c�\ze�5��userinfo/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informoj pri uzanto';
$labels['created'] = 'Kreita';
$labels['lastlogin'] = 'Lasta ensaluto';
$labels['defaultidentity'] = 'Apriora idento';
PK}c�\ڝ�2userinfo/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Infos utilisateur';
$labels['infoforuser'] = 'Renseignements pour $user';
$labels['created'] = 'Créé';
$labels['lastlogin'] = 'Dernière connexion';
$labels['defaultidentity'] = 'Identité par défaut';
$labels['userid'] = 'ID';
PK}c�\�����userinfo/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informacije o korisniku';
$labels['created'] = 'Stvoreno';
$labels['lastlogin'] = 'Zadnja prijava (login)';
$labels['defaultidentity'] = 'Preddefinirani identitet';
$labels['userid'] = 'ID';
PK}c�\hJY�userinfo/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informacje';
$labels['infoforuser'] = 'Informacje o $user';
$labels['created'] = 'Utworzony';
$labels['lastlogin'] = 'Ostatnie logowanie';
$labels['defaultidentity'] = 'Domyślna tożsamość';
$labels['userid'] = 'Id';
PK}c�\>)8ǭ�userinfo/localization/mr_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'वापरकर्त्याची माहिती';
$labels['created'] = 'निर्माण केलेले';
PK}c�\�0userinfo/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'ユーザー情報';
$labels['infoforuser'] = '$user の情報';
$labels['created'] = '作成日時';
$labels['lastlogin'] = '最後のログイン';
$labels['defaultidentity'] = '既定の識別情報';
$labels['userid'] = 'ID';
PK}c�\�\��userinfo/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Brukarinfo';
$labels['created'] = 'Laga';
$labels['lastlogin'] = 'Sist logga inn';
$labels['defaultidentity'] = 'Standardidentitet';
PK}c�\ےV���userinfo/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Información d\'usuariu';
$labels['created'] = 'Creáu';
$labels['lastlogin'] = 'Aniciu de sesión caberu';
$labels['defaultidentity'] = 'Identidá por defeutu';
PK}c�\��"		userinfo/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Подаци о кориснику';
$labels['created'] = 'Направљено';
$labels['lastlogin'] = 'Последња пријава';
$labels['defaultidentity'] = 'подразумевани идентитет';
PK}c�\�	�p��userinfo/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Benotzer-Info';
$labels['created'] = 'Erstallt';
$labels['lastlogin'] = 'Leschte Login';
$labels['defaultidentity'] = 'Standard-Identitéit';
PK}c�\�+/��userinfo/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'اطلاعات کاربر';
$labels['created'] = 'ایجاد شد';
$labels['lastlogin'] = 'آخرین ورود';
$labels['defaultidentity'] = 'هویت پیش فرض';
PK}c�\
w*��userinfo/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Titouroù an arveriad';
$labels['created'] = 'Krouet';
$labels['lastlogin'] = 'Kennask diwezhañ';
$labels['defaultidentity'] = 'Identelezh dre ziouer';
$labels['userid'] = 'Naoudi';
PK}c�\���userinfo/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Информации за корисникот ';
$labels['created'] = 'Создадени ';
$labels['lastlogin'] = 'Последно најавување ';
$labels['defaultidentity'] = 'Стандарден идентитет ';
PK}c�\*�v�55userinfo/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'ព័ត៌មាន​អ្នក​ប្រើ';
$labels['created'] = 'បាន​បង្កើត';
$labels['lastlogin'] = 'ចូល​ចុងក្រោយ';
$labels['defaultidentity'] = 'អត្តសញ្ញាណ​លំនាំដើម';
PK}c�\!dV��userinfo/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Хэрэглэгчийн мэдээлэл';
$labels['created'] = 'Үүссэн';
$labels['lastlogin'] = 'Сүүлчийн нэвтрэлт';
$labels['defaultidentity'] = 'Үндсэн мэдээлэл';
PK}c�\�\�EEuserinfo/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'פרטי המשתמש';
$labels['infoforuser'] = 'מידע עבור user$';
$labels['created'] = 'נוצר';
$labels['lastlogin'] = 'הכמיסה האחרונה למערכת';
$labels['defaultidentity'] = 'זהות ברירת מחדל';
$labels['userid'] = 'קוד זיהוי';
PK}c�\�9k�userinfo/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Faisnéis an úsáideora';
$labels['created'] = 'Cruthaithe';
$labels['lastlogin'] = 'Ceangailte an uair dheireanach';
$labels['defaultidentity'] = 'An chéannacht réamhshocraithe';
$labels['userid'] = 'Aitheantas';
PK}c�\�~�userinfo/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Brugerinfo';
$labels['infoforuser'] = 'Information til $user';
$labels['created'] = 'Oprettet';
$labels['lastlogin'] = 'Sidste login';
$labels['defaultidentity'] = 'Standardidentitet';
$labels['userid'] = 'ID';
PK}c�\8���userinfo/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Podatki o uporabniku';
$labels['created'] = 'Ustvarjen';
$labels['lastlogin'] = 'Zadnja prijava';
$labels['defaultidentity'] = 'Privzeta identiteta';
PK}c�\v���userinfo/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'معلومات المستخدم';
$labels['created'] = 'تم إنشاؤه';
$labels['lastlogin'] = 'آخر تسجيلٍ للدخول';
$labels['defaultidentity'] = 'الهوية الإفتراضية';
PK}c�\H�userinfo/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Benutzerinformation';
$labels['infoforuser'] = 'Info für $user';
$labels['created'] = 'Angelegt';
$labels['lastlogin'] = 'Letzte Anmeldung';
$labels['defaultidentity'] = 'Standardidentität';
$labels['userid'] = 'Kennung';
PK}c�\�Cf�userinfo/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Användarinfo';
$labels['infoforuser'] = 'Info för $user';
$labels['created'] = 'Skapad';
$labels['lastlogin'] = 'Senast inloggad';
$labels['defaultidentity'] = 'Standardidentitet';
$labels['userid'] = 'ID';
PK}c�\�a�77userinfo/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'ئىشلەتكۈچى ئۇچۇرى';
$labels['infoforuser'] = 'user$ ئۇچۇرى';
$labels['created'] = 'قۇرۇلدى';
$labels['lastlogin'] = 'ئاخىرقى كىرىش';
$labels['defaultidentity'] = 'سۈكۈت كىملىك';
$labels['userid'] = 'نۇمۇر';
PK}c�\��:�userinfo/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = '사용자 정보';
$labels['infoforuser'] = '$user 정보';
$labels['created'] = '생성 날짜';
$labels['lastlogin'] = '마지막 로그인 날짜';
$labels['defaultidentity'] = '기본 신원';
$labels['userid'] = 'ID';
PK}c�\���userinfo/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Información de persoa usuaria';
$labels['created'] = 'Creado';
$labels['lastlogin'] = 'Última conexión';
$labels['defaultidentity'] = 'Identidade predeterminada';
PK}c�\Uz7userinfo/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informazioni utente';
$labels['infoforuser'] = 'Informazioni per $user';
$labels['created'] = 'Creato';
$labels['lastlogin'] = 'Ultimo Login';
$labels['defaultidentity'] = 'Identità predefinita';
$labels['userid'] = 'ID';
PK}c�\�I�userinfo/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Información de usuario';
$labels['infoforuser'] = 'Info para $user';
$labels['created'] = 'Creado';
$labels['lastlogin'] = 'Último Ingreso';
$labels['defaultidentity'] = 'Identidad predeterminada';
$labels['userid'] = 'ID';
PK}c�\�L�"DDuserinfo/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'ഉപയോക്താവിന്റെ വിവരം';
$labels['created'] = 'നിര്‍മ്മിച്ചു';
$labels['lastlogin'] = 'അവസാന പ്രവേശനം';
$labels['defaultidentity'] = 'സാധാരണ വ്യക്തിത്വം';
PK}c�\�q�userinfo/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Gebruikersinformatie';
$labels['infoforuser'] = 'Informatie over $user';
$labels['created'] = 'Aangemaakt';
$labels['lastlogin'] = 'Laatste aanmelding';
$labels['defaultidentity'] = 'Standaardidentiteit';
$labels['userid'] = 'ID';
PK}c�\a��userinfo/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Gwybodaeth defnyddiwr';
$labels['infoforuser'] = 'Gwybodaeth ar gyfer $user';
$labels['created'] = 'Crëwyd';
$labels['lastlogin'] = 'Mewngofnodiad diwethaf';
$labels['defaultidentity'] = 'Personoliaeth arferol';
$labels['userid'] = 'ID';
PK}c�\X�\��userinfo/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'User info';
$labels['infoforuser'] = 'Info for $user';
$labels['created'] = 'Created';
$labels['lastlogin'] = 'Last Login';
$labels['defaultidentity'] = 'Default Identity';
$labels['userid'] = 'ID';
PK}c�\��X�userinfo/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Brúkara upplýsing';
$labels['infoforuser'] = 'Upplýsingar fyri brúkara';
$labels['created'] = 'Stovnaður';
$labels['lastlogin'] = 'Seinast innritaður';
$labels['defaultidentity'] = 'Sjálvsett samleiki';
$labels['userid'] = 'ID';
PK}c�\���((userinfo/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informacija apie naudotoją';
$labels['infoforuser'] = 'Informacija apie $user';
$labels['created'] = 'Sukurtas';
$labels['lastlogin'] = 'Paskutinį kartą prisijungė';
$labels['defaultidentity'] = 'Numatytoji tapatybė';
$labels['userid'] = 'ID';
PK}c�\�!!!userinfo/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Informações do utilizador';
$labels['infoforuser'] = 'Informações de $user';
$labels['created'] = 'Criado em';
$labels['lastlogin'] = 'Último acesso em';
$labels['defaultidentity'] = 'Identidade pré-definida';
$labels['userid'] = 'ID';
PK}c�\�꜅�userinfo/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Userinfo plugin            |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-userinfo/
*/

$labels['userinfo'] = 'Πληροφορίες χρήστη ';
$labels['infoforuser'] = 'Πληροφορίες χρήστη $user';
$labels['created'] = 'Δημιουργηθηκε';
$labels['lastlogin'] = 'Τελευταια συνδεση';
$labels['defaultidentity'] = 'Προκαθορισμένη ταυτότητα';
$labels['userid'] = 'Ταυτότητα';
PK}c�\�NI�

userinfo/userinfo.phpnu�[���<?php

/**
 * Sample plugin that adds a new tab to the settings section
 * to display some information about the current user
 */
class userinfo extends rcube_plugin
{
    public $task    = 'settings';
    public $noajax  = true;
    public $noframe = true;

    function init()
    {
        $this->add_texts('localization/', ['userinfo']);
        $this->add_hook('settings_actions', [$this, 'settings_actions']);
        $this->register_action('plugin.userinfo', [$this, 'infostep']);
    }

    function settings_actions($args)
    {
        $args['actions'][] = [
            'action' => 'plugin.userinfo',
            'class'  => 'userinfo',
            'label'  => 'userinfo',
            'domain' => 'userinfo',
        ];

        return $args;
    }

    function infostep()
    {
        $this->register_handler('plugin.body', [$this, 'infohtml']);

        $rcmail = rcmail::get_instance();
        $rcmail->output->set_pagetitle($this->gettext('userinfo'));
        $rcmail->output->send('plugin');
    }

    function infohtml()
    {
        $rcmail   = rcmail::get_instance();
        $user     = $rcmail->user;
        $identity = $user->get_identity();

        $table = new html_table(['cols' => 2, 'class' => 'propform']);

        $table->add('title', html::label('', rcube::Q($this->gettext('userid'))));
        $table->add('', rcube::Q($user->ID));

        $table->add('title', html::label('', rcube::Q($this->gettext('username'))));
        $table->add('', rcube::Q($user->data['username']));

        $table->add('title', html::label('', rcube::Q($this->gettext('server'))));
        $table->add('', rcube::Q($user->data['mail_host']));

        $table->add('title', html::label('', rcube::Q($this->gettext('created'))));
        $table->add('', rcube::Q($user->data['created']));

        $table->add('title', html::label('', rcube::Q($this->gettext('lastlogin'))));
        $table->add('', rcube::Q($user->data['last_login']));

        $table->add('title', html::label('', rcube::Q($this->gettext('defaultidentity'))));
        $table->add('', rcube::Q($identity['name'] . ' <' . $identity['email'] . '>'));

        $legend = rcube::Q($this->gettext(['name' => 'infoforuser', 'vars' => ['user' => $user->get_username()]]));
        $out    = html::tag('fieldset', '', html::tag('legend', '', $legend) . $table->show());

        return html::div(['class' => 'box formcontent'],
            html::div(['class' => 'boxtitle'], $this->gettext('userinfo'))
            . html::div(['class' => 'boxcontent'], $out)
        );
    }
}
PK}c�\G��<SShide_blockquote/composer.jsonnu�[���{
    "name": "roundcube/hide_blockquote",
    "type": "roundcube-plugin",
    "description": "This allows to hide long blocks of cited text in messages.",
    "license": "GPL-3.0-or-later",
    "version": "1.0",
    "authors": [
        {
            "name": "Aleksander Machniak",
            "email": "alec@alec.pl",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PK}c�\�t��&hide_blockquote/hide_blockquote.min.jsnu�[���/**
 * Hide Blockquotes plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */
function hide_blockquote(){var t=rcmail.env.blockquote_limit;t<=0||$("div.message-part div.pre > blockquote",$("#messagebody")).each(function(){var e,i=$(this);$("blockquote").before(document.createTextNode("\n")),(e=i.text().trim().split(/\n/)).length<=t&&i.height()<=15*t||(e=$('<blockquote class="blockquote-header">').css({"white-space":"nowrap",overflow:"hidden",position:"relative"}).text(e[0]),$('<span class="blockquote-link"></span>').css({position:"absolute","z-Index":2}).text(rcmail.get_label("hide_blockquote.show")).data("parent",e).click(function(){var e=$(this),t=e.data("parent"),o=t.is(":visible");e.text(rcmail.get_label(o?"hide":"show","hide_blockquote")).detach().appendTo(o?i:t).toggleClass("collapsed"),t[o?"hide":"show"](),i[o?"show":"hide"]()}).appendTo(e),i.hide().css({position:"relative"}).before(e))})}window.rcmail&&rcmail.addEventListener("init",function(){hide_blockquote()});
PK}c�\��ȅ��&hide_blockquote/localization/zh_CN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = '隐藏';
$labels['show'] = '显示';
$labels['quotelimit'] = '隐藏引用当行数大于';
PK}c�\���A��&hide_blockquote/localization/be_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Схаваць';
$labels['show'] = 'Паказаць';
$labels['quotelimit'] = 'Хаваць цытаванне, калі колькасць радкоў пераўзыходзіць';
PK}c�\�c�Y��&hide_blockquote/localization/bg_BG.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Скрий';
$labels['show'] = 'Покажи';
$labels['quotelimit'] = 'Скрива цитатите когато броя редове е по-голям от';
PK}c�\J�y��&hide_blockquote/localization/en_US.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels = [];
$labels['hide'] = 'Hide';
$labels['show'] = 'Show';
$labels['quotelimit'] = 'Hide citation when lines count is greater than';
PK}c�\0�T��&hide_blockquote/localization/fi_FI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Piilota';
$labels['show'] = 'Näytä';
$labels['quotelimit'] = 'Piilota lainaus rivejä ollessa enemmän kuin';
PK}c�\�:!'��&hide_blockquote/localization/nb_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Skjul';
$labels['show'] = 'Vis';
$labels['quotelimit'] = 'Skjul sitat når antall linjer er flere enn';
PK}c�\m>��&hide_blockquote/localization/sq_AL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Fshihe';
$labels['show'] = 'Shfaqe';
$labels['quotelimit'] = 'Fshihe citimin kur numri i rreshtave është më i madh se';
PK}c�\���!��&hide_blockquote/localization/et_EE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Peida';
$labels['show'] = 'Näita';
$labels['quotelimit'] = 'Peida tsitaat kui ridade arv on suurem kui';
PK}c�\4h�F��&hide_blockquote/localization/ku_IQ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'شاردنەوە';
$labels['show'] = 'پیشاندان';
$labels['quotelimit'] = 'بەڵگەهێنانەوە بشارەوە کاتێک ژمارەی هێڵەکان گەورەتربوون لە';
PK}c�\������&hide_blockquote/localization/eu_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ezkutatu';
$labels['show'] = 'Erakutsi';
$labels['quotelimit'] = 'Ezkutatu aipamena lerroen kopurua hau baino handiagoa denean';
PK}c�\��*���&hide_blockquote/localization/tr_TR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Gizle';
$labels['show'] = 'Görüntüle';
$labels['quotelimit'] = 'Satır sayısı şundan fazla ise alıntılar gizlensin:';
PK}c�\�����&hide_blockquote/localization/es_AR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ocultar';
$labels['show'] = 'Mostrar';
$labels['quotelimit'] = 'Ocultar el mail citado cuando el número de líneas sea mayor que';
PK}c�\pp�	CC&hide_blockquote/localization/ur_PK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['show'] = 'دیکھایں';
PK�c�\*���#hide_blockquote/localization/ku.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Veşêre';
$labels['show'] = 'Nîşan bide';
$labels['quotelimit'] = 'Jêgirtinê bigire dema ku hejmara rêzan zêdetir be ji';
PK�c�\X�����&hide_blockquote/localization/pt_BR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ocultar';
$labels['show'] = 'Exibir';
$labels['quotelimit'] = 'Ocultar a citação quando o número de linhas for maior que';
PK�c�\HM���&hide_blockquote/localization/lv_LV.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Slēpt';
$labels['show'] = 'Rādīt';
$labels['quotelimit'] = 'Slēpt citātu kad līniju skaits ir lielāks kā';
PK�c�\~����&hide_blockquote/localization/sk_SK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Skryť';
$labels['show'] = 'Zobraziť';
$labels['quotelimit'] = 'Skryť citovaný text, ak je počet riadkov väčší než';
PK�c�\'J����&hide_blockquote/localization/cs_CZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Skrýt';
$labels['show'] = 'Zobrazit';
$labels['quotelimit'] = 'Skrýt citaci pokud je počet řádků větší než';
PK�c�\K���&hide_blockquote/localization/nl_BE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Verberg';
$labels['show'] = 'Weergeven';
$labels['quotelimit'] = 'Verberg citaat wanneer het aantal regels groter is dan';
PK�c�\�9F���&hide_blockquote/localization/uk_UA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Приховати';
$labels['show'] = 'Показати';
$labels['quotelimit'] = 'Приховати цитування, коли кількість рядків більша, ніж ';
PK�c�\!�f��&hide_blockquote/localization/fy_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ferstopje';
$labels['show'] = 'Fertoane';
$labels['quotelimit'] = 'Sitaasje ferstopje at rigel telling grutter is as';
PK�c�\�/-ѥ�&hide_blockquote/localization/de_CH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'ausblenden';
$labels['show'] = 'einblenden';
$labels['quotelimit'] = 'Zitate verbergen ab einer Zeilenlänge von';
PK�c�\(ML��'hide_blockquote/localization/es_419.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ocultar';
$labels['show'] = 'Mostrar';
$labels['quotelimit'] = 'Ocultar la cita cuando el número de lineas sea mayor a ';
PK�c�\>4N\��#hide_blockquote/localization/uz.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Berkitish';
$labels['show'] = 'Ko‘rsatish';
$labels['quotelimit'] = 'Qatorlar soni ko‘proq bo‘lsa, sarlavhani yashirish';
PK�c�\�b�cBB#hide_blockquote/localization/es.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | plugins/hide_blockquote/localization/<lang>.inc                       |
 |                                                                       |
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 | Copyright (C) 2012-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 |                                                                       |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/
$labels['hide'] = 'Ocultar';
$labels['show'] = 'Mostrar';
$labels['quotelimit'] = 'Ocultar cita cuando el número de líneas es mayor de';
?>
PK�c�\��T���&hide_blockquote/localization/hy_AM.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Թաքցնել';
$labels['show'] = 'Ցուցադրել';
$labels['quotelimit'] = 'Թաքցնել ցիտումը երբ տողերի քանակը գերազանցում է';
PK�c�\Z����&hide_blockquote/localization/en_CA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Hide';
$labels['show'] = 'Show';
$labels['quotelimit'] = 'Hide citation when lines count is greater than';
PK�c�\4���&hide_blockquote/localization/zh_TW.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = '隱藏';
$labels['show'] = '顯示';
$labels['quotelimit'] = '當行數大於此數目,就隱藏引文:';
PK�c�\�8�
��&hide_blockquote/localization/ca_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Amaga';
$labels['show'] = 'Mostra';
$labels['quotelimit'] = 'Amaga la cita quan el nombre de línies sigui més gran de';
PK�c�\t/�Z��#hide_blockquote/localization/ia.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Celar';
$labels['show'] = 'Monstrar';
$labels['quotelimit'] = 'Celar le citation quando le numero de lineas es superior a';
PK�c�\Ro^��&hide_blockquote/localization/bs_BA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Sakrij';
$labels['show'] = 'Prikaži';
$labels['quotelimit'] = 'Sakrij citate kada je broj linija veći od';
PK�c�\;NMC��&hide_blockquote/localization/ru_RU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Скрыть';
$labels['show'] = 'Показать';
$labels['quotelimit'] = 'Скрыть цитату, если число строк более чем';
PK�c�\}~�%��&hide_blockquote/localization/fa_IR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'مخفی کردن';
$labels['show'] = 'نشان دادن';
$labels['quotelimit'] = 'پنهان کردن نقل‌قول وقتی تعداد خطوط بیشتر است از';
PK�c�\t�g���&hide_blockquote/localization/is_IS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Fela';
$labels['show'] = 'Birta';
$labels['quotelimit'] = 'Fela tilvitnun þegar fjöldi lína er meiri en';
PK�c�\��1ԩ�&hide_blockquote/localization/vi_VN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ẩn';
$labels['show'] = 'Hiển thị';
$labels['quotelimit'] = 'Ẩn trích dẫn khi tổng số dòng lớn hơn';
PK�c�\���'&hide_blockquote/localization/th_TH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'ซ่อน';
$labels['show'] = 'แสดง';
$labels['quotelimit'] = 'ซ่อนการอ้างอิงเมื่อการนับบรรทัดมีค่ามากกว่า';
PK�c�\�+���&hide_blockquote/localization/ar_SA.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'إخفاء';
$labels['show'] = 'إظهار';
$labels['quotelimit'] = 'اخف الاقتباس اذا كان عدد الاسطر اكبر من ';
PK�c�\�/6�&hide_blockquote/localization/az_AZ.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Gizlət';
$labels['show'] = 'Göstər';
$labels['quotelimit'] = 'Sayğac xətti çoxdursa sitatı gizlə';
PK�c�\"��>��&hide_blockquote/localization/id_ID.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Sembunyi';
$labels['show'] = 'Tampil';
$labels['quotelimit'] = 'Sembunyikan kutipan ketika jumlah baris lebih besar dari';
PK�c�\w�R?]]$hide_blockquote/localization/tzl.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ascunçarh';
$labels['show'] = 'Mostrarh';
PK�c�\�=�=��&hide_blockquote/localization/hu_HU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Elrejtés';
$labels['show'] = 'Megjelenítés';
$labels['quotelimit'] = 'Idézet elrejtése ha a sorok száma több mint';
PK�c�\W�B��&hide_blockquote/localization/ro_RO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ascunde';
$labels['show'] = 'Afișează';
$labels['quotelimit'] = 'Ascunde citațiile dacă numărul de linii este mai mare ca';
PK�c�\(����#hide_blockquote/localization/eo.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Kaŝi';
$labels['show'] = 'Montri';
$labels['quotelimit'] = 'Kaŝi citaĵon kiam la nombro de linioj estas pligranda ol';
PK�c�\:eƉGG&hide_blockquote/localization/bn_BD.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['show'] = 'দেখানো';
PK�c�\�����&hide_blockquote/localization/fr_FR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Masquer';
$labels['show'] = 'Montrer';
$labels['quotelimit'] = 'Masquer la citation quand le nombre de lignes est supérieur à';
PK�c�\�Q�3��&hide_blockquote/localization/hr_HR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Sakrij';
$labels['show'] = 'Pokaži';
$labels['quotelimit'] = 'Sakrij citat ako broj linija prelazi';
PK�c�\��7X��&hide_blockquote/localization/pl_PL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ukryj';
$labels['show'] = 'Pokaż';
$labels['quotelimit'] = 'Ukryj blok cytatu gdy liczba linii jest większa od';
PK�c�\�����&hide_blockquote/localization/ja_JP.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = '隠す';
$labels['show'] = '表示';
$labels['quotelimit'] = '次の行数より多い引用を非表示';
PK�c�\�S�(��&hide_blockquote/localization/nn_NO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Gøym';
$labels['show'] = 'Vis';
$labels['quotelimit'] = 'Gøym sitat når talet på linjer er større enn';
PK�c�\�6뀲�$hide_blockquote/localization/ast.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Anubrir';
$labels['show'] = 'Amosar';
$labels['quotelimit'] = 'Anubrir la citación cuando la cuenta de llinies seya mayor de';
PK�c�\]X`���&hide_blockquote/localization/sr_CS.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Сакриј';
$labels['show'] = 'Прикажи';
$labels['quotelimit'] = 'Сакриј цитат када је број редова већи од';
PK�c�\[�+��&hide_blockquote/localization/lb_LU.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Verstoppen';
$labels['show'] = 'Weisen';
$labels['quotelimit'] = 'Zitat verstoppe wann d\'Zeilenunzuel méi grouss ass ewéi';
PK�c�\�G��??&hide_blockquote/localization/fa_AF.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['show'] = 'نمایش';
PK�c�\�����#hide_blockquote/localization/br.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Kuzhat';
$labels['show'] = 'Diskouez';
$labels['quotelimit'] = 'Kuzhat ar meneg pa\'z\'eo re uhel niver a linennnoù eus';
PK�c�\�_O&JJ&hide_blockquote/localization/ka_GE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['show'] = 'ჩვენება';
PK�c�\>�r\��&hide_blockquote/localization/mk_MK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Скриј ';
$labels['show'] = 'Покажи';
$labels['quotelimit'] = 'Скриј цитат кога бројот на линии е поголем од';
PK�c�\.�МMM&hide_blockquote/localization/kn_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['show'] = 'ತೋರಿಸು';
PK�c�\��Qn��&hide_blockquote/localization/km_KH.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'លាក់';
$labels['show'] = 'បង្ហាញ';
$labels['quotelimit'] = 'លាក់​អត្ថបទ​សម្រង់​ពេល​ចំនួន​ជួរ​ធំ​ជាង';
PK�c�\������&hide_blockquote/localization/mn_MN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Нуух';
$labels['show'] = 'Харах';
$labels['quotelimit'] = 'Хэрвээ мөрийн тоо дараахаас их бол ишлэлийг харуулахгүй:';
PK�c�\�����&hide_blockquote/localization/he_IL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'הסתר';
$labels['show'] = 'הצג';
$labels['quotelimit'] = 'הסתר ציטוט כאשר מספר השורות גדול מ-';
PK�c�\���%��&hide_blockquote/localization/ga_IE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Folaigh';
$labels['show'] = 'Taispeáin';
$labels['quotelimit'] = 'Folaigh an lua nuair a bhíonn líon na línte níos mó ná';
PK�c�\����&hide_blockquote/localization/da_DK.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Skjul';
$labels['show'] = 'Vis';
$labels['quotelimit'] = 'Skjul citat når antallet af linjer er højere end';
PK�c�\O� ��&hide_blockquote/localization/sl_SI.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Skrij';
$labels['show'] = 'Prikaži';
$labels['quotelimit'] = 'Skrij citiran tekst, ko je število vrstic večje od';
PK�c�\h�dj��#hide_blockquote/localization/ar.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'إخفاء';
$labels['show'] = 'إظهار';
$labels['quotelimit'] = 'إخفاء الإقتباس إذا كان عدد الأسطر أكبر مِن';
PK�c�\�/-ѥ�&hide_blockquote/localization/de_DE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'ausblenden';
$labels['show'] = 'einblenden';
$labels['quotelimit'] = 'Zitate verbergen ab einer Zeilenlänge von';
PK�c�\(y����&hide_blockquote/localization/sv_SE.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Dölj';
$labels['show'] = 'Visa';
$labels['quotelimit'] = 'Dölj citat när antalet rader överstiger';
PK�c�\Z�����#hide_blockquote/localization/ug.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'يۇشۇرۇش';
$labels['show'] = 'كۆرسىتىش';
$labels['quotelimit'] = 'قۇر سانى چوڭ بولغاندا نەقىلنى يۇشۇرۇش';
PK�c�\��
��&hide_blockquote/localization/ko_KR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = '숨기기';
$labels['show'] = '표시';
$labels['quotelimit'] = '행 개수가 다음보다 많을 때 인용구를 숨김:';
PK�c�\�|C��&hide_blockquote/localization/gl_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Agochar';
$labels['show'] = 'Amosar';
$labels['quotelimit'] = 'Agochar mencións cando haxa demasiadas liñas';
PK�c�\�|��&hide_blockquote/localization/it_IT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Nascondi';
$labels['show'] = 'Mostra';
$labels['quotelimit'] = 'Nascondi la citazione quando il numero di righe è maggiore di';
PK�c�\$yF���&hide_blockquote/localization/es_ES.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ocultar';
$labels['show'] = 'Mostrar';
$labels['quotelimit'] = 'Ocultar la cita cuando el número de lineas es mayor que';
PK�c�\_Qv�JJ&hide_blockquote/localization/ml_IN.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'മറയ്ക്കുക';
$labels['show'] = 'പ്രദർശിപ്പിക്കുക';
$labels['quotelimit'] = 'ഇതിലും കൂടുതലാണ് വരികളുടെ എണ്ണമെങ്കിൽ അവലംബം മറയ്ക്കുക';
PK�c�\$����&hide_blockquote/localization/nl_NL.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Verbergen';
$labels['show'] = 'Tonen';
$labels['quotelimit'] = 'Verberg citaat wanneer aantal regels groter is dan';
PK�c�\��Z��&hide_blockquote/localization/cy_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Cuddio';
$labels['show'] = 'Dangos';
$labels['quotelimit'] = 'Cuddio dyfynniad pan mae\'r nifer o linellau yn fwy na';
PK�c�\Z����&hide_blockquote/localization/en_GB.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Hide';
$labels['show'] = 'Show';
$labels['quotelimit'] = 'Hide citation when lines count is greater than';
PK�c�\�W�4��&hide_blockquote/localization/fo_FO.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Goym';
$labels['show'] = 'Vís';
$labels['quotelimit'] = 'Goym stevning tá ið tað eru meiri reglur enn';
PK�c�\l����&hide_blockquote/localization/lt_LT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Paslėpti';
$labels['show'] = 'Parodyti';
$labels['quotelimit'] = 'Paslėpti citatą, kai joje eilučių daugiau negu';
PK�c�\�W��&hide_blockquote/localization/pt_PT.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Ocultar';
$labels['show'] = 'Mostrar';
$labels['quotelimit'] = 'Ocultar citação quando o número de linhas for maior que';
PK�c�\k`��&hide_blockquote/localization/el_GR.incnu�[���<?php

/*
 +-----------------------------------------------------------------------+
 | Localization file of the Roundcube Webmail Hide-Blockquote plugin     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+

 For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-hide_blockquote/
*/

$labels['hide'] = 'Αποκρυψη';
$labels['show'] = 'Εμφάνιση';
$labels['quotelimit'] = 'Απόκρυψη παραπομπων όταν ο αριθμός γραμμών είναι μεγαλύτερος από';
PK�c�\\�&�vv"hide_blockquote/hide_blockquote.jsnu�[���/**
 * Hide Blockquotes plugin script
 *
 * @licstart  The following is the entire license notice for the
 * JavaScript code in this file.
 *
 * Copyright (c) The Roundcube Dev Team
 *
 * The JavaScript code in this page 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 3 of
 * the License, or (at your option) any later version.
 *
 * @licend  The above is the entire license notice
 * for the JavaScript code in this file.
 */

if (window.rcmail)
  rcmail.addEventListener('init', function() { hide_blockquote(); });

function hide_blockquote()
{
  var limit = rcmail.env.blockquote_limit;

  if (limit <= 0)
    return;

  $('div.message-part div.pre > blockquote', $('#messagebody')).each(function() {
    var res, text, div, link, q = $(this);

    // Add new-line character before each blockquote
    // This fixes counting lines of text, it also prevents
    // from merging lines from different quoting level
    $('blockquote').before(document.createTextNode("\n"));

    text = q.text().trim();
    res = text.split(/\n/);

    if (res.length <= limit) {
      // there can be also a block with very long wrapped line
      // assume line height = 15px
      if (q.height() <= limit * 15)
        return;
    }

    div = $('<blockquote class="blockquote-header">')
      .css({'white-space': 'nowrap', overflow: 'hidden', position: 'relative'})
      .text(res[0]);

    link = $('<span class="blockquote-link"></span>')
      .css({position: 'absolute', 'z-Index': 2})
      .text(rcmail.get_label('hide_blockquote.show'))
      .data('parent', div)
      .click(function() {
        var t = $(this), parent = t.data('parent'), visible = parent.is(':visible');

        t.text(rcmail.get_label(visible ? 'hide' : 'show', 'hide_blockquote'))
          .detach().appendTo(visible ? q : parent).toggleClass('collapsed');

        parent[visible ? 'hide' : 'show']();
        q[visible ? 'show' : 'hide']();
      });

    link.appendTo(div);

    // Modify blockquote
    q.hide().css({position: 'relative'}).before(div);
  });
}
PK�c�\��
LL#hide_blockquote/hide_blockquote.phpnu�[���<?php

/**
 * Quotation block hiding
 *
 * Plugin that adds a possibility to hide long blocks of cited text in messages.
 *
 * Configuration:
 * // Minimum number of citation lines. Longer citation blocks will be hidden.
 * // 0 - no limit (no hiding).
 * $config['hide_blockquote_limit'] = 0;
 *
 * @license GNU GPLv3+
 * @author Aleksander Machniak <alec@alec.pl>
 */
class hide_blockquote extends rcube_plugin
{
    public $task = 'mail|settings';

    /**
     * Plugin initialization
     */
    function init()
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->task == 'mail'
            && ($rcmail->action == 'preview' || $rcmail->action == 'show')
            && ($limit = $rcmail->config->get('hide_blockquote_limit'))
        ) {
            // include styles
            $this->include_stylesheet($this->local_skin_path() . "/style.css");

            // Script and localization
            $this->include_script('hide_blockquote.js');
            $this->add_texts('localization', true);

            // set env variable for client
            $rcmail->output->set_env('blockquote_limit', $limit);
        }
        else if ($rcmail->task == 'settings') {
            $dont_override = $rcmail->config->get('dont_override', []);
            if (!in_array('hide_blockquote_limit', $dont_override)) {
                $this->add_hook('preferences_list', [$this, 'prefs_table']);
                $this->add_hook('preferences_save', [$this, 'prefs_save']);
            }
        }
    }

    /**
     * Hook to inject plugin-specific user settings
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function prefs_table($args)
    {
        if ($args['section'] != 'mailview') {
            return $args;
        }

        $this->add_texts('localization');

        $rcmail   = rcmail::get_instance();
        $limit    = (int) $rcmail->config->get('hide_blockquote_limit');
        $field_id = 'hide_blockquote_limit';
        $input    = new html_inputfield([
                'name'  => '_' . $field_id,
                'id'    => $field_id,
                'size'  => 5,
                'class' => 'form-control'
        ]);

        $args['blocks']['main']['options']['hide_blockquote_limit'] = [
            'title'   => html::label($field_id, $this->gettext('quotelimit')),
            'content' => $input->show($limit ?: '')
        ];

        return $args;
    }

    /**
     * Hook to save plugin-specific user settings
     *
     * @param array $args Hook arguments
     *
     * @return array Modified hook arguments
     */
    function prefs_save($args)
    {
        if ($args['section'] == 'mailview') {
            $args['prefs']['hide_blockquote_limit'] = (int) rcube_utils::get_input_value('_hide_blockquote_limit', rcube_utils::INPUT_POST);
        }

        return $args;
    }
}
PK�c�\Y�S�I
I
3show_additional_headers/show_additional_headers.phpnu�[���<?php

/**
 * Show additional message headers
 *
 * Proof-of-concept plugin which will fetch additional headers
 * and display them in the message view.
 *
 * Enable the plugin in config.inc.php and add your desired headers:
 *   $config['show_additional_headers'] = ['User-Agent'];
 *
 * @author Thomas Bruederli
 * @license GNU GPLv3+
 */
class show_additional_headers extends rcube_plugin
{
    public $task = 'mail';

    /**
     * Plugin initialization
     */
    function init()
    {
        $rcmail = rcmail::get_instance();

        if ($rcmail->action == 'show' || $rcmail->action == 'preview') {
            $this->add_hook('storage_init', [$this, 'storage_init']);
            $this->add_hook('message_headers_output', [$this, 'message_headers']);
        }
        else if ($rcmail->action == '') {
            // with enabled_caching we're fetching additional headers before show/preview
            $this->add_hook('storage_init', [$this, 'storage_init']);
        }
    }

    /**
     * Handler for 'storage_init' hook, where we tell the core to
     * fetch specified additional headers from IMAP.
     *
     * @params array @p Hook parameters
     *
     * @return array Modified hook parameters
     */
    function storage_init($p)
    {
        $rcmail      = rcmail::get_instance();
        $add_headers = $rcmail->config->get('show_additional_headers', []);

        if (!empty($add_headers)) {
            $add_headers = strtoupper(join(' ', (array) $add_headers));
            if (isset($p['fetch_headers'])) {
                $p['fetch_headers'] .= ' ' . $add_headers;
            }
            else {
                $p['fetch_headers'] = $add_headers;
            }
        }

        return $p;
    }

    /**
     * Handler for 'message_headers_output' hook, where we add the additional
     * headers to the output.
     *
     * @params array @p Hook parameters
     *
     * @return array Modified hook parameters
     */
    function message_headers($p)
    {
        $rcmail      = rcmail::get_instance();
        $add_headers = $rcmail->config->get('show_additional_headers', []);

        foreach ((array) $add_headers as $header) {
            if ($value = $p['headers']->get($header)) {
                if (is_array($value)) {
                    foreach ($value as $idx => $v) {
                        $p['output']["$header:$idx"] = ['title' => $header, 'value' => $v];
                    }
                }
                else {
                    $p['output'][$header] = ['title' => $header, 'value' => $value];
                }
            }
        }

        return $p;
    }
}
PK�c�\P�X��%show_additional_headers/composer.jsonnu�[���{
    "name": "roundcube/show_additional_headers",
    "type": "roundcube-plugin",
    "description": "Proof-of-concept plugin which will fetch additional headers and display them in the message view.",
    "license": "GPL-3.0-or-later",
    "version": "2.0",
    "authors": [
        {
            "name": "Thomas Bruederli",
            "email": "roundcube@gmail.com",
            "role": "Lead"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://plugins.roundcube.net"
        }
    ],
    "require": {
        "php": ">=7.3.0",
        "roundcube/plugin-installer": ">=0.1.3"
    }
}
PKlc�\��	��&help/skins/elastic/templates/help.htmlnu�[���PKmc�\p/@):help/skins/elastic/templates/content.htmlnu�[���PKmc�\�Tц77�help/composer.jsonnu�[���PKnc�\+�Q��*
help/localization/zh_CN.incnu�[���PKnc�\'����help/localization/be_BE.incnu�[���PKnc�\�~��$$�help/localization/bg_BG.incnu�[���PKnc�\JF�e��`help/localization/en_US.incnu�[���PKnc�\Θ����help/localization/fi_FI.incnu�[���PKnc�\`�8���help/localization/nb_NO.incnu�[���PKnc�\�m����#help/localization/sq_AL.incnu�[���PKnc�\�����?'help/localization/et_EE.incnu�[���PKnc�\�Ӑ�11w+help/localization/ku_IQ.incnu�[���PKnc�\
�����/help/localization/eu_ES.incnu�[���PKnc�\����84help/localization/tr_TR.incnu�[���PKnc�\��*$��u8help/localization/es_AR.incnu�[���PKoc�\���pp�<help/localization/ku.incnu�[���PKoc�\"�S��f@help/localization/pt_BR.incnu�[���PKoc�\ܲ�''�Dhelp/localization/lv_LV.incnu�[���PKoc�\�^h  Ihelp/localization/sk_SK.incnu�[���PKoc�\u)��}Mhelp/localization/cs_CZ.incnu�[���PKoc�\r�{{�Qhelp/localization/ti.incnu�[���PKoc�\X�ql���Uhelp/localization/nl_BE.incnu�[���PKoc�\e�k���Yhelp/localization/uk_UA.incnu�[���PKoc�\r�g���]help/localization/fy_NL.incnu�[���PKoc�\��'���ahelp/localization/de_CH.incnu�[���PKoc�\+�@�ll5fhelp/localization/es_419.incnu�[���PKoc�\��)���ihelp/localization/uz.incnu�[���PKoc�\:��9��nhelp/localization/hy_AM.incnu�[���PKoc�\����jj�qhelp/localization/en_CA.incnu�[���PKoc�\�ay!!�uhelp/localization/zh_TW.incnu�[���PKoc�\
�_���zhelp/localization/ca_ES.incnu�[���PKoc�\��j��;~help/localization/ia.incnu�[���PKoc�\���
��8�help/localization/bs_BA.incnu�[���PKoc�\R$BBB�help/localization/ru_RU.incnu�[���PKoc�\w;τ�ϊhelp/localization/fa_IR.incnu�[���PKoc�\-h����help/localization/is_IS.incnu�[���PKoc�\������help/localization/vi_VN.incnu�[���PKoc�\��uOO��help/localization/th_TH.incnu�[���PKoc�\� �F�help/localization/ar_SA.incnu�[���PKoc�\�!��ss��help/localization/az_AZ.incnu�[���PKoc�\!dH���f�help/localization/id_ID.incnu�[���PKoc�\ܰi3SSy�help/localization/tzl.incnu�[���PKoc�\�]���help/localization/hu_HU.incnu�[���PKoc�\}K ���\�help/localization/ro_RO.incnu�[���PKoc�\p}�Kkkb�help/localization/eo.incnu�[���PKoc�\>�y�help/localization/fr_FR.incnu�[���PKoc�\�}�qqf�help/localization/hr_HR.incnu�[���PKoc�\��F�"�help/localization/pl_PL.incnu�[���PKoc�\�dxGGm�help/localization/mr_IN.incnu�[���PKoc�\u����help/localization/ja_JP.incnu�[���PKoc�\F��ggf�help/localization/nn_NO.incnu�[���PKoc�\M�qq�help/localization/ast.incnu�[���PKoc�\]u�����help/localization/sr_CS.incnu�[���PKoc�\�$mm�help/localization/lb_LU.incnu�[���PKoc�\�M������help/localization/fa_AF.incnu�[���PKoc�\]Bj�����help/localization/br.incnu�[���PKoc�\��������help/localization/mk_MK.incnu�[���PKoc�\9_9Gdd��help/localization/kn_IN.incnu�[���PKoc�\Νo{����help/localization/km_KH.incnu�[���PKoc�\��e�help/localization/mn_MN.incnu�[���PKoc�\M�2k��help/localization/he_IL.incnu�[���PKoc�\�p{��+�help/localization/ga_IE.incnu�[���PKoc�\����B�help/localization/da_DK.incnu�[���PKoc�\f���s�help/localization/sl_SI.incnu�[���PKpc�\��S��shelp/localization/ar.incnu�[���PKpc�\�unn�help/localization/si_LK.incnu�[���PKpc�\"]z���shelp/localization/de_DE.incnu�[���PKpc�\�i9
���help/localization/sv_SE.incnu�[���PKpc�\�mm�help/localization/ug.incnu�[���PKpc�\�9b��help/localization/ko_KR.incnu�[���PKpc�\�9�oo�help/localization/gl_ES.incnu�[���PKpc�\��8���� help/localization/it_IT.incnu�[���PKpc�\��*$���$help/localization/es_ES.incnu�[���PKpc�\�Ԋ�)help/localization/ml_IN.incnu�[���PKpc�\��k���,help/localization/nl_NL.incnu�[���PKpc�\|�7����0help/localization/cy_GB.incnu�[���PKpc�\_�p&��5help/localization/en_GB.incnu�[���PKpc�\ɫ�^��G9help/localization/fo_FO.incnu�[���PKpc�\|��u��O=help/localization/lt_LT.incnu�[���PKqc�\vo����Ahelp/localization/pt_PT.incnu�[���PKqc�\o��__�Ehelp/localization/el_GR.incnu�[���PKqc�\ڐ//qJhelp/help.jsnu�[���PKqc�\Ia�U�U��Uhelp/content/license.htmlnu�[���PKqc�\bX�``z�help/config.inc.php.distnu�[���PKqc�\:��kk
"�help/help.phpnu�[���PKqc�\�Yv##�help/help.min.jsnu�[���PKrc�\���U��+-example_addressbook/example_addressbook.phpnu�[���PKrc�\?V*|��3}example_addressbook/example_addressbook_backend.phpnu�[���PKrc�\&���ll!v)example_addressbook/composer.jsonnu�[���PKrc�\�o��#3,redundant_attachments/composer.jsonnu�[���PKrc�\�0���)20redundant_attachments/config.inc.php.distnu�[���PKrc�\
��(��/*4redundant_attachments/redundant_attachments.phpnu�[���PKrc�\n�V�== Nkrb_authentication/composer.jsonnu�[���PKrc�\��F�00)�Pkrb_authentication/krb_authentication.phpnu�[���PKrc�\SZ'�

&"bkrb_authentication/config.inc.php.distnu�[���PKrc�\���W��$�efilesystem_attachments/composer.jsonnu�[���PKsc�\p��1"1"1�ifilesystem_attachments/filesystem_attachments.phpnu�[���PKsc�\��t��M�newmail_notifier/mail.pngnu�[���PKsc�\&�����newmail_notifier/composer.jsonnu�[���PKsc�\x!�Y��(C�newmail_notifier/newmail_notifier.min.jsnu�[���PKsc�\�L��JJ'c�newmail_notifier/localization/zh_CN.incnu�[���PKsc�\=qI�!!'�newmail_notifier/localization/be_BE.incnu�[���PKsc�\y��'|�newmail_notifier/localization/bg_BG.incnu�[���PKsc�\�H��hh'b�newmail_notifier/localization/en_US.incnu�[���PKsc�\�0cc'!�newmail_notifier/localization/fi_FI.incnu�[���PKsc�\����\\'�newmail_notifier/localization/nb_NO.incnu�[���PKsc�\���؎�'��newmail_notifier/localization/sq_AL.incnu�[���PKsc�\�!��__'s�newmail_notifier/localization/et_EE.incnu�[���PKsc�\|]@�LL')�newmail_notifier/localization/ku_IQ.incnu�[���PKsc�\(�܌�'��newmail_notifier/localization/eu_ES.incnu�[���PKsc�\���L}}'��newmail_notifier/localization/tr_TR.incnu�[���PKsc�\Y�~_��'��newmail_notifier/localization/es_AR.incnu�[���PKsc�\��nn$��newmail_notifier/localization/ku.incnu�[���PKsc�\5�%��'M�newmail_notifier/localization/pt_BR.incnu�[���PKsc�\�	Ӹ�'L�newmail_notifier/localization/lv_LV.incnu�[���PKsc�\zR褉�'[�newmail_notifier/localization/sk_SK.incnu�[���PKsc�\�栬�';�newmail_notifier/localization/cs_CZ.incnu�[���PKsc�\��4��$>newmail_notifier/localization/ti.incnu�[���PKsc�\ZX�vv'�newmail_notifier/localization/nl_BE.incnu�[���PKsc�\A�����'Rnewmail_notifier/localization/uk_UA.incnu�[���PKsc�\���]]'�newmail_notifier/localization/fy_NL.incnu�[���PKsc�\�\97ss'Onewmail_notifier/localization/de_CH.incnu�[���PKsc�\Y]���($newmail_notifier/localization/es_419.incnu�[���PKsc�\|y<^��$3*newmail_notifier/localization/uz.incnu�[���PKsc�\Nr����'*0newmail_notifier/localization/hy_AM.incnu�[���PKsc�\�H��hh'k7newmail_notifier/localization/en_CA.incnu�[���PKsc�\]�F44'*=newmail_notifier/localization/zh_TW.incnu�[���PKsc�\����'�Bnewmail_notifier/localization/ca_ES.incnu�[���PKsc�\S^� ��$�Hnewmail_notifier/localization/ia.incnu�[���PKsc�\)![hh'Onewmail_notifier/localization/bs_BA.incnu�[���PKsc�\�T��'�Tnewmail_notifier/localization/ru_RU.incnu�[���PKsc�\/(w>..'>\newmail_notifier/localization/fa_IR.incnu�[���PKsc�\&�ZD��'�bnewmail_notifier/localization/is_IS.incnu�[���PKsc�\/���'�hnewmail_notifier/localization/vi_VN.incnu�[���PKsc�\ϣ%��'onewmail_notifier/localization/th_TH.incnu�[���PKsc�\�`�|qq'�vnewmail_notifier/localization/ar_SA.incnu�[���PKsc�\ܿtȝ�'�}newmail_notifier/localization/az_AZ.incnu�[���PKsc�\����'��newmail_notifier/localization/id_ID.incnu�[���PKsc�\s�rw��'��newmail_notifier/localization/hu_HU.incnu�[���PKsc�\��xx'��newmail_notifier/localization/ro_RO.incnu�[���PKsc�\�0�88$��newmail_notifier/localization/eo.incnu�[���PKsc�\$*@��'�newmail_notifier/localization/fr_FR.incnu�[���PKsc�\mEjfkk'>�newmail_notifier/localization/hr_HR.incnu�[���PKsc�\J����'�newmail_notifier/localization/pl_PL.incnu�[���PKsc�\�'6Ŏ�':�newmail_notifier/localization/mr_IN.incnu�[���PKsc�\��)�

'�newmail_notifier/localization/ja_JP.incnu�[���PKsc�\�on�&&'��newmail_notifier/localization/nn_NO.incnu�[���PKsc�\��壮�%�newmail_notifier/localization/ast.incnu�[���PKsc�\z���ww'�newmail_notifier/localization/sr_CS.incnu�[���PKsc�\L�	̎�'��newmail_notifier/localization/lb_LU.incnu�[���PKsc�\�	4_��$��newmail_notifier/localization/br.incnu�[���PKsc�\�R���'��newmail_notifier/localization/mk_MK.incnu�[���PKsc�\�,
DD'��newmail_notifier/localization/km_KH.incnu�[���PKsc�\��F(oo'|�newmail_notifier/localization/mn_MN.incnu�[���PKsc�\��_KK'B�newmail_notifier/localization/he_IL.incnu�[���PKsc�\�(.e��'��newmail_notifier/localization/ga_IE.incnu�[���PKsc�\)dr�FF'�newmail_notifier/localization/da_DK.incnu�[���PKsc�\<�r�qq'��newmail_notifier/localization/sl_SI.incnu�[���PKsc�\ķ;iTT$snewmail_notifier/localization/ar.incnu�[���PKsc�\�XS�TT'newmail_notifier/localization/si_LK.incnu�[���PKsc�\�"��'�newmail_notifier/localization/de_DE.incnu�[���PKsc�\ʾ��'�newmail_notifier/localization/sv_SE.incnu�[���PKsc�\�W����$wnewmail_notifier/localization/ug.incnu�[���PKsc�\A���'d!newmail_notifier/localization/ko_KR.incnu�[���PKsc�\�bX��'�'newmail_notifier/localization/gl_ES.incnu�[���PKsc�\[X����'�-newmail_notifier/localization/it_IT.incnu�[���PKsc�\�����'�3newmail_notifier/localization/es_ES.incnu�[���PKsc�\�Hj��'�9newmail_notifier/localization/ml_IN.incnu�[���PKsc�\��@hh'�Bnewmail_notifier/localization/nl_NL.incnu�[���PKsc�\n�\�aa'�Hnewmail_notifier/localization/cy_GB.incnu�[���PKsc�\����dd'eNnewmail_notifier/localization/en_GB.incnu�[���PKsc�\�ǯ���' Tnewmail_notifier/localization/fo_FO.incnu�[���PKsc�\ow���'Znewmail_notifier/localization/lt_LT.incnu�[���PKsc�\i����'�_newmail_notifier/localization/pt_PT.incnu�[���PKsc�\Q�z�YY'fnewmail_notifier/localization/el_GR.incnu�[���PKsc�\KG�&��%�mnewmail_notifier/newmail_notifier.phpnu�[���PKsc�\|�>B>B��newmail_notifier/favicon.iconu�[���PKsc�\{���)�)1�newmail_notifier/sound.mp3nu�[���PKsc�\!��B��t�newmail_notifier/sound.wavnu�[���PKsc�\0���LL$��newmail_notifier/config.inc.php.distnu�[���PKsc�\�:~~~P�newmail_notifier/overlay.iconu�[���PKsc�\��uEww$�newmail_notifier/newmail_notifier.jsnu�[���PKsc�\c�!ff�jqueryui/js/jquery-ui.min.jsnu�[���PKsc�\RE�.��.��
jqueryui/js/jquery-ui-accessible-datepicker.jsnu�[���PKsc�\�w�<�<$��
jqueryui/js/jquery.minicolors.min.jsnu�[���PKsc�\�s��$?jqueryui/js/i18n/datepicker-nl-BE.jsnu�[���PKsc�\���E!ijqueryui/js/i18n/datepicker-is.jsnu�[���PKsc�\���7$�jqueryui/js/i18n/datepicker-pt-BR.jsnu�[���PKsc�\����!"!jqueryui/js/i18n/datepicker-sq.jsnu�[���PKsc�\��l!+&jqueryui/js/i18n/datepicker-lt.jsnu�[���PKsc�\,�BU��!�+jqueryui/js/i18n/datepicker-fa.jsnu�[���PKsc�\x����!j1jqueryui/js/i18n/datepicker-af.jsnu�[���PKsc�\D_�\��!r6jqueryui/js/i18n/datepicker-ml.jsnu�[���PKsc�\���7!�=jqueryui/js/i18n/datepicker-uk.jsnu�[���PKsc�\7	'���!�Cjqueryui/js/i18n/datepicker-nl.jsnu�[���PKsc�\�Y���!Ijqueryui/js/i18n/datepicker-ca.jsnu�[���PKsc�\��_���!Njqueryui/js/i18n/datepicker-es.jsnu�[���PKsc�\\�V�aa! Sjqueryui/js/i18n/datepicker-vi.jsnu�[���PKsc�\^|O��!�Xjqueryui/js/i18n/datepicker-mk.jsnu�[���PKsc�\��J��!�^jqueryui/js/i18n/datepicker-hy.jsnu�[���PKsc�\�L�**$�djqueryui/js/i18n/datepicker-zh-CN.jsnu�[���PKsc�\yn~�nn!Ijjqueryui/js/i18n/datepicker-sr.jsnu�[���PKsc�\�{�ż�!pjqueryui/js/i18n/datepicker-ms.jsnu�[���PKsc�\vo�
��$ujqueryui/js/i18n/datepicker-cy-GB.jsnu�[���PKsc�\v�ҵ�$Izjqueryui/js/i18n/datepicker-sr-SR.jsnu�[���PKsc�\�a
:��!Rjqueryui/js/i18n/datepicker-et.jsnu�[���PKsc�\a^�=��!��jqueryui/js/i18n/datepicker-da.jsnu�[���PKsc�\�Yq���$��jqueryui/js/i18n/datepicker-en-NZ.jsnu�[���PKsc�\=����$͎jqueryui/js/i18n/datepicker-en-AU.jsnu�[���PKsc�\_}�{��!�jqueryui/js/i18n/datepicker-pl.jsnu�[���PKsc�\Pو��!�jqueryui/js/i18n/datepicker-sv.jsnu�[���PKsc�\x^�3��!)�jqueryui/js/i18n/datepicker-bs.jsnu�[���PKsc�\EEb��!�jqueryui/js/i18n/datepicker-sl.jsnu�[���PKsc�\��Y��!Z�jqueryui/js/i18n/datepicker-hu.jsnu�[���PKsc�\�i���!N�jqueryui/js/i18n/datepicker-fo.jsnu�[���PKsc�\�30I��!��jqueryui/js/i18n/datepicker-eo.jsnu�[���PKsc�\�M�5��!��jqueryui/js/i18n/datepicker-bg.jsnu�[���PKsc�\�?=��!��jqueryui/js/i18n/datepicker-ru.jsnu�[���PKsc�\����$x�jqueryui/js/i18n/datepicker-fr-CH.jsnu�[���PKsc�\?ZT�**$��jqueryui/js/i18n/datepicker-zh-TW.jsnu�[���PKsc�\��Z���!4�jqueryui/js/i18n/datepicker-el.jsnu�[���PKsc�\ƲZ��!v�jqueryui/js/i18n/datepicker-be.jsnu�[���PKsc�\?��!��jqueryui/js/i18n/datepicker-hr.jsnu�[���PKsc�\冢��$��jqueryui/js/i18n/datepicker-en-GB.jsnu�[���PKsc�\�Z�,

!��jqueryui/js/i18n/datepicker-lv.jsnu�[���PKsc�\������!��jqueryui/js/i18n/datepicker-id.jsnu�[���PKsc�\#W��!0�jqueryui/js/i18n/datepicker-ro.jsnu�[���PKsc�\���7��$��jqueryui/js/i18n/datepicker-fr-CA.jsnu�[���PKsc�\,zC���$��jqueryui/js/i18n/datepicker-it-CH.jsnu�[���PKsc�\y;�K��!�jqueryui/js/i18n/datepicker-nb.jsnu�[���PKsc�\���X��!jqueryui/js/i18n/datepicker-it.jsnu�[���PKsc�\�Y���!-	jqueryui/js/i18n/datepicker-nn.jsnu�[���PKsc�\��m��!Wjqueryui/js/i18n/datepicker-rm.jsnu�[���PKsc�\�=3���!�jqueryui/js/i18n/datepicker-eu.jsnu�[���PKsc�\ad�ss!�jqueryui/js/i18n/datepicker-tj.jsnu�[���PKsc�\Aě���$Gjqueryui/js/i18n/datepicker-ar-DZ.jsnu�[���PKsc�\�&��!�$jqueryui/js/i18n/datepicker-de.jsnu�[���PKsc�\r�jCC!�)jqueryui/js/i18n/datepicker-ta.jsnu�[���PKsc�\�GE�//!.1jqueryui/js/i18n/datepicker-th.jsnu�[���PKsc�\��>Umm!�7jqueryui/js/i18n/datepicker-km.jsnu�[���PKsc�\v�Ρ��!l>jqueryui/js/i18n/datepicker-az.jsnu�[���PKsc�\�;���!�Cjqueryui/js/i18n/datepicker-pt.jsnu�[���PKsc�\����!�Hjqueryui/js/i18n/datepicker-ky.jsnu�[���PKsc�\j�����!�Njqueryui/js/i18n/datepicker-ka.jsnu�[���PKsc�\lV/b��$�Ujqueryui/js/i18n/datepicker-de-AT.jsnu�[���PKsc�\������!�Zjqueryui/js/i18n/datepicker-cs.jsnu�[���PKsc�\�����!�_jqueryui/js/i18n/datepicker-kk.jsnu�[���PKsc�\u����!�ejqueryui/js/i18n/datepicker-lb.jsnu�[���PKsc�\�|����!kjqueryui/js/i18n/datepicker-ja.jsnu�[���PKsc�\N;���!6pjqueryui/js/i18n/datepicker-fi.jsnu�[���PKsc�\1#r��!yujqueryui/js/i18n/datepicker-sk.jsnu�[���PKsc�\R<�--!�zjqueryui/js/i18n/datepicker-he.jsnu�[���PKtc�\Ka��!�jqueryui/js/i18n/datepicker-no.jsnu�[���PKtc�\���,��!7�jqueryui/js/i18n/datepicker-ar.jsnu�[���PKtc�\˲�q(($c�jqueryui/js/i18n/datepicker-zh-HK.jsnu�[���PKtc�\�I�==!ߐjqueryui/js/i18n/datepicker-fr.jsnu�[���PKtc�\骷��!m�jqueryui/js/i18n/datepicker-tr.jsnu�[���PKtc�\�!��RR!s�jqueryui/js/i18n/datepicker-hi.jsnu�[���PKtc�\p����!�jqueryui/js/i18n/datepicker-gl.jsnu�[���PKtc�\�j\��!"�jqueryui/js/i18n/datepicker-ko.jsnu�[���PKtc�\�&d�_�_c�jqueryui/js/jquery.tagedit.jsnu�[���PKtc�\��m��
jqueryui/composer.jsonnu�[���PKtc�\dK�0LL�
jqueryui/jqueryui.phpnu�[���PKtc�\�(%%m%
jqueryui/config.inc.php.distnu�[���PKtc�\�S%�CC6�&
jqueryui/themes/elastic/images/ui-icons-datepicker.pngnu�[���PKtc�\?Pd���:�(
jqueryui/themes/elastic/images/ui-icons_444444_256x240.pngnu�[���PKtc�\g��:�D
jqueryui/themes/elastic/images/ui-icons_777777_256x240.pngnu�[���PKtc�\�64�`
jqueryui/themes/elastic/images/jquery.minicolors.pngnu�[���PKtc�\��(���%Kmjqueryui/themes/elastic/jquery-ui.cssnu�[���PKtc�\�N�}r}r)��jqueryui/themes/elastic/jquery-ui.min.cssnu�[���PKtc�\��n�+�+*�ejqueryui/themes/elastic/jquery-ui.css.diffnu�[���PKtc�\���1��jqueryui/themes/elastic/jquery.minicolors.min.cssnu�[���PKtc�\��JS��-v�jqueryui/themes/elastic/jquery.minicolors.cssnu�[���PKtc�\\;Ei

2��jqueryui/themes/elastic/jquery.minicolors.css.diffnu�[���PKtc�\Fz�

;�jqueryui/READMEnu�[���PKtc�\�n������autologout/composer.jsonnu�[���PKtc�\��������autologout/autologout.phpnu�[���PKtc�\�a#�U
U
+��http_authentication/http_authentication.phpnu�[���PKtc�\9	�::!o�http_authentication/composer.jsonnu�[���PKtc�\Y��'��http_authentication/config.inc.php.distnu�[���PKtc�\$2�����http_authentication/logout.htmlnu�[���PKtc�\�T�Zmarkasjunk/composer.jsonnu�[���PKtc�\��Go@@#amarkasjunk/drivers/edit_headers.phpnu�[���PKtc�\8�� �markasjunk/drivers/sa_detach.phpnu�[���PKtc�\C&VFnn'Imarkasjunk/drivers/amavis_blacklist.phpnu�[���PKtc�\b6�PP )markasjunk/drivers/cmd_learn.phpnu�[���PKtc�\��`dnn"�:markasjunk/drivers/email_learn.phpnu�[���PKtc�\�B|�MM nTmarkasjunk/drivers/dir_learn.phpnu�[���PKtc�\�	��@
@
]markasjunk/drivers/jsevent.phpnu�[���PKtc�\��d��#�gmarkasjunk/drivers/sa_blacklist.phpnu�[���PKtc�\�%[uu!�markasjunk/localization/bg_BG.incnu�[���PKtc�\Wi���!E�markasjunk/localization/en_US.incnu�[���PKtc�\������!x�markasjunk/localization/fi_FI.incnu�[���PKtc�\|��%!��markasjunk/localization/nb_NO.incnu�[���PKtc�\{vp		!%�markasjunk/localization/sq_AL.incnu�[���PKtc�\m����!�markasjunk/localization/et_EE.incnu�[���PKtc�\^����!Ģmarkasjunk/localization/eu_ES.incnu�[���PKtc�\�l�,,!�markasjunk/localization/tr_TR.incnu�[���PKtc�\�\���!l�markasjunk/localization/es_AR.incnu�[���PKtc�\T��%GG��markasjunk/localization/ku.incnu�[���PKtc�\��K_��!�markasjunk/localization/pt_BR.incnu�[���PKtc�\7�d���!M�markasjunk/localization/lv_LV.incnu�[���PKtc�\lX�}<<!��markasjunk/localization/sk_SK.incnu�[���PKtc�\B���,,!�markasjunk/localization/cs_CZ.incnu�[���PKtc�\ۙb&��!��markasjunk/localization/de_CH.incnu�[���PKtc�\�����!��markasjunk/localization/zh_TW.incnu�[���PKtc�\�R�*��!��markasjunk/localization/ca_ES.incnu�[���PKtc�\�ė�DD!B�markasjunk/localization/ru_RU.incnu�[���PKtc�\ˏT�!��markasjunk/localization/is_IS.incnu�[���PKtc�\�0�:��!7�markasjunk/localization/ar_SA.incnu�[���PKtc�\��
]]!�markasjunk/localization/id_ID.incnu�[���PKtc�\_"�4��!��markasjunk/localization/hu_HU.incnu�[���PKtc�\*7((!�markasjunk/localization/fr_FR.incnu�[���PKtc�\���[[!X�markasjunk/localization/hr_HR.incnu�[���PKtc�\�7����!�markasjunk/localization/pl_PL.incnu�[���PKtc�\��K44!-markasjunk/localization/ja_JP.incnu�[���PKtc�\�
 �77!�markasjunk/localization/he_IL.incnu�[���PKtc�\v�z�!:markasjunk/localization/ga_IE.incnu�[���PKtc�\T.�a��!�markasjunk/localization/da_DK.incnu�[���PKtc�\������markasjunk/localization/ar.incnu�[���PKtc�\"�����!�markasjunk/localization/de_DE.incnu�[���PKtc�\/b�h��!�!markasjunk/localization/sv_SE.incnu�[���PKtc�\M_v���'markasjunk/localization/ug.incnu�[���PKtc�\���H��!/-markasjunk/localization/ko_KR.incnu�[���PKtc�\[G
�!{2markasjunk/localization/it_IT.incnu�[���PKtc�\܉���!�7markasjunk/localization/es_ES.incnu�[���PKtc�\����!=markasjunk/localization/nl_NL.incnu�[���PKtc�\#���!-Bmarkasjunk/localization/cy_GB.incnu�[���PKtc�\9����!qGmarkasjunk/localization/en_GB.incnu�[���PKtc�\N�J�!�Lmarkasjunk/localization/lt_LT.incnu�[���PKtc�\�����!�Qmarkasjunk/localization/pt_PT.incnu�[���PKtc�\��$��! Wmarkasjunk/localization/el_GR.incnu�[���PKtc�\G��1�1W]markasjunk/markasjunk.phpnu�[���PKtc�\#3J#��B�markasjunk/markasjunk.jsnu�[���PKtc�\����� � ,�markasjunk/config.inc.php.distnu�[���PKtc�\�j-��n�markasjunk/markasjunk.min.jsnu�[���PKtc�\��_@��markasjunk/README.mdnu�[���PKtc�\��˺KK"��subscriptions_option/composer.jsonnu�[���PKtc�\���]]+r�subscriptions_option/localization/zh_CN.incnu�[���PKtc�\���}}+*�subscriptions_option/localization/be_BE.incnu�[���PKtc�\|���ww+�subscriptions_option/localization/bg_BG.incnu�[���PKtc�\򬁝aa+��subscriptions_option/localization/en_US.incnu�[���PKtc�\�-�aa+��subscriptions_option/localization/fi_FI.incnu�[���PKtc�\O��aa+L�subscriptions_option/localization/nb_NO.incnu�[���PKtc�\V���__+�subscriptions_option/localization/sq_AL.incnu�[���PKtc�\��/``+�subscriptions_option/localization/et_EE.incnu�[���PKtc�\��Ycc+}subscriptions_option/localization/eu_ES.incnu�[���PKtc�\;�4jj+;subscriptions_option/localization/tr_TR.incnu�[���PKtc�\�)�#ll+subscriptions_option/localization/es_AR.incnu�[���PKtc�\�V��jj(�subscriptions_option/localization/ku.incnu�[���PKtc�\"�tvv+�subscriptions_option/localization/pt_BR.incnu�[���PKtc�\0��ss+Zsubscriptions_option/localization/lv_LV.incnu�[���PKtc�\�iqee+(subscriptions_option/localization/sk_SK.incnu�[���PKtc�\�ݻ�oo+�subscriptions_option/localization/cs_CZ.incnu�[���PKtc�\N3�+�!subscriptions_option/localization/uk_UA.incnu�[���PKtc�\�>�aa+�%subscriptions_option/localization/fy_NL.incnu�[���PKtc�\�պ2ii+H)subscriptions_option/localization/de_CH.incnu�[���PKtc�\_q
�bb,-subscriptions_option/localization/es_419.incnu�[���PKtc�\�"ۛdd(�0subscriptions_option/localization/uz.incnu�[���PKtc�\r�
��(�4subscriptions_option/localization/es.incnu�[���PKtc�\���+�8subscriptions_option/localization/hy_AM.incnu�[���PKtc�\򬁝aa+�<subscriptions_option/localization/en_CA.incnu�[���PKtc�\H�`]]+�@subscriptions_option/localization/zh_TW.incnu�[���PKtc�\=JS�hh+;Dsubscriptions_option/localization/ca_ES.incnu�[���PKtc�\��/�cc(�Gsubscriptions_option/localization/ia.incnu�[���PKtc�\�M�Oaa+�Ksubscriptions_option/localization/bs_BA.incnu�[���PKtc�\�#�yy+uOsubscriptions_option/localization/ru_RU.incnu�[���PKtc�\�8��nn+ISsubscriptions_option/localization/fa_IR.incnu�[���PKtc�\2�}a__+Wsubscriptions_option/localization/is_IS.incnu�[���PKtc�\��Nmm+�Zsubscriptions_option/localization/vi_VN.incnu�[���PKtc�\q뾹��+�^subscriptions_option/localization/th_TH.incnu�[���PKtc�\�T��mm+sbsubscriptions_option/localization/ar_SA.incnu�[���PKtc�\��b�ii+;fsubscriptions_option/localization/az_AZ.incnu�[���PKtc�\	�-8aa+�isubscriptions_option/localization/id_ID.incnu�[���PKtc�\�e5�kk+�msubscriptions_option/localization/hu_HU.incnu�[���PKtc�\uw��bb+�qsubscriptions_option/localization/ro_RO.incnu�[���PKtc�\U53�[[(>usubscriptions_option/localization/eo.incnu�[���PKtc�\{nD�hh+�xsubscriptions_option/localization/fr_FR.incnu�[���PKtc�\�M�Oaa+�|subscriptions_option/localization/hr_HR.incnu�[���PKtc�\1\X�cc+p�subscriptions_option/localization/pl_PL.incnu�[���PKtc�\���hh+.�subscriptions_option/localization/ja_JP.incnu�[���PKtc�\�@�__+�subscriptions_option/localization/nn_NO.incnu�[���PKtc�\Dz�wbb)��subscriptions_option/localization/ast.incnu�[���PKtc�\��uu+f�subscriptions_option/localization/sr_CS.incnu�[���PKtc�\��]ee+6�subscriptions_option/localization/lb_LU.incnu�[���PKtc�\]����+��subscriptions_option/localization/fa_AF.incnu�[���PKuc�\Hɽ�ee(Қsubscriptions_option/localization/br.incnu�[���PKuc�\����tt+��subscriptions_option/localization/mk_MK.incnu�[���PKuc�\�b$9tt+^�subscriptions_option/localization/km_KH.incnu�[���PKuc�\8�n�qq+-�subscriptions_option/localization/mn_MN.incnu�[���PKuc�\G�gvv+��subscriptions_option/localization/he_IL.incnu�[���PKuc�\Qx�khh+ʭsubscriptions_option/localization/ga_IE.incnu�[���PKuc�\�PNaa+��subscriptions_option/localization/da_DK.incnu�[���PKuc�\xy$�bb+I�subscriptions_option/localization/sl_SI.incnu�[���PKuc�\
?�Sxx(�subscriptions_option/localization/ar.incnu�[���PKuc�\�պ2ii+ּsubscriptions_option/localization/de_DE.incnu�[���PKuc�\�ƪ�gg+��subscriptions_option/localization/sv_SE.incnu�[���PKuc�\q�D{{(\�subscriptions_option/localization/ug.incnu�[���PKuc�\�cj�]]+/�subscriptions_option/localization/ko_KR.incnu�[���PKuc�\���ubb+��subscriptions_option/localization/gl_ES.incnu�[���PKuc�\c�~�bb+��subscriptions_option/localization/it_IT.incnu�[���PKuc�\_q
�bb+a�subscriptions_option/localization/es_ES.incnu�[���PKuc�\$>��+�subscriptions_option/localization/ml_IN.incnu�[���PKuc�\ꁟ�dd+	�subscriptions_option/localization/nl_NL.incnu�[���PKuc�\:_�Ghh+��subscriptions_option/localization/cy_GB.incnu�[���PKuc�\򬁝aa+��subscriptions_option/localization/en_GB.incnu�[���PKuc�\Ր�d``+G�subscriptions_option/localization/fo_FO.incnu�[���PKuc�\�(��dd+�subscriptions_option/localization/lt_LT.incnu�[���PKuc�\
NC�aa+��subscriptions_option/localization/pt_PT.incnu�[���PKuc�\���F+}�subscriptions_option/localization/el_GR.incnu�[���PKuc�\se��-W�subscriptions_option/subscriptions_option.phpnu�[���PKuc�\�r`a##Ivcard_attachments/composer.jsonnu�[���PKuc�\�A�,,(�	vcard_attachments/localization/zh_CN.incnu�[���PKuc�\�!=���(?vcard_attachments/localization/be_BE.incnu�[���PKuc�\��09��(Pvcard_attachments/localization/bg_BG.incnu�[���PKuc�\N>S���(Hvcard_attachments/localization/en_US.incnu�[���PKuc�\��YUEE(|vcard_attachments/localization/fi_FI.incnu�[���PKuc�\���CC("vcard_attachments/localization/nb_NO.incnu�[���PKuc�\��;(�&vcard_attachments/localization/sq_AL.incnu�[���PKuc�\J�(,vcard_attachments/localization/et_EE.incnu�[���PKuc�\�����(y0vcard_attachments/localization/eu_ES.incnu�[���PKuc�\�z��(�5vcard_attachments/localization/tr_TR.incnu�[���PKuc�\t@��(�:vcard_attachments/localization/es_AR.incnu�[���PKuc�\S8N���%7@vcard_attachments/localization/ku.incnu�[���PKuc�\�$��(.Dvcard_attachments/localization/pt_BR.incnu�[���PKuc�\�ͫb��(�Ivcard_attachments/localization/lv_LV.incnu�[���PKuc�\�J��(�Nvcard_attachments/localization/sk_SK.incnu�[���PKuc�\�?5��(=Tvcard_attachments/localization/cs_CZ.incnu�[���PKuc�\��N���(oYvcard_attachments/localization/uk_UA.incnu�[���PKuc�\E�f��(z]vcard_attachments/localization/fy_NL.incnu�[���PKuc�\8(��

(�avcard_attachments/localization/de_CH.incnu�[���PKuc�\��8-��)gvcard_attachments/localization/es_419.incnu�[���PKuc�\J����%kvcard_attachments/localization/uz.incnu�[���PKuc�\ġ����(Sovcard_attachments/localization/hy_AM.incnu�[���PKuc�\���j��(lsvcard_attachments/localization/en_CA.incnu�[���PKuc�\�_�I11(Owvcard_attachments/localization/zh_TW.incnu�[���PKuc�\��c

(�{vcard_attachments/localization/ca_ES.incnu�[���PKuc�\�)z��%=�vcard_attachments/localization/ia.incnu�[���PKuc�\��QK��(u�vcard_attachments/localization/bs_BA.incnu�[���PKuc�\o��3__(]�vcard_attachments/localization/ru_RU.incnu�[���PKuc�\����(�vcard_attachments/localization/fa_IR.incnu�[���PKuc�\蹃t��(�vcard_attachments/localization/is_IS.incnu�[���PKuc�\�j���(g�vcard_attachments/localization/vi_VN.incnu�[���PKuc�\��a���(W�vcard_attachments/localization/th_TH.incnu�[���PKuc�\�k J��(�vcard_attachments/localization/ar_SA.incnu�[���PKuc�\f�j��([�vcard_attachments/localization/az_AZ.incnu�[���PKuc�\Z����(H�vcard_attachments/localization/id_ID.incnu�[���PKuc�\��X��(��vcard_attachments/localization/hu_HU.incnu�[���PKuc�\Q�#��(̳vcard_attachments/localization/ro_RO.incnu�[���PKuc�\��}ό�%��vcard_attachments/localization/eo.incnu�[���PKuc�\�e�1(׻vcard_attachments/localization/fr_FR.incnu�[���PKuc�\��88(F�vcard_attachments/localization/hr_HR.incnu�[���PKuc�\c��(��vcard_attachments/localization/pl_PL.incnu�[���PKuc�\�}�(<�vcard_attachments/localization/mr_IN.incnu�[���PKuc�\@w�2(��vcard_attachments/localization/ja_JP.incnu�[���PKuc�\:�(�vcard_attachments/localization/nn_NO.incnu�[���PKuc�\I�;F��&�vcard_attachments/localization/ast.incnu�[���PKuc�\���A��(��vcard_attachments/localization/sr_CS.incnu�[���PKuc�\N�I��(�vcard_attachments/localization/lb_LU.incnu�[���PKuc�\����%�vcard_attachments/localization/br.incnu�[���PKuc�\�O���(�vcard_attachments/localization/mk_MK.incnu�[���PKuc�\R����(�vcard_attachments/localization/km_KH.incnu�[���PKuc�\��}��([�vcard_attachments/localization/mn_MN.incnu�[���PKuc�\/0A���(p�vcard_attachments/localization/he_IL.incnu�[���PKuc�\�n!�hh(W�vcard_attachments/localization/ga_IE.incnu�[���PKuc�\���??(vcard_attachments/localization/da_DK.incnu�[���PKuc�\��`7��(�vcard_attachments/localization/sl_SI.incnu�[���PKuc�\�k݇�%�	vcard_attachments/localization/ar.incnu�[���PKuc�\.�����(�vcard_attachments/localization/si_LK.incnu�[���PKuc�\L��WW(�vcard_attachments/localization/de_DE.incnu�[���PKuc�\&��$��(�vcard_attachments/localization/sv_SE.incnu�[���PKuc�\����%�vcard_attachments/localization/ug.incnu�[���PKuc�\��?(�"vcard_attachments/localization/ko_KR.incnu�[���PKuc�\�����(F(vcard_attachments/localization/gl_ES.incnu�[���PKuc�\�P����(@,vcard_attachments/localization/it_IT.incnu�[���PKuc�\�KK�({1vcard_attachments/localization/es_ES.incnu�[���PKuc�\e2��88(�6vcard_attachments/localization/ml_IN.incnu�[���PKuc�\T���(u;vcard_attachments/localization/nl_NL.incnu�[���PKuc�\��AG��(`@vcard_attachments/localization/cy_GB.incnu�[���PKuc�\�ʒ��(�Evcard_attachments/localization/en_GB.incnu�[���PKuc�\\�8Y@@(�Jvcard_attachments/localization/fo_FO.incnu�[���PKuc�\���__(nOvcard_attachments/localization/lt_LT.incnu�[���PKuc�\~^Z

(%Tvcard_attachments/localization/pt_PT.incnu�[���PKuc�\!����(�Yvcard_attachments/localization/el_GR.incnu�[���PKuc�\�5�=�� �_vcard_attachments/vcardattach.jsnu�[���PKuc�\ϰ��7�7'aqvcard_attachments/vcard_attachments.phpnu�[���PKuc�\o��8$��vcard_attachments/vcardattach.min.jsnu�[���PKuc�\� �fi5i5�zipdownload/zipdownload.phpnu�[���PKuc�\�9^z����zipdownload/composer.jsonnu�[���PKuc�\�]�wOO"y�zipdownload/localization/zh_CN.incnu�[���PKuc�\N��@@"�zipdownload/localization/be_BE.incnu�[���PKuc�\� �r��"��zipdownload/localization/bg_BG.incnu�[���PKuc�\MnM^^"�zipdownload/localization/en_US.incnu�[���PKuc�\��[["�zipdownload/localization/fi_FI.incnu�[���PKuc�\iB�Knn"<zipdownload/localization/nb_NO.incnu�[���PKuc�\�iu~~"�zipdownload/localization/sq_AL.incnu�[���PKuc�\�A�"�zipdownload/localization/et_EE.incnu�[���PKuc�\�u$��",zipdownload/localization/ku_IQ.incnu�[���PKuc�\�%��gg"/zipdownload/localization/eu_ES.incnu�[���PKuc�\oנ2nn"�zipdownload/localization/tr_TR.incnu�[���PKuc�\»�hh"�#zipdownload/localization/es_AR.incnu�[���PKuc�\���b(zipdownload/localization/ku.incnu�[���PKuc�\���bb"�,zipdownload/localization/pt_BR.incnu�[���PKuc�\R���zz"j1zipdownload/localization/lv_LV.incnu�[���PKuc�\=��gg"66zipdownload/localization/sk_SK.incnu�[���PKuc�\��9f__"�:zipdownload/localization/cs_CZ.incnu�[���PKuc�\�U�AA"�?zipdownload/localization/uk_UA.incnu�[���PKuc�\w�k�"3Dzipdownload/localization/fy_NL.incnu�[���PKuc�\���ww"�Hzipdownload/localization/de_CH.incnu�[���PKuc�\���#QMzipdownload/localization/es_419.incnu�[���PKuc�\�MI��Qzipdownload/localization/uz.incnu�[���PKuc�\��mm"Vzipdownload/localization/hy_AM.incnu�[���PKuc�\�,"�Yzipdownload/localization/en_CA.incnu�[���PKuc�\�
G�LL"5^zipdownload/localization/zh_TW.incnu�[���PKuc�\��#ess"�bzipdownload/localization/ca_ES.incnu�[���PKuc�\W�B.oo�gzipdownload/localization/ia.incnu�[���PKuc�\�3�"Vlzipdownload/localization/bs_BA.incnu�[���PKuc�\)R����"�pzipdownload/localization/ru_RU.incnu�[���PKuc�\�z�"�uzipdownload/localization/fa_IR.incnu�[���PKuc�\po]Jtt".zzipdownload/localization/is_IS.incnu�[���PKuc�\T���--"�~zipdownload/localization/vi_VN.incnu�[���PKuc�\�CFM00"s�zipdownload/localization/th_TH.incnu�[���PKuc�\��ٻ��"��zipdownload/localization/ar_SA.incnu�[���PKuc�\�Q�QQ"׌zipdownload/localization/az_AZ.incnu�[���PKuc�\j@K��"z�zipdownload/localization/id_ID.incnu�[���PKuc�\_S��}}"ʔzipdownload/localization/hu_HU.incnu�[���PKuc�\Ry�q"��zipdownload/localization/ro_RO.incnu�[���PKuc�\���TT��zipdownload/localization/eo.incnu�[���PKuc�\W=a���"��zipdownload/localization/fr_FR.incnu�[���PKuc�\k��"m�zipdownload/localization/hr_HR.incnu�[���PKuc�\�/vv"ªzipdownload/localization/pl_PL.incnu�[���PKuc�\�o���"��zipdownload/localization/ja_JP.incnu�[���PKuc�\�6�hMM"y�zipdownload/localization/nn_NO.incnu�[���PKuc�\[A� �zipdownload/localization/ast.incnu�[���PKuc�\��Ӛ11"n�zipdownload/localization/sr_CS.incnu�[���PKuc�\3;��"�zipdownload/localization/lb_LU.incnu�[���PKuc�\�>��__"K�zipdownload/localization/fa_AF.incnu�[���PKuc�\��b��zipdownload/localization/br.incnu�[���PKuc�\�
�,,"^�zipdownload/localization/mk_MK.incnu�[���PKuc�\��|���"��zipdownload/localization/km_KH.incnu�[���PKuc�\��UU"��zipdownload/localization/mn_MN.incnu�[���PKuc�\�X'��"^�zipdownload/localization/he_IL.incnu�[���PKuc�\�6��"n�zipdownload/localization/ga_IE.incnu�[���PKuc�\��nn"A�zipdownload/localization/da_DK.incnu�[���PKuc�\O\V���"�zipdownload/localization/sl_SI.incnu�[���PKuc�\���2!!P�zipdownload/localization/ar.incnu�[���PKuc�\C�]"��zipdownload/localization/de_DE.incnu�[���PKuc�\;�@zee"��zipdownload/localization/sv_SE.incnu�[���PKuc�\=Ը���H�zipdownload/localization/ug.incnu�[���PKuc�\�󫲆�"�zipdownload/localization/ko_KR.incnu�[���PKuc�\R��"bzipdownload/localization/gl_ES.incnu�[���PKuc�\��xpp"�	zipdownload/localization/it_IT.incnu�[���PKuc�\��ztt"�zipdownload/localization/es_ES.incnu�[���PKuc�\)>�s��"Qzipdownload/localization/ml_IN.incnu�[���PKuc�\���nn"Xzipdownload/localization/nl_NL.incnu�[���PKuc�\{��Ttt"zipdownload/localization/cy_GB.incnu�[���PKuc�\MnM^^"�!zipdownload/localization/en_GB.incnu�[���PKuc�\�����"�&zipdownload/localization/fo_FO.incnu�[���PKuc�\zW!�ff"j+zipdownload/localization/lt_LT.incnu�[���PKuc�\8�ss""0zipdownload/localization/pt_PT.incnu�[���PKuc�\�)>���"�4zipdownload/localization/el_GR.incnu�[���PKuc�\żҪaa�9zipdownload/config.inc.php.distnu�[���PKuc�\�M��^	^	�<zipdownload/zipdownload.min.jsnu�[���PKuc�\l�-ZZYFzipdownload/zipdownload.jsnu�[���PKuc�\6�q��Tzipdownload/READMEnu�[���PKuc�\\��==BZidentity_select/composer.jsonnu�[���PKuc�\#�8HH#�]identity_select/identity_select.phpnu�[���PKuc�\��j** gipassword/helpers/chgsaslpasswd.cnu�[���PKuc�\�������kpassword/helpers/passwd-expectnu�[���PKuc�\Rx �Y
Y
$�password/helpers/change_ldap_pass.plnu�[���PKuc�\����&��password/helpers/chgvirtualminpasswd.cnu�[���PKuc�\��3!��password/helpers/chgdbmailusers.cnu�[���PKuc�\u1���"Q�password/helpers/chpass-wrapper.pynu�[���PKuc�\�B�y����password/composer.jsonnu�[���PKuc�\oOᬊ�p�password/password.min.jsnu�[���PKuc�\�����B�password/password.jsnu�[���PKuc�\\���
�
!_�password/drivers/ldap_ppolicy.phpnu�[���PKuc�\�:�A

��password/drivers/miab.phpnu�[���PKuc�\5#�L	L	��password/drivers/tinycp.phpnu�[���PKuc�\V�6Hxxi�password/drivers/pwned.phpnu�[���PKuc�\���|�	�	+�password/drivers/smb.phpnu�[���PKuc�\��Ƨoo3�password/drivers/ldap_exop.phpnu�[���PKvc�\�Kr�++�password/drivers/plesk.phpnu�[���PKvc�\ _�]��epassword/drivers/vpopmaild.phpnu�[���PKvc�\`��Q$Q$ �(password/drivers/ldap_simple.phpnu�[���PKvc�\�f���	�	$Mpassword/drivers/mailcow.phpnu�[���PKvc�\��;;=Wpassword/drivers/chpasswd.phpnu�[���PKvc�\��(?--�]password/drivers/zxcvbn.phpnu�[���PKvc�\Ɋ�&((=epassword/drivers/ximss.phpnu�[���PKvc�\`��V
V
�qpassword/drivers/virtualmin.phpnu�[���PKvc�\	�d��T|password/drivers/cpanel.phpnu�[���PKvc�\TU�����password/drivers/ldap.phpnu�[���PKvc�\n����تpassword/drivers/gearman.phpnu�[���PKvc�\��/��4�4 �password/drivers/directadmin.phpnu�[���PKvc�\����password/drivers/dbmail.phpnu�[���PKvc�\�;_

'�password/drivers/dovecot_passwdfile.phpnu�[���PKvc�\���m�password/drivers/sasl.phpnu�[���PKvc�\O�����upassword/drivers/pw_usermod.phpnu�[���PKvc�\�S�
�
�
password/drivers/hmail.phpnu�[���PKvc�\c��W�
�
"�password/drivers/domainfactory.phpnu�[���PKvc�\֞{���&password/drivers/modoboa.phpnu�[���PKvc�\ζ}LMM�6password/drivers/pam.phpnu�[���PKvc�\�����*>password/drivers/httpapi.phpnu�[���PKvc�\AΩ�`Qpassword/drivers/xmail.phpnu�[���PKvc�\^��,!!�_password/drivers/sql.phpnu�[���PKvc�\�bԙe
e
tpassword/drivers/poppassd.phpnu�[���PKvc�\���	�	�~password/drivers/expect.phpnu�[���PKvc�\iKyќ���password/drivers/kpasswd.phpnu�[���PKvc�\ZT)r		��password/localization/zh_CN.incnu�[���PKvc�\�����password/localization/be_BE.incnu�[���PKvc�\�Y���password/localization/bg_BG.incnu�[���PKvc�\�+��2�password/localization/en_US.incnu�[���PKvc�\f������password/localization/fi_FI.incnu�[���PKvc�\m��BB]�password/localization/nb_NO.incnu�[���PKvc�\�&��

��password/localization/sq_AL.incnu�[���PKvc�\����C�password/localization/et_EE.incnu�[���PKvc�\1薎�Y�password/localization/ku_IQ.incnu�[���PKvc�\]��t��6�password/localization/eu_ES.incnu�[���PKvc�\i���Q�password/localization/tr_TR.incnu�[���PKvc�\"��v��h	password/localization/es_AR.incnu�[���PKvc�\%�1*spassword/localization/ku.incnu�[���PKvc�\�����password/localization/pt_BR.incnu�[���PKvc�\�xG���*password/localization/lv_LV.incnu�[���PKvc�\�����6password/localization/sk_SK.incnu�[���PKvc�\N����3Cpassword/localization/cs_CZ.incnu�[���PKvc�\9/K�eOpassword/localization/ti.incnu�[���PKvc�\M�֋�Wpassword/localization/nl_BE.incnu�[���PKvc�\�IԎoo+`password/localization/uk_UA.incnu�[���PKvc�\��UO	O	�lpassword/localization/fy_NL.incnu�[���PKvc�\������vpassword/localization/de_CH.incnu�[���PKvc�\����(( W�password/localization/es_419.incnu�[���PKvc�\�̷�

Ϗpassword/localization/uz.incnu�[���PKvc�\�֏c�
�
 �password/localization/hy_AM.incnu�[���PKvc�\�<����password/localization/en_CA.incnu�[���PKvc�\�ǎ�	�	�password/localization/zh_TW.incnu�[���PKvc�\��۷��+�password/localization/ca_ES.incnu�[���PKvc�\կJsn
n
e�password/localization/ia.incnu�[���PKvc�\��4�NN�password/localization/bs_BA.incnu�[���PKvc�\a�4F00��password/localization/ru_RU.incnu�[���PKvc�\6��s��;�password/localization/fa_IR.incnu�[���PKvc�\�L��vvO�password/localization/is_IS.incnu�[���PKvc�\�����password/localization/vi_VN.incnu�[���PKvc�\0�2TTxpassword/localization/th_TH.incnu�[���PKvc�\us�44password/localization/ar_SA.incnu�[���PKvc�\�~�

�"password/localization/az_AZ.incnu�[���PKvc�\�D�x	x	�)password/localization/id_ID.incnu�[���PKvc�\)�bVV�3password/localization/hu_HU.incnu�[���PKvc�\�Z�9<
<
c@password/localization/ro_RO.incnu�[���PKvc�\4Q����Jpassword/localization/eo.incnu�[���PKvc�\��uV
V
�Qpassword/localization/fr_FR.incnu�[���PKvc�\!*�g;
;
h_password/localization/hr_HR.incnu�[���PKvc�\鑪���ipassword/localization/pl_PL.incnu�[���PKvc�\F����vpassword/localization/ja_JP.incnu�[���PKvc�\�|B���password/localization/nn_NO.incnu�[���PKvc�\�����password/localization/ast.incnu�[���PKvc�\�pH�����password/localization/kab.incnu�[���PKvc�\�f=aaחpassword/localization/sr_CS.incnu�[���PKvc�\�X|		��password/localization/lb_LU.incnu�[���PKvc�\R���BB߫password/localization/fa_AF.incnu�[���PKvc�\�~�[zzp�password/localization/br.incnu�[���PKvc�\,�R3
3
6�password/localization/mk_MK.incnu�[���PKvc�\E|T2����password/localization/km_KH.incnu�[���PKvc�\�Ȋ$	$	��password/localization/mn_MN.incnu�[���PKvc�\�
��
�
$�password/localization/he_IL.incnu�[���PKvc�\~$�"���password/localization/ga_IE.incnu�[���PKvc�\�͌��$�password/localization/da_DK.incnu�[���PKvc�\�u?��	�	rpassword/localization/sl_SI.incnu�[���PKvc�\���\��Hpassword/localization/ar.incnu�[���PKvc�\��f%%password/localization/de_DE.incnu�[���PKvc�\�x<<�)password/localization/sv_SE.incnu�[���PKvc�\Xx�@@6password/localization/ug.incnu�[���PKvc�\�_��

�Gpassword/localization/ko_KR.incnu�[���PKvc�\1�OF���Tpassword/localization/gl_ES.incnu�[���PKvc�\Ċ�OO�\password/localization/it_IT.incnu�[���PKvc�\{�����ipassword/localization/es_ES.incnu�[���PKvc�\P'!�!!xvpassword/localization/ml_IN.incnu�[���PKvc�\҇���password/localization/nl_NL.incnu�[���PKvc�\;��oYY�password/localization/cy_GB.incnu�[���PKvc�\��� ��Ûpassword/localization/en_GB.incnu�[���PKvc�\N��M''ͧpassword/localization/fo_FO.incnu�[���PKvc�\H�3�""C�password/localization/lt_LT.incnu�[���PKvc�\5�o����password/localization/pt_PT.incnu�[���PKvc�\#������password/localization/el_GR.incnu�[���PKvc�\����(M(M�password/config.inc.php.distnu�[���PKvc�\�n9}w}w�(password/password.phpnu�[���PKvc�\4��4�E�EG�password/READMEnu�[���PKvc�\��Ģ�"W�database_attachments/composer.jsonnu�[���PKvc�\']‡yy(K�database_attachments/config.inc.php.distnu�[���PKvc�\*�֛�-�database_attachments/database_attachments.phpnu�[���PKvc�\��==archive/composer.jsonnu�[���PKvc�\�wf���archive/archive.min.jsnu�[���PKvc�\�K,l
l
�archive/archive.jsnu�[���PKvc�\���k��Larchive/localization/zh_CN.incnu�[���PKvc�\@�ml		�archive/localization/be_BE.incnu�[���PKvc�\�M,���'archive/localization/bg_BG.incnu�[���PKvc�\�s�qGG�0archive/localization/ne_NP.incnu�[���PKvc�\[D��''f4archive/localization/en_US.incnu�[���PKvc�\��&bGG�;archive/localization/fi_FI.incnu�[���PKvc�\et�epCarchive/localization/nb_NO.incnu�[���PKvc�\7�C�//�Jarchive/localization/sq_AL.incnu�[���PKvc�\�EpcII<Rarchive/localization/et_EE.incnu�[���PKvc�\�;@6���Xarchive/localization/ku_IQ.incnu�[���PKvc�\bI�MM�aarchive/localization/eu_ES.incnu�[���PKvc�\��)�iarchive/localization/tr_TR.incnu�[���PKvc�\��33�parchive/localization/es_AR.incnu�[���PKvc�\J���fxarchive/localization/ku.incnu�[���PKvc�\�x��<<�~archive/localization/pt_BR.incnu�[���PKvc�\�%ff�archive/localization/lv_LV.incnu�[���PKvc�\�(�=��ƍarchive/localization/sk_SK.incnu�[���PKvc�\(C�eAA•archive/localization/cs_CZ.incnu�[���PKvc�\>i�JJQ�archive/localization/ta_IN.incnu�[���PKvc�\L��
GG�archive/localization/nl_BE.incnu�[���PKvc�\�s�qGG~�archive/localization/hi_IN.incnu�[���PKvc�\����@@�archive/localization/uk_UA.incnu�[���PKvc�\�D�33��archive/localization/fy_NL.incnu�[���PKvc�\�H�EYY"�archive/localization/de_CH.incnu�[���PKvc�\숶����archive/localization/es_419.incnu�[���PKvc�\�/%hh��archive/localization/uz.incnu�[���PKvc�\���V����archive/localization/hy_AM.incnu�[���PKvc�\B�����archive/localization/en_CA.incnu�[���PKvc�\e8//��archive/localization/zh_TW.incnu�[���PKvc�\]��;;E�archive/localization/ca_ES.incnu�[���PKvc�\��
�����archive/localization/ia.incnu�[���PKvc�\/(=�����archive/localization/bs_BA.incnu�[���PKvc�\��#���archive/localization/ru_RU.incnu�[���PKvc�\�蹼���archive/localization/fa_IR.incnu�[���PKvc�\��*W���archive/localization/is_IS.incnu�[���PKvc�\�Ғ::�archive/localization/vi_VN.incnu�[���PKvc�\@�P�JJFarchive/localization/th_TH.incnu�[���PKvc�\�	/����archive/localization/ar_SA.incnu�[���PKvc�\���DD�"archive/localization/ms_MY.incnu�[���PKvc�\2%����b&archive/localization/az_AZ.incnu�[���PKvc�\2��^^�,archive/localization/id_ID.incnu�[���PKvc�\��<�<<A3archive/localization/tzl.incnu�[���PKvc�\
Utaa�6archive/localization/hu_HU.incnu�[���PKvc�\�'�Sbbx>archive/localization/ro_RO.incnu�[���PKvc�\u7�(Earchive/localization/eo.incnu�[���PKvc�\�DD�Iarchive/localization/bn_BD.incnu�[���PKvc�\��n'ssMarchive/localization/fr_FR.incnu�[���PKvc�\;8����Tarchive/localization/hr_HR.incnu�[���PKvc�\ma�UU�Zarchive/localization/pl_PL.incnu�[���PKvc�\7��"���barchive/localization/mr_IN.incnu�[���PKvc�\�Ł���garchive/localization/ja_JP.incnu�[���PKvc�\ܬ�CC�oarchive/localization/ps.incnu�[���PKvc�\�.qi��Msarchive/localization/nn_NO.incnu�[���PKvc�\�`}
��Eyarchive/localization/ast.incnu�[���PKvc�\ʞ�ttmarchive/localization/kab.incnu�[���PKvc�\��9*��-�archive/localization/sr_CS.incnu�[���PKvc�\h��c�archive/localization/lb_LU.incnu�[���PKvc�\��JM��|�archive/localization/fa_AF.incnu�[���PKvc�\������f�archive/localization/br.incnu�[���PKvc�\��GG��archive/localization/ka_GE.incnu�[���PKvc�\E}l�]](�archive/localization/mk_MK.incnu�[���PKvc�\�l����өarchive/localization/km_KH.incnu�[���PKvc�\�A������archive/localization/mn_MN.incnu�[���PKvc�\IW�]]��archive/localization/he_IL.incnu�[���PKvc�\�i�W��archive/localization/ga_IE.incnu�[���PKvc�\RJ�k��archive/localization/da_DK.incnu�[���PKvc�\�����f�archive/localization/sl_SI.incnu�[���PKvc�\�kb��H�archive/localization/ar.incnu�[���PKvc�\Y��+��E�archive/localization/si_LK.incnu�[���PKvc�\�-�gWW8�archive/localization/de_DE.incnu�[���PKvc�\����00��archive/localization/sv_SE.incnu�[���PKvc�\J�ɻ��[�archive/localization/ug.incnu�[���PKvc�\j�	���?�archive/localization/ko_KR.incnu�[���PKvc�\�3���Xarchive/localization/gl_ES.incnu�[���PKvc�\
٭�JJ�archive/localization/it_IT.incnu�[���PKvc�\�Ĩ`NN$archive/localization/es_ES.incnu�[���PKvc�\��ƀ��archive/localization/ml_IN.incnu�[���PKvc�\��j�??�archive/localization/nl_NL.incnu�[���PKvc�\a�Bb..#archive/localization/cy_GB.incnu�[���PKvc�\�T,
�*archive/localization/en_GB.incnu�[���PKvc�\!��		�1archive/localization/fo_FO.incnu�[���PKvc�\%��Ɯ�U8archive/localization/lt_LT.incnu�[���PKvc�\����++?@archive/localization/pt_PT.incnu�[���PKvc�\���				�Garchive/localization/el_GR.incnu�[���PKvc�\��WkOOQarchive/archive.phpnu�[���PKvc�\��P��!i�virtuser_query/virtuser_query.phpnu�[���PKvc�\&�+�ww=�virtuser_query/composer.jsonnu�[���PKvc�\�H��reconnect/readme.mdnu�[���PKvc�\k{0H�reconnect/composer.jsonnu�[���PKvc�\�;�\����reconnect/reconnect.phpnu�[���PKvc�\�bb�reconnect/config.inc.php.distnu�[���PKvc�\�t�oow�virtuser_file/composer.jsonnu�[���PKvc�\#���

1�virtuser_file/virtuser_file.phpnu�[���PKvc�\���3��(��additional_message_headers/composer.jsonnu�[���PKvc�\]��]]9u�additional_message_headers/additional_message_headers.phpnu�[���PKvc�\����<<.;�additional_message_headers/config.inc.php.distnu�[���PKvc�\����??��debug_logger/runlog/runlog.phpnu�[���PKvc�\Z5����b�debug_logger/composer.jsonnu�[���PKvc�\������r�debug_logger/debug_logger.phpnu�[���PKvc�\��ZE""a autologon/autologon.phpnu�[���PKvc�\�0��::� autologon/composer.jsonnu�[���PKvc�\�߳*��K emoticons/composer.jsonnu�[���PKvc�\����� Q emoticons/localization/zh_CN.incnu�[���PKvc�\����� ( emoticons/localization/bg_BG.incnu�[���PKvc�\{�G�� P emoticons/localization/en_US.incnu�[���PKvc�\�OEG�� C  emoticons/localization/fi_FI.incnu�[���PKvc�\+�y�� .$ emoticons/localization/nb_NO.incnu�[���PKvc�\Y�y֣� 	( emoticons/localization/sq_AL.incnu�[���PKvc�\�� �+ emoticons/localization/et_EE.incnu�[���PKvc�\�ȵ�� �/ emoticons/localization/ku_IQ.incnu�[���PKvc�\������ 4 emoticons/localization/eu_ES.incnu�[���PKvc�\A� V�� �7 emoticons/localization/tr_TR.incnu�[���PKvc�\D�
��� �; emoticons/localization/es_AR.incnu�[���PKvc�\6��0�� �? emoticons/localization/pt_BR.incnu�[���PKvc�\�i��� �C emoticons/localization/lv_LV.incnu�[���PKvc�\�# ��� �G emoticons/localization/sk_SK.incnu�[���PKvc�\0Q�F�� �K emoticons/localization/cs_CZ.incnu�[���PKvc�\���;�� �O emoticons/localization/nl_BE.incnu�[���PKvc�\�&3�� �S emoticons/localization/uk_UA.incnu�[���PKvc�\P��l�� �W emoticons/localization/fy_NL.incnu�[���PKvc�\�N��� �[ emoticons/localization/de_CH.incnu�[���PKvc�\�RE���_ emoticons/localization/uz.incnu�[���PKvc�\1H4�� uc emoticons/localization/zh_TW.incnu�[���PKvc�\O�� Xg emoticons/localization/ca_ES.incnu�[���PKvc�\���Kk emoticons/localization/ia.incnu�[���PKvc�\
�m��� 5o emoticons/localization/ru_RU.incnu�[���PKvc�\�P�� ^s emoticons/localization/is_IS.incnu�[���PKvc�\
�p�� Xw emoticons/localization/ar_SA.incnu�[���PKvc�\���� S{ emoticons/localization/id_ID.incnu�[���PKvc�\�y�5�� ; emoticons/localization/hu_HU.incnu�[���PKvc�\JW��� >� emoticons/localization/ro_RO.incnu�[���PKvc�\�a�� *� emoticons/localization/fr_FR.incnu�[���PKvc�\�@��� %� emoticons/localization/hr_HR.incnu�[���PKvc�\��O̟� 
� emoticons/localization/pl_PL.incnu�[���PKvc�\{�?K�� �� emoticons/localization/ja_JP.incnu�[���PKvc�\g�y�� � emoticons/localization/sr_CS.incnu�[���PKvc�\�MD^��'� emoticons/localization/br.incnu�[���PKvc�\}�0�� #� emoticons/localization/mk_MK.incnu�[���PKvc�\��G�� l� emoticons/localization/he_IL.incnu�[���PKvc�\2VC߯� z� emoticons/localization/ga_IE.incnu�[���PKvc�\��m9�� y� emoticons/localization/da_DK.incnu�[���PKvc�\�e�N�� `� emoticons/localization/sl_SI.incnu�[���PKvc�\���4��L� emoticons/localization/ar.incnu�[���PKvc�\��Gʚ� h� emoticons/localization/de_DE.incnu�[���PKvc�\�L�� R� emoticons/localization/sv_SE.incnu�[���PKvc�\�S����;� emoticons/localization/ug.incnu�[���PKvc�\C�}��� u� emoticons/localization/ko_KR.incnu�[���PKvc�\D�� l� emoticons/localization/it_IT.incnu�[���PKvc�\k���� P� emoticons/localization/es_ES.incnu�[���PKvc�\`���� =� emoticons/localization/nl_NL.incnu�[���PKvc�\@Ϡ�� )� emoticons/localization/cy_GB.incnu�[���PKvc�\�s�� � emoticons/localization/en_GB.incnu�[���PKvc�\au�#�� �� emoticons/localization/fo_FO.incnu�[���PKvc�\h�E�� �� emoticons/localization/lt_LT.incnu�[���PKvc�\c�6p�� �� emoticons/localization/pt_PT.incnu�[���PKvc�\�T���� �� emoticons/localization/el_GR.incnu�[���PKvc�\� dN���� emoticons/config.inc.php.distnu�[���PKvc�\���P���� emoticons/emoticons.phpnu�[���PKvc�\��8�bb�!new_user_identity/composer.jsonnu�[���PKvc�\f�X..'b!new_user_identity/new_user_identity.phpnu�[���PKvc�\9�ʑ��%�!new_user_identity/config.inc.php.distnu�[���PKvc�\��O��.�!attachment_reminder/attachment_reminder.min.jsnu�[���PKvc�\�Tm���+�"!attachment_reminder/attachment_reminder.phpnu�[���PKvc�\�+�>!�/!attachment_reminder/composer.jsonnu�[���PKvc�\;_�x*H3!attachment_reminder/localization/zh_CN.incnu�[���PKvc�\�<�*�7!attachment_reminder/localization/be_BE.incnu�[���PKvc�\�����*|<!attachment_reminder/localization/bg_BG.incnu�[���PKvc�\�M���*�A!attachment_reminder/localization/en_US.incnu�[���PKvc�\�_$�33*F!attachment_reminder/localization/fi_FI.incnu�[���PKvc�\@����*�J!attachment_reminder/localization/nb_NO.incnu�[���PKvc�\�	)�  *�N!attachment_reminder/localization/sq_AL.incnu�[���PKvc�\5""*gS!attachment_reminder/localization/et_EE.incnu�[���PKvc�\�=���*�W!attachment_reminder/localization/ku_IQ.incnu�[���PKvc�\G���*�[!attachment_reminder/localization/eu_ES.incnu�[���PKvc�\�S[��*4`!attachment_reminder/localization/tr_TR.incnu�[���PKvc�\��r��*yd!attachment_reminder/localization/es_AR.incnu�[���PKvc�\{8����'�h!attachment_reminder/localization/ku.incnu�[���PKvc�\���t*�l!attachment_reminder/localization/pt_BR.incnu�[���PKvc�\�5��*\q!attachment_reminder/localization/lv_LV.incnu�[���PKvc�\��*�u!attachment_reminder/localization/sk_SK.incnu�[���PKvc�\B�f�*5z!attachment_reminder/localization/cs_CZ.incnu�[���PKvc�\��P�*�~!attachment_reminder/localization/nl_BE.incnu�[���PKvc�\
1�33*��!attachment_reminder/localization/uk_UA.incnu�[���PKvc�\�Y���*��!attachment_reminder/localization/fy_NL.incnu�[���PKvc�\���*��!attachment_reminder/localization/de_CH.incnu�[���PKvc�\�c<��+�!attachment_reminder/localization/es_419.incnu�[���PKvc�\�e�f��'�!attachment_reminder/localization/uz.incnu�[���PKvc�\�M���*q�!attachment_reminder/localization/en_CA.incnu�[���PKvc�\�%[��*��!attachment_reminder/localization/zh_TW.incnu�[���PKvc�\p_�]��*�!attachment_reminder/localization/ca_ES.incnu�[���PKvc�\Slp'Q�!attachment_reminder/localization/ia.incnu�[���PKvc�\`/��*��!attachment_reminder/localization/bs_BA.incnu�[���PKvc�\�RR**�!attachment_reminder/localization/ru_RU.incnu�[���PKvc�\��}�*ֲ!attachment_reminder/localization/fa_IR.incnu�[���PKvc�\dq��*3�!attachment_reminder/localization/is_IS.incnu�[���PKvc�\��G*��!attachment_reminder/localization/vi_VN.incnu�[���PKvc�\6�F�))*�!attachment_reminder/localization/ar_SA.incnu�[���PKvc�\h(;���*h�!attachment_reminder/localization/az_AZ.incnu�[���PKvc�\Zou*��!attachment_reminder/localization/id_ID.incnu�[���PKvc�\��*��!attachment_reminder/localization/hu_HU.incnu�[���PKvc�\�2��*k�!attachment_reminder/localization/ro_RO.incnu�[���PKvc�\[�EE*��!attachment_reminder/localization/fr_FR.incnu�[���PKvc�\�#a���*[�!attachment_reminder/localization/hr_HR.incnu�[���PKvc�\�%V���*��!attachment_reminder/localization/pl_PL.incnu�[���PKvc�\h	_�*��!attachment_reminder/localization/ja_JP.incnu�[���PKvc�\V�ذ��(m�!attachment_reminder/localization/ast.incnu�[���PKvc�\���ɬ�(��!attachment_reminder/localization/kab.incnu�[���PKvc�\/�a)ee*��!attachment_reminder/localization/sr_CS.incnu�[���PKvc�\��S*[�!attachment_reminder/localization/lb_LU.incnu�[���PKvc�\^5�[NN*�!attachment_reminder/localization/fa_AF.incnu�[���PKvc�\�|f ��'m�!attachment_reminder/localization/br.incnu�[���PKvc�\u��??*�"attachment_reminder/localization/mk_MK.incnu�[���PKvc�\�Y��dd*%"attachment_reminder/localization/kn_IN.incnu�[���PKvc�\��==*�	"attachment_reminder/localization/km_KH.incnu�[���PKvc�\���II*z"attachment_reminder/localization/mn_MN.incnu�[���PKvc�\�!�*"attachment_reminder/localization/he_IL.incnu�[���PKvc�\��Z�*�"attachment_reminder/localization/ga_IE.incnu�[���PKvc�\Ea��*"attachment_reminder/localization/da_DK.incnu�[���PKvc�\� q�*a "attachment_reminder/localization/sl_SI.incnu�[���PKvc�\ʐ���'�$"attachment_reminder/localization/ar.incnu�[���PKvc�\qܕ(*�("attachment_reminder/localization/de_DE.incnu�[���PKvc�\�����*J-"attachment_reminder/localization/sv_SE.incnu�[���PKvc�\y����'�1"attachment_reminder/localization/ug.incnu�[���PKvc�\��??*�6"attachment_reminder/localization/ko_KR.incnu�[���PKvc�\��9���*>;"attachment_reminder/localization/gl_ES.incnu�[���PKvc�\�\aww*_?"attachment_reminder/localization/it_IT.incnu�[���PKvc�\7��*0D"attachment_reminder/localization/es_ES.incnu�[���PKvc�\H�7�*�H"attachment_reminder/localization/ml_IN.incnu�[���PKvc�\G�*�L"attachment_reminder/localization/nl_NL.incnu�[���PKvc�\�W��***kQ"attachment_reminder/localization/cy_GB.incnu�[���PKvc�\�M���*�U"attachment_reminder/localization/en_GB.incnu�[���PKvc�\D���*?Z"attachment_reminder/localization/fo_FO.incnu�[���PKvc�\z����*�^"attachment_reminder/localization/lt_LT.incnu�[���PKvc�\]3�&77*�b"attachment_reminder/localization/pt_PT.incnu�[���PKvc�\���g��*kg"attachment_reminder/localization/el_GR.incnu�[���PKvc�\C�~X�	�	*�l"attachment_reminder/attachment_reminder.jsnu�[���PKvc�\/`z���v"new_user_dialog/composer.jsonnu�[���PKvc�\Z�A#��&�y"new_user_dialog/localization/zh_CN.incnu�[���PKvc�\ݾ��%%&�}"new_user_dialog/localization/be_BE.incnu�[���PKvc�\�wk;;&a�"new_user_dialog/localization/bg_BG.incnu�[���PKvc�\�r���&�"new_user_dialog/localization/en_US.incnu�[���PKvc�\��v��&�"new_user_dialog/localization/fi_FI.incnu�[���PKvc�\�X�Z��&)�"new_user_dialog/localization/nb_NO.incnu�[���PKvc�\WT��&A�"new_user_dialog/localization/sq_AL.incnu�[���PKvc�\z���&l�"new_user_dialog/localization/et_EE.incnu�[���PKvc�\�C<&y�"new_user_dialog/localization/ku_IQ.incnu�[���PKvc�\�%���&ԟ"new_user_dialog/localization/eu_ES.incnu�[���PKvc�\�!?Q��&�"new_user_dialog/localization/tr_TR.incnu�[���PKvc�\�
'���&�"new_user_dialog/localization/es_AR.incnu�[���PKvc�\�ۺ�#T�"new_user_dialog/localization/ku.incnu�[���PKvc�\pr�
��&a�"new_user_dialog/localization/pt_BR.incnu�[���PKvc�\��)��&o�"new_user_dialog/localization/lv_LV.incnu�[���PKvc�\�"s��&��"new_user_dialog/localization/sk_SK.incnu�[���PKvc�\^�����&Ӽ"new_user_dialog/localization/cs_CZ.incnu�[���PKvc�\����&�"new_user_dialog/localization/nl_BE.incnu�[���PKvc�\]��&�"new_user_dialog/localization/uk_UA.incnu�[���PKvc�\J�����&|�"new_user_dialog/localization/fy_NL.incnu�[���PKvc�\�����&��"new_user_dialog/localization/de_CH.incnu�[���PKvc�\��O��'��"new_user_dialog/localization/es_419.incnu�[���PKvc�\��aa#��"new_user_dialog/localization/es.incnu�[���PKvc�\��B��&��"new_user_dialog/localization/hy_AM.incnu�[���PKvc�\}�h��&��"new_user_dialog/localization/en_CA.incnu�[���PKvc�\�cd��&��"new_user_dialog/localization/zh_TW.incnu�[���PKvc�\HO����&�"new_user_dialog/localization/ca_ES.incnu�[���PKvc�\N?����#-�"new_user_dialog/localization/ia.incnu�[���PKvc�\.��I��&[�"new_user_dialog/localization/bs_BA.incnu�[���PKvc�\N��&��"new_user_dialog/localization/ru_RU.incnu�[���PKvc�\�6��&�"new_user_dialog/localization/fa_IR.incnu�[���PKvc�\�����&2�"new_user_dialog/localization/is_IS.incnu�[���PKvc�\��f4��&S#new_user_dialog/localization/vi_VN.incnu�[���PKvc�\��U�pp&�#new_user_dialog/localization/th_TH.incnu�[���PKvc�\xbv���&V	#new_user_dialog/localization/ar_SA.incnu�[���PKvc�\e�C���&�
#new_user_dialog/localization/az_AZ.incnu�[���PKvc�\Ł[���&�#new_user_dialog/localization/id_ID.incnu�[���PKvc�\qQWz��&�#new_user_dialog/localization/hu_HU.incnu�[���PKvc�\NͶ&��&�#new_user_dialog/localization/ro_RO.incnu�[���PKvc�\�ߝ��#�#new_user_dialog/localization/eo.incnu�[���PKvc�\�w���&
"#new_user_dialog/localization/fr_FR.incnu�[���PKvc�\�"Cj��&1&#new_user_dialog/localization/hr_HR.incnu�[���PKvc�\�:��&O*#new_user_dialog/localization/pl_PL.incnu�[���PKvc�\���44&`.#new_user_dialog/localization/mr_IN.incnu�[���PKvc�\C�6���&�2#new_user_dialog/localization/ja_JP.incnu�[���PKvc�\f����&/7#new_user_dialog/localization/nn_NO.incnu�[���PKvc�\����$B;#new_user_dialog/localization/ast.incnu�[���PKvc�\�q��&q?#new_user_dialog/localization/sr_CS.incnu�[���PKvc�\µ���&�C#new_user_dialog/localization/lb_LU.incnu�[���PKvc�\�)b���&�G#new_user_dialog/localization/fa_AF.incnu�[���PKvc�\S�Jѿ�#<L#new_user_dialog/localization/br.incnu�[���PKvc�\&��H**&NP#new_user_dialog/localization/mk_MK.incnu�[���PKvc�\�`g��&�T#new_user_dialog/localization/km_KH.incnu�[���PKvc�\[H		&�Y#new_user_dialog/localization/mn_MN.incnu�[���PKvc�\��}���&^#new_user_dialog/localization/he_IL.incnu�[���PKvc�\�^��&Sb#new_user_dialog/localization/ga_IE.incnu�[���PKvc�\�6��&�f#new_user_dialog/localization/da_DK.incnu�[���PKvc�\��$��&�j#new_user_dialog/localization/sl_SI.incnu�[���PKvc�\;[c#�n#new_user_dialog/localization/ar.incnu�[���PKvc�\�#/���&s#new_user_dialog/localization/de_DE.incnu�[���PKvc�\�����&5w#new_user_dialog/localization/sv_SE.incnu�[���PKvc�\ ��#f{#new_user_dialog/localization/ug.incnu�[���PKvc�\������&�#new_user_dialog/localization/ko_KR.incnu�[���PKvc�\�����&�#new_user_dialog/localization/gl_ES.incnu�[���PKvc�\��\Y��&�#new_user_dialog/localization/it_IT.incnu�[���PKvc�\B ���&M�#new_user_dialog/localization/es_ES.incnu�[���PKvc�\o?Iv��&y�#new_user_dialog/localization/ml_IN.incnu�[���PKvc�\�9���&R�#new_user_dialog/localization/nl_NL.incnu�[���PKvc�\��y���&o�#new_user_dialog/localization/cy_GB.incnu�[���PKvc�\��s��&��#new_user_dialog/localization/en_GB.incnu�[���PKvc�\�qQ"��&��#new_user_dialog/localization/fo_FO.incnu�[���PKvc�\��R��&��#new_user_dialog/localization/lt_LT.incnu�[���PKvc�\k:��&٩#new_user_dialog/localization/pt_PT.incnu�[���PKvc�\����00&�#new_user_dialog/localization/el_GR.incnu�[���PKvc�\.Pd�aa#v�#new_user_dialog/new_user_dialog.phpnu�[���PKvc�\�D�4@I@I*�#enigma/enigma.phpnu�[���PKvc�\��B-�$enigma/skins/elastic/templates/keyimport.htmlnu�[���PKvc�\
�j($enigma/skins/elastic/templates/keys.htmlnu�[���PKvc�\f���-�,$enigma/skins/elastic/templates/keysearch.htmlnu�[���PKvc�\�щ��-�-$enigma/skins/elastic/templates/keycreate.htmlnu�[���PKvc�\��|�+�/$enigma/skins/elastic/templates/keyinfo.htmlnu�[���PKwc�\?��[[N1$enigma/composer.jsonnu�[���PKwc�\��&�[[�3$enigma/localization/zh_CN.incnu�[���PKwc�\��L((�N$enigma/localization/be_BE.incnu�[���PKwc�\yT���+�+
T$enigma/localization/bg_BG.incnu�[���PKwc�\??2m��)�$enigma/localization/ne_NP.incnu�[���PKwc�\z>���)�$enigma/localization/en_US.incnu�[���PKwc�\��m��[�$enigma/localization/fi_FI.incnu�[���PKwc�\�cR��5�$enigma/localization/nb_NO.incnu�[���PKwc�\v94�� � c�$enigma/localization/sq_AL.incnu�[���PKwc�\Ǥ�QQ��$enigma/localization/et_EE.incnu�[���PKwc�\��}��0�$enigma/localization/ku_IQ.incnu�[���PKwc�\Ѷv��i�$enigma/localization/eu_ES.incnu�[���PKwc�\��<"  �%enigma/localization/tr_TR.incnu�[���PKwc�\�UE E �7%enigma/localization/es_AR.incnu�[���PKwc�\��66mX%enigma/localization/ur_PK.incnu�[���PKwc�\ٮ[���[%enigma/localization/ku.incnu�[���PKwc�\Ș�Qf f !`%enigma/localization/pt_BR.incnu�[���PKwc�\Agvf��Ԁ%enigma/localization/lv_LV.incnu�[���PKwc�\� ��!�!�%enigma/localization/sk_SK.incnu�[���PKwc�\Q_����%enigma/localization/cs_CZ.incnu�[���PKwc�\��qqC�%enigma/localization/ti.incnu�[���PKwc�\.�����%enigma/localization/ta_IN.incnu�[���PKwc�\��~��%enigma/localization/nl_BE.incnu�[���PKwc�\��;G��w�%enigma/localization/hi_IN.incnu�[���PKwc�\���$�$d�%enigma/localization/uk_UA.incnu�[���PKwc�\e�מ,,N&enigma/localization/fy_NL.incnu�[���PKwc�\|�[j"j"�&enigma/localization/de_CH.incnu�[���PKwc�\�Ζ�kk~=&enigma/localization/es_419.incnu�[���PKwc�\P��==7B&enigma/localization/uz.incnu�[���PKwc�\�c��F&enigma/localization/hy_AM.incnu�[���PKwc�\�D8{��%K&enigma/localization/en_CA.incnu�[���PKwc�\�A��AA)O&enigma/localization/zh_TW.incnu�[���PKwc�\k��!!�k&enigma/localization/ca_ES.incnu�[���PKwc�\9�D--�&enigma/localization/ia.incnu�[���PKwc�\m%������&enigma/localization/bs_BA.incnu�[���PKwc�\�E�*�*��&enigma/localization/ru_RU.incnu�[���PKwc�\N�����&enigma/localization/fa_IR.incnu�[���PKwc�\�1Z�>>��&enigma/localization/is_IS.incnu�[���PKwc�\��ӆ��O�&enigma/localization/vi_VN.incnu�[���PKwc�\�����l�&enigma/localization/th_TH.incnu�[���PKwc�\�}��W�&enigma/localization/ar_SA.incnu�[���PKwc�\�1���+�&enigma/localization/ms_MY.incnu�[���PKwc�\�!HU		�'enigma/localization/az_AZ.incnu�[���PKwc�\V��|S'enigma/localization/id_ID.incnu�[���PKwc�\���Tpp�#'enigma/localization/tzl.incnu�[���PKwc�\�et!t!_''enigma/localization/hu_HU.incnu�[���PKwc�\��!ll I'enigma/localization/ro_RO.incnu�[���PKwc�\�қ��d'enigma/localization/eo.incnu�[���PKwc�\�� M���h'enigma/localization/bn_BD.incnu�[���PKwc�\��&�!�!�l'enigma/localization/fr_FR.incnu�[���PKwc�\��Z��ǎ'enigma/localization/hr_HR.incnu�[���PKwc�\�������'enigma/localization/pl_PL.incnu�[���PKwc�\�Ki���'enigma/localization/mr_IN.incnu�[���PKwc�\�'��"�"�'enigma/localization/ja_JP.incnu�[���PKwc�\��+~~N�'enigma/localization/ps.incnu�[���PKwc�\��0���'enigma/localization/nn_NO.incnu�[���PKwc�\ܜ�½���'enigma/localization/ast.incnu�[���PKwc�\�.��YY�'enigma/localization/kab.incnu�[���PKwc�\�_aa��'enigma/localization/sr_CS.incnu�[���PKwc�\��'��R�'enigma/localization/lb_LU.incnu�[���PKwc�\�5W��W(enigma/localization/fa_AF.incnu�[���PKwc�\�s~xmmQ(enigma/localization/br.incnu�[���PKwc�\�
�G��!(enigma/localization/ka_GE.incnu�[���PKwc�\����ss%(enigma/localization/mk_MK.incnu�[���PKwc�\�H�gg�)(enigma/localization/kn_IN.incnu�[���PKwc�\�����-(enigma/localization/km_KH.incnu�[���PKwc�\�_X���1(enigma/localization/mn_MN.incnu�[���PKwc�\l�Mv$v$�5(enigma/localization/he_IL.incnu�[���PKwc�\+N^�		�Z(enigma/localization/ga_IE.incnu�[���PKwc�\�k����e(enigma/localization/da_DK.incnu�[���PKwc�\-'
��6�(enigma/localization/sl_SI.incnu�[���PKwc�\�����8�(enigma/localization/ar.incnu�[���PKwc�\!R�W��f�(enigma/localization/si_LK.incnu�[���PKwc�\<c�|2"2"c�(enigma/localization/de_DE.incnu�[���PKwc�\�@@�(enigma/localization/sv_SE.incnu�[���PKwc�\��,�,o�(enigma/localization/ug.incnu�[���PKwc�\m-��� � L)enigma/localization/ko_KR.incnu�[���PKwc�\������x$)enigma/localization/gl_ES.incnu�[���PKwc�\�~'�( ( �()enigma/localization/it_IT.incnu�[���PKwc�\g_y�o o &I)enigma/localization/es_ES.incnu�[���PKwc�\��3XX�i)enigma/localization/ml_IN.incnu�[���PKwc�\������n)enigma/localization/nl_NL.incnu�[���PKwc�\�_t��ɍ)enigma/localization/cy_GB.incnu�[���PKwc�\�'ٙ��)enigma/localization/en_GB.incnu�[���PKwc�\1������)enigma/localization/fo_FO.incnu�[���PKwc�\b�<�; ; ��)enigma/localization/lt_LT.incnu�[���PKwc�\�|F� � R*enigma/localization/pt_PT.incnu�[���PKwc�\8x#�k/k/�$*enigma/localization/el_GR.incnu�[���PKwc�\k���
�
ET*enigma/config.inc.php.distnu�[���PKwc�\BǍ�f]f]I_*enigma/enigma.jsnu�[���PKwc�\�*TŬ��*enigma/lib/enigma_key.phpnu�[���PKwc�\�UU��*enigma/lib/enigma_driver.phpnu�[���PKwc�\�N�``"��*enigma/lib/enigma_driver_gnupg.phpnu�[���PKwc�\�5$̕�#�@+enigma/lib/enigma_driver_phpssl.phpnu�[���PKwc�\��T���W+enigma/lib/enigma_signature.phpnu�[���PKwc�\`)�t�t��d+enigma/lib/enigma_engine.phpnu�[���PKwc�\|��p���,enigma/lib/enigma_error.phpnu�[���PKwc�\ �m7'*'*"~,enigma/lib/enigma_mime_message.phpnu�[���PKwc�\��x���C,enigma/lib/enigma_userid.phpnu�[���PKwc�\9H��ooH,enigma/lib/enigma_subkey.phpnu�[���PKwc�\�n������T,enigma/lib/enigma_ui.phpnu�[���PKwc�\�QQ-enigma/bin/import_keys.shnu�[���PKwc�\C�)-8-8�--enigma/enigma.min.jsnu�[���PKwc�\D!�k�L�Lf-enigma/openpgp.min.jsnu�[���PKwc�\�\<�
�

X�5enigma/READMEnu�[���PKwc�\H�I��3}�5managesieve/skins/elastic/templates/seteditraw.htmlnu�[���PKwc�\;�P͕�0|�5managesieve/skins/elastic/templates/setedit.htmlnu�[���PKwc�\��*�884q�5managesieve/skins/elastic/templates/managesieve.htmlnu�[���PKwc�\&�J==3
�5managesieve/skins/elastic/templates/filteredit.htmlnu�[���PKwc�\��F\��1��5managesieve/skins/elastic/templates/vacation.htmlnu�[���PKwc�\�짨��0��5managesieve/skins/elastic/templates/forward.htmlnu�[���PKwc�\�����5managesieve/composer.jsonnu�[���PKwc�\�9F�FdFdT�5managesieve/managesieve.min.jsnu�[���PKwc�\�wF��*�*"�G6managesieve/localization/zh_CN.incnu�[���PKxc�\$c���*�*"�r6managesieve/localization/be_BE.incnu�[���PKxc�\�Lw� J J"�6managesieve/localization/bg_BG.incnu�[���PKxc�\�"�{77"S�6managesieve/localization/ne_NP.incnu�[���PKxc�\c��Mi5i5"��6managesieve/localization/en_US.incnu�[���PKxc�\.��9�9"�"7managesieve/localization/fi_FI.incnu�[���PKxc�\?����5�5"�\7managesieve/localization/nb_NO.incnu�[���PKxc�\I�"��9�9"��7managesieve/localization/sq_AL.incnu�[���PKxc�\~%��5�5"��7managesieve/localization/et_EE.incnu�[���PKyc�\�9bQOO"�8managesieve/localization/ku_IQ.incnu�[���PKyc�\�U��9�9"f8managesieve/localization/eu_ES.incnu�[���PKyc�\���D9D9"oA8managesieve/localization/tr_TR.incnu�[���PKyc�\7�+�:�:"{8managesieve/localization/es_AR.incnu�[���PKyc�\�Q"��"��8managesieve/localization/ur_PK.incnu�[���PKyc�\��8��8managesieve/localization/ku.incnu�[���PKyc�\pͰ�^9^9"~�8managesieve/localization/pt_BR.incnu�[���PKyc�\�&��/�/".9managesieve/localization/lv_LV.incnu�[���PKyc�\�r���9�9"829managesieve/localization/sk_SK.incnu�[���PKyc�\r��Q7Q7"Fl9managesieve/localization/cs_CZ.incnu�[���PKyc�\T)���9managesieve/localization/ti.incnu�[���PKyc�\��;":�9managesieve/localization/ta_IN.incnu�[���PKyc�\43$ݎ�"��9managesieve/localization/nl_BE.incnu�[���PKyc�\�����"x�9managesieve/localization/hi_IN.incnu�[���PKzc�\�xZ�1717"��9managesieve/localization/uk_UA.incnu�[���PKzc�\�~�U��"F�9managesieve/localization/fy_NL.incnu�[���PKzc�\$�w7w7"X:managesieve/localization/de_CH.incnu�[���PKzc�\w�I)I)#!;:managesieve/localization/es_419.incnu�[���PKzc�\FR�CC�d:managesieve/localization/uz.incnu�[���PKzc�\ʎ�P P "Oj:managesieve/localization/hy_AM.incnu�[���PKzc�\?�6G�"�""�:managesieve/localization/en_CA.incnu�[���PKzc�\,K0S7373"�:managesieve/localization/zh_TW.incnu�[���PK{c�\�ݏ+�;�;"��:managesieve/localization/ca_ES.incnu�[���PK{c�\�,�,,�;managesieve/localization/ia.incnu�[���PK{c�\M^0��'�'"�I;managesieve/localization/bs_BA.incnu�[���PK{c�\�v�pJpJ"Ar;managesieve/localization/ru_RU.incnu�[���PK{c�\2~��0/0/"�;managesieve/localization/fa_IR.incnu�[���PK{c�\6+��mm"��;managesieve/localization/is_IS.incnu�[���PK{c�\��'�'"D<managesieve/localization/vi_VN.incnu�[���PK{c�\D�
]]"|)<managesieve/localization/th_TH.incnu�[���PK{c�\�o�:�'�'"+9<managesieve/localization/ar_SA.incnu�[���PK{c�\l�|**"ra<managesieve/localization/ms_MY.incnu�[���PK{c�\>} ��!�!"�e<managesieve/localization/az_AZ.incnu�[���PK{c�\�a�!33"�<managesieve/localization/id_ID.incnu�[���PK{c�\셔�� ��<managesieve/localization/tzl.incnu�[���PK{c�\����d:d:"�<managesieve/localization/hu_HU.incnu�[���PK{c�\"���++"��<managesieve/localization/ro_RO.incnu�[���PK{c�\�6��+
+
�'=managesieve/localization/eo.incnu�[���PK{c�\��M@��"l2=managesieve/localization/bn_BD.incnu�[���PK{c�\x�ES<S<"�7=managesieve/localization/fr_FR.incnu�[���PK{c�\�
a�%�%"Tt=managesieve/localization/hr_HR.incnu�[���PK{c�\O��I99"6�=managesieve/localization/pl_PL.incnu�[���PK{c�\��6��"��=managesieve/localization/mr_IN.incnu�[���PK{c�\w�f!>!>"��=managesieve/localization/ja_JP.incnu�[���PK{c�\, B�VVY>managesieve/localization/ps.incnu�[���PK{c�\E�̝ee"�>managesieve/localization/nn_NO.incnu�[���PK{c�\K�YZ
Z
 �:>managesieve/localization/ast.incnu�[���PK{c�\���UU _E>managesieve/localization/kab.incnu�[���PK{c�\��P�ff"I>managesieve/localization/sr_CS.incnu�[���PK{c�\t	��
�
"�W>managesieve/localization/lb_LU.incnu�[���PK{c�\�%��]]"�b>managesieve/localization/fa_AF.incnu�[���PK{c�\2z�`,`,er>managesieve/localization/br.incnu�[���PK{c�\]�(II"�>managesieve/localization/ka_GE.incnu�[���PK{c�\�#8�8�8"��>managesieve/localization/mk_MK.incnu�[���PK{c�\�R`�NN"��>managesieve/localization/kn_IN.incnu�[���PK{c�\ĕ��]]"k�>managesieve/localization/km_KH.incnu�[���PK{c�\d2z��
�
"?managesieve/localization/mn_MN.incnu�[���PK{c�\2N��>�>"'?managesieve/localization/he_IL.incnu�[���PK{c�\�o�I I "DJ?managesieve/localization/ga_IE.incnu�[���PK{c�\��x�W+W+"�j?managesieve/localization/da_DK.incnu�[���PK{c�\�Dw0w0"��?managesieve/localization/sl_SI.incnu�[���PK{c�\�/��//Q�?managesieve/localization/ar.incnu�[���PK{c�\������"��?managesieve/localization/si_LK.incnu�[���PK{c�\N���5959"�?managesieve/localization/de_DE.incnu�[���PK{c�\���N�6�6"�@managesieve/localization/sv_SE.incnu�[���PK{c�\�r"�[I[IzO@managesieve/localization/ug.incnu�[���PK{c�\�'"�;�;"$�@managesieve/localization/ko_KR.incnu�[���PK{c�\��15%5%":�@managesieve/localization/gl_ES.incnu�[���PK{c�\��U9U9"��@managesieve/localization/it_IT.incnu�[���PK{c�\�9��+;+;"h4Amanagesieve/localization/es_ES.incnu�[���PK{c�\�����.�."�oAmanagesieve/localization/ml_IN.incnu�[���PK{c�\u�� 8 8"
�Amanagesieve/localization/nl_NL.incnu�[���PK{c�\�6Ơ"7"7"�Amanagesieve/localization/cy_GB.incnu�[���PK{c�\[��Vb5b5"�Bmanagesieve/localization/en_GB.incnu�[���PK{c�\��'('("�DBmanagesieve/localization/fo_FO.incnu�[���PK{c�\)�a�`9`9" mBmanagesieve/localization/lt_LT.incnu�[���PK{c�\���og:g:"ҦBmanagesieve/localization/pt_PT.incnu�[���PK{c�\y�cޑO�O"��Bmanagesieve/localization/el_GR.incnu�[���PK{c�\SU.v&'&'n1Cmanagesieve/managesieve.phpnu�[���PK{c�\������XCmanagesieve/config.inc.php.distnu�[���PK{c�\�~��H�H�oCmanagesieve/Changelognu�[���PK{c�\�fW8��Cmanagesieve/codemirror/addon/selection/mark-selection.jsnu�[���PK{c�\�9���	�	5d�Cmanagesieve/codemirror/addon/selection/active-line.jsnu�[���PK{c�\����;��Cmanagesieve/codemirror/addon/selection/selection-pointer.jsnu�[���PK|c�\ŰK�"")��Cmanagesieve/codemirror/lib/codemirror.cssnu�[���PK|c�\X���,GDmanagesieve/codemirror/lib/codemirror.min.jsnu�[���PK|c�\
�T�++(��Fmanagesieve/codemirror/lib/codemirror.jsnu�[���PK|c�\2��E'	'	,@�Lmanagesieve/codemirror/mode/sieve/index.htmlnu�[���PK|c�\�w��*ðLmanagesieve/codemirror/mode/sieve/sieve.jsnu�[���PK|c�\F�Ϣ��/�Lmanagesieve/helpdocs/en_US/settings-filters.rstnu�[���PK|c�\�ņ��0��Lmanagesieve/helpdocs/en_US/settings-vacation.rstnu�[���PK|c�\�|*��,��Lmanagesieve/helpdocs/po/settings-filters.potnu�[���PK|c�\���&LL-��Lmanagesieve/helpdocs/po/settings-vacation.potnu�[���PK|c�\�����u�Lmanagesieve/managesieve.jsnu�[���PK|c�\�A�Fƕƕ2T�Mmanagesieve/lib/Roundcube/rcube_sieve_vacation.phpnu�[���PK|c�\O=������0|"Nmanagesieve/lib/Roundcube/rcube_sieve_script.phpnu�[���PK|c�\xN�%�h�h0��Nmanagesieve/lib/Roundcube/rcube_sieve_engine.phpnu�[���PK|c�\e�z33)�TQmanagesieve/lib/Roundcube/rcube_sieve.phpnu�[���PK|c�\Wd�.�<�<1%�Qmanagesieve/lib/Roundcube/rcube_sieve_forward.phpnu�[���PK|c�\^؊kk&�Qacl/skins/elastic/templates/table.htmlnu�[���PK|c�\&��1����Qacl/acl.min.jsnu�[���PK|c�\l�:MM��Qacl/composer.jsonnu�[���PK|c�\�T"fpfpk�Qacl/acl.phpnu�[���PK|c�\,1:bb]Racl/localization/zh_CN.incnu�[���PK|c�\�pxObb�nRacl/localization/be_BE.incnu�[���PK|c�\����UUd�Racl/localization/bg_BG.incnu�[���PK|c�\�!��ii�Racl/localization/ne_NP.incnu�[���PK|c�\ʈv���Racl/localization/en_US.incnu�[���PK|c�\��t�Racl/localization/fi_FI.incnu�[���PK|c�\GY�'}}m�Racl/localization/nb_NO.incnu�[���PK|c�\)�n���4�Racl/localization/sq_AL.incnu�[���PK|c�\����{{
�Racl/localization/et_EE.incnu�[���PK|c�\�p����Sacl/localization/ku_IQ.incnu�[���PK|c�\..{D���Sacl/localization/eu_ES.incnu�[���PK|c�\"��� Sacl/localization/tr_TR.incnu�[���PK|c�\��D-Sacl/localization/es_AR.incnu�[���PK|c�\
���ASacl/localization/ku.incnu�[���PK|c�\1�N)���RSacl/localization/pt_BR.incnu�[���PK|c�\�����FgSacl/localization/lv_LV.incnu�[���PK|c�\P�{���J{Sacl/localization/sk_SK.incnu�[���PK|c�\���9��A�Sacl/localization/cs_CZ.incnu�[���PK|c�\?�E

\�Sacl/localization/ti.incnu�[���PK|c�\&�799��Sacl/localization/ta_IN.incnu�[���PK|c�\L;υ�A�Sacl/localization/nl_BE.incnu�[���PK|c�\�}�		�Sacl/localization/hi_IN.incnu�[���PK|c�\X_#yBBc�Sacl/localization/uk_UA.incnu�[���PK|c�\�1�L�	�	��Sacl/localization/fy_NL.incnu�[���PK|c�\�>FKyy*�Sacl/localization/de_CH.incnu�[���PK|c�\_n��  �Tacl/localization/es_419.incnu�[���PK|c�\����""XTacl/localization/uz.incnu�[���PK|c�\`�(�<<�#Tacl/localization/hy_AM.incnu�[���PK|c�\0Y�CCG?Tacl/localization/en_CA.incnu�[���PK|c�\�;t���PTacl/localization/zh_TW.incnu�[���PK|c�\�R�EEbTacl/localization/ca_ES.incnu�[���PK|c�\bi3���vTacl/localization/ia.incnu�[���PK|c�\)�%�,,��Tacl/localization/bs_BA.incnu�[���PK|c�\h���Tacl/localization/ru_RU.incnu�[���PK|c�\ߗogg�Tacl/localization/fa_IR.incnu�[���PK|c�\�!�(�	�	��Tacl/localization/is_IS.incnu�[���PK|c�\yŤ����Tacl/localization/vi_VN.incnu�[���PK|c�\��2h>
>
��Tacl/localization/th_TH.incnu�[���PK|c�\a5<�xxV�Tacl/localization/ar_SA.incnu�[���PK|c�\a�n��Uacl/localization/ms_MY.incnu�[���PK|c�\]Cg��;Uacl/localization/az_AZ.incnu�[���PK|c�\E���{(Uacl/localization/id_ID.incnu�[���PK|c�\�Y��VV�:Uacl/localization/tzl.incnu�[���PK|c�\�N�4vv@?Uacl/localization/hu_HU.incnu�[���PK|c�\���ssTUacl/localization/ro_RO.incnu�[���PK|c�\L���*
*
�gUacl/localization/eo.incnu�[���PK|c�\_b�R��.rUacl/localization/bn_BD.incnu�[���PK|c�\�,�`��BwUacl/localization/fr_FR.incnu�[���PK|c�\RԨ�iiS�Uacl/localization/hr_HR.incnu�[���PK|c�\�;�ѭ��Uacl/localization/pl_PL.incnu�[���PK|c�\i��׺���Uacl/localization/mr_IN.incnu�[���PK|c�\��t���Uacl/localization/ja_JP.incnu�[���PK|c�\�eq))��Uacl/localization/ps.incnu�[���PK|c�\�t���L�Uacl/localization/nn_NO.incnu�[���PK|c�\������$�Uacl/localization/ast.incnu�[���PK|c�\�@���P�Uacl/localization/kab.incnu�[���PK|c�\� GO
O
m�Uacl/localization/sr_CS.incnu�[���PK|c�\$���
�
Vacl/localization/lb_LU.incnu�[���PK|c�\1V��==�Vacl/localization/fa_AF.incnu�[���PK|c�\Vn�0HH|Vacl/localization/br.incnu�[���PK|c�\�ͬ22.Vacl/localization/ka_GE.incnu�[���PK|c�\&�7�!!�3Vacl/localization/mk_MK.incnu�[���PK|c�\zO8���MVacl/localization/kn_IN.incnu�[���PK|c�\��N
�QVacl/localization/km_KH.incnu�[���PK|c�\Z餐�
�
(eVacl/localization/mn_MN.incnu�[���PK|c�\�t$$pVacl/localization/he_IL.incnu�[���PK|c�\={�����Vacl/localization/ga_IE.incnu�[���PK|c�\�_�!QQƛVacl/localization/da_DK.incnu�[���PK|c�\��T���a�Vacl/localization/sl_SI.incnu�[���PK|c�\�-I$$m�Vacl/localization/ar.incnu�[���PK|c�\�w�**��Vacl/localization/si_LK.incnu�[���PK}c�\.1Z�ffL�Vacl/localization/de_DE.incnu�[���PK}c�\��3����Vacl/localization/sv_SE.incnu�[���PK}c�\yw�qBB@�Vacl/localization/ug.incnu�[���PK}c�\��KO���Wacl/localization/ko_KR.incnu�[���PK}c�\KX,����"Wacl/localization/gl_ES.incnu�[���PK}c�\�x=����6Wacl/localization/it_IT.incnu�[���PK}c�\=�?����JWacl/localization/es_ES.incnu�[���PK}c�\M+Qcc�^Wacl/localization/ml_IN.incnu�[���PK}c�\p�&�odWacl/localization/nl_NL.incnu�[���PK}c�\�H����xWacl/localization/cy_GB.incnu�[���PK}c�\�֭7��Wacl/localization/en_GB.incnu�[���PK}c�\e�s���a�Wacl/localization/fo_FO.incnu�[���PK}c�\a�7�����Wacl/localization/lt_LT.incnu�[���PK}c�\�H����Wacl/localization/pt_PT.incnu�[���PK}c�\Vy�:FF��Wacl/localization/el_GR.incnu�[���PK}c�\g8[[��Wacl/config.inc.php.distnu�[���PK}c�\���..
"�Wacl/acl.jsnu�[���PK}c�\�dG9qq#b+Xsquirrelmail_usercopy/composer.jsonnu�[���PK}c�\�{D�*�*/&.Xsquirrelmail_usercopy/squirrelmail_usercopy.phpnu�[���PK}c�\�Q��@@)yYXsquirrelmail_usercopy/config.inc.php.distnu�[���PK}c�\���2
2
^Xidenticon/identicon.phpnu�[���PK}c�\��yy�hXidenticon/composer.jsonnu�[���PK}c�\h�]��KkXidenticon/identicon_engine.phpnu�[���PK}c�\�e�-��7�Xuserinfo/composer.jsonnu�[���PK}c�\KFNc���Xuserinfo/localization/zh_CN.incnu�[���PK}c�\��W���Xuserinfo/localization/be_BE.incnu�[���PK}c�\^/�Pkkf�Xuserinfo/localization/bg_BG.incnu�[���PK}c�\X�\�� �Xuserinfo/localization/en_US.incnu�[���PK}c�\��Ne�Xuserinfo/localization/fi_FI.incnu�[���PK}c�\�
lҙXuserinfo/localization/nb_NO.incnu�[���PK}c�\�,,/�Xuserinfo/localization/sq_AL.incnu�[���PK}c�\������Xuserinfo/localization/et_EE.incnu�[���PK}c�\�/�����Xuserinfo/localization/ku_IQ.incnu�[���PK}c�\���&&�Xuserinfo/localization/eu_ES.incnu�[���PK}c�\�8�Ty�Xuserinfo/localization/tr_TR.incnu�[���PK}c�\UcԋԳXuserinfo/localization/es_AR.incnu�[���PK}c�\0e����8�Xuserinfo/localization/ku.incnu�[���PK}c�\�5	Z�Xuserinfo/localization/pt_BR.incnu�[���PK}c�\���j��Xuserinfo/localization/lv_LV.incnu�[���PK}c�\gRz�44)�Xuserinfo/localization/sk_SK.incnu�[���PK}c�\�z{���Xuserinfo/localization/cs_CZ.incnu�[���PK}c�\NC'k���Xuserinfo/localization/ti.incnu�[���PK}c�\�\3[��L�Xuserinfo/localization/nl_BE.incnu�[���PK}c�\�!f�Xuserinfo/localization/uk_UA.incnu�[���PK}c�\T�������Xuserinfo/localization/fy_NL.incnu�[���PK}c�\�7HT��Xuserinfo/localization/de_CH.incnu�[���PK}c�\�J  $�Xuserinfo/localization/es_419.incnu�[���PK}c�\$g�(����Xuserinfo/localization/uz.incnu�[���PK}c�\gL����Xuserinfo/localization/hy_AM.incnu�[���PK}c�\��N0����Xuserinfo/localization/en_CA.incnu�[���PK}c�\�����Xuserinfo/localization/zh_TW.incnu�[���PK}c�\U�N�A�Xuserinfo/localization/ca_ES.incnu�[���PK}c�\U������Xuserinfo/localization/ia.incnu�[���PK}c�\9#� ���Yuserinfo/localization/bs_BA.incnu�[���PK}c�\MxJ@@�Yuserinfo/localization/ru_RU.incnu�[���PK}c�\Օ�;��v	Yuserinfo/localization/fa_IR.incnu�[���PK}c�\uN��##�
Yuserinfo/localization/is_IS.incnu�[���PK}c�\���\��Yuserinfo/localization/vi_VN.incnu�[���PK}c�\���  GYuserinfo/localization/th_TH.incnu�[���PK}c�\�]FbQQ�Yuserinfo/localization/ar_SA.incnu�[���PK}c�\�SQ���VYuserinfo/localization/az_AZ.incnu�[���PK}c�\L�����a#Yuserinfo/localization/id_ID.incnu�[���PK}c�\M���22�'Yuserinfo/localization/hu_HU.incnu�[���PK}c�\'w���,Yuserinfo/localization/ro_RO.incnu�[���PK}c�\ze�5��L0Yuserinfo/localization/eo.incnu�[���PK}c�\ڝ�2T4Yuserinfo/localization/fr_FR.incnu�[���PK}c�\������8Yuserinfo/localization/hr_HR.incnu�[���PK}c�\hJY��<Yuserinfo/localization/pl_PL.incnu�[���PK}c�\>)8ǭ�PAYuserinfo/localization/mr_IN.incnu�[���PK}c�\�0LEYuserinfo/localization/ja_JP.incnu�[���PK}c�\�\���IYuserinfo/localization/nn_NO.incnu�[���PK}c�\ےV����MYuserinfo/localization/ast.incnu�[���PK}c�\��"		�QYuserinfo/localization/sr_CS.incnu�[���PK}c�\�	�p��)VYuserinfo/localization/lb_LU.incnu�[���PK}c�\�+/��5ZYuserinfo/localization/fa_AF.incnu�[���PK}c�\
w*��\^Yuserinfo/localization/br.incnu�[���PK}c�\����bYuserinfo/localization/mk_MK.incnu�[���PK}c�\*�v�55�fYuserinfo/localization/km_KH.incnu�[���PK}c�\!dV��xkYuserinfo/localization/mn_MN.incnu�[���PK}c�\�\�EE�oYuserinfo/localization/he_IL.incnu�[���PK}c�\�9k�UtYuserinfo/localization/ga_IE.incnu�[���PK}c�\�~��xYuserinfo/localization/da_DK.incnu�[���PK}c�\8����|Yuserinfo/localization/sl_SI.incnu�[���PK}c�\v����Yuserinfo/localization/ar.incnu�[���PK}c�\H�U�Yuserinfo/localization/de_DE.incnu�[���PK}c�\�Cf���Yuserinfo/localization/sv_SE.incnu�[���PK}c�\�a�77�Yuserinfo/localization/ug.incnu�[���PK}c�\��:���Yuserinfo/localization/ko_KR.incnu�[���PK}c�\����Yuserinfo/localization/gl_ES.incnu�[���PK}c�\Uz7�Yuserinfo/localization/it_IT.incnu�[���PK}c�\�I�c�Yuserinfo/localization/es_ES.incnu�[���PK}c�\�L�"DDãYuserinfo/localization/ml_IN.incnu�[���PK}c�\�q�V�Yuserinfo/localization/nl_NL.incnu�[���PK}c�\a����Yuserinfo/localization/cy_GB.incnu�[���PK}c�\X�\��(�Yuserinfo/localization/en_GB.incnu�[���PK}c�\��X�m�Yuserinfo/localization/fo_FO.incnu�[���PK}c�\���((׹Yuserinfo/localization/lt_LT.incnu�[���PK}c�\�!!!N�Yuserinfo/localization/pt_PT.incnu�[���PK}c�\�꜅���Yuserinfo/localization/el_GR.incnu�[���PK}c�\�NI�

��Yuserinfo/userinfo.phpnu�[���PK}c�\G��<SS��Yhide_blockquote/composer.jsonnu�[���PK}c�\�t��&w�Yhide_blockquote/hide_blockquote.min.jsnu�[���PK}c�\��ȅ��&��Yhide_blockquote/localization/zh_CN.incnu�[���PK}c�\���A��&j�Yhide_blockquote/localization/be_BE.incnu�[���PK}c�\�c�Y��&��Yhide_blockquote/localization/bg_BG.incnu�[���PK}c�\J�y��&��Yhide_blockquote/localization/en_US.incnu�[���PK}c�\0�T��&��Yhide_blockquote/localization/fi_FI.incnu�[���PK}c�\�:!'��&��Yhide_blockquote/localization/nb_NO.incnu�[���PK}c�\m>��&��Yhide_blockquote/localization/sq_AL.incnu�[���PK}c�\���!��&�Yhide_blockquote/localization/et_EE.incnu�[���PK}c�\4h�F��&��Yhide_blockquote/localization/ku_IQ.incnu�[���PK}c�\������&��Yhide_blockquote/localization/eu_ES.incnu�[���PK}c�\��*���&Zhide_blockquote/localization/tr_TR.incnu�[���PK}c�\�����&Zhide_blockquote/localization/es_AR.incnu�[���PK}c�\pp�	CC&Zhide_blockquote/localization/ur_PK.incnu�[���PK�c�\*���#�Zhide_blockquote/localization/ku.incnu�[���PK�c�\X�����&�Zhide_blockquote/localization/pt_BR.incnu�[���PK�c�\HM���&�Zhide_blockquote/localization/lv_LV.incnu�[���PK�c�\~����&�Zhide_blockquote/localization/sk_SK.incnu�[���PK�c�\'J����&�Zhide_blockquote/localization/cs_CZ.incnu�[���PK�c�\K���&�"Zhide_blockquote/localization/nl_BE.incnu�[���PK�c�\�9F���&�&Zhide_blockquote/localization/uk_UA.incnu�[���PK�c�\!�f��&+Zhide_blockquote/localization/fy_NL.incnu�[���PK�c�\�/-ѥ�&/Zhide_blockquote/localization/de_CH.incnu�[���PK�c�\(ML��'�2Zhide_blockquote/localization/es_419.incnu�[���PK�c�\>4N\��#7Zhide_blockquote/localization/uz.incnu�[���PK�c�\�b�cBB#;Zhide_blockquote/localization/es.incnu�[���PK�c�\��T���&�?Zhide_blockquote/localization/hy_AM.incnu�[���PK�c�\Z����&�CZhide_blockquote/localization/en_CA.incnu�[���PK�c�\4���&�GZhide_blockquote/localization/zh_TW.incnu�[���PK�c�\�8�
��&�KZhide_blockquote/localization/ca_ES.incnu�[���PK�c�\t/�Z��#�OZhide_blockquote/localization/ia.incnu�[���PK�c�\Ro^��&�SZhide_blockquote/localization/bs_BA.incnu�[���PK�c�\;NMC��&�WZhide_blockquote/localization/ru_RU.incnu�[���PK�c�\}~�%��&�[Zhide_blockquote/localization/fa_IR.incnu�[���PK�c�\t�g���&`Zhide_blockquote/localization/is_IS.incnu�[���PK�c�\��1ԩ�&dZhide_blockquote/localization/vi_VN.incnu�[���PK�c�\���'&hZhide_blockquote/localization/th_TH.incnu�[���PK�c�\�+���&VlZhide_blockquote/localization/ar_SA.incnu�[���PK�c�\�/6Ý�&opZhide_blockquote/localization/az_AZ.incnu�[���PK�c�\"��>��&btZhide_blockquote/localization/id_ID.incnu�[���PK�c�\w�R?]]$exZhide_blockquote/localization/tzl.incnu�[���PK�c�\�=�=��&|Zhide_blockquote/localization/hu_HU.incnu�[���PK�c�\W�B��&�Zhide_blockquote/localization/ro_RO.incnu�[���PK�c�\(����#"�Zhide_blockquote/localization/eo.incnu�[���PK�c�\:eƉGG&!�Zhide_blockquote/localization/bn_BD.incnu�[���PK�c�\�����&��Zhide_blockquote/localization/fr_FR.incnu�[���PK�c�\�Q�3��&ȏZhide_blockquote/localization/hr_HR.incnu�[���PK�c�\��7X��&��Zhide_blockquote/localization/pl_PL.incnu�[���PK�c�\�����&��Zhide_blockquote/localization/ja_JP.incnu�[���PK�c�\�S�(��&��Zhide_blockquote/localization/nn_NO.incnu�[���PK�c�\�6뀲�$��Zhide_blockquote/localization/ast.incnu�[���PK�c�\]X`���&��Zhide_blockquote/localization/sr_CS.incnu�[���PK�c�\[�+��&��Zhide_blockquote/localization/lb_LU.incnu�[���PK�c�\�G��??&ƫZhide_blockquote/localization/fa_AF.incnu�[���PK�c�\�����#[�Zhide_blockquote/localization/br.incnu�[���PK�c�\�_O&JJ&[�Zhide_blockquote/localization/ka_GE.incnu�[���PK�c�\>�r\��&��Zhide_blockquote/localization/mk_MK.incnu�[���PK�c�\.�МMM&!�Zhide_blockquote/localization/kn_IN.incnu�[���PK�c�\��Qn��&ľZhide_blockquote/localization/km_KH.incnu�[���PK�c�\������&�Zhide_blockquote/localization/mn_MN.incnu�[���PK�c�\�����&K�Zhide_blockquote/localization/he_IL.incnu�[���PK�c�\���%��&U�Zhide_blockquote/localization/ga_IE.incnu�[���PK�c�\����&_�Zhide_blockquote/localization/da_DK.incnu�[���PK�c�\O� ��&V�Zhide_blockquote/localization/sl_SI.incnu�[���PK�c�\h�dj��#T�Zhide_blockquote/localization/ar.incnu�[���PK�c�\�/-ѥ�&o�Zhide_blockquote/localization/de_DE.incnu�[���PK�c�\(y����&j�Zhide_blockquote/localization/sv_SE.incnu�[���PK�c�\Z�����#Z�Zhide_blockquote/localization/ug.incnu�[���PK�c�\��
��&w�Zhide_blockquote/localization/ko_KR.incnu�[���PK�c�\�|C��&}�Zhide_blockquote/localization/gl_ES.incnu�[���PK�c�\�|��&u�Zhide_blockquote/localization/it_IT.incnu�[���PK�c�\$yF���&~�Zhide_blockquote/localization/es_ES.incnu�[���PK�c�\_Qv�JJ&��Zhide_blockquote/localization/ml_IN.incnu�[���PK�c�\$����&!�Zhide_blockquote/localization/nl_NL.incnu�[���PK�c�\��Z��&[hide_blockquote/localization/cy_GB.incnu�[���PK�c�\Z����&[hide_blockquote/localization/en_GB.incnu�[���PK�c�\�W�4��&[hide_blockquote/localization/fo_FO.incnu�[���PK�c�\l����&[hide_blockquote/localization/lt_LT.incnu�[���PK�c�\�W��&[hide_blockquote/localization/pt_PT.incnu�[���PK�c�\k`��&	[hide_blockquote/localization/el_GR.incnu�[���PK�c�\\�&�vv"^[hide_blockquote/hide_blockquote.jsnu�[���PK�c�\��
LL#&![hide_blockquote/hide_blockquote.phpnu�[���PK�c�\Y�S�I
I
3�,[show_additional_headers/show_additional_headers.phpnu�[���PK�c�\P�X��%q7[show_additional_headers/composer.jsonnu�[���PK���7L:[